cuprum-rails 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +145 -0
  3. data/DEVELOPMENT.md +20 -0
  4. data/README.md +356 -63
  5. data/lib/cuprum/rails/action.rb +32 -16
  6. data/lib/cuprum/rails/actions/create.rb +62 -15
  7. data/lib/cuprum/rails/actions/destroy.rb +23 -7
  8. data/lib/cuprum/rails/actions/edit.rb +23 -7
  9. data/lib/cuprum/rails/actions/index.rb +30 -10
  10. data/lib/cuprum/rails/actions/middleware/associations/cache.rb +112 -0
  11. data/lib/cuprum/rails/actions/middleware/associations/find.rb +23 -0
  12. data/lib/cuprum/rails/actions/middleware/associations/parent.rb +70 -0
  13. data/lib/cuprum/rails/actions/middleware/associations/query.rb +140 -0
  14. data/lib/cuprum/rails/actions/middleware/associations.rb +12 -0
  15. data/lib/cuprum/rails/actions/middleware/log_request.rb +126 -0
  16. data/lib/cuprum/rails/actions/middleware/log_result.rb +51 -0
  17. data/lib/cuprum/rails/actions/middleware/resources/find.rb +44 -0
  18. data/lib/cuprum/rails/actions/middleware/resources/query.rb +91 -0
  19. data/lib/cuprum/rails/actions/middleware/resources.rb +11 -0
  20. data/lib/cuprum/rails/actions/middleware.rb +13 -0
  21. data/lib/cuprum/rails/actions/new.rb +16 -4
  22. data/lib/cuprum/rails/actions/parameter_validation.rb +60 -0
  23. data/lib/cuprum/rails/actions/resource_action.rb +119 -42
  24. data/lib/cuprum/rails/actions/show.rb +23 -7
  25. data/lib/cuprum/rails/actions/update.rb +70 -22
  26. data/lib/cuprum/rails/actions.rb +11 -7
  27. data/lib/cuprum/rails/collection.rb +27 -47
  28. data/lib/cuprum/rails/command.rb +3 -1
  29. data/lib/cuprum/rails/commands/destroy_one.rb +10 -6
  30. data/lib/cuprum/rails/commands/find_many.rb +8 -1
  31. data/lib/cuprum/rails/commands/find_matching.rb +1 -1
  32. data/lib/cuprum/rails/commands/find_one.rb +8 -0
  33. data/lib/cuprum/rails/commands/insert_one.rb +17 -6
  34. data/lib/cuprum/rails/commands/update_one.rb +16 -5
  35. data/lib/cuprum/rails/constraints/parameters_contract.rb +14 -0
  36. data/lib/cuprum/rails/constraints.rb +10 -0
  37. data/lib/cuprum/rails/controller.rb +12 -2
  38. data/lib/cuprum/rails/controllers/action.rb +100 -0
  39. data/lib/cuprum/rails/controllers/class_methods/actions.rb +33 -7
  40. data/lib/cuprum/rails/controllers/class_methods/configuration.rb +36 -0
  41. data/lib/cuprum/rails/controllers/class_methods/middleware.rb +88 -0
  42. data/lib/cuprum/rails/controllers/class_methods/validations.rb +2 -2
  43. data/lib/cuprum/rails/controllers/configuration.rb +41 -1
  44. data/lib/cuprum/rails/controllers/middleware.rb +59 -0
  45. data/lib/cuprum/rails/controllers.rb +2 -0
  46. data/lib/cuprum/rails/errors/invalid_parameters.rb +55 -0
  47. data/lib/cuprum/rails/errors/invalid_statement.rb +11 -0
  48. data/lib/cuprum/rails/errors/missing_parameter.rb +42 -0
  49. data/lib/cuprum/rails/errors/resource_error.rb +46 -0
  50. data/lib/cuprum/rails/errors.rb +6 -1
  51. data/lib/cuprum/rails/map_errors.rb +29 -1
  52. data/lib/cuprum/rails/query.rb +1 -1
  53. data/lib/cuprum/rails/repository.rb +12 -25
  54. data/lib/cuprum/rails/request.rb +149 -60
  55. data/lib/cuprum/rails/resource.rb +119 -85
  56. data/lib/cuprum/rails/responders/base_responder.rb +78 -0
  57. data/lib/cuprum/rails/responders/html/plural_resource.rb +9 -39
  58. data/lib/cuprum/rails/responders/html/rendering.rb +81 -0
  59. data/lib/cuprum/rails/responders/html/resource.rb +107 -0
  60. data/lib/cuprum/rails/responders/html/singular_resource.rb +9 -38
  61. data/lib/cuprum/rails/responders/html.rb +2 -0
  62. data/lib/cuprum/rails/responders/html_responder.rb +8 -52
  63. data/lib/cuprum/rails/responders/json/resource.rb +3 -3
  64. data/lib/cuprum/rails/responders/json_responder.rb +31 -16
  65. data/lib/cuprum/rails/responders/matching.rb +29 -27
  66. data/lib/cuprum/rails/responders/serialization.rb +11 -9
  67. data/lib/cuprum/rails/responders.rb +1 -0
  68. data/lib/cuprum/rails/responses/head_response.rb +24 -0
  69. data/lib/cuprum/rails/responses/html/redirect_back_response.rb +55 -0
  70. data/lib/cuprum/rails/responses/html/redirect_response.rb +19 -4
  71. data/lib/cuprum/rails/responses/html/render_response.rb +17 -5
  72. data/lib/cuprum/rails/responses/html.rb +6 -2
  73. data/lib/cuprum/rails/responses.rb +1 -0
  74. data/lib/cuprum/rails/result.rb +36 -0
  75. data/lib/cuprum/rails/routes.rb +36 -23
  76. data/lib/cuprum/rails/rspec/contract_helpers.rb +57 -0
  77. data/lib/cuprum/rails/rspec/contracts/action_contracts.rb +754 -0
  78. data/lib/cuprum/rails/rspec/contracts/actions/create_contracts.rb +289 -0
  79. data/lib/cuprum/rails/rspec/contracts/actions/destroy_contracts.rb +164 -0
  80. data/lib/cuprum/rails/rspec/contracts/actions/edit_contracts.rb +73 -0
  81. data/lib/cuprum/rails/rspec/contracts/actions/index_contracts.rb +108 -0
  82. data/lib/cuprum/rails/rspec/contracts/actions/new_contracts.rb +111 -0
  83. data/lib/cuprum/rails/rspec/contracts/actions/show_contracts.rb +72 -0
  84. data/lib/cuprum/rails/rspec/contracts/actions/update_contracts.rb +263 -0
  85. data/lib/cuprum/rails/rspec/contracts/actions.rb +8 -0
  86. data/lib/cuprum/rails/rspec/contracts/command_contracts.rb +479 -0
  87. data/lib/cuprum/rails/rspec/contracts/responder_contracts.rb +232 -0
  88. data/lib/cuprum/rails/rspec/contracts/routes_contracts.rb +363 -0
  89. data/lib/cuprum/rails/rspec/contracts/serializers_contracts.rb +70 -0
  90. data/lib/cuprum/rails/rspec/contracts.rb +8 -0
  91. data/lib/cuprum/rails/rspec/matchers/be_a_result_matcher.rb +64 -0
  92. data/lib/cuprum/rails/rspec/matchers.rb +41 -0
  93. data/lib/cuprum/rails/serializers/base_serializer.rb +60 -0
  94. data/lib/cuprum/rails/serializers/context.rb +84 -0
  95. data/lib/cuprum/rails/serializers/json/active_record_serializer.rb +2 -2
  96. data/lib/cuprum/rails/serializers/json/array_serializer.rb +9 -8
  97. data/lib/cuprum/rails/serializers/json/attributes_serializer.rb +95 -172
  98. data/lib/cuprum/rails/serializers/json/error_serializer.rb +2 -2
  99. data/lib/cuprum/rails/serializers/json/hash_serializer.rb +9 -8
  100. data/lib/cuprum/rails/serializers/json/identity_serializer.rb +3 -3
  101. data/lib/cuprum/rails/serializers/json/properties_serializer.rb +252 -0
  102. data/lib/cuprum/rails/serializers/json.rb +2 -1
  103. data/lib/cuprum/rails/serializers.rb +3 -1
  104. data/lib/cuprum/rails/version.rb +1 -1
  105. data/lib/cuprum/rails.rb +19 -16
  106. metadata +73 -131
  107. data/lib/cuprum/rails/controller_action.rb +0 -121
  108. data/lib/cuprum/rails/errors/missing_parameters.rb +0 -33
  109. data/lib/cuprum/rails/errors/missing_primary_key.rb +0 -46
  110. data/lib/cuprum/rails/errors/undefined_permitted_attributes.rb +0 -34
  111. data/lib/cuprum/rails/rspec/command_contract.rb +0 -460
  112. data/lib/cuprum/rails/rspec/define_route_contract.rb +0 -84
  113. data/lib/cuprum/rails/serializers/json/serializer.rb +0 -66
