active_remote 3.3.3 → 5.0.0.pre
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/.rubocop.yml +28 -0
- data/CHANGES.md +13 -0
- data/Gemfile +1 -1
- data/Rakefile +7 -3
- data/active_remote.gemspec +8 -6
- data/lib/active_remote.rb +9 -8
- data/lib/active_remote/association.rb +12 -14
- data/lib/active_remote/attribute_definition.rb +14 -12
- data/lib/active_remote/attributes.rb +6 -6
- data/lib/active_remote/base.rb +20 -27
- data/lib/active_remote/config.rb +1 -1
- data/lib/active_remote/dirty.rb +3 -3
- data/lib/active_remote/dsl.rb +3 -4
- data/lib/active_remote/errors.rb +1 -11
- data/lib/active_remote/persistence.rb +11 -12
- data/lib/active_remote/primary_key.rb +0 -1
- data/lib/active_remote/query_attributes.rb +13 -13
- data/lib/active_remote/rpc.rb +8 -14
- data/lib/active_remote/rpc_adapters/protobuf_adapter.rb +18 -17
- data/lib/active_remote/scope_keys.rb +1 -2
- data/lib/active_remote/search.rb +8 -6
- data/lib/active_remote/serializers/protobuf.rb +15 -25
- data/lib/active_remote/validations.rb +1 -1
- data/lib/active_remote/version.rb +1 -1
- data/spec/lib/active_remote/association_spec.rb +23 -23
- data/spec/lib/active_remote/attributes_spec.rb +49 -3
- data/spec/lib/active_remote/base_spec.rb +1 -1
- data/spec/lib/active_remote/dirty_spec.rb +12 -12
- data/spec/lib/active_remote/dsl_spec.rb +4 -4
- data/spec/lib/active_remote/integration_spec.rb +2 -2
- data/spec/lib/active_remote/persistence_spec.rb +26 -33
- data/spec/lib/active_remote/primary_key_spec.rb +3 -3
- data/spec/lib/active_remote/query_attribute_spec.rb +0 -120
- data/spec/lib/active_remote/rpc_adapters/protobuf_adapter_spec.rb +1 -1
- data/spec/lib/active_remote/rpc_spec.rb +1 -1
- data/spec/lib/active_remote/scope_keys_spec.rb +7 -7
- data/spec/lib/active_remote/search_spec.rb +8 -8
- data/spec/lib/active_remote/serialization_spec.rb +4 -4
- data/spec/lib/active_remote/serializers/protobuf_spec.rb +23 -23
- data/spec/lib/active_remote/validations_spec.rb +17 -17
- data/spec/spec_helper.rb +9 -9
- data/spec/support/helpers.rb +6 -6
- data/spec/support/models.rb +8 -8
- data/spec/support/models/author.rb +1 -1
- data/spec/support/models/category.rb +1 -2
- data/spec/support/models/default_author.rb +1 -1
- data/spec/support/models/post.rb +4 -4
- data/spec/support/models/tag.rb +1 -1
- data/spec/support/models/typecasted_author.rb +4 -5
- data/spec/support/protobuf.rb +5 -5
- metadata +24 -26
- data/lib/active_remote/attribute_assignment.rb +0 -53
- data/lib/active_remote/type.rb +0 -36
- data/lib/active_remote/type/registry.rb +0 -45
- data/lib/active_remote/typecasting.rb +0 -51
- data/lib/active_remote/typecasting/big_decimal_typecaster.rb +0 -21
- data/lib/active_remote/typecasting/boolean.rb +0 -7
- data/lib/active_remote/typecasting/boolean_typecaster.rb +0 -18
- data/lib/active_remote/typecasting/date_time_typecaster.rb +0 -10
- data/lib/active_remote/typecasting/date_typecaster.rb +0 -10
- data/lib/active_remote/typecasting/float_typecaster.rb +0 -9
- data/lib/active_remote/typecasting/integer_typecaster.rb +0 -10
- data/lib/active_remote/typecasting/object_typecaster.rb +0 -9
- data/lib/active_remote/typecasting/string_typecaster.rb +0 -9
- data/spec/lib/active_remote/errors_spec.rb +0 -31
- data/spec/lib/active_remote/typecasting_spec.rb +0 -53
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_remote
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.0.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Hutchison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -16,7 +16,7 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '5.0'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '5.2'
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
29
|
+
version: '5.0'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '5.2'
|
@@ -36,14 +36,14 @@ dependencies:
|
|
36
36
|
requirements:
|
37
37
|
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
39
|
+
version: '5.0'
|
40
40
|
type: :runtime
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
46
|
+
version: '5.0'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: protobuf
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,6 +114,20 @@ dependencies:
|
|
114
114
|
- - ">="
|
115
115
|
- !ruby/object:Gem::Version
|
116
116
|
version: 3.1.0
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: mad_rubocop
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
117
131
|
- !ruby/object:Gem::Dependency
|
118
132
|
name: pry
|
119
133
|
requirement: !ruby/object:Gem::Requirement
|
@@ -183,6 +197,7 @@ extra_rdoc_files: []
|
|
183
197
|
files:
|
184
198
|
- ".gitignore"
|
185
199
|
- ".rspec"
|
200
|
+
- ".rubocop.yml"
|
186
201
|
- ".travis.yml"
|
187
202
|
- CHANGES.md
|
188
203
|
- Gemfile
|
@@ -194,7 +209,6 @@ files:
|
|
194
209
|
- bin/console
|
195
210
|
- lib/active_remote.rb
|
196
211
|
- lib/active_remote/association.rb
|
197
|
-
- lib/active_remote/attribute_assignment.rb
|
198
212
|
- lib/active_remote/attribute_definition.rb
|
199
213
|
- lib/active_remote/attributes.rb
|
200
214
|
- lib/active_remote/base.rb
|
@@ -213,18 +227,6 @@ files:
|
|
213
227
|
- lib/active_remote/search.rb
|
214
228
|
- lib/active_remote/serialization.rb
|
215
229
|
- lib/active_remote/serializers/protobuf.rb
|
216
|
-
- lib/active_remote/type.rb
|
217
|
-
- lib/active_remote/type/registry.rb
|
218
|
-
- lib/active_remote/typecasting.rb
|
219
|
-
- lib/active_remote/typecasting/big_decimal_typecaster.rb
|
220
|
-
- lib/active_remote/typecasting/boolean.rb
|
221
|
-
- lib/active_remote/typecasting/boolean_typecaster.rb
|
222
|
-
- lib/active_remote/typecasting/date_time_typecaster.rb
|
223
|
-
- lib/active_remote/typecasting/date_typecaster.rb
|
224
|
-
- lib/active_remote/typecasting/float_typecaster.rb
|
225
|
-
- lib/active_remote/typecasting/integer_typecaster.rb
|
226
|
-
- lib/active_remote/typecasting/object_typecaster.rb
|
227
|
-
- lib/active_remote/typecasting/string_typecaster.rb
|
228
230
|
- lib/active_remote/validations.rb
|
229
231
|
- lib/active_remote/version.rb
|
230
232
|
- spec/lib/active_remote/association_spec.rb
|
@@ -232,7 +234,6 @@ files:
|
|
232
234
|
- spec/lib/active_remote/base_spec.rb
|
233
235
|
- spec/lib/active_remote/dirty_spec.rb
|
234
236
|
- spec/lib/active_remote/dsl_spec.rb
|
235
|
-
- spec/lib/active_remote/errors_spec.rb
|
236
237
|
- spec/lib/active_remote/integration_spec.rb
|
237
238
|
- spec/lib/active_remote/persistence_spec.rb
|
238
239
|
- spec/lib/active_remote/primary_key_spec.rb
|
@@ -243,7 +244,6 @@ files:
|
|
243
244
|
- spec/lib/active_remote/search_spec.rb
|
244
245
|
- spec/lib/active_remote/serialization_spec.rb
|
245
246
|
- spec/lib/active_remote/serializers/protobuf_spec.rb
|
246
|
-
- spec/lib/active_remote/typecasting_spec.rb
|
247
247
|
- spec/lib/active_remote/validations_spec.rb
|
248
248
|
- spec/spec_helper.rb
|
249
249
|
- spec/support/definitions/author.proto
|
@@ -283,11 +283,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
283
283
|
version: '0'
|
284
284
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
285
285
|
requirements:
|
286
|
-
- - "
|
286
|
+
- - ">"
|
287
287
|
- !ruby/object:Gem::Version
|
288
|
-
version:
|
288
|
+
version: 1.3.1
|
289
289
|
requirements: []
|
290
|
-
rubygems_version: 3.0.
|
290
|
+
rubygems_version: 3.0.2
|
291
291
|
signing_key:
|
292
292
|
specification_version: 4
|
293
293
|
summary: Active Record for your platform
|
@@ -297,7 +297,6 @@ test_files:
|
|
297
297
|
- spec/lib/active_remote/base_spec.rb
|
298
298
|
- spec/lib/active_remote/dirty_spec.rb
|
299
299
|
- spec/lib/active_remote/dsl_spec.rb
|
300
|
-
- spec/lib/active_remote/errors_spec.rb
|
301
300
|
- spec/lib/active_remote/integration_spec.rb
|
302
301
|
- spec/lib/active_remote/persistence_spec.rb
|
303
302
|
- spec/lib/active_remote/primary_key_spec.rb
|
@@ -308,7 +307,6 @@ test_files:
|
|
308
307
|
- spec/lib/active_remote/search_spec.rb
|
309
308
|
- spec/lib/active_remote/serialization_spec.rb
|
310
309
|
- spec/lib/active_remote/serializers/protobuf_spec.rb
|
311
|
-
- spec/lib/active_remote/typecasting_spec.rb
|
312
310
|
- spec/lib/active_remote/validations_spec.rb
|
313
311
|
- spec/spec_helper.rb
|
314
312
|
- spec/support/definitions/author.proto
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require "active_support/core_ext/hash/keys"
|
2
|
-
|
3
|
-
# Added ActiveModel AttributeAssignment to support Rails 4.
|
4
|
-
# In Rails 5 this is built in to ActiveModel, but our behavior
|
5
|
-
# in ActiveRemote is different.
|
6
|
-
module ActiveRemote
|
7
|
-
module AttributeAssignment
|
8
|
-
include ::ActiveModel::ForbiddenAttributesProtection
|
9
|
-
|
10
|
-
# Allows you to set all the attributes by passing in a hash of attributes with
|
11
|
-
# keys matching the attribute names.
|
12
|
-
#
|
13
|
-
# If the passed hash responds to <tt>permitted?</tt> method and the return value
|
14
|
-
# of this method is +false+ an <tt>ActiveModel::ForbiddenAttributesError</tt>
|
15
|
-
# exception is raised.
|
16
|
-
#
|
17
|
-
# class Cat
|
18
|
-
# include ActiveModel::AttributeAssignment
|
19
|
-
# attr_accessor :name, :status
|
20
|
-
# end
|
21
|
-
#
|
22
|
-
# cat = Cat.new
|
23
|
-
# cat.assign_attributes(name: "Gorby", status: "yawning")
|
24
|
-
# cat.name # => 'Gorby'
|
25
|
-
# cat.status => 'yawning'
|
26
|
-
# cat.assign_attributes(status: "sleeping")
|
27
|
-
# cat.name # => 'Gorby'
|
28
|
-
# cat.status => 'sleeping'
|
29
|
-
def assign_attributes(new_attributes)
|
30
|
-
if !new_attributes.respond_to?(:stringify_keys)
|
31
|
-
raise ArgumentError, "When assigning attributes, you must pass a hash as an argument."
|
32
|
-
end
|
33
|
-
return if new_attributes.nil? || new_attributes.empty?
|
34
|
-
|
35
|
-
attributes = new_attributes.stringify_keys
|
36
|
-
_assign_attributes(sanitize_for_mass_assignment(attributes))
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
def _assign_attributes(attributes)
|
42
|
-
attributes.each do |name, value|
|
43
|
-
_assign_attribute(name, value)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
# ActiveRemote silently ignores unknown attributes, unlike ActiveModel
|
48
|
-
# Consider changing ActiveRemote to behave the same
|
49
|
-
def _assign_attribute(name, value)
|
50
|
-
public_send("#{name}=", value) if respond_to?("#{name}=")
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
data/lib/active_remote/type.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
# Based on the type registry from Rails 5.0
|
2
|
-
# https://github.com/rails/rails/blob/5-0-stable/activemodel/lib/active_model/type.rb
|
3
|
-
#
|
4
|
-
# TODO: Replace this with the Active Model type registry once Rails 4.2 support is dropped.
|
5
|
-
#
|
6
|
-
require "active_remote/type/registry"
|
7
|
-
require "active_remote/typecasting"
|
8
|
-
|
9
|
-
module ActiveRemote
|
10
|
-
module Type
|
11
|
-
@registry = Registry.new
|
12
|
-
|
13
|
-
class << self
|
14
|
-
attr_accessor :registry # :nodoc:
|
15
|
-
|
16
|
-
# Add a new type to the registry, allowing it to be gotten through ActiveRemote::Type#lookup
|
17
|
-
def register(type_name, klass)
|
18
|
-
registry.register(type_name, klass)
|
19
|
-
end
|
20
|
-
|
21
|
-
def lookup(type_name) # :nodoc:
|
22
|
-
registry.lookup(type_name)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
register(:boolean, Typecasting::BooleanTypecaster)
|
27
|
-
register(:date, Typecasting::DateTypecaster)
|
28
|
-
register(:datetime, Typecasting::DateTimeTypecaster)
|
29
|
-
register(:decimal, Typecasting::BigDecimalTypecaster)
|
30
|
-
register(:float, Typecasting::FloatTypecaster)
|
31
|
-
register(:integer, Typecasting::IntegerTypecaster)
|
32
|
-
register(:object, Typecasting::ObjectTypecaster)
|
33
|
-
register(:string, Typecasting::StringTypecaster)
|
34
|
-
register(:big_integer, Typecasting::IntegerTypecaster)
|
35
|
-
end
|
36
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
module ActiveRemote
|
2
|
-
module Type
|
3
|
-
class Registry
|
4
|
-
attr_reader :registrations
|
5
|
-
|
6
|
-
def initialize
|
7
|
-
@registrations = []
|
8
|
-
end
|
9
|
-
|
10
|
-
def register(type_name, typecaster)
|
11
|
-
registrations << registration_klass.new(type_name, typecaster)
|
12
|
-
end
|
13
|
-
|
14
|
-
def lookup(symbol)
|
15
|
-
registration = find_registration(symbol)
|
16
|
-
raise ArgumentError, "Unknown type #{symbol.inspect}" unless registration
|
17
|
-
|
18
|
-
registration.typecaster
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def registration_klass
|
24
|
-
Registration
|
25
|
-
end
|
26
|
-
|
27
|
-
def find_registration(symbol)
|
28
|
-
registrations.find { |r| r.matches?(symbol) }
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
class Registration
|
33
|
-
attr_reader :name, :typecaster
|
34
|
-
|
35
|
-
def initialize(name, typecaster)
|
36
|
-
@name = name
|
37
|
-
@typecaster = typecaster
|
38
|
-
end
|
39
|
-
|
40
|
-
def matches?(type_name)
|
41
|
-
type_name == name
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
require "active_support/core_ext/string/conversions"
|
2
|
-
|
3
|
-
require "active_remote/typecasting/big_decimal_typecaster"
|
4
|
-
require "active_remote/typecasting/boolean"
|
5
|
-
require "active_remote/typecasting/boolean_typecaster"
|
6
|
-
require "active_remote/typecasting/date_time_typecaster"
|
7
|
-
require "active_remote/typecasting/date_typecaster"
|
8
|
-
require "active_remote/typecasting/float_typecaster"
|
9
|
-
require "active_remote/typecasting/integer_typecaster"
|
10
|
-
require "active_remote/typecasting/object_typecaster"
|
11
|
-
require "active_remote/typecasting/string_typecaster"
|
12
|
-
|
13
|
-
module ActiveRemote
|
14
|
-
module Typecasting
|
15
|
-
extend ActiveSupport::Concern
|
16
|
-
|
17
|
-
TYPECASTER_MAP = {
|
18
|
-
BigDecimal => ::ActiveRemote::Typecasting::BigDecimalTypecaster,
|
19
|
-
Boolean => ::ActiveRemote::Typecasting::BooleanTypecaster,
|
20
|
-
Date => ::ActiveRemote::Typecasting::DateTypecaster,
|
21
|
-
DateTime => ::ActiveRemote::Typecasting::DateTimeTypecaster,
|
22
|
-
Float => ::ActiveRemote::Typecasting::FloatTypecaster,
|
23
|
-
Integer => ::ActiveRemote::Typecasting::IntegerTypecaster,
|
24
|
-
Object => ::ActiveRemote::Typecasting::ObjectTypecaster,
|
25
|
-
String => ::ActiveRemote::Typecasting::StringTypecaster
|
26
|
-
}.freeze
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
def attribute=(name, value)
|
31
|
-
return super if value.nil?
|
32
|
-
|
33
|
-
typecaster = self.class.attributes[name][:typecaster]
|
34
|
-
return super unless typecaster
|
35
|
-
|
36
|
-
super(name, typecaster.call(value))
|
37
|
-
end
|
38
|
-
|
39
|
-
module ClassMethods
|
40
|
-
def inspect
|
41
|
-
inspected_attributes = attribute_names.sort.map { |name| "#{name}: #{_attribute_type(name)}" }
|
42
|
-
attributes_list = "(#{inspected_attributes.join(", ")})" unless inspected_attributes.empty?
|
43
|
-
"#{name}#{attributes_list}"
|
44
|
-
end
|
45
|
-
|
46
|
-
def _attribute_type(attribute_name)
|
47
|
-
attributes[attribute_name][:type] || Object
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require "bigdecimal"
|
2
|
-
require "bigdecimal/util"
|
3
|
-
require "active_support/core_ext/big_decimal/conversions"
|
4
|
-
|
5
|
-
module ActiveRemote
|
6
|
-
module Typecasting
|
7
|
-
class BigDecimalTypecaster
|
8
|
-
def self.call(value)
|
9
|
-
if value.is_a?(BigDecimal)
|
10
|
-
value
|
11
|
-
elsif value.is_a?(Rational)
|
12
|
-
value.to_f.to_d
|
13
|
-
elsif value.respond_to?(:to_d)
|
14
|
-
value.to_d
|
15
|
-
else
|
16
|
-
BigDecimal.new(value.to_s)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module ActiveRemote
|
2
|
-
module Typecasting
|
3
|
-
class BooleanTypecaster
|
4
|
-
BOOL_VALUES = [true, false].freeze
|
5
|
-
FALSE_VALUES = ["n", "N", "no", "No", "NO", "false", "False", "FALSE", "off", "Off", "OFF", "f", "F"]
|
6
|
-
|
7
|
-
def self.call(value)
|
8
|
-
return value if BOOL_VALUES.include?(value)
|
9
|
-
|
10
|
-
case value
|
11
|
-
when *FALSE_VALUES then false
|
12
|
-
when Numeric, /^\-?[0-9]/ then !value.to_f.zero?
|
13
|
-
else value.present?
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|