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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +28 -0
  3. data/CHANGES.md +13 -0
  4. data/Gemfile +1 -1
  5. data/Rakefile +7 -3
  6. data/active_remote.gemspec +8 -6
  7. data/lib/active_remote.rb +9 -8
  8. data/lib/active_remote/association.rb +12 -14
  9. data/lib/active_remote/attribute_definition.rb +14 -12
  10. data/lib/active_remote/attributes.rb +6 -6
  11. data/lib/active_remote/base.rb +20 -27
  12. data/lib/active_remote/config.rb +1 -1
  13. data/lib/active_remote/dirty.rb +3 -3
  14. data/lib/active_remote/dsl.rb +3 -4
  15. data/lib/active_remote/errors.rb +1 -11
  16. data/lib/active_remote/persistence.rb +11 -12
  17. data/lib/active_remote/primary_key.rb +0 -1
  18. data/lib/active_remote/query_attributes.rb +13 -13
  19. data/lib/active_remote/rpc.rb +8 -14
  20. data/lib/active_remote/rpc_adapters/protobuf_adapter.rb +18 -17
  21. data/lib/active_remote/scope_keys.rb +1 -2
  22. data/lib/active_remote/search.rb +8 -6
  23. data/lib/active_remote/serializers/protobuf.rb +15 -25
  24. data/lib/active_remote/validations.rb +1 -1
  25. data/lib/active_remote/version.rb +1 -1
  26. data/spec/lib/active_remote/association_spec.rb +23 -23
  27. data/spec/lib/active_remote/attributes_spec.rb +49 -3
  28. data/spec/lib/active_remote/base_spec.rb +1 -1
  29. data/spec/lib/active_remote/dirty_spec.rb +12 -12
  30. data/spec/lib/active_remote/dsl_spec.rb +4 -4
  31. data/spec/lib/active_remote/integration_spec.rb +2 -2
  32. data/spec/lib/active_remote/persistence_spec.rb +26 -33
  33. data/spec/lib/active_remote/primary_key_spec.rb +3 -3
  34. data/spec/lib/active_remote/query_attribute_spec.rb +0 -120
  35. data/spec/lib/active_remote/rpc_adapters/protobuf_adapter_spec.rb +1 -1
  36. data/spec/lib/active_remote/rpc_spec.rb +1 -1
  37. data/spec/lib/active_remote/scope_keys_spec.rb +7 -7
  38. data/spec/lib/active_remote/search_spec.rb +8 -8
  39. data/spec/lib/active_remote/serialization_spec.rb +4 -4
  40. data/spec/lib/active_remote/serializers/protobuf_spec.rb +23 -23
  41. data/spec/lib/active_remote/validations_spec.rb +17 -17
  42. data/spec/spec_helper.rb +9 -9
  43. data/spec/support/helpers.rb +6 -6
  44. data/spec/support/models.rb +8 -8
  45. data/spec/support/models/author.rb +1 -1
  46. data/spec/support/models/category.rb +1 -2
  47. data/spec/support/models/default_author.rb +1 -1
  48. data/spec/support/models/post.rb +4 -4
  49. data/spec/support/models/tag.rb +1 -1
  50. data/spec/support/models/typecasted_author.rb +4 -5
  51. data/spec/support/protobuf.rb +5 -5
  52. metadata +24 -26
  53. data/lib/active_remote/attribute_assignment.rb +0 -53
  54. data/lib/active_remote/type.rb +0 -36
  55. data/lib/active_remote/type/registry.rb +0 -45
  56. data/lib/active_remote/typecasting.rb +0 -51
  57. data/lib/active_remote/typecasting/big_decimal_typecaster.rb +0 -21
  58. data/lib/active_remote/typecasting/boolean.rb +0 -7
  59. data/lib/active_remote/typecasting/boolean_typecaster.rb +0 -18
  60. data/lib/active_remote/typecasting/date_time_typecaster.rb +0 -10
  61. data/lib/active_remote/typecasting/date_typecaster.rb +0 -10
  62. data/lib/active_remote/typecasting/float_typecaster.rb +0 -9
  63. data/lib/active_remote/typecasting/integer_typecaster.rb +0 -10
  64. data/lib/active_remote/typecasting/object_typecaster.rb +0 -9
  65. data/lib/active_remote/typecasting/string_typecaster.rb +0 -9
  66. data/spec/lib/active_remote/errors_spec.rb +0 -31
  67. 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: 3.3.3
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: 2020-01-10 00:00:00.000000000 Z
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: '4.0'
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: '4.0'
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: '4.0'
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: '4.0'
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: '0'
288
+ version: 1.3.1
289
289
  requirements: []
290
- rubygems_version: 3.0.6
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
@@ -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,7 +0,0 @@
1
- module ActiveRemote
2
- module Typecasting
3
- # For use in :type dsl option
4
- class Boolean
5
- end
6
- end
7
- 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
@@ -1,10 +0,0 @@
1
- module ActiveRemote
2
- module Typecasting
3
- class DateTimeTypecaster
4
- def self.call(value)
5
- value.to_datetime if value.respond_to?(:to_datetime)
6
- rescue NoMethodError, ArgumentError
7
- end
8
- end
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- module ActiveRemote
2
- module Typecasting
3
- class DateTypecaster
4
- def self.call(value)
5
- value.to_date if value.respond_to?(:to_date)
6
- rescue NoMethodError, ArgumentError
7
- end
8
- end
9
- end
10
- end
@@ -1,9 +0,0 @@
1
- module ActiveRemote
2
- module Typecasting
3
- class FloatTypecaster
4
- def self.call(value)
5
- value.to_f if value.respond_to?(:to_f)
6
- end
7
- end
8
- end
9
- end
@@ -1,10 +0,0 @@
1
- module ActiveRemote
2
- module Typecasting
3
- class IntegerTypecaster
4
- def self.call(value)
5
- value.to_i if value.respond_to?(:to_i)
6
- rescue FloatDomainError
7
- end
8
- end
9
- end
10
- end
@@ -1,9 +0,0 @@
1
- module ActiveRemote
2
- module Typecasting
3
- class ObjectTypecaster
4
- def self.call(value)
5
- value
6
- end
7
- end
8
- end
9
- end