Skip to content

Commit f74c15e

Browse files
author
Felipe Rodrigues Michetti
authored
Merge pull request #3 from frmichetti/develop
Develop
2 parents 7baf0a7 + 2035213 commit f74c15e

File tree

823 files changed

+6278
-465
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

823 files changed

+6278
-465
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,4 @@ build-iPhoneSimulator/
2525
/lib/bundler/man/
2626
.rvmrc
2727
.idea/
28-
28+
Gemfile.lock

.rubocop.yml

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,25 @@
11
AllCops:
2-
TargetRubyVersion: 2.5
2+
TargetRubyVersion: 2.5
3+
Naming/VariableName:
4+
EnforcedStyle: snake_case
5+
SupportedStyles:
6+
- snake_case
7+
- camelCase
8+
Naming/VariableNumber:
9+
EnforcedStyle: snake_case
10+
SupportedStyles:
11+
- snake_case
12+
- normalcase
13+
- non_integer
14+
Style/CommentAnnotation:
15+
Keywords:
16+
- TODO
17+
- FIXME
18+
- OPTIMIZE
19+
- HACK
20+
- REVIEW
21+
Style/RedundantReturn:
22+
# When `true` allows code like `return x, y`.
23+
AllowMultipleReturnValues: false
24+
Metrics/LineLength:
25+
Max: 160

Gemfile

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,22 @@ require_relative 'lib/utils/discover_os'
66

77
source 'http://rubygems.org'
88
ruby '>= 2.1'
9-
10-
gem 'codecode-common-utils', '~> 0.1.3'
9+
gem 'bundler'
1110

1211
gem 'pg'
13-
gem 'sequel' , '< 5'
12+
gem 'sequel'
1413
gem 'sequel_enum'
1514
# A gem 'sequel_pg' não funciona em ambiente Windows.
16-
gem 'sequel-postgres-schemata'
17-
gem 'sequel_pg', require: 'sequel' unless Utils::DiscoverOSUtil.os?.eql?(:windows)
18-
15+
gem 'sequel_pg', require: 'sequel' unless Utils::DiscoverOS.os?.eql?(:windows)
16+
gem 'inflector'
1917

20-
gem 'pg'
2118
gem 'sinatra'
19+
gem 'sinatra-cross_origin'
2220
gem 'sinatra-sequel'
2321
gem 'sinatra-authorization'
2422
gem 'sinatra-contrib'
2523

24+
2625
group :test do
2726
gem 'faker'
2827
gem 'rspec'

Gemfile.lock

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@ GEM
22
remote: http://rubygems.org/
33
specs:
44
backports (3.11.1)
5-
bacon (1.2.0)
6-
codecode-common-utils (0.1.5)
75
concurrent-ruby (1.0.5)
86
diff-lcs (1.3)
97
faker (1.8.4)
108
i18n (~> 0.5)
11-
i18n (0.9.1)
9+
i18n (0.9.5)
1210
concurrent-ruby (~> 1.0)
11+
inflector (0.0.1)
1312
multi_json (1.13.1)
1413
mustermann (1.0.2)
1514
pg (0.21.0)
@@ -20,18 +19,16 @@ GEM
2019
rspec-core (~> 3.7.0)
2120
rspec-expectations (~> 3.7.0)
2221
rspec-mocks (~> 3.7.0)
23-
rspec-core (3.7.0)
22+
rspec-core (3.7.1)
2423
rspec-support (~> 3.7.0)
2524
rspec-expectations (3.7.0)
2625
diff-lcs (>= 1.2.0, < 2.0)
2726
rspec-support (~> 3.7.0)
2827
rspec-mocks (3.7.0)
2928
diff-lcs (>= 1.2.0, < 2.0)
3029
rspec-support (~> 3.7.0)
31-
rspec-support (3.7.0)
30+
rspec-support (3.7.1)
3231
sequel (4.49.0)
33-
sequel-postgres-schemata (0.1.1)
34-
sequel (~> 4.3)
3532
sequel_enum (0.1.1)
3633
sequel
3734
sequel_pg (1.7.1)
@@ -51,8 +48,8 @@ GEM
5148
rack-protection (= 2.0.1)
5249
sinatra (= 2.0.1)
5350
tilt (>= 1.3, < 3)
51+
sinatra-cross_origin (0.4.0)
5452
sinatra-sequel (0.9.0)
55-
bacon
5653
sequel (>= 3.2.0)
5754
sinatra (>= 0.9.4)
5855
tilt (2.0.8)
@@ -61,21 +58,22 @@ PLATFORMS
6158
ruby
6259