@@ -0,0 +1,252 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cuprum/rails/serializers/base_serializer'
4
+ require 'cuprum/rails/serializers/json'
5
+
6
+ module Cuprum::Rails::Serializers::Json
7
+ # Generates a JSON representation of the object's properties.
8
+ #
9
+ # Defined properties are inherited from the parent serializer. This allows
10
+ # you to extend existing serializers with additional functionality.
11
+ #
12
+ # @example Serializing an existing property.
13
+ # User = Struct.new(:first_name, :last_name, :salary, :department)
14
+ # class FirstNameSerializer < Cuprum::Rails::Serializers::Json::PropertySerializer
15
+ # property :first_name, scope: :first_name
16
+ # end
17
+ #
18
+ # user = User.new('Alan', 'Bradley')
19
+ # serializer = FirstNameSerializer.new
20
+ # serializer.call(user, context: context)
21
+ # #=> {
22
+ # 'first_name' => 'Alan'
23
+ # }
24
+ #
25
+ # @example Serializing a compound property.
26
+ # User = Struct.new(:first_name, :last_name, :salary, :department)
27
+ # class FullNameSerializer < Cuprum::Rails::Serializers::Json::PropertySerializer
28
+ # property :full_name do |user|
29
+ # "#{user.first_name} #{user.last_name}"
30
+ # end
31
+ # end
32
+ #
33
+ # user = User.new('Alan', 'Bradley')
34
+ # serializer = FullNameSerializer.new
35
+ # serializer.call(user, context: context)
36
+ # #=> {
37
+ # 'full_name' => 'Alan Bradley'
38
+ # }
39
+ #
40
+ # @example Using a custom serializer.
41
+ # User = Struct.new(:first_name, :last_name, :salary, :department)
42
+ # class SalarySerializer < Cuprum::Rails::Serializers::Json::PropertySerializer
43
+ # property :salary,
44
+ # scope: :salary,
45
+ # serializer: BigDecimalSerializer
46
+ # end
47
+ #
48
+ # user = User.new('Alan', 'Bradley', BigDecimal('100000'))
49
+ # serializer = SalarySerializer.new
50
+ # serializer.call(user, context: context)
51
+ # #=> {
52
+ # 'salary' => '0.1e6'
53
+ # }
54
+ #
55
+ # @example Using a nested scope.
56
+ # Department = Struct.new(:name)
57
+ # User = Struct.new(:first_name, :last_name, :salary, :department)
58
+ # class DepartmentSerializer < Cuprum::Rails::Serializers::Json::PropertySerializer
59
+ # property :department, scope: %i[department name]
60
+ # end
61
+ #
62
+ # user = User.new('Alan', 'Bradley', nil, Department.new('Engineering'))
63
+ # serializer = DepartmentSerializer.new
64
+ # serializer.call(user, context: context)
65
+ # #=> {
66
+ # 'department' => 'Engineering'
67
+ # }
68
+ #
69
+ # @example Using a custom mapping.
70
+ # User = Struct.new(:first_name, :last_name, :hire_date)
71
+ # class HireDateSerializer < Cuprum::Rails::Serializers::Json::PropertySerializer
72
+ # property(:hire_date, scope: :hire_date) { |value| value&.iso8601 }
73
+ # end
74
+ #
75
+ # user = User.new('Alan', 'Bradley', Date.new(1977, 5, 25))
76
+ # serializer = HireDateSerializer.new
77
+ # serializer.call(user, context: context)
78
+ # #=> {
79
+ # 'hire_date' => '1977-05-25'
80
+ # }
81
+ class PropertiesSerializer < Cuprum::Rails::Serializers::BaseSerializer # rubocop:disable Metrics/ClassLength
82
+ # Error class used when defining an attribute on an abstract class.
83
+ class AbstractSerializerError < StandardError; end
84
+
85
+ # Data class that configures how an attribute is serialized.
86
+ SerializedProperty =
87
+ Struct.new(:mapping, :name, :scope, :serializer, keyword_init: true) do
88
+ # Extracts the scoped value from the given object.
89
+ #
90
+ # @api private
91
+ def value_for(object)
92
+ return object if scope.nil?
93
+
94
+ return object.dig(*Array(scope)) if object.respond_to?(:dig)
95
+
96
+ SleepingKingStudios::Tools::Toolbelt
97
+ .instance
98
+ .object_tools
99
+ .dig(object, *Array(scope))
100
+ end
101
+ end
102
+
103
+ @abstract_class = true
104
+
105
+ class << self
106
+ # Registers the property to be serialized.
107
+ #
108
+ # @param name [String, Symbol] the name of the property to serialize. This
109
+ # will determine the hash key of the serialized value.
110
+ # @param serializer [#call] the serializer used to serialize the value. If
111
+ # no serializer is given, the default serializer (if any) will be used.
112
+ # @param scope [String, Symbol, Array<String, Symbol>] the path to the
113
+ # value to serialize, if any.
114
+ #
115
+ # @yield If a block is given, the block is used to transform the scoped
116
+ # value prior to serialization.
117
+ # @yieldparam value [Object] the scoped value.
118
+ # @yieldreturn [Object] the transformed value.
119
+ #
120
+ # @raise AbstractSerializerError when attempting to define a serialized
121
+ # attribute on an abstract class.
122
+ # @raise ArgumentError unless a scope, serializer, or block is given.
123
+ #
124
+ # @see Cuprum::Rails::Serializers::Json::PropertiesSerializer::ClassMethods#property
125
+ def property(name, scope: nil, serializer: nil, &block) # rubocop:disable Metrics/MethodLength
126
+ require_concrete_class!
127
+ validate_property_name!(name)
128
+ validate_scope!(scope)
129
+ validate_serializer!(serializer)
130
+
131
+ unless scope || serializer || block_given?
132
+ raise ArgumentError,
133
+ 'must provide a scope, a serializer, or a mapping block'
134
+ end
135
+
136
+ prop_key = name.intern
137
+ serialized = SerializedProperty.new(
138
+ mapping: block || :itself.to_proc,
139
+ name: name.to_s,
140
+ scope: scope,
141
+ serializer: serializer
142
+ )
143
+ own_properties[prop_key] = serialized
144
+
145
+ prop_key
146
+ end
147
+
148
+ # Enumerates the properties defined for the class and its ancestors.
149
+ #
150
+ # @api private
151
+ def properties
152
+ ancestors
153
+ .select do |ancestor|
154
+ ancestor < Cuprum::Rails::Serializers::Json::PropertiesSerializer
155
+ end # rubocop:disable Style/MultilineBlockChain
156
+ .reverse_each
157
+ .reduce({}) { |hsh, ancestor| hsh.merge(ancestor.own_properties) }
158
+ end
159
+
160
+ protected
161
+
162
+ def own_properties
163
+ @own_properties ||= {}
164
+ end
165
+
166
+ private
167
+
168
+ attr_reader :abstract_class
169
+
170
+ def require_concrete_class!
171
+ return unless abstract_class
172
+
173
+ message =
174
+ "#{name} is an abstract class - create a subclass to serialize " \
175
+ 'properties'
176
+
177
+ raise AbstractSerializerError, message, caller(1..-1)
178
+ end
179
+
180
+ def tools
181
+ SleepingKingStudios::Tools::Toolbelt.instance
182
+ end
183
+
184
+ def validate_property_name!(name)
185
+ tools.assertions.validate_name(name, as: 'property name')
186
+ end
187
+
188
+ def validate_scope!(scope) # rubocop:disable Metrics/MethodLength
189
+ return if scope.nil?
190
+
191
+ if scope.is_a?(Array)
192
+ validate_scope_array!(scope)
193
+
194
+ return
195
+ end
196
+
197
+ if scope.is_a?(String) || scope.is_a?(Symbol)
198
+ tools.assertions.validate_name(scope, as: 'scope')
199
+
200
+ return
201
+ end
202
+
203
+ raise ArgumentError,
204
+ 'scope is not a String, a Symbol, or an Array of Strings or Symbols'
205
+ end
206
+
207
+ def validate_scope_array!(scope)
208
+ unless scope.all? { |item| item.is_a?(String) || item.is_a?(Symbol) }
209
+ raise ArgumentError,
210
+ 'scope is not a String, a Symbol, or an Array of Strings or Symbols'
211
+ end
212
+
213
+ scope.each.with_index do |item, index|
214
+ tools.assertions.validate_name(item, as: "scope item at #{index}")
215
+ end
216
+ end
217
+
218
+ def validate_serializer!(serializer)
219
+ return if serializer.nil?
220
+ return if serializer.respond_to?(:call)
221
+
222
+ raise ArgumentError, 'serializer does not respond to #call'
223
+ end
224
+ end
225
+
226
+ # Serializes the object's properties as JSON.
227
+ #
228
+ # @param object [Object] The object to convert to JSON.
229
+ # @param context [Cuprum::Rails::Serializers::Context] The serialization
230
+ # context, which includes the configured serializers for attributes or
231
+ # collection items.
232
+ #
233
+ # @return [Hash<String, Object] a JSON-compatible representation of the
234
+ # object's properties.
235
+ def call(object, context:) # rubocop:disable Metrics/MethodLength
236
+ return super(nil, context: context) if object.nil?
237
+
238
+ self.class.properties.each_value.with_object({}) do |property, hsh|
239
+ value = property.value_for(object)
240
+ mapped = property.mapping.call(value) if property.mapping
241
+ serialized =
242
+ if property.serializer
243
+ property.serializer.call(mapped, context: context)
244
+ else
245
+ super(mapped, context: context)
246
+ end
247
+
248
+ hsh[property.name] = serialized
249
+ end
250
+ end
251
+ end
252
+ end
@@ -17,7 +17,8 @@ module Cuprum::Rails::Serializers
17
17
  'cuprum/rails/serializers/json/hash_serializer'
