shaf 0.8.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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