6360
DEPENDENCIES
64-
codecode-common-utils (~> 0.1.3)
61+
bundler
6562
faker
63+
inflector
6664
pg
6765
rspec
68-
sequel (< 5)
69-
sequel-postgres-schemata
66+
sequel
7067
sequel_enum
7168
sequel_pg
7269
sinatra
7370
sinatra-authorization
7471
sinatra-contrib
72+
sinatra-cross_origin
7573
sinatra-sequel
7674

7775
RUBY VERSION
78-
ruby 2.4.2p198
76+
ruby 2.5.0p0
7977

8078
BUNDLED WITH
8179
1.16.1

api/app.rb

Lines changed: 48 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,75 @@
1+
require_relative '../lib/loadpath'
2+
require 'models/base'
3+
4+
require 'yaml'
15
require 'sinatra'
6+
require 'sinatra/cross_origin'
27
require 'sinatra/contrib/all'
38
require 'sinatra/sequel'
4-
require 'json'
59

6-
require_relative '../lib/loadpath'
7-
require_relative '../lib/models/base'
8-
require_relative '../lib/requires'
9-
require_relative '../lib/aliases'
10-
require_relative '../lib/exceptions/model_exception'
11-
require_relative '../lib/exceptions/unexpected_param_exception'
12-
require_relative '../lib/controllers/base_controller'
13-
require_relative '../lib/controllers/mini_controller'
10+
Dynamics = ::Module.new
1411

1512
# @class App
1613
class App < Sinatra::Application
17-
register Sinatra::SequelExtension, Sinatra::Namespace
14+
register Sinatra::SequelExtension, Sinatra::Namespace, Sinatra::CrossOrigin, Sinatra::ConfigFile
15+
config_file File.join("#{Dir.pwd}/lib/config/rack.conf.yml")
16+
extend Models
1817

19-
include Controller::BaseController
20-
extend Controller::MiniController
18+
DATASOURCE = load_db
19+
CLASS_FACTORY_OPTIONS = YAML.safe_load(File.open("#{Dir.pwd}/lib/config/class_factory.conf.yml"))
2120

