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
@@ -17,7 +17,7 @@ describe ActiveRemote::RPCAdapters::ProtobufAdapter do
17
17
 
18
18
  it "calls the custom endpoint" do
19
19
  expect(adapter.client).to receive(:register)
20
- adapter.execute(:create, { :name => "foo" })
20
+ adapter.execute(:create, :name => "foo")
21
21
  end
22
22
  end
23
23
  end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe ::ActiveRemote::RPC do
4
4
  subject { ::Tag.new }
@@ -1,16 +1,16 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe ActiveRemote::ScopeKeys do
4
4
  let(:key) { :user_guid }
5
- let(:_scope_keys) { [ 'user_guid' ] }
6
- let(:scope_keys) { [ 'guid' ] + _scope_keys }
5
+ let(:_scope_keys) { ["user_guid"] }
6
+ let(:scope_keys) { ["guid"] + _scope_keys }
7
7
  let(:tag) { Tag.new(tag_hash) }
8
- let(:tag_hash) { { :guid => 'TAG-123', :user_guid => 'USR-123', :name => 'teh tag' } }
8
+ let(:tag_hash) { { :guid => "TAG-123", :user_guid => "USR-123", :name => "teh tag" } }
9
9
 
10
10
  describe ".scope_key" do
11
11
  after { Tag._scope_keys = [] }
12
12
 
13
- it 'adds scope_key to _scope_keys' do
13
+ it "adds scope_key to _scope_keys" do
14
14
  Tag.scope_key(key)
15
15
  expect(Tag._scope_keys).to eq(_scope_keys)
16
16
  end
@@ -20,7 +20,7 @@ describe ActiveRemote::ScopeKeys do
20
20
  before { allow(Tag).to receive(:_scope_keys).and_return(_scope_keys) }
21
21
 
22
22
  it "combines primary key with _scope_keys" do
23
- expect(Tag.scope_keys).to eq(['guid'] + _scope_keys)
23
+ expect(Tag.scope_keys).to eq(["guid"] + _scope_keys)
24
24
  end
25
25
  end
26
26
 
@@ -31,7 +31,7 @@ describe ActiveRemote::ScopeKeys do
31
31
  end
32
32
 
33
33
  describe "#scope_key_hash" do
34
- let(:scope_key_hash) { { 'guid' => 'TAG-123', 'user_guid' => 'USR-123' } }
34
+ let(:scope_key_hash) { { "guid" => "TAG-123", "user_guid" => "USR-123" } }
35
35
 
36
36
  before { allow(tag).to receive(:scope_keys).and_return(scope_keys) }
37
37
 
@@ -1,14 +1,14 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe ActiveRemote::Search do
4
- let(:records) { [ Generic::Remote::Tag.new ] }
4
+ let(:records) { [Generic::Remote::Tag.new] }
5
5
  let(:response) { Generic::Remote::Tags.new(:records => records) }
6
6
  let(:rpc) { double(:rpc) }
7
7
 
8
8
  describe ".find" do
9
- let(:args) { Hash.new }
9
+ let(:args) { {} }
10
10
  let(:record) { double(:record) }
11
- let(:records) { [ record ] }
11
+ let(:records) { [record] }
12
12
 
13
13
  before { allow(Tag).to receive(:search).and_return(records) }
14
14
 
@@ -37,10 +37,10 @@ describe ActiveRemote::Search do
37
37
  end
38
38
 
39
39
  describe ".search" do
40
- let(:serialized_records) { [ Tag.new ] }
40
+ let(:serialized_records) { [Tag.new] }
41
41
 
42
42
  context "given args that respond to :to_hash" do
43
- let(:args) { Hash.new }
43
+ let(:args) { {} }
44
44
  let(:rpc) { ::ActiveRemote::RPCAdapters::ProtobufAdapter.new(::Tag.service_class, ::Tag.endpoints) }
45
45
 
46
46
  before { allow(rpc).to receive(:execute).and_return(response) }
@@ -66,8 +66,8 @@ describe ActiveRemote::Search do
66
66
  end
67
67
 
