active_remote 2.0.0.rc1 → 2.0.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2dc9d2dd1642d99e8a275ab2abf1b7f0690c6589
4
- data.tar.gz: 820834a78deb45faf1d0a3e2ec3a1b12610a8334
3
+ metadata.gz: 0d6e02a3ab83ed4e3c630985ea0b75c2aedad442
4
+ data.tar.gz: 187cdc2bb2963e4b9a90cb880736b744e5142397
5
5
  SHA512:
6
- metadata.gz: 820a8bb3f47437f9ed7b623317392f9ccf6b1116d1d8f26f3fd2972fc6074ae7a5f771743196425a07c4862c0db5fa164beeb1e3173f9d63708b0ac7d7ce0ed8
7
- data.tar.gz: e4b17125fc1a49634bb4985112c7f76edb9e5caac9df18eefb5471a81cf18248f9c96244c0f6ace2a27b0a4f74ff7df61f056ff1edce7698fc5198cfbec1df7d
6
+ metadata.gz: 7356615e05f98ab9380a6d8e41338d8bc583a73410b1ea38980e62348795f769fa65ce1c96d3957d7780b9f08139eb636fb5cfce6c55ccb44edfad026f6190a6
7
+ data.tar.gz: 4f0b79da09e06d4f054319fde42e77f83feff5579f438111ca1db8897413726fbb7f1b6a3f797d87503e6de710db21b4071fa548f95f27eb4cb3fdc40299ebb6
data/Gemfile CHANGED
@@ -3,5 +3,3 @@ source 'https://rubygems.org'
3
3
 
4
4
  # Specify your gem's dependencies in active_remote.gemspec
5
5
  gemspec
6
-
7
- gem 'protobuf', github: 'localshred/protobuf'
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
21
21
  #
22
22
  s.add_dependency "active_attr", ">= 0.8"
23
23
  s.add_dependency "activesupport", ">= 3.2"
24
- s.add_dependency "protobuf", ">= 3.0.0.alpha"
24
+ s.add_dependency "protobuf", ">= 3.0.0.rc2"
25
25
 
26
26
  ##
27
27
  # Development Dependencies
@@ -1,7 +1,13 @@
1
+ require 'active_remote/serializers/protobuf'
2
+
1
3
  module ActiveRemote
2
4
  module RPC
3
5
  extend ActiveSupport::Concern
4
6
 
7
+ included do
8
+ include Serializers::Protobuf
9
+ end
10
+
5
11
  module ClassMethods
6
12
 
7
13
  # Execute an RPC call to the remote service and return the raw response.
@@ -17,7 +23,9 @@ module ActiveRemote
17
23
  def request(rpc_method, request_args)
18
24
  return request_args unless request_args.is_a?(Hash)
19
25
 
20
- request_type(rpc_method).new(request_args)
26
+ message_class = request_type(rpc_method)
27
+ fields = fields_from_attributes(message_class, request_args)
28
+ message_class.new(fields)
21
29
  end
22
30
 
23
31
  # Return the class applicable to the request for the given rpc method.