22-
configure {
23-
set :environment, :development
24-
set :bind, '0.0.0.0'
25-
set :port, 9494
21+
require 'requires'
22+
require 'aliases'
2623

27-
set :raise_errors, true
28-
set :show_exceptions, true
24+
%w[controllers].each {|folder| Dir["#{Dir.pwd}/lib/#{folder}/*.rb"].each { |file| require file}}
2925

30-
enable :cross_origin
31-
enable :reloader
26+
Controllers.constants.each{|ctrl_sym|
27+
module_name = Kernel.const_get('Controllers::?'.gsub('?', ctrl_sym.to_s))
28+
include module_name
29+
}
30+
31+
extend Utils::ClassFactory
3232

33+
configure {
34+
set :environment, settings.environment
35+
set server: 'webrick'
36+
set :raise_errors, settings.raise_errors
37+
set :show_exceptions, settings.show_exceptions
3338
set :root, File.dirname(__FILE__)
34-
set :public_folder, Proc.new { File.join(root, '../', 'public') }
39+
set :public_folder, File.join(root, '../', 'public')
40+
}
41+
42+
configure(:development) {
43+
enable :cross_origin
44+
set :allow_origin, :any
45+
set :allow_methods, %i[get post put delete options]
46+
set :allow_credentials, true
47+
set :max_age, '1728000'
48+
set :expose_headers, %w[Authorization Content-Type Accept X-User-Email X-Auth-Token AUTH_TOKEN Auth-Token]
3549
}
3650

37-
before do
51+
before {
3852
content_type :html, 'charset' => 'utf-8'
3953
content_type :json, 'charset' => 'utf-8'
40-
41-
response.headers['Access-Control-Allow-Origin'] = '*'
42-
headers['Access-Control-Allow-Origin'] = '*'
43-
headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT, DELETE, OPTIONS'
44-
headers['Access-Control-Allow-Headers'] = 'Authorization, Content-Type, Accept, X-User-Email, X-Auth-Token, KUADRO_AUTH_TOKEN, Kuadro-Auth-Token'
45-
end
54+
}
4655

4756
after {}
4857

4958
error(500, 400) {
50-
# Log uncaught errors with Sentry, sending env variables
51-
# and the request body
5259
extra = env
53-
extra['REQUEST_BODY'] = request.body
54-
puts extra
60+
extra['REQUEST_BODY'] = @request.body.read
61+
warn extra
5562
}
5663

57-
options('*') {
58-
response.headers['Allow'] = 'GET, POST, PUT, DELETE, OPTIONS'
59-
response.headers['Access-Control-Allow-Headers'] = 'Authorization, Content-Type, Accept, X-User-Email, X-Auth-Token, KUADRO_AUTH_TOKEN, Kuadro-Auth-Token'
60-
response.headers['Access-Control-Allow-Origin'] = '*'
61-
200
64+
helpers {
65+
def sample_method
66+
'sample method'
67+
end
6268
}
6369

64-
run!
70+
ClassMap = create_classes(DATASOURCE, Dynamics, CLASS_FACTORY_OPTIONS['name_conflicts'])
71+
Classes = get_classes(Dynamics)
72+
73+
require 'extensions/models/dynamics_common'
74+
include Extensions::DynamicsCommon
6575
end
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
{
2+
"info": {
3+
"name": "Ruby Dynamic Class Creator",
4+
"_postman_id": "5d8a2db8-65b8-998e-d92f-521045aea410",
5+
"description": "",
6+
"schema": "https://schema.getpostman.com/json/collection/v2.0.0/collection.json"
7+
},
8+
"item": [
9+
{
10+
"name": "<host>/tables",
11+
"request": {
12+
"method": "GET",
13+
"header": [],
14+
"body": {},
15+
"url": "{{local}}/api/tables",
16+
"description": null
17+
},
18+
"response": []
19+
},
20+
{
21+
"name": "<host>/table/<table_name>/<reg_id>",
22+
"request": {
23+
"method": "PUT",
24+
"header": [
25+
{
26+
"key": "Content-Type",
27+
"value": "application/json"
28+
}
29+
],
30+
"body": {
31+
"mode": "raw",
32+
"raw": "{\n \"name\": 12345679\n}"
33+
},
34+
"url": "{{local}}/api/tables/authors/6",
35+
"description": null
36+
},
37+
"response": []
38+
},
39+
{
40+
"name": "<host>/table/<table_name>",
41+
"request": {
42+
"method": "POST",
43+
"header": [
44+
{
45+
"key": "Content-Type",
46+
"value": "application/json"
47+
}
48+
],
49+
"body": {
50+
"mode": "raw",
51+
"raw": "{\n \"name\": \"author 1\"\n}"
52+
},
53+
"url": "{{local}}/api/tables/authors",
54+
"description": null
55+
},
56+
"response": []
57+
},
58+
{
59+
"name": "<host>/api",
60+
"request": {
61+
"method": "GET",
62+
"header": [],
63+
"body": {},
64+
"url": "{{local}}/api",
65+
"description": null
66+
},
67+
"response": []
68+
},
69+
{
70+
"name": "{{local}}/tables/<table_name>",
71+
"request": {
72+
"method": "GET",
73+
"header": [],
74+
"body": {},
75+
"url": "{{local}}/api/tables/authors",
76+
"description": null
77+
},
78+
"response": []
79+
},
80+
{
81+
"name": "<host>/tables/<table_name>/<reg_id>",
82+
"request": {
83+
"method": "DELETE",
84+
"header": [],
85+
"body": {},
86+
"url": "{{local}}/api/tables/bank/1",
87+
"description": null
88+
},
89+
"response": []
90+
},
91+
{
92+
"name": "<host>/api/routes",
93+
"request": {
94+
"method": "GET",
95+
"header": [],
96+
"body": {},
97+
"url": "{{local}}/api/routes",
98+
"description": null
99+
},
100+
"response": []
101+
},
102+
{
103+
"name": "<host>/columns/<table_name>",
104+
"request": {
105+
"method": "GET",
106+
"header": [],
107+
"body": {},
108+
"url": "{{local}}/columns/authors",
109+
"description": null
110+
},
111+
"response": []
112+
}
113+
]
114+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"id": "0abeabeb-bc47-ca0c-2449-353b447cb541",
3+
"name": "Ruby Dynamic Class Creator",
4+
"values": [
5+
{
6+
"enabled": true,
7+
"key": "local",
8+
"value": "localhost:8089",
9+
"type": "text"
10+
}
11+
],
12+
"timestamp": 1519754264319,
13+
"_postman_variable_scope": "environment",
14+
"_postman_exported_at": "2018-02-27T18:32:21.500Z",
15+
"_postman_exported_using": "Postman/5.5.2"
16+
}

0 commit comments

Comments
 (0)