18
18
  autoload :IdentitySerializer,
19
19
  'cuprum/rails/serializers/json/identity_serializer'
20
- autoload :Serializer, 'cuprum/rails/serializers/json/serializer'
20
+ autoload :PropertiesSerializer,
21
+ 'cuprum/rails/serializers/json/properties_serializer'
21
22
 
22
23
  # Default serializers for handling value objects and data structures.
23
24
  #
@@ -5,6 +5,8 @@ require 'cuprum/rails'
5
5
  module Cuprum::Rails
6
6
  # Namespace for serializers, which convert objects to a serialized format.
7
7
  module Serializers
8
- autoload :Json, 'cuprum/rails/serializers/json'
8
+ autoload :BaseSerializer, 'cuprum/rails/serializers/base_serializer'
9
+ autoload :Context, 'cuprum/rails/serializers/context'
10
+ autoload :Json, 'cuprum/rails/serializers/json'
9
11
  end
10
12
  end
@@ -11,7 +11,7 @@ module Cuprum
11
11
  # Major version.
12
12
  MAJOR = 0
13
13
  # Minor version.
14
- MINOR = 1
14
+ MINOR = 2
15
15
  # Patch version.
16
16
  PATCH = 0
17
17
  # Prerelease version.
data/lib/cuprum/rails.rb CHANGED
@@ -11,21 +11,24 @@ module Cuprum
11
11
  VERSION