@@ -0,0 +1,103 @@
1
+ module ActiveRemote
2
+ module Serializers
3
+ module Protobuf
4
+ extend ActiveSupport::Concern
5
+
6
+ module ClassMethods
7
+ def fields_from_attributes(message_class, attributes)
8
+ Fields.from_attributes(message_class, attributes)
9
+ end
10
+ end
11
+
12
+ def fields_from_attributes(message_class, attributes)
13
+ Fields.from_attributes(message_class, attributes)
14
+ end
15
+
16
+ class Fields
17
+ attr_reader :attributes, :message_class
18
+
19
+ ##
20
+ # Constructor!
21
+ #
22
+ def initialize(message_class, attributes = {})
23
+ @attributes = attributes
24
+ @message_class = message_class
25
+ end
26
+
27
+ ##
28
+ # Class methods
29
+ #
30
+ def self.from_attributes(message_class, attributes)
31
+ fields = self.new(message_class, attributes)
32
+ fields.from_attributes
33
+ end
34
+
35
+ ##
36
+ # Instance methods
37
+ #
38
+ def from_attributes
39
+ attributes.inject({}) do |hash, (key, value)|
40
+ field = message_class.get_field(key, true) # Check extension fields, too
41
+ value = Field.from_attribute(field, value) if field
42
+
43
+ hash[key] = value
44
+ hash
45
+ end
46
+ end
47
+ end
48
+
49
+ class Field
50
+ attr_reader :field, :value
51
+
52
+ ##
53
+ # Constructor!
54
+ #
55
+ def initialize(field, value)
56
+ @field = field
57
+ @value = value
58
+ end
59
+
60
+ ##
61
+ # Class methods
62
+ #
63
+ def self.from_attribute(field, value)
64
+ field = self.new(field, value)
65
+ field.from_attribute
66
+ end
67
+
68
+ ##
69
+ # Instance methods
70
+ #
71
+ def from_attribute
72
+ case
73
+ when field.repeated_message? then
74
+ repeated_message_value
75
+ when field.message? then
76
+ message_value
77
+ when field.repeated? then
78
+ repeated_value
79
+ else
80
+ value
81
+ end
82
+ end
83
+
84
+ private
85
+
86
+ def message_value(attributes = nil)
87
+ attributes ||= value
88
+ attributes.is_a?(Hash) ? Fields.from_attributes(field.type_class, attributes) : attributes
89
+ end
90
+
91
+ def repeated_message_value
92
+ repeated_value.map do |attributes|
93
+ message_value(attributes)
94
+ end
95
+ end
96
+
97
+ def repeated_value
98
+ value.is_a?(Array) ? value : [ value ]
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
@@ -1,3 +1,3 @@
1
1
  module ActiveRemote
2
- VERSION = "2.0.0.rc1"
2
+ VERSION = "2.0.0.rc2"
3
3
  end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveRemote::Serializers::Protobuf::Fields do
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!' } } } }
7
+
8
+ it "gets protobuf-ready fields from attributes" do
9
+ described_class.from_attributes(Generic::Remote::Posts, value).should eq ready_value
10
+ end
11
+ end
12
+ end
13
+
14
+ describe ActiveRemote::Serializers::Protobuf::Field do
15
+ describe ".from_attribute" do
16
+ context "when field is a repeated message" do
17
+ let(:field) { Generic::Remote::Posts.get_field(:records) }
18
+
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!' } } }
22
+
23
+ it "gets protobuf-ready fields from the value" do
24
+ described_class.from_attribute(field, value).should eq ready_value
25
+ end
26
+ end
27
+ end
28
+
29
+ context "when field is a message" do
30
+ let(:field) { Generic::Remote::Post.get_field(:category) }
31
+
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!' } } }
35
+
36
+ it "gets protobuf-ready fields from the value" do
37
+ described_class.from_attribute(field, value).should eq ready_value
38
+ end
39
+ end
40
+ end
41
+
42
+ context "when field is repeated" do
43
+ let(:field) { Generic::Remote::PostRequest.get_field(:name) }
44
+
45
+ context "and the value is not an array" do
46
+ let(:ready_value) { [ 'Cool Post' ] }
47
+ let(:value) { 'Cool Post' }
48
+
49
+ it "gets protobuf-ready fields from the value" do
50
+ described_class.from_attribute(field, value).should eq ready_value
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
data/spec/spec_helper.rb CHANGED
@@ -10,7 +10,10 @@ Bundler.require(:default, :development, :test)
10
10
 
11
11
  require 'protobuf/rspec'
12
12
  require 'support/helpers'
13
+
14
+ $LOAD_PATH << ::File.expand_path('../support/protobuf', __FILE__)
13
15
  require 'support/protobuf'
16
+ require 'support/models'
14
17
 
15
18
  RSpec.configure do |config|
16
19
  config.include Protobuf::RSpec::Helpers
@@ -1,8 +1,8 @@
1
1
  package generic.remote;
2
2
 
3
- import "support/protobuf/error.proto";
3
+ import "error.proto";
4
4
 
