shaf 0.8.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/bin/shaf +19 -4
  5. data/lib/shaf.rb +1 -0
  6. data/lib/shaf/app.rb +7 -10
  7. data/lib/shaf/command/server.rb +4 -2
  8. data/lib/shaf/errors.rb +22 -2
  9. data/lib/shaf/extensions/controller_hooks.rb +14 -0
  10. data/lib/shaf/extensions/resource_uris.rb +1 -1
  11. data/lib/shaf/formable/field.rb +10 -6
  12. data/lib/shaf/formable/form.rb +4 -0
  13. data/lib/shaf/generator/base.rb +2 -2
  14. data/lib/shaf/generator/controller.rb +11 -11
  15. data/lib/shaf/generator/helper.rb +33 -0
  16. data/lib/shaf/generator/migration.rb +6 -1
  17. data/lib/shaf/generator/migration/empty.rb +2 -2
  18. data/lib/shaf/generator/serializer.rb +4 -4
  19. data/lib/shaf/generator/templates/api/controller.rb.erb +4 -3
  20. data/lib/shaf/generator/templates/api/serializer.rb.erb +10 -12
  21. data/lib/shaf/generator/templates/spec/serializer_spec.rb.erb +4 -2
  22. data/lib/shaf/helpers.rb +2 -0
  23. data/lib/shaf/helpers/http_header.rb +26 -0
  24. data/lib/shaf/helpers/paginate.rb +4 -2
  25. data/lib/shaf/helpers/payload.rb +33 -8
  26. data/lib/shaf/middleware/request_id.rb +3 -1
  27. data/lib/shaf/rake/db.rb +5 -5
  28. data/lib/shaf/rake/test.rb +0 -27
  29. data/lib/shaf/router.rb +133 -0
  30. data/lib/shaf/settings.rb +36 -11
  31. data/lib/shaf/spec/http_method_utils.rb +11 -3
  32. data/lib/shaf/spec/integration_spec.rb +4 -4
  33. data/lib/shaf/spec/serializer_spec.rb +1 -1
  34. data/lib/shaf/upgrade/manifest.rb +34 -9
  35. data/lib/shaf/upgrade/package.rb +24 -15
  36. data/lib/shaf/utils.rb +31 -21
  37. data/lib/shaf/version.rb +1 -1
  38. data/templates/Rakefile +27 -0
  39. data/templates/api/controllers/base_controller.rb +13 -8
  40. data/templates/api/serializers/error_serializer.rb +3 -1
  41. data/templates/api/serializers/form_serializer.rb +11 -16
  42. data/templates/api/serializers/validation_error_serializer.rb +13 -0
  43. data/templates/config.ru +1 -1
  44. data/templates/config/bootstrap.rb +3 -1
  45. data/templates/config/database.rb +6 -7
  46. data/templates/config/directories.rb +3 -2
  47. data/templates/config/helpers.rb +1 -1
  48. data/templates/config/initializers/db_migrations.rb +14 -8
  49. data/templates/config/initializers/logging.rb +2 -2
  50. data/templates/config/initializers/sequel.rb +1 -0
  51. data/templates/config/paths.rb +7 -0
  52. data/templates/config/settings.yml +5 -0
  53. data/upgrades/1.0.0.tar.gz +0 -0
  54. metadata +38 -19
  55. metadata.gz.sig +0 -0
  56. data/templates/config/constants.rb +0 -8
@@ -1,4 +1,4 @@
1
1
  $:.unshift __dir__
2
2
  require 'config/bootstrap'
3
3
 
4
- run Shaf::App.instance
4
+ Shaf::App.run!
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rubygems'
2
4
  require 'bundler'
3
5
  Bundler.require(:default, ENV['RACK_ENV'])
4
6
 
5
7
  $logger = nil
6
8
  require 'shaf/settings'
7
- require 'config/constants'
9
+ require 'config/paths'
8
10
  require 'config/database'
9
11
  require 'config/initializers'
10
12
  require 'config/directories'
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sinatra/base'
2
4
  require 'sequel'
3
- require 'config/constants'
4
5
  require 'fileutils'
5
6
 