12
12
  end
13
13
 
14
- autoload :Action, 'cuprum/rails/action'
15
- autoload :Actions, 'cuprum/rails/actions'
16
- autoload :Collection, 'cuprum/rails/collection'
17
- autoload :Command, 'cuprum/rails/command'
18
- autoload :Commands, 'cuprum/rails/commands'
19
- autoload :Controller, 'cuprum/rails/controller'
20
- autoload :ControllerAction, 'cuprum/rails/controller_action'
21
- autoload :Controllers, 'cuprum/rails/controllers'
22
- autoload :Query, 'cuprum/rails/query'
23
- autoload :Request, 'cuprum/rails/request'
24
- autoload :Responders, 'cuprum/rails/responders'
25
- autoload :Responses, 'cuprum/rails/responses'
26
- autoload :Resource, 'cuprum/rails/resource'
27
- autoload :Routes, 'cuprum/rails/routes'
28
- autoload :Routing, 'cuprum/rails/routing'
29
- autoload :Serializers, 'cuprum/rails/serializers'
14
+ autoload :Action, 'cuprum/rails/action'
15
+ autoload :Actions, 'cuprum/rails/actions'
16
+ autoload :Collection, 'cuprum/rails/collection'
17
+ autoload :Command, 'cuprum/rails/command'
18
+ autoload :Commands, 'cuprum/rails/commands'
19
+ autoload :Constraints, 'cuprum/rails/constraints'
20
+ autoload :Controller, 'cuprum/rails/controller'
21
+ autoload :Controllers, 'cuprum/rails/controllers'
22
+ autoload :Errors, 'cuprum/rails/errors'
23
+ autoload :Query, 'cuprum/rails/query'
24
+ autoload :Repository, 'cuprum/rails/repository'
25
+ autoload :Request, 'cuprum/rails/request'
26
+ autoload :Responders, 'cuprum/rails/responders'
27
+ autoload :Responses, 'cuprum/rails/responses'
28
+ autoload :Resource, 'cuprum/rails/resource'
29
+ autoload :Result, 'cuprum/rails/result'
30
+ autoload :Routes, 'cuprum/rails/routes'
31
+ autoload :Routing, 'cuprum/rails/routing'
32
+ autoload :Serializers, 'cuprum/rails/serializers'
30
33
  end