68
68
  describe "#reload" do
69
- let(:args) { attributes.slice('guid', 'user_guid') }
70
- let(:attributes) { HashWithIndifferentAccess.new(:guid => 'foo', :name => 'bar', :updated_at => nil, :user_guid => 'baz') }
69
+ let(:args) { attributes.slice("guid", "user_guid") }
70
+ let(:attributes) { HashWithIndifferentAccess.new(:guid => "foo", :name => "bar", :updated_at => nil, :user_guid => "baz") }
71
71
 
72
72
  subject { Tag.new(args) }
73
73
 
@@ -1,8 +1,8 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe ActiveRemote::Serialization do
4
4
  describe ".serialize_records" do
5
- let(:records) { [ { :foo => 'bar' } ] }
5
+ let(:records) { [{ :foo => "bar" }] }
6
6
 
7
7
  subject { Tag.new }
8
8
 
@@ -14,7 +14,7 @@ describe ActiveRemote::Serialization do
14
14
  end
15
15
 
16
16
  describe "#add_errors" do
17
- let(:error) { Generic::Error.new(:field => 'name', :message => 'Boom!') }
17
+ let(:error) { Generic::Error.new(:field => "name", :message => "Boom!") }
18
18
  let(:response) {
19
19
  tag = Generic::Remote::Tag.new
20
20
  tag.errors << error
@@ -26,7 +26,7 @@ describe ActiveRemote::Serialization do
26
26
  context "when the response has errors" do
27
27
  it "adds the errors to the active remote object" do
28
28
  subject.add_errors(response.errors)
29
- expect(subject.errors[:name]).to match_array(['Boom!'])
29
+ expect(subject.errors[:name]).to match_array(["Boom!"])
30
30
  end
31
31
  end
32
32
  end
@@ -1,9 +1,9 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe ActiveRemote::Serializers::Protobuf::Fields do
4
4
  describe ".from_attributes" do
5
- let(:ready_value) { { :records => [ { :name => 'Cool Post', :errors => [ { :message => 'Boom!' } ] } ] } }
6
- let(:value) { { :records => { :name => 'Cool Post', :errors => { :message => 'Boom!' } } } }
5
+ let(:ready_value) { { :records => [{ :name => "Cool Post", :errors => [{ :message => "Boom!" }] }] } }
6
+ let(:value) { { :records => { :name => "Cool Post", :errors => { :message => "Boom!" } } } }
7
7
 
8
8
  it "gets protobuf-ready fields from attributes" do
9
9
  expect(described_class.from_attributes(Generic::Remote::Posts, value)).to eq ready_value
@@ -17,8 +17,8 @@ describe ActiveRemote::Serializers::Protobuf::Field do
17
17
  let(:field) { Generic::Remote::Posts.get_field(:records) }
18
18
 
19
19
  context "and the value is not an array" do
20
- let(:ready_value) { [ { :name => 'Cool Post', :errors => [ { :message => 'Boom!' } ] } ] }
21
- let(:value) { { :name => 'Cool Post', :errors => { :message => 'Boom!' } } }
20
+ let(:ready_value) { [{ :name => "Cool Post", :errors => [{ :message => "Boom!" }] }] }
21
+ let(:value) { { :name => "Cool Post", :errors => { :message => "Boom!" } } }
22
22
 
23
23
  it "gets protobuf-ready fields from the value" do
24
24
  expect(described_class.from_attribute(field, value)).to eq ready_value
@@ -30,8 +30,8 @@ describe ActiveRemote::Serializers::Protobuf::Field do
30
30
  let(:field) { Generic::Remote::Post.get_field(:category) }
31
31
 
32
32
  context "and value is a hash" do
33
- let(:ready_value) { { :name => 'Film', :errors => [ { :message => 'Boom!' } ] } }
34
- let(:value) { { :name => 'Film', :errors => { :message => 'Boom!' } } }
33
+ let(:ready_value) { { :name => "Film", :errors => [{ :message => "Boom!" }] } }
34
+ let(:value) { { :name => "Film", :errors => { :message => "Boom!" } } }
35
35
 
36
36
  it "gets protobuf-ready fields from the value" do
37
37
  expect(described_class.from_attribute(field, value)).to eq ready_value
@@ -43,8 +43,8 @@ describe ActiveRemote::Serializers::Protobuf::Field do
43
43
  let(:field) { Generic::Remote::PostRequest.get_field(:name) }
44
44
 
45
45
  context "and the value is not an array" do
46
- let(:ready_value) { [ 'Cool Post' ] }
47
- let(:value) { 'Cool Post' }
46
+ let(:ready_value) { ["Cool Post"] }
47
+ let(:value) { "Cool Post" }
48
48
 
49
49
  it "gets protobuf-ready fields from the value" do
50
50
  expect(described_class.from_attribute(field, value)).to eq ready_value
@@ -61,28 +61,28 @@ describe ActiveRemote::Serializers::Protobuf::Field do
61
61
  # typecasting.
62
62
  #
63
63
  context "when typecasting fields" do
64
- let(:string_value) { double(:string, :to_s => '') }
64
+ let(:string_value) { double(:string, :to_s => "") }
65
65
 
66
66
  def typecasts(field, conversion)
67
67
  field = Serializer.get_field(field, true)
68
68
  expect(described_class.from_attribute(field, conversion.first[0])).to eq conversion.first[1]
69
69
  end
70
70
 
71
- it { typecasts(:bool_field, '0' => false) }
72
- it { typecasts(:bytes_field, string_value => '') }
71
+ it { typecasts(:bool_field, "0" => false) }
72
+ it { typecasts(:bytes_field, string_value => "") }
73
73
  it { typecasts(:double_field, 0 => 0.0) }
74
- it { typecasts(:fixed32_field, '0' => 0) }
75
- it { typecasts(:fixed64_field, '0' => 0) }
74
+ it { typecasts(:fixed32_field, "0" => 0) }
75
+ it { typecasts(:fixed64_field, "0" => 0) }
76
76
  it { typecasts(:float_field, 0 => 0.0) }
77
- it { typecasts(:int32_field, '0' => 0) }
78
- it { typecasts(:int64_field, '0' => 0) }
79
- it { typecasts(:sfixed32_field, '0' => 0) }
80
- it { typecasts(:sfixed64_field, '0' => 0) }
81
- it { typecasts(:sint32_field, '0' => 0) }
82
- it { typecasts(:sint64_field, '0' => 0) }
83
- it { typecasts(:string_field, string_value => '') }
84
- it { typecasts(:uint32_field, '0' => 0) }
85
- it { typecasts(:uint64_field, '0' => 0) }
77
+ it { typecasts(:int32_field, "0" => 0) }
78
+ it { typecasts(:int64_field, "0" => 0) }
79
+ it { typecasts(:sfixed32_field, "0" => 0) }
80
+ it { typecasts(:sfixed64_field, "0" => 0) }
81
+ it { typecasts(:sint32_field, "0" => 0) }
82
+ it { typecasts(:sint64_field, "0" => 0) }
83
+ it { typecasts(:string_field, string_value => "") }
84
+ it { typecasts(:uint32_field, "0" => 0) }
85
+ it { typecasts(:uint64_field, "0" => 0) }
86
86
  it { typecasts(:enum_field, 0 => 0) }
87
87
  end
88
88
  end
@@ -1,53 +1,53 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe ActiveRemote::Validations do
4
4
  let(:invalid_record) { ::Post.new }
5
- let(:valid_record) { ::Post.new(:name => 'test') }
5
+ let(:valid_record) { ::Post.new(:name => "test") }
6
6
 
7
7
  before { allow(valid_record).to receive(:create_or_update).and_return(true) }
8
8
  before { allow(invalid_record).to receive(:create_or_update).and_return(true) }
9
9
 
10
- describe 'save' do
11
- context 'valid record' do
12
- it 'returns true' do
10
+ describe "save" do
11
+ context "valid record" do
12
+ it "returns true" do
13
13
  result = valid_record.save
14
14
  expect(result).to be true
15
15
  end
16
16
  end
17
17
 
18
- context 'invalid record' do
19
- it 'returns false' do
18
+ context "invalid record" do
19
+ it "returns false" do
20
20
  result = invalid_record.save
21
21
  expect(result).to be false
22
22
  end
23
23
  end
24
24
  end
25
25
 
26
- describe 'save!' do
27
- context 'valid record' do
28
- it 'returns true' do
26
+ describe "save!" do
27
+ context "valid record" do
28
+ it "returns true" do
29
29
  result = valid_record.save!
30
30
  expect(result).to be true
31
31
  end
32
32
  end
33
33
 
34
- context 'invalid record' do
35
- it 'raises invalid record error' do
34
+ context "invalid record" do
35
+ it "raises invalid record error" do
36
36
  expect { invalid_record.save! }.to raise_error(ActiveRemote::RemoteRecordInvalid)
37
37
  end
38
38
  end
39
39
  end
40
40
 
41
- describe 'valid?' do
42
- context 'valid record' do
43
- it 'returns true' do
41
+ describe "valid?" do
42
+ context "valid record" do
43
+ it "returns true" do
44
44
  result = valid_record.valid?
45
45
  expect(result).to be true
46
46
  end
47
47
  end
48
48
 
49
- context 'invalid record' do
50
- it 'returns false' do
49
+ context "invalid record" do
50
+ it "returns false" do
51
51
  result = invalid_record.valid?
52
52
  expect(result).to be false
53
53
  end
data/spec/spec_helper.rb CHANGED
@@ -1,19 +1,19 @@
1
- require 'rubygems'
2
- require 'bundler'
1
+ require "rubygems"
2
+ require "bundler"
3
3
 
4
- require 'simplecov'
4
+ require "simplecov"
5
5
  SimpleCov.start do
6
- add_filter '/spec/'
6
+ add_filter "/spec/"
7
7
  end
8
8
 
9
9
  Bundler.require(:default, :development, :test)
10
10
 
11
- require 'protobuf/rspec'
12
- require 'support/helpers'
11
+ require "protobuf/rspec"
12
+ require "support/helpers"
13
13
 
14
- $LOAD_PATH << ::File.expand_path('../support/protobuf', __FILE__)
15
- require 'support/protobuf'
16
- require 'support/models'
14
+ $LOAD_PATH << ::File.expand_path("../support/protobuf", __FILE__)
15
+ require "support/protobuf"
16
+ require "support/models"
17
17
 
18
18
  RSpec.configure do |config|
19
19
  config.include Protobuf::RSpec::Helpers
@@ -11,25 +11,25 @@ def reset_dsl_variables(klass)
11
11
  end
12
12
 
13
13
  def reset_app_name(klass)
14
- klass.send(:instance_variable_set, :@app_name, nil)
14
+ klass.send(:instance_variable_set, :@app_name, nil)
15
15
  end
16
16
 
17
17
  def reset_auto_paging_size(klass)
18
- klass.send(:instance_variable_set, :@auto_paging_size, nil)
18
+ klass.send(:instance_variable_set, :@auto_paging_size, nil)
19
19
  end
20
20
 
21
21
  def reset_namespace(klass)
22
- klass.send(:instance_variable_set, :@namespace, nil)
22
+ klass.send(:instance_variable_set, :@namespace, nil)
23
23
  end
24
24
 
25
25
  def reset_publishable_attributes(klass)
26
- klass.send(:instance_variable_set, :@publishable_attributes, nil)
26
+ klass.send(:instance_variable_set, :@publishable_attributes, nil)
27
27
  end
28
28
 
29
29
  def reset_service_class(klass)
30
- klass.send(:instance_variable_set, :@service_class, nil)
30
+ klass.send(:instance_variable_set, :@service_class, nil)
31
31
  end
32
32
 
33
33
  def reset_service_name(klass)
34
- klass.send(:instance_variable_set, :@service_name, nil)
34
+ klass.send(:instance_variable_set, :@service_name, nil)
35
35
  end
@@ -1,8 +1,8 @@
1
- require 'support/models/message_with_options'
2
- require 'support/models/author'
3
- require 'support/models/default_author'
4
- require 'support/models/category'
5
- require 'support/models/no_attributes'
6
- require 'support/models/post'
7
- require 'support/models/tag'
8
- require 'support/models/typecasted_author'
1
+ require "support/models/message_with_options"
2
+ require "support/models/author"
3
+ require "support/models/default_author"
4
+ require "support/models/category"
5
+ require "support/models/no_attributes"
6
+ require "support/models/post"
7
+ require "support/models/tag"
8
+ require "support/models/typecasted_author"
@@ -1,4 +1,4 @@
1
- require 'support/protobuf/author.pb'
1
+ require "support/protobuf/author.pb"
2
2
 
3
3
  ##
4
4
  # Define a generic class that inherits from active remote base
@@ -1,4 +1,4 @@
1
- require 'support/protobuf/category.pb'
1
+ require "support/protobuf/category.pb"
2
2
 
3
3
  ##
4
4
  # Define a generic class that inherits from active remote base
@@ -16,5 +16,4 @@ class Category < ::ActiveRemote::Base
16
16
  has_one :senior_author, :class_name => "::Author"
17
17
  has_one :primary_editor, :class_name => "::Author", :foreign_key => :editor_guid
18
18
  has_one :chief_editor, :class_name => "::Author", :scope => :user_guid, :foreign_key => :chief_editor_guid
19
-
20
19
  end
@@ -1,4 +1,4 @@
1
- require 'support/protobuf/author.pb'
1
+ require "support/protobuf/author.pb"
2
2
 
3
3
  ##
4
4
  # Define a generic class that inherits from active remote base
@@ -1,4 +1,4 @@
1
- require 'support/protobuf/post.pb'
1
+ require "support/protobuf/post.pb"
2
2
 
3
3
  ##
4
4
  # Define a generic class that inherits from active remote base
@@ -13,9 +13,9 @@ class Post < ::ActiveRemote::Base
13
13
  attribute :bestseller_guid
14
14
 
15
15
  belongs_to :author
16
- belongs_to :coauthor, :class_name => '::Author'
17
- belongs_to :bestseller, :class_name => '::Author', :foreign_key => :bestseller_guid
18
- belongs_to :user, :class_name => '::Author', :scope => :user_guid
16
+ belongs_to :coauthor, :class_name => "::Author"
17
+ belongs_to :bestseller, :class_name => "::Author", :foreign_key => :bestseller_guid
18
+ belongs_to :user, :class_name => "::Author", :scope => :user_guid
19
19
 
20
20
  validates :name, :presence => true
21
21
  end
@@ -1,4 +1,4 @@
1
- require 'support/protobuf/tag.pb'
1
+ require "support/protobuf/tag.pb"
2
2
 
3
3
  ##
4
4
  # Define a generic class that inherits from active remote base
@@ -1,9 +1,8 @@
1
1
  class TypecastedAuthor < ::ActiveRemote::Base
2
- attribute :guid, :type => String
3
- attribute :name, :typecaster => StringTypecaster
2
+ attribute :guid, :string
3
+ attribute :name, :string
4
4
  attribute :age, :integer
5
- attribute :birthday, :type => DateTime
5
+ attribute :birthday, :datetime
6
6
  attribute :writes_fiction, :boolean
7
- attribute :net_sales, :typecaster => FloatTypecaster
8
- attribute :big_integer_field, :big_integer
7
+ attribute :net_sales, :float
9
8
  end
@@ -1,5 +1,5 @@
1
- require 'support/protobuf/author.pb'
2
- require 'support/protobuf/category.pb'
3
- require 'support/protobuf/post.pb'
4
- require 'support/protobuf/serializer.pb'
5
- require 'support/protobuf/tag.pb'
1
+ require "support/protobuf/author.pb"
2
+ require "support/protobuf/category.pb"
3
+ require "support/protobuf/post.pb"
4
+ require "support/protobuf/serializer.pb"
5
+ require "support/protobuf/tag.pb"