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.
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