standardapi 6.1.0 → 7.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +80 -58
  3. data/lib/standard_api/access_control_list.rb +40 -6
  4. data/lib/standard_api/controller.rb +96 -28
  5. data/lib/standard_api/helpers.rb +13 -7
  6. data/lib/standard_api/middleware.rb +5 -0
  7. data/lib/standard_api/railtie.rb +17 -0
  8. data/lib/standard_api/route_helpers.rb +59 -9
  9. data/lib/standard_api/test_case/calculate_tests.rb +7 -6
  10. data/lib/standard_api/test_case/destroy_tests.rb +19 -7
  11. data/lib/standard_api/test_case/index_tests.rb +7 -13
  12. data/lib/standard_api/test_case/show_tests.rb +7 -7
  13. data/lib/standard_api/test_case/update_tests.rb +7 -6
  14. data/lib/standard_api/version.rb +1 -1
  15. data/lib/standard_api/views/application/_record.json.jbuilder +4 -3
  16. data/lib/standard_api/views/application/_record.streamer +4 -3
  17. data/lib/standard_api/views/application/_schema.json.jbuilder +20 -8
  18. data/lib/standard_api/views/application/_schema.streamer +22 -8
  19. data/lib/standard_api.rb +1 -0
  20. data/test/standard_api/caching_test.rb +2 -2
  21. data/test/standard_api/controller/include_test.rb +107 -0
  22. data/test/standard_api/controller/subresource_test.rb +157 -0
  23. data/test/standard_api/helpers_test.rb +9 -8
  24. data/test/standard_api/nested_attributes/belongs_to_test.rb +71 -0
  25. data/test/standard_api/nested_attributes/has_and_belongs_to_many_test.rb +70 -0
  26. data/test/standard_api/nested_attributes/has_many_test.rb +85 -0
  27. data/test/standard_api/nested_attributes/has_one_test.rb +71 -0
  28. data/test/standard_api/route_helpers_test.rb +56 -0
  29. data/test/standard_api/standard_api_test.rb +80 -50
  30. data/test/standard_api/test_app/app/controllers/acl/camera_acl.rb +7 -0
  31. data/test/standard_api/test_app/app/controllers/acl/photo_acl.rb +13 -0
  32. data/test/standard_api/test_app/app/controllers/acl/property_acl.rb +7 -1
  33. data/test/standard_api/test_app/controllers.rb +17 -0
  34. data/test/standard_api/test_app/models.rb +59 -2
  35. data/test/standard_api/test_app/test/factories.rb +3 -0
  36. data/test/standard_api/test_app/views/sessions/create.json.jbuilder +1 -0
  37. data/test/standard_api/test_app/views/sessions/create.streamer +3 -0
  38. data/test/standard_api/test_app.rb +12 -1
  39. data/test/standard_api/test_helper.rb +9 -0
  40. metadata +52 -13
@@ -7,12 +7,16 @@ class Account < ActiveRecord::Base
7
7
  end
8
8
 
9
9
  class Photo < ActiveRecord::Base
10
- belongs_to :account, :counter_cache => true
10
+ belongs_to :account, counter_cache: true
11
11
  has_and_belongs_to_many :properties
12
+ has_one :camera
12
13
  end
13
14
 
14
15
  class Document < ActiveRecord::Base
15
16
  attr_accessor :file
17
+
18
+ enum level: { public: 0, secret: 1 }, _suffix: true
19
+ enum rating: { poor: 0, ok: 1, good: 2 }
16
20
  end
17
21
 
18
22
  class Pdf < Document
@@ -34,8 +38,36 @@ class Property < ActiveRecord::Base
34
38
  end
35
39
  end
36
40
 
41
+ class LSNType < ActiveRecord::Type::Value
42
+
43
+ def type
44
+ :lsn
45
+ end
46
+
47
+ def cast_value(value)
48
+ case value
49
+ when Integer
50
+ [value].pack('N')
51
+ else
52
+ value&.to_s&.b
53
+ end
54
+ end
55
+
56
+ def serialize(value)
57
+ PG::TextEncoder::Bytea.new.encode(value)
58
+ end
59
+
60
+ def deserialize(value)
61
+ return nil if value.nil?
62
+ PG::TextDecoder::Bytea.new.decode(value).unpack1('N')
63
+ end
64
+
65
+ end
66
+
37
67
  class Reference < ActiveRecord::Base
38
68
  belongs_to :subject, polymorphic: true
