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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +145 -0
- data/DEVELOPMENT.md +20 -0
- data/README.md +356 -63
- data/lib/cuprum/rails/action.rb +32 -16
- data/lib/cuprum/rails/actions/create.rb +62 -15
- data/lib/cuprum/rails/actions/destroy.rb +23 -7
- data/lib/cuprum/rails/actions/edit.rb +23 -7
- data/lib/cuprum/rails/actions/index.rb +30 -10
- data/lib/cuprum/rails/actions/middleware/associations/cache.rb +112 -0
- data/lib/cuprum/rails/actions/middleware/associations/find.rb +23 -0
- data/lib/cuprum/rails/actions/middleware/associations/parent.rb +70 -0
- data/lib/cuprum/rails/actions/middleware/associations/query.rb +140 -0
- data/lib/cuprum/rails/actions/middleware/associations.rb +12 -0
- data/lib/cuprum/rails/actions/middleware/log_request.rb +126 -0
- data/lib/cuprum/rails/actions/middleware/log_result.rb +51 -0
- data/lib/cuprum/rails/actions/middleware/resources/find.rb +44 -0
- data/lib/cuprum/rails/actions/middleware/resources/query.rb +91 -0
- data/lib/cuprum/rails/actions/middleware/resources.rb +11 -0
- data/lib/cuprum/rails/actions/middleware.rb +13 -0
- data/lib/cuprum/rails/actions/new.rb +16 -4
- data/lib/cuprum/rails/actions/parameter_validation.rb +60 -0
- data/lib/cuprum/rails/actions/resource_action.rb +119 -42
- data/lib/cuprum/rails/actions/show.rb +23 -7
- data/lib/cuprum/rails/actions/update.rb +70 -22
- data/lib/cuprum/rails/actions.rb +11 -7
- data/lib/cuprum/rails/collection.rb +27 -47
- data/lib/cuprum/rails/command.rb +3 -1
- data/lib/cuprum/rails/commands/destroy_one.rb +10 -6
- data/lib/cuprum/rails/commands/find_many.rb +8 -1
- data/lib/cuprum/rails/commands/find_matching.rb +1 -1
- data/lib/cuprum/rails/commands/find_one.rb +8 -0
- data/lib/cuprum/rails/commands/insert_one.rb +17 -6
- data/lib/cuprum/rails/commands/update_one.rb +16 -5
- data/lib/cuprum/rails/constraints/parameters_contract.rb +14 -0
- data/lib/cuprum/rails/constraints.rb +10 -0
- data/lib/cuprum/rails/controller.rb +12 -2
- data/lib/cuprum/rails/controllers/action.rb +100 -0
- data/lib/cuprum/rails/controllers/class_methods/actions.rb +33 -7
- data/lib/cuprum/rails/controllers/class_methods/configuration.rb +36 -0
- data/lib/cuprum/rails/controllers/class_methods/middleware.rb +88 -0
- data/lib/cuprum/rails/controllers/class_methods/validations.rb +2 -2
- data/lib/cuprum/rails/controllers/configuration.rb +41 -1
- data/lib/cuprum/rails/controllers/middleware.rb +59 -0
- data/lib/cuprum/rails/controllers.rb +2 -0
- data/lib/cuprum/rails/errors/invalid_parameters.rb +55 -0
- data/lib/cuprum/rails/errors/invalid_statement.rb +11 -0
- data/lib/cuprum/rails/errors/missing_parameter.rb +42 -0
- data/lib/cuprum/rails/errors/resource_error.rb +46 -0
- data/lib/cuprum/rails/errors.rb +6 -1
- data/lib/cuprum/rails/map_errors.rb +29 -1
- data/lib/cuprum/rails/query.rb +1 -1
- data/lib/cuprum/rails/repository.rb +12 -25
- data/lib/cuprum/rails/request.rb +149 -60
- data/lib/cuprum/rails/resource.rb +119 -85
- data/lib/cuprum/rails/responders/base_responder.rb +78 -0
- data/lib/cuprum/rails/responders/html/plural_resource.rb +9 -39
- data/lib/cuprum/rails/responders/html/rendering.rb +81 -0
- data/lib/cuprum/rails/responders/html/resource.rb +107 -0
- data/lib/cuprum/rails/responders/html/singular_resource.rb +9 -38
- data/lib/cuprum/rails/responders/html.rb +2 -0
- data/lib/cuprum/rails/responders/html_responder.rb +8 -52
- data/lib/cuprum/rails/responders/json/resource.rb +3 -3
- data/lib/cuprum/rails/responders/json_responder.rb +31 -16
- data/lib/cuprum/rails/responders/matching.rb +29 -27
- data/lib/cuprum/rails/responders/serialization.rb +11 -9
- data/lib/cuprum/rails/responders.rb +1 -0
- data/lib/cuprum/rails/responses/head_response.rb +24 -0
- data/lib/cuprum/rails/responses/html/redirect_back_response.rb +55 -0
- data/lib/cuprum/rails/responses/html/redirect_response.rb +19 -4
- data/lib/cuprum/rails/responses/html/render_response.rb +17 -5
- data/lib/cuprum/rails/responses/html.rb +6 -2
- data/lib/cuprum/rails/responses.rb +1 -0
- data/lib/cuprum/rails/result.rb +36 -0
- data/lib/cuprum/rails/routes.rb +36 -23
- data/lib/cuprum/rails/rspec/contract_helpers.rb +57 -0
- data/lib/cuprum/rails/rspec/contracts/action_contracts.rb +754 -0
- data/lib/cuprum/rails/rspec/contracts/actions/create_contracts.rb +289 -0
- data/lib/cuprum/rails/rspec/contracts/actions/destroy_contracts.rb +164 -0
- data/lib/cuprum/rails/rspec/contracts/actions/edit_contracts.rb +73 -0
- data/lib/cuprum/rails/rspec/contracts/actions/index_contracts.rb +108 -0
- data/lib/cuprum/rails/rspec/contracts/actions/new_contracts.rb +111 -0
- data/lib/cuprum/rails/rspec/contracts/actions/show_contracts.rb +72 -0
- data/lib/cuprum/rails/rspec/contracts/actions/update_contracts.rb +263 -0
- data/lib/cuprum/rails/rspec/contracts/actions.rb +8 -0
- data/lib/cuprum/rails/rspec/contracts/command_contracts.rb +479 -0
- data/lib/cuprum/rails/rspec/contracts/responder_contracts.rb +232 -0
- data/lib/cuprum/rails/rspec/contracts/routes_contracts.rb +363 -0
- data/lib/cuprum/rails/rspec/contracts/serializers_contracts.rb +70 -0
- data/lib/cuprum/rails/rspec/contracts.rb +8 -0
- data/lib/cuprum/rails/rspec/matchers/be_a_result_matcher.rb +64 -0
- data/lib/cuprum/rails/rspec/matchers.rb +41 -0
- data/lib/cuprum/rails/serializers/base_serializer.rb +60 -0
- data/lib/cuprum/rails/serializers/context.rb +84 -0
- data/lib/cuprum/rails/serializers/json/active_record_serializer.rb +2 -2
- data/lib/cuprum/rails/serializers/json/array_serializer.rb +9 -8
- data/lib/cuprum/rails/serializers/json/attributes_serializer.rb +95 -172
- data/lib/cuprum/rails/serializers/json/error_serializer.rb +2 -2
- data/lib/cuprum/rails/serializers/json/hash_serializer.rb +9 -8
- data/lib/cuprum/rails/serializers/json/identity_serializer.rb +3 -3
- data/lib/cuprum/rails/serializers/json/properties_serializer.rb +252 -0
- data/lib/cuprum/rails/serializers/json.rb +2 -1
- data/lib/cuprum/rails/serializers.rb +3 -1
- data/lib/cuprum/rails/version.rb +1 -1
- data/lib/cuprum/rails.rb +19 -16
- metadata +73 -131
- data/lib/cuprum/rails/controller_action.rb +0 -121
- data/lib/cuprum/rails/errors/missing_parameters.rb +0 -33
- data/lib/cuprum/rails/errors/missing_primary_key.rb +0 -46
- data/lib/cuprum/rails/errors/undefined_permitted_attributes.rb +0 -34
- data/lib/cuprum/rails/rspec/command_contract.rb +0 -460
- data/lib/cuprum/rails/rspec/define_route_contract.rb +0 -84
- 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 :
|
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 :
|
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
|
data/lib/cuprum/rails/version.rb
CHANGED
data/lib/cuprum/rails.rb
CHANGED
@@ -11,21 +11,24 @@ module Cuprum
|
|
11
11
|
VERSION
|
12
12
|
end
|
13
13
|
|
14
|
-
autoload :Action,
|
15
|
-
autoload :Actions,
|
16
|
-
autoload :Collection,
|
17
|
-
autoload :Command,
|
18
|
-
autoload :Commands,
|
19
|
-
autoload :
|
20
|
-
autoload :
|
21
|
-
autoload :Controllers,
|
22
|
-
autoload :
|
23
|
-
autoload :
|
24
|
-
autoload :
|
25
|
-
autoload :
|
26
|
-
autoload :
|
27
|
-
autoload :
|
28
|
-
autoload :
|
29
|
-
autoload :
|
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.
|
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:
|
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: '
|
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: '
|
26
|
+
version: '1.2'
|
47
27
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
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.
|
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.
|
40
|
+
version: '0.4'
|
61
41
|
- !ruby/object:Gem::Dependency
|
62
|
-
name:
|
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
|
131
|
-
-
|
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: '
|
138
|
-
type: :
|
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
|
152
|
-
|
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: '
|
60
|
+
version: '8'
|
159
61
|
- !ruby/object:Gem::Dependency
|
160
|
-
name:
|
62
|
+
name: stannum
|
161
63
|
requirement: !ruby/object:Gem::Requirement
|
162
64
|
requirements:
|
163
65
|
- - "~>"
|
164
66
|
- !ruby/object:Gem::Version
|
165
|
-
version: '
|
166
|
-
type: :
|
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: '
|
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/
|
219
|
-
- lib/cuprum/rails/errors/
|
220
|
-
- lib/cuprum/rails/errors/
|
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/
|
249
|
-
- lib/cuprum/rails/rspec/
|
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/
|
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.
|
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.
|
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: []
|