31
34
  end
metadata CHANGED
@@ -1,175 +1,77 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cuprum-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob "Merlin" Smith
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-15 00:00:00.000000000 Z
11
+ date: 2023-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cuprum
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 0.11.0
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '2.0'
23
- type: :runtime
24
- prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: 0.11.0
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '2.0'
33
- - !ruby/object:Gem::Dependency
34
- name: cuprum-collections
35
15
  requirement: !ruby/object:Gem::Requirement
36
16
  requirements:
37
17
  - - "~>"
38
18
  - !ruby/object:Gem::Version
39
- version: '0.2'
19
+ version: '1.2'
40
20
  type: :runtime
41
21
  prerelease: false
42
22
  version_requirements: !ruby/object:Gem::Requirement
43
23
  requirements:
44
24
  - - "~>"
45
25
  - !ruby/object:Gem::Version
46
- version: '0.2'
26
+ version: '1.2'
47
27
  - !ruby/object:Gem::Dependency
48
- name: stannum
28
+ name: cuprum-collections
49
29
  requirement: !ruby/object:Gem::Requirement
50
30
  requirements:
51
31
  - - "~>"
52
32
  - !ruby/object:Gem::Version
53
- version: '0.2'
33
+ version: '0.4'
54
34
  type: :runtime