69
+
70
+ attribute :custom_binary, LSNType.new
39
71
  end
40
72
 
41
73
  class Document < ActiveRecord::Base
@@ -47,7 +79,16 @@ class Attachment < ActiveRecord::Base
47
79
  belongs_to :document
48
80
  end
49
81
 
50
- # = Migration
82
+ class Camera < ActiveRecord::Base
83
+ end
84
+
85
+ class UuidModel < ActiveRecord::Base
86
+ end
87
+
88
+ # = Create/recreate database and migration
89
+ task = ActiveRecord::Tasks::PostgreSQLDatabaseTasks.new(ActiveRecord::Base.connection_db_config)
90
+ task.drop
91
+ task.create
51
92
 
52
93
  class CreateModelTables < ActiveRecord::Migration[6.0]
53
94
 
@@ -93,6 +134,8 @@ class CreateModelTables < ActiveRecord::Migration[6.0]
93
134
  create_table "references", force: :cascade do |t|
94
135
  t.integer "subject_id"
95
136
  t.string "subject_type", limit: 255
137
+ t.binary "sha"
138
+ t.binary "custom_binary"
96
139
  t.string "key"
97
140
  t.string "value"
98
141
  end
@@ -100,6 +143,7 @@ class CreateModelTables < ActiveRecord::Migration[6.0]
100
143
  create_table "photos_properties", force: :cascade do |t|
101
144
  t.integer "photo_id"
102
145
  t.integer "property_id"
146
+ t.index ["photo_id", "property_id"], unique: true
103
147
  end
104
148
 
105
149
  create_table "landlords_properties", force: :cascade do |t|
@@ -108,14 +152,27 @@ class CreateModelTables < ActiveRecord::Migration[6.0]
108
152
  end
109
153
 
110
154
  create_table "documents", force: :cascade do |t|
155
+ t.integer 'level', limit: 2, null: false, default: 0
156
+ t.integer 'rating', limit: 2
111
157
  t.string 'type'
112
158
  end
113
159
 
160
+ create_table "cameras", force: :cascade do |t|
161
+ t.integer 'photo_id'
162
+ t.string 'make'
163
+ end
164
+
114
165
  create_table "attachments", force: :cascade do |t|
115
166
  t.string 'record_type'
116
167
  t.integer 'record_id'
117
168
  t.integer 'document_id'
118
169
  end
170
+
171
+ create_table "uuid_models", id: :uuid, force: :cascade do |t|
172
+ t.string 'title', default: 'recruit'
173
+ t.string 'name', default: -> { 'round(random() * 1000)' }
174
+ end
175
+
119
176
  end
120
177
 
121
178
  end
@@ -48,4 +48,7 @@ FactoryBot.define do
48
48
  end
49
49
  end
50
50
 
51
+ factory :camera do
52
+ make { ['Sony', 'Nokia', 'Canon', 'Leica'].sample }
53
+ end
51
54
  end
@@ -0,0 +1 @@
1
+ json.set! 'includes', includes
@@ -0,0 +1,3 @@
1
+ json.object! do
2
+ json.set! 'includes', includes
3
+ end
@@ -18,7 +18,7 @@ class TestApplication < Rails::Application
18
18
  config.cache_classes = true
19
19
  config.action_controller.perform_caching = true
20
20
  config.cache_store = :memory_store, { size: 8.megabytes }
21
- config.action_dispatch.show_exceptions = false
21
+ config.action_dispatch.show_exceptions = :none
22
22
 
23
23
  # if defined?(FactoryBotRails)
24
24
  # config.factory_bot.definition_file_paths += [ '../factories' ]
@@ -28,6 +28,15 @@ end
28
28
  # Test Application initialization
29
29
  TestApplication.initialize!
30
30
 
31
+ # Make sure to test the right view files
32
+ ActionView::Template.unregister_template_handler :streamer, :jbuilder
33
+ case ENV["TSENCODER"]
34
+ when "turbostreamer"
35
+ ActionView::Template.register_template_handler :streamer, TurboStreamer::Handler
36
+ else
37
+ ActionView::Template.register_template_handler :jbuilder, JbuilderHandler
38
+ end
39
+
31
40
  # Test Application Models
32
41
  require 'standard_api/test_app/models'
33
42
 
@@ -44,6 +53,8 @@ Rails.application.routes.draw do
44
53
  end
45
54
 
46
55
  standard_resource :account
