cuprum-rails 0.1.0 → 0.2.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 (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: []