active_remote 3.3.3 → 5.0.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- 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
|