56
+ # standard_resources :photos, only: [ :index, :show ]
57
+
47
58
  end
48
59
 
49
60
  # Test Application Helpers
@@ -64,6 +64,15 @@ class ActiveSupport::TestCase
64
64
 
65
65
  # = Helper Methods
66
66
 
67
+ def debug
68
+ ActiveRecord::Base.logger = Logger.new(STDOUT)
69
+ $debugging = true
70
+ yield
71
+ ensure
72
+ ActiveRecord::Base.logger = nil
73
+ $debugging = false
74
+ end
75
+
67
76
  def controller_path
68
77
  if defined?(@controller)
69
78
  @controller.controller_path
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: standardapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.1.0
4
+ version: 7.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Bracy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-15 00:00:00.000000000 Z
11
+ date: 2024-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,70 +16,70 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 6.1.0
19
+ version: 7.1.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 6.1.0
26
+ version: 7.1.3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 6.1.0
33
+ version: 7.1.3
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 6.1.0
40
+ version: 7.1.3
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: actionpack
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 6.1.0
47
+ version: 7.1.3
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 6.1.0
54
+ version: 7.1.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: activerecord-sort
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 6.1.0.rc1
61
+ version: 6.1.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 6.1.0.rc1
68
+ version: 6.1.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: activerecord-filter
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: 6.1.0.rc1
75
+ version: 6.1.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 6.1.0.rc1
82
+ version: 6.1.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: pg
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +108,34 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: oj
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: turbostreamer
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: 1.11.0
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: 1.11.0
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: jbuilder
113
141
  requirement: !ruby/object:Gem::Requirement
@@ -251,6 +279,7 @@ files:
251
279
  - lib/standard_api/errors.rb
252
280
  - lib/standard_api/helpers.rb
253
281
  - lib/standard_api/includes.rb
282
+ - lib/standard_api/middleware.rb
254
283
  - lib/standard_api/middleware/query_encoding.rb
255
284
  - lib/standard_api/orders.rb
256
285
  - lib/standard_api/railtie.rb
@@ -278,12 +307,20 @@ files:
278
307
  - lib/standard_api/views/application/show.json.jbuilder
279
308
  - lib/standard_api/views/application/show.streamer
280
309
  - test/standard_api/caching_test.rb
310
+ - test/standard_api/controller/include_test.rb
311
+ - test/standard_api/controller/subresource_test.rb
281
312
  - test/standard_api/helpers_test.rb
313
+ - test/standard_api/nested_attributes/belongs_to_test.rb
314
+ - test/standard_api/nested_attributes/has_and_belongs_to_many_test.rb
315
+ - test/standard_api/nested_attributes/has_many_test.rb
316
+ - test/standard_api/nested_attributes/has_one_test.rb
282
317
  - test/standard_api/performance.rb
283
318
  - test/standard_api/route_helpers_test.rb
284
319
  - test/standard_api/standard_api_test.rb
285
320
  - test/standard_api/test_app.rb
286
321
  - test/standard_api/test_app/app/controllers/acl/account_acl.rb
322
+ - test/standard_api/test_app/app/controllers/acl/camera_acl.rb
323
+ - test/standard_api/test_app/app/controllers/acl/photo_acl.rb
287
324
  - test/standard_api/test_app/app/controllers/acl/property_acl.rb
288
325
  - test/standard_api/test_app/app/controllers/acl/reference_acl.rb
289
326
  - test/standard_api/test_app/config/database.yml
@@ -298,6 +335,8 @@ files:
298
335
  - test/standard_api/test_app/views/photos/schema.json.jbuilder
299
336
  - test/standard_api/test_app/views/photos/schema.streamer
300
337
  - test/standard_api/test_app/views/properties/edit.html.erb
338
+ - test/standard_api/test_app/views/sessions/create.json.jbuilder
339
+ - test/standard_api/test_app/views/sessions/create.streamer
301
340
  - test/standard_api/test_app/views/sessions/new.html.erb
302
341
  - test/standard_api/test_helper.rb
303
342
  homepage: https://github.com/waratuman/standardapi
@@ -322,7 +361,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
322
361
  - !ruby/object:Gem::Version
323
362
  version: '0'
324
363
  requirements: []
325
- rubygems_version: 3.1.2
364
+ rubygems_version: 3.5.9
326
365
  signing_key:
327
366
  specification_version: 4
328
367
  summary: StandardAPI makes it easy to expose a query interface for your Rails models