55
35
  prerelease: false
56
36
  version_requirements: !ruby/object:Gem::Requirement
57
37
  requirements:
58
38
  - - "~>"
59
39
  - !ruby/object:Gem::Version
60
- version: '0.2'
40
+ version: '0.4'
61
41
  - !ruby/object:Gem::Dependency
62
- name: rspec
42
+ name: rails
63
43
  requirement: !ruby/object:Gem::Requirement
64
44
  requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '3.9'
68
- type: :development
69
- prerelease: false
70
- version_requirements: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '3.9'
75
- - !ruby/object:Gem::Dependency
76
- name: rspec-sleeping_king_studios
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '2.5'
82
- type: :development
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '2.5'
89
- - !ruby/object:Gem::Dependency
90
- name: rubocop
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '1.22'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: '1.22'
103
- - !ruby/object:Gem::Dependency
104
- name: rubocop-rails
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: '2.12'
110
- type: :development
111
- prerelease: false
112
- version_requirements: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - "~>"
115
- - !ruby/object:Gem::Version
116
- version: '2.12'
117
- - !ruby/object:Gem::Dependency
118
- name: rubocop-rake
119
- requirement: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - "~>"
122
- - !ruby/object:Gem::Version
123
- version: '0.6'
124
- type: :development
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - "~>"
45
+ - - ">="
129
46
  - !ruby/object:Gem::Version
130
- version: '0.6'
131
- - !ruby/object:Gem::Dependency
132
- name: rubocop-rspec
133
- requirement: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - "~>"
47
+ version: '6.0'
48
+ - - "<"
136
49
  - !ruby/object:Gem::Version
137
- version: '2.5'
138
- type: :development
50
+ version: '8'
51
+ type: :runtime
139
52
  prerelease: false
140
53
  version_requirements: !ruby/object:Gem::Requirement
141
54
  requirements:
142
- - - "~>"
143
- - !ruby/object:Gem::Version
144
- version: '2.5'
145
- - !ruby/object:Gem::Dependency
146
- name: simplecov
147
- requirement: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - "~>"
55
+ - - ">="
150
56
  - !ruby/object:Gem::Version
151
- version: '0.18'
152
- type: :development
153
- prerelease: false
154
- version_requirements: !ruby/object:Gem::Requirement
155
- requirements:
156
- - - "~>"
57
+ version: '6.0'
58
+ - - "<"
157
59
  - !ruby/object:Gem::Version
158
- version: '0.18'
60
+ version: '8'
159
61
  - !ruby/object:Gem::Dependency
160
- name: sleeping_king_studios-tools
62
+ name: stannum
161
63
  requirement: !ruby/object:Gem::Requirement
162
64
  requirements:
163
65
  - - "~>"
164
66
  - !ruby/object:Gem::Version
165
- version: '1.0'
166
- type: :development
67
+ version: '0.3'
68
+ type: :runtime
167
69
  prerelease: false
168
70
  version_requirements: !ruby/object:Gem::Requirement
169
71
  requirements:
170
72
  - - "~>"
171
73
  - !ruby/object:Gem::Version