6
7
  config = {
@@ -15,17 +16,16 @@ config = {
15
16
 
16
17
  development: {
17
18
  adapter: 'sqlite',
18
- database: File.join(APP_ROOT, 'db', 'development.sqlite3'),
19
+ database: 'db/development.sqlite3'
19
20
  }.freeze,
20
21
 
21
22
  test: {
22
23
  adapter: 'sqlite',
23
- database: File.join(APP_ROOT, 'db', 'test.sqlite3'),
24
+ database: 'db/test.sqlite3'
24
25
  }.freeze
25
26
 
26
27
  }.freeze
27
28
 
28
-
29
29
  env = Sinatra::Application.settings.environment
30
30
 
31
31
  unless config[env]
@@ -33,8 +33,7 @@ unless config[env]
33
33
  exit 1
34
34
  end
35
35
 
36
- MIGRATIONS_DIR = File.join(APP_ROOT, Shaf::Settings.migrations_dir)
37
- FileUtils.mkdir_p(MIGRATIONS_DIR) unless Dir.exist?(MIGRATIONS_DIR)
36
+ migrations_dir = 'db/migrations'
37
+ FileUtils.mkdir_p(migrations_dir) unless Dir.exist?(migrations_dir)
38
38
 
39
39
  DB = Sequel.connect(config[env])
40
-
@@ -1,4 +1,4 @@
1
- require 'config/constants'
1
+ require 'shaf/settings'
2
2
 
3
3
  def sort_files(files)
4
4
  files.sort_by do |file|
@@ -43,7 +43,8 @@ def require_ruby_files
43
43
  end
44
44
  end
45
45
 
46
- [LIB_DIR, SRC_DIR, APP_DIR].each do |dir|
46
+ %i[lib_dir src_dir app_dir].each do |cfg|
47
+ dir = Shaf::Settings.send cfg
47
48
  next unless Dir.exist? dir
48
49
  $LOAD_PATH.unshift dir
49
50
 
@@ -1,4 +1,4 @@
1
- dir = File.join(APP_DIR, 'helpers')
1
+ dir = File.join(Shaf::Settings.app_dir, 'helpers')
2
2
  if Dir.exist? dir
3
3
  Dir.chdir(dir) do
4
4
  modules = []
@@ -2,11 +2,18 @@ require 'sequel'
2
2
  require 'config/database'
3
3
 
4
4
  Sequel.extension :migration
5
- Dir[File.join(MIGRATIONS_DIR, "*")]
6
5
 
7
- def is_current?
8
- return true unless Dir[File.join(MIGRATIONS_DIR, "*")].any?
9
- Sequel::Migrator.is_current?(DB, MIGRATIONS_DIR)
6
+ def current?
7
+ return true unless Dir[migrations_dir_glob].any?
8
+ Sequel::Migrator.is_current?(DB, migrations_dir)
9
+ end
10
+
11
+ def migrations_dir
12
+ File.join(Shaf::Settings.app_root, Shaf::Settings.migrations_dir)
13
+ end
14
+
15
+ def migrations_dir_glob
16
+ File.join(migrations_dir, '*')
10
17
  end
11
18
 
12
19
  def environment
@@ -14,18 +21,17 @@ def environment
14
21
  end
15
22
 
16
23
  def init
17
- return if is_current?
24
+ return if current?
18
25
 
19
26
  if environment == 'test'
20
27
  $logger.info "Running migrations in 'test' environment.."
21
- Sequel::Migrator.run(DB, "#{APP_ROOT}/db/migrations")
28
+ Sequel::Migrator.run(DB, migrations_dir)
22
29
  else
23
30
  msg = "Database for environment '#{environment}' is not " \
24
- "updated to the latest migration"
31
+ 'updated to the latest migration'
25
32
  STDERR.puts msg
26
33
  $logger&.warn msg
27
34
  end
28
35
  end
29
36
 
30
37
  init
31
-
@@ -1,7 +1,7 @@
1
1
  require 'logger'
2
2
 
3
- log_dir = File.join(APP_ROOT, 'logs')
4
- Dir.mkdir log_dir unless Dir.exist? log_dir
3
+ log_dir = File.join(Shaf::Settings.app_root, 'logs')
4
+ Dir.mkdir log_dir unless Dir.exist? log_dir
5
5
 
6
6
  $logger = Logger.new(File.join(log_dir, "#{Sinatra::Application.settings.environment}.log"))
7
7
  DB.loggers << $logger
@@ -1,4 +1,5 @@
1
1
  require 'config/database'
2
2
 
3
3
  Sequel::Model.plugin :timestamps
4
+ Sequel.extension :blank
4
5
  DB.extension(:pagination)
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ app_root = File.expand_path('../', __dir__)
4
+ Shaf::Settings.app_root = app_root
5
+ Shaf::Settings.app_dir = File.expand_path('api', app_root)
6
+ Shaf::Settings.src_dir = File.expand_path('src', app_root)
7
+ Shaf::Settings.lib_dir = File.expand_path('lib', app_root)
@@ -12,6 +12,11 @@ default: &default
12
12
  hostname: localhost
13
13
  protocol: http
14
14
  port: 3000
15
+ auth_token_header: X-Auth-Token
16
+ form_profile_name: shaf-form
17
+ form_profile_uri: https://gist.githubusercontent.com/sammyhenningsson/39c8aafeaf60192b082762cbf3e08d57/raw/shaf-form.md
18
+ error_profile_name: shaf-error
19
+ error_profile_uri: https://gist.githubusercontent.com/sammyhenningsson/049d10e2b8978059cde104fc5d6c2d52/raw/shaf-error.md
15
20
 
16
21
  production:
17
22
  <<: *default
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shaf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sammy Henningsson
@@ -30,60 +30,63 @@ cert_chain:
30
30
  ZMhjYR7sRczGJx+GxGU2EaR0bjRsPVlC4ywtFxoOfRG3WaJcpWGEoAoMJX6Z0bRv
31
31
  M40=
32
32
  -----END CERTIFICATE-----
33
- date: 2019-02-09 00:00:00.000000000 Z
33
+ date: 2019-03-25 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
- name: rake
36
+ name: minitest
37
37
  requirement: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '12.0'
41
+ version: '5'
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: '5.10'
42
45
  type: :development
43
46
  prerelease: false
44
47
  version_requirements: !ruby/object:Gem::Requirement
45
48
  requirements:
46
49
  - - "~>"
47
50
  - !ruby/object:Gem::Version
48
- version: '12.0'
51
+ version: '5'
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '5.10'
49
55
  - !ruby/object:Gem::Dependency
50
- name: sinatra
56
+ name: rack-test
51
57
  requirement: !ruby/object:Gem::Requirement
52
58
  requirements:
53
59
  - - "~>"
54
60
  - !ruby/object:Gem::Version
55
- version: '2.0'
61
+ version: '1.0'
56
62
  type: :development
57
63
  prerelease: false
58
64
  version_requirements: !ruby/object:Gem::Requirement
59
65
  requirements:
60
66
  - - "~>"
61
67
  - !ruby/object:Gem::Version
62
- version: '2.0'
68
+ version: '1.0'
63
69
  - !ruby/object:Gem::Dependency
64
- name: sequel
70
+ name: rake
65
71
  requirement: !ruby/object:Gem::Requirement
66
72
  requirements:
67
73
  - - "~>"
68
74
  - !ruby/object:Gem::Version
69
- version: '5'
75
+ version: '12.0'
70
76
  type: :development
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
79
  requirements:
74
80
  - - "~>"
75
81
  - !ruby/object:Gem::Version
76
- version: '5'
82
+ version: '12.0'
77
83
  - !ruby/object:Gem::Dependency
78
- name: minitest
84
+ name: sequel
79
85
  requirement: !ruby/object:Gem::Requirement
80
86
  requirements:
81
87
  - - "~>"
82
88
  - !ruby/object:Gem::Version
83
89
  version: '5'
84
- - - ">="
85
- - !ruby/object:Gem::Version
86
- version: '5.10'
87
90
  type: :development
88
91
  prerelease: false
89
92
  version_requirements: !ruby/object:Gem::Requirement
@@ -91,9 +94,20 @@ dependencies:
91
94
  - - "~>"
92
95
  - !ruby/object:Gem::Version
93
96
  version: '5'
94
- - - ">="
97
+ - !ruby/object:Gem::Dependency
98
+ name: sinatra
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
95
102
  - !ruby/object:Gem::Version
96
- version: '5.10'
103
+ version: '2.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: sqlite3
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -144,6 +158,7 @@ files:
144
158
  - lib/shaf/generator.rb
145
159
  - lib/shaf/generator/base.rb
146
160
  - lib/shaf/generator/controller.rb
161
+ - lib/shaf/generator/helper.rb
147
162
  - lib/shaf/generator/migration.rb
148
163
  - lib/shaf/generator/migration/add_column.rb
149
164
  - lib/shaf/generator/migration/add_index.rb
@@ -167,6 +182,7 @@ files:
167
182
  - lib/shaf/generator/templates/spec/serializer_spec.rb.erb
168
183
  - lib/shaf/helpers.rb
169
184
  - lib/shaf/helpers/cache_control.rb
185
+ - lib/shaf/helpers/http_header.rb
170
186
  - lib/shaf/helpers/json_html.rb
171
187
  - lib/shaf/helpers/paginate.rb
172
188
  - lib/shaf/helpers/payload.rb
@@ -177,6 +193,7 @@ files:
177
193
  - lib/shaf/rake/db.rb
178
194
  - lib/shaf/rake/test.rb
179
195
  - lib/shaf/registrable_factory.rb
196
+ - lib/shaf/router.rb
180
197
  - lib/shaf/settings.rb
181
198
  - lib/shaf/spec.rb
182
199
  - lib/shaf/spec/base.rb
@@ -210,9 +227,9 @@ files:
210
227
  - templates/api/serializers/error_serializer.rb
211
228
  - templates/api/serializers/form_serializer.rb
212
229
  - templates/api/serializers/root_serializer.rb
230
+ - templates/api/serializers/validation_error_serializer.rb
213
231
  - templates/config.ru
214
232
  - templates/config/bootstrap.rb
215
- - templates/config/constants.rb
216
233
  - templates/config/customize.rb
217
234
  - templates/config/database.rb
218
235
  - templates/config/directories.rb
@@ -222,6 +239,7 @@ files:
222
239
  - templates/config/initializers/hal_presenter.rb
223
240
  - templates/config/initializers/logging.rb
224
241
  - templates/config/initializers/sequel.rb
242
+ - templates/config/paths.rb
225
243
  - templates/config/settings.yml
226
244
  - templates/frontend/assets/css/main.css
227
245
  - templates/frontend/views/form.erb
@@ -233,6 +251,7 @@ files:
233
251
  - upgrades/0.4.0.tar.gz
234
252
  - upgrades/0.5.0.tar.gz
235
253
  - upgrades/0.6.0.tar.gz
254
+ - upgrades/1.0.0.tar.gz
236
255
  homepage: https://github.com/sammyhenningsson/shaf
237
256
  licenses:
238
257
  - MIT
@@ -246,7 +265,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
246
265
  requirements:
247
266
  - - ">="
248
267
  - !ruby/object:Gem::Version
249
- version: '2.3'
268
+ version: '2.4'
250
269
  required_rubygems_version: !ruby/object:Gem::Requirement
251
270
  requirements:
252
271
  - - ">="
metadata.gz.sig CHANGED
Binary file
@@ -1,8 +0,0 @@
1
- APP_ROOT = File.expand_path('../', __dir__)
2
- APP_DIR = File.expand_path('api', APP_ROOT)
3
- SRC_DIR = File.expand_path('src', APP_ROOT)
4
- LIB_DIR = File.expand_path('lib', APP_ROOT)
5
- VIEWS_DIR = File.join(APP_ROOT, Shaf::Settings.views_folder)
6
- ASSETS_DIR = File.join(APP_ROOT, Shaf::Settings.public_folder)
7
- AUTH_TOKEN_HEADER = 'HTTP_X_AUTH_TOKEN'
8
- PAGINATION_PER_PAGE = Shaf::Settings.paginate_per_page || 25