5
- message Author {
5
+ message Author {
6
6
  optional string guid = 1;
7
7
  optional string name = 2;
8
8
  repeated Error errors = 3;
@@ -1,6 +1,6 @@
1
1
  package generic.remote;
2
2
 
3
- import "support/protobuf/error.proto";
3
+ import "error.proto";
4
4
 
5
5
  message Category {
6
6
  optional string guid = 1;
@@ -1,7 +1,7 @@
1
1
  package generic.remote;
2
2
 
3
- import "support/protobuf/error.proto";
4
- import "support/protobuf/category.proto";
3
+ import "error.proto";
4
+ import "category.proto";
5
5
 
6
6
  message Post {
7
7
  optional string guid = 1;
@@ -1,8 +1,8 @@
1
1
  package generic.remote;
2
2
 
3
- import "support/protobuf/error.proto";
3
+ import "error.proto";
4
4
 
5
- message Tag {
5
+ message Tag {
6
6
  optional string guid = 1;
7
7
  optional string name = 2;
8
8
  repeated Error errors = 3;
@@ -1,5 +1,3 @@
1
- require 'support/models'
2
-
3
1
  ##
4
2
  # Reset all DSL variables so specs don't interfere with each other.
5
3
  #
@@ -8,7 +8,7 @@ require 'protobuf/rpc/service'
8
8
  ##
9
9
  # Imports
10
10
  #
11
- require 'support/protobuf/error.pb'
11
+ require 'error.pb'
12
12
 
13
13
  module Generic
14
14
  module Remote
@@ -4,41 +4,48 @@
4
4
  require 'protobuf/message'
5
5
  require 'protobuf/rpc/service'
6
6
 
7
+
7
8
  ##
8
9
  # Imports
9
10
  #
10
- require 'support/protobuf/error.pb'
11
+ require 'error.pb'
11
12
 
12
13
  module Generic
13
14
  module Remote
14
-
15
+
15
16
  ##
16
17
  # Message Classes
17
18
  #
18
19
  class Category < ::Protobuf::Message; end
19
20
  class Categories < ::Protobuf::Message; end
20
21
  class CategoryRequest < ::Protobuf::Message; end
21
-
22
+
23
+
22
24
  ##
23
25
  # Message Fields
24
26
  #
25
27
  class Category
26
- optional ::Protobuf::Field::StringField, :guid, 1
27
- optional ::Protobuf::Field::StringField, :name, 2
28
+ optional :string, :guid, 1
29
+ optional :string, :name, 2
28
30
  repeated ::Generic::Error, :errors, 3
31
+ optional :string, :user_guid, 4
32
+ optional :string, :author_guid, 5
33
+ optional :string, :chief_editor_guid, 6
34
+ optional :string, :editor_guid, 7
29
35
  end
30
-
36
+
31
37
  class Categories
32
38
  repeated ::Generic::Remote::Category, :records, 1
33
39
  end
34
-
40
+
35
41
  class CategoryRequest
36
- repeated ::Protobuf::Field::StringField, :guid, 1
37
- repeated ::Protobuf::Field::StringField, :name, 2
42
+ repeated :string, :guid, 1
43
+ repeated :string, :name, 2
38
44
  end
39
-
45
+
46
+
40
47
  ##
41
- # Services
48
+ # Service Classes
42
49
  #
43
50
  class CategoryService < ::Protobuf::Rpc::Service
44
51
  rpc :search, ::Generic::Remote::CategoryRequest, ::Generic::Remote::Categories
@@ -50,5 +57,8 @@ module Generic
50
57
  rpc :delete_all, ::Generic::Remote::Categories, ::Generic::Remote::Categories
51
58
  rpc :destroy_all, ::Generic::Remote::Categories, ::Generic::Remote::Categories
52
59
  end
60
+
53
61
  end
62
+
54
63
  end
64
+
@@ -4,18 +4,20 @@
4
4
  require 'protobuf/message'
5
5
 
6
6
  module Generic
7
-
7
+
8
8
  ##
9
9
  # Message Classes
10
10
  #
11
11
  class Error < ::Protobuf::Message; end
12
-
12
+
13
+
13
14
  ##
14
15
  # Message Fields
15
16
  #
16
17
  class Error
17
- optional ::Protobuf::Field::StringField, :field, 1
18
- optional ::Protobuf::Field::StringField, :message, 2
18
+ optional :string, :field, 1
19
+ optional :string, :message, 2
19
20
  end
20
-
21
+
21
22
  end
23
+
@@ -8,8 +8,8 @@ require 'protobuf/rpc/service'
8
8
  ##
9
9
  # Imports
10
10
  #
11
- require 'support/protobuf/error.pb'
12
- require 'support/protobuf/category.pb'
11
+ require 'error.pb'
12
+ require 'category.pb'
13
13
 
14
14
  module Generic
15
15
  module Remote
@@ -8,7 +8,7 @@ require 'protobuf/rpc/service'
8
8
  ##
9
9
  # Imports
10
10
  #
11
- require 'support/protobuf/error.pb'
11
+ require 'error.pb'
12
12
 
13
13
  module Generic
14
14
  module Remote
metadata CHANGED
@@ -1,153 +1,153 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_remote
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.rc1
4
+ version: 2.0.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Hutchison
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-19 00:00:00.000000000 Z
11
+ date: 2014-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_attr
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0.8'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.8'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '3.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: protobuf
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 3.0.0.alpha
47
+ version: 3.0.0.rc2
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 3.0.0.alpha
54
+ version: 3.0.0.rc2
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: better_receive
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rspec
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rspec-pride
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: pry-nav
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '>='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - '>='
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: protobuf-rspec
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - '>='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - '>='
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: simplecov
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - '>='
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - '>='
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  description: Active Remote provides Active Record-like object-relational mapping over
@@ -159,8 +159,8 @@ executables: []
159
159
  extensions: []
160
160
  extra_rdoc_files: []
161
161
  files:
162
- - .gitignore
163
- - .rspec
162
+ - ".gitignore"
163
+ - ".rspec"
164
164
  - Gemfile
165
165
  - LICENSE
166
166
  - README.md
@@ -187,6 +187,7 @@ files:
187
187
  - lib/active_remote/search.rb
188
188
  - lib/active_remote/serialization.rb
189
189
  - lib/active_remote/serializers/json.rb
190
+ - lib/active_remote/serializers/protobuf.rb
190
191
  - lib/active_remote/version.rb
191
192
  - spec/core_ext/date_time_spec.rb
192
193
  - spec/lib/active_remote/association_spec.rb
@@ -201,11 +202,12 @@ files:
201
202
  - spec/lib/active_remote/search_spec.rb
202
203
  - spec/lib/active_remote/serialization_spec.rb
203
204
  - spec/lib/active_remote/serializers/json_spec.rb
205
+ - spec/lib/active_remote/serializers/protobuf_spec.rb
204
206
  - spec/spec_helper.rb
205
207
  - spec/support/definitions/author.proto
208
+ - spec/support/definitions/category.proto
209
+ - spec/support/definitions/error.proto
206
210
  - spec/support/definitions/post.proto
207
- - spec/support/definitions/support/protobuf/category.proto
208
- - spec/support/definitions/support/protobuf/error.proto
209
211
  - spec/support/definitions/tag.proto
210
212
  - spec/support/helpers.rb
211
213
  - spec/support/models.rb
@@ -229,12 +231,12 @@ require_paths:
229
231
  - lib
230
232
  required_ruby_version: !ruby/object:Gem::Requirement
231
233
  requirements:
232
- - - '>='
234
+ - - ">="
233
235
  - !ruby/object:Gem::Version
234
236
  version: '0'
235
237
  required_rubygems_version: !ruby/object:Gem::Requirement
236
238
  requirements:
237
- - - '>'
239
+ - - ">"
238
240
  - !ruby/object:Gem::Version
239
241
  version: 1.3.1
240
242
  requirements: []
@@ -257,11 +259,12 @@ test_files:
257
259
  - spec/lib/active_remote/search_spec.rb
258
260
  - spec/lib/active_remote/serialization_spec.rb
259
261
  - spec/lib/active_remote/serializers/json_spec.rb
262
+ - spec/lib/active_remote/serializers/protobuf_spec.rb
260
263
  - spec/spec_helper.rb
261
264
  - spec/support/definitions/author.proto
265
+ - spec/support/definitions/category.proto
266
+ - spec/support/definitions/error.proto
262
267
  - spec/support/definitions/post.proto
263
- - spec/support/definitions/support/protobuf/category.proto
264
- - spec/support/definitions/support/protobuf/error.proto
265
268
  - spec/support/definitions/tag.proto
266
269
  - spec/support/helpers.rb
267
270
  - spec/support/models.rb