172
- version: '1.0'
74
+ version: '0.3'
173
75
  description: Provides a collection adapter for ActiveRecord models, as well as command
174
76
  integrations for developing Rails controllers.
175
77
  email:
@@ -190,7 +92,19 @@ files:
190
92
  - lib/cuprum/rails/actions/destroy.rb
191
93
  - lib/cuprum/rails/actions/edit.rb
192
94
  - lib/cuprum/rails/actions/index.rb
95
+ - lib/cuprum/rails/actions/middleware.rb
96
+ - lib/cuprum/rails/actions/middleware/associations.rb
97
+ - lib/cuprum/rails/actions/middleware/associations/cache.rb
98
+ - lib/cuprum/rails/actions/middleware/associations/find.rb
99
+ - lib/cuprum/rails/actions/middleware/associations/parent.rb
100
+ - lib/cuprum/rails/actions/middleware/associations/query.rb
101
+ - lib/cuprum/rails/actions/middleware/log_request.rb
102
+ - lib/cuprum/rails/actions/middleware/log_result.rb
103
+ - lib/cuprum/rails/actions/middleware/resources.rb
104
+ - lib/cuprum/rails/actions/middleware/resources/find.rb
105
+ - lib/cuprum/rails/actions/middleware/resources/query.rb
193
106
  - lib/cuprum/rails/actions/new.rb
107
+ - lib/cuprum/rails/actions/parameter_validation.rb
194
108
  - lib/cuprum/rails/actions/resource_action.rb
195
109
  - lib/cuprum/rails/actions/show.rb
196
110
  - lib/cuprum/rails/actions/update.rb
@@ -206,18 +120,23 @@ files:
206
120
  - lib/cuprum/rails/commands/insert_one.rb
207
121
  - lib/cuprum/rails/commands/update_one.rb
208
122
  - lib/cuprum/rails/commands/validate_one.rb
123
+ - lib/cuprum/rails/constraints.rb
124
+ - lib/cuprum/rails/constraints/parameters_contract.rb
209
125
  - lib/cuprum/rails/controller.rb
210
- - lib/cuprum/rails/controller_action.rb
211
126
  - lib/cuprum/rails/controllers.rb
127
+ - lib/cuprum/rails/controllers/action.rb
212
128
  - lib/cuprum/rails/controllers/class_methods.rb
213
129
  - lib/cuprum/rails/controllers/class_methods/actions.rb
214
130
  - lib/cuprum/rails/controllers/class_methods/configuration.rb
131
+ - lib/cuprum/rails/controllers/class_methods/middleware.rb
215
132
  - lib/cuprum/rails/controllers/class_methods/validations.rb
216
133
  - lib/cuprum/rails/controllers/configuration.rb
134
+ - lib/cuprum/rails/controllers/middleware.rb
217
135
  - lib/cuprum/rails/errors.rb
218
- - lib/cuprum/rails/errors/missing_parameters.rb
219
- - lib/cuprum/rails/errors/missing_primary_key.rb
220
- - lib/cuprum/rails/errors/undefined_permitted_attributes.rb
136
+ - lib/cuprum/rails/errors/invalid_parameters.rb
137
+ - lib/cuprum/rails/errors/invalid_statement.rb
138
+ - lib/cuprum/rails/errors/missing_parameter.rb
139
+ - lib/cuprum/rails/errors/resource_error.rb
221
140
  - lib/cuprum/rails/map_errors.rb
222
141
  - lib/cuprum/rails/query.rb
223
142
  - lib/cuprum/rails/query_builder.rb
@@ -226,8 +145,11 @@ files:
226
145
  - lib/cuprum/rails/resource.rb
227
146
  - lib/cuprum/rails/responders.rb
228
147
  - lib/cuprum/rails/responders/actions.rb
148
+ - lib/cuprum/rails/responders/base_responder.rb
229
149
  - lib/cuprum/rails/responders/html.rb
230
150
  - lib/cuprum/rails/responders/html/plural_resource.rb
151
+ - lib/cuprum/rails/responders/html/rendering.rb
152
+ - lib/cuprum/rails/responders/html/resource.rb
231
153
  - lib/cuprum/rails/responders/html/singular_resource.rb
232
154
  - lib/cuprum/rails/responders/html_responder.rb
233
155
  - lib/cuprum/rails/responders/json.rb
@@ -236,18 +158,38 @@ files:
236
158
  - lib/cuprum/rails/responders/matching.rb
237
159
  - lib/cuprum/rails/responders/serialization.rb
238
160
  - lib/cuprum/rails/responses.rb
161
+ - lib/cuprum/rails/responses/head_response.rb
239
162
  - lib/cuprum/rails/responses/html.rb
163
+ - lib/cuprum/rails/responses/html/redirect_back_response.rb
240
164
  - lib/cuprum/rails/responses/html/redirect_response.rb
241
165
  - lib/cuprum/rails/responses/html/render_response.rb
242
166
  - lib/cuprum/rails/responses/json_response.rb
167
+ - lib/cuprum/rails/result.rb
243
168
  - lib/cuprum/rails/routes.rb
244
169
  - lib/cuprum/rails/routing.rb
245
170
  - lib/cuprum/rails/routing/plural_routes.rb
246
171
  - lib/cuprum/rails/routing/singular_routes.rb
247
172
  - lib/cuprum/rails/rspec.rb
248
- - lib/cuprum/rails/rspec/command_contract.rb
249
- - lib/cuprum/rails/rspec/define_route_contract.rb
173
+ - lib/cuprum/rails/rspec/contract_helpers.rb
174
+ - lib/cuprum/rails/rspec/contracts.rb
175
+ - lib/cuprum/rails/rspec/contracts/action_contracts.rb
176
+ - lib/cuprum/rails/rspec/contracts/actions.rb
177
+ - lib/cuprum/rails/rspec/contracts/actions/create_contracts.rb
178
+ - lib/cuprum/rails/rspec/contracts/actions/destroy_contracts.rb
179
+ - lib/cuprum/rails/rspec/contracts/actions/edit_contracts.rb
180
+ - lib/cuprum/rails/rspec/contracts/actions/index_contracts.rb
181
+ - lib/cuprum/rails/rspec/contracts/actions/new_contracts.rb
182
+ - lib/cuprum/rails/rspec/contracts/actions/show_contracts.rb
183
+ - lib/cuprum/rails/rspec/contracts/actions/update_contracts.rb
184
+ - lib/cuprum/rails/rspec/contracts/command_contracts.rb
185
+ - lib/cuprum/rails/rspec/contracts/responder_contracts.rb
186
+ - lib/cuprum/rails/rspec/contracts/routes_contracts.rb
187
+ - lib/cuprum/rails/rspec/contracts/serializers_contracts.rb
188
+ - lib/cuprum/rails/rspec/matchers.rb
189
+ - lib/cuprum/rails/rspec/matchers/be_a_result_matcher.rb
250
190
  - lib/cuprum/rails/serializers.rb
191
+ - lib/cuprum/rails/serializers/base_serializer.rb
192
+ - lib/cuprum/rails/serializers/context.rb
251
193
  - lib/cuprum/rails/serializers/json.rb
252
194
  - lib/cuprum/rails/serializers/json/active_record_serializer.rb
253
195
  - lib/cuprum/rails/serializers/json/array_serializer.rb
@@ -255,7 +197,7 @@ files:
255
197
  - lib/cuprum/rails/serializers/json/error_serializer.rb
256
198
  - lib/cuprum/rails/serializers/json/hash_serializer.rb
257
199
  - lib/cuprum/rails/serializers/json/identity_serializer.rb
258
- - lib/cuprum/rails/serializers/json/serializer.rb
200
+ - lib/cuprum/rails/serializers/json/properties_serializer.rb
259
201
  - lib/cuprum/rails/version.rb
260
202
  homepage: http://sleepingkingstudios.com
261
203
  licenses:
@@ -264,7 +206,7 @@ metadata:
264
206
  bug_tracker_uri: https://github.com/sleepingkingstudios/cuprum-rails/issues
265
207
  source_code_uri: https://github.com/sleepingkingstudios/cuprum-rails
266
208
  rubygems_mfa_required: 'true'
267
- post_install_message:
209
+ post_install_message:
268
210
  rdoc_options: []
269
211
  require_paths:
270
212
  - lib
@@ -272,15 +214,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
272
214
  requirements:
273
215
  - - ">="
274
216
  - !ruby/object:Gem::Version
275
- version: '2.6'
217
+ version: '2.7'
276
218
  required_rubygems_version: !ruby/object:Gem::Requirement
277
219
  requirements:
278
220
  - - ">="
279
221
  - !ruby/object:Gem::Version
280
222
  version: '0'
281
223
  requirements: []
282
- rubygems_version: 3.1.2
283
- signing_key:
224
+ rubygems_version: 3.4.21
225
+ signing_key:
284
226
  specification_version: 4
285
227
  summary: An integration between Rails and the Cuprum library.
286
228
  test_files: []