protobuf-activerecord 3.0.0.pre → 3.0.0.rc2
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.
- checksums.yaml +4 -4
- data/lib/protobuf-activerecord.rb +0 -10
- data/lib/protobuf/active_record/errors.rb +19 -0
- data/lib/protobuf/active_record/railtie.rb +5 -1
- data/lib/protobuf/active_record/scope.rb +1 -1
- data/lib/protobuf/active_record/serialization.rb +39 -13
- data/lib/protobuf/active_record/transformation.rb +1 -1
- data/lib/protobuf/active_record/version.rb +1 -1
- data/protobuf-activerecord.gemspec +1 -1
- data/spec/protobuf/active_record/serialization_spec.rb +20 -5
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f05a18edbd1975b9bfa100ca10a9cba378f9bb0c
|
4
|
+
data.tar.gz: 8b5e67786002299711c1166c4138df5b7361f3fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 020fe794814c24474431013da37691656fdfcf9d6de94daf40fd060c4c7fbdad53678b22dc1d79d13e21eab997cb8e831129879ad0475f70e910de6d8042ad53
|
7
|
+
data.tar.gz: 5ff23bd27c06791f05426c8470812bd6f0c7521616cdcde5ba6cff47208658a97f3d38caf32f8cfda6f862e5cd62cf37eab63500688f3de012fe7ca158706f29
|
@@ -9,16 +9,6 @@ require 'protobuf/active_record/version'
|
|
9
9
|
|
10
10
|
module Protobuf
|
11
11
|
module ActiveRecord
|
12
|
-
module LoadHooks
|
13
|
-
def inherited(klass)
|
14
|
-
super
|
15
|
-
|
16
|
-
klass.class_eval do
|
17
|
-
include Protobuf::ActiveRecord::Model
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
12
|
def self.config
|
23
13
|
@config ||= Protobuf::ActiveRecord::Config.new
|
24
14
|
end
|
@@ -9,11 +9,30 @@ module Protobuf
|
|
9
9
|
# Raised by `attribute_from_proto` when the transformer method
|
10
10
|
# given is not callable.
|
11
11
|
class AttributeTransformerError < ProtobufActiveRecordError
|
12
|
+
def message
|
13
|
+
"Attribute transformers must be called with a callable or block!"
|
14
|
+
end
|
12
15
|
end
|
13
16
|
|
14
17
|
# Raised by `field_from_record` when the convert method
|
15
18
|
# given not callable.
|
16
19
|
class FieldTransformerError < ProtobufActiveRecordError
|
20
|
+
def message
|
21
|
+
"Field transformers must be called with a callable or block!"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Raised by `to_proto` when no protobuf message is defined.
|
26
|
+
class MessageNotDefined < ProtobufActiveRecordError
|
27
|
+
attr_reader :class_name
|
28
|
+
|
29
|
+
def initialize(klass)
|
30
|
+
@class_name = klass.name
|
31
|
+
end
|
32
|
+
|
33
|
+
def message
|
34
|
+
"#{class_name} does not define a protobuf message"
|
35
|
+
end
|
17
36
|
end
|
18
37
|
|
19
38
|
# Raised by `field_scope` when given scope is not defined.
|
@@ -4,7 +4,11 @@ module Protobuf
|
|
4
4
|
config.protobuf_active_record = Protobuf::ActiveRecord.config
|
5
5
|
|
6
6
|
ActiveSupport.on_load(:active_record) do
|
7
|
-
|
7
|
+
if Protobuf::ActiveRecord.config.autoload
|
8
|
+
on_inherit do
|
9
|
+
include Protobuf::ActiveRecord::Model
|
10
|
+
end
|
11
|
+
end
|
8
12
|
end
|
9
13
|
end
|
10
14
|
end
|
@@ -96,7 +96,7 @@ module Protobuf
|
|
96
96
|
next unless proto.respond_to_and_has_and_present?(field)
|
97
97
|
|
98
98
|
unless self.respond_to?(scope_name)
|
99
|
-
raise
|
99
|
+
raise SearchScopeError, "Undefined scope :#{scope_name}."
|
100
100
|
end
|
101
101
|
|
102
102
|
search_values = parse_search_values(proto, field)
|
@@ -9,19 +9,16 @@ module Protobuf
|
|
9
9
|
included do
|
10
10
|
include ::Heredity
|
11
11
|
|
12
|
-
class << self
|
13
|
-
attr_accessor :_protobuf_field_transformers, :_protobuf_field_options
|
14
|
-
end
|
15
|
-
|
16
|
-
@_protobuf_field_transformers = {}
|
17
|
-
@_protobuf_field_options = {}
|
18
|
-
|
19
12
|
inheritable_attributes :_protobuf_field_transformers,
|
20
13
|
:_protobuf_field_options,
|
21
14
|
:protobuf_message
|
22
15
|
|
16
|
+
@_protobuf_field_transformers = {}
|
17
|
+
@_protobuf_field_options = {}
|
18
|
+
|
23
19
|
private :_protobuf_convert_attributes_to_fields
|
24
20
|
private :_protobuf_field_transformers
|
21
|
+
private :_protobuf_message
|
25
22
|
end
|
26
23
|
|
27
24
|
module ClassMethods
|
@@ -72,12 +69,33 @@ module Protobuf
|
|
72
69
|
end
|
73
70
|
|
74
71
|
unless callable.respond_to?(:call)
|
75
|
-
raise FieldTransformerError
|
72
|
+
raise FieldTransformerError
|
76
73
|
end
|
77
74
|
|
78
75
|
_protobuf_field_transformers[field.to_sym] = callable
|
79
76
|
end
|
80
77
|
|
78
|
+
# Define the protobuf fields that will be automatically serialized (by default,
|
79
|
+
# all fields will be serialized). Accepts any number of field names and is
|
80
|
+
# equivalent to passing the :only option to `protobuf_message`.
|
81
|
+
#
|
82
|
+
# If :except is specified, all fields except the specified fields will be serialized.
|
83
|
+
#
|
84
|
+
# By default, deprecated fields will be serialized. To exclude deprecated
|
85
|
+
# fields, pass :deprecated => false in the options hash.
|
86
|
+
#
|
87
|
+
# Examples:
|
88
|
+
# protobuf_fields :guid, :name
|
89
|
+
# protobuf_fields :except => :email_domain
|
90
|
+
# protobuf_fields :except => :email_domain, :deprecated => false
|
91
|
+
#
|
92
|
+
def protobuf_fields(*fields)
|
93
|
+
options = fields.extract_options!
|
94
|
+
options[:only] = fields
|
95
|
+
|
96
|
+
self._protobuf_field_options = options
|
97
|
+
end
|
98
|
+
|
81
99
|
# Define the protobuf message class that should be used to serialize the
|
82
100
|
# object to protobuf. Accepts a string or symbol and an options hash.
|
83
101
|
#
|
@@ -104,12 +122,7 @@ module Protobuf
|
|
104
122
|
def protobuf_message(message = nil, options = {})
|
105
123
|
unless message.nil?
|
106
124
|
@protobuf_message = message.to_s.classify.constantize
|
107
|
-
|
108
125
|
self._protobuf_field_options = options
|
109
|
-
|
110
|
-
define_method(:to_proto) do |options = {}|
|
111
|
-
self.class.protobuf_message.new(self.fields_from_record(options))
|
112
|
-
end
|
113
126
|
end
|
114
127
|
|
115
128
|
@protobuf_message
|
@@ -189,6 +202,19 @@ module Protobuf
|
|
189
202
|
def _protobuf_field_transformers
|
190
203
|
self.class._protobuf_field_transformers
|
191
204
|
end
|
205
|
+
|
206
|
+
# :nodoc:
|
207
|
+
def _protobuf_message
|
208
|
+
self.class.protobuf_message
|
209
|
+
end
|
210
|
+
|
211
|
+
# :nodoc:
|
212
|
+
def to_proto(options = {})
|
213
|
+
raise MessageNotDefined.new(self.class) if _protobuf_message.nil?
|
214
|
+
|
215
|
+
fields = self.fields_from_record(options)
|
216
|
+
_protobuf_message.new(fields)
|
217
|
+
end
|
192
218
|
end
|
193
219
|
end
|
194
220
|
end
|
@@ -100,7 +100,7 @@ module Protobuf
|
|
100
100
|
end
|
101
101
|
|
102
102
|
unless callable.respond_to?(:call)
|
103
|
-
raise AttributeTransformerError
|
103
|
+
raise AttributeTransformerError
|
104
104
|
end
|
105
105
|
|
106
106
|
_protobuf_attribute_transformers[attribute.to_sym] = callable
|
@@ -22,7 +22,7 @@ Gem::Specification.new do |gem|
|
|
22
22
|
#
|
23
23
|
gem.add_dependency "activerecord", ">= 3.2.0"
|
24
24
|
gem.add_dependency "activesupport", ">= 3.2.0"
|
25
|
-
gem.add_dependency "heredity"
|
25
|
+
gem.add_dependency "heredity", ">= 0.1.1"
|
26
26
|
gem.add_dependency "protobuf", ">= 2.2.0"
|
27
27
|
|
28
28
|
##
|
@@ -1,5 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
+
# Used to test calling #to_proto when no protobuf message is configured.
|
4
|
+
class UnconfiguredUser
|
5
|
+
include Protobuf::ActiveRecord::Model
|
6
|
+
end
|
7
|
+
|
3
8
|
describe Protobuf::ActiveRecord::Serialization do
|
4
9
|
let(:protobuf_message) { UserMessage }
|
5
10
|
|
@@ -233,13 +238,23 @@ describe Protobuf::ActiveRecord::Serialization do
|
|
233
238
|
end
|
234
239
|
|
235
240
|
describe "#to_proto" do
|
236
|
-
|
237
|
-
|
241
|
+
context "when a protobuf message is configured" do
|
242
|
+
let(:proto) { protobuf_message.new(proto_hash) }
|
243
|
+
let(:proto_hash) { { :name => "foo" } }
|
238
244
|
|
239
|
-
|
245
|
+
before { user.stub(:fields_from_record).and_return(proto_hash) }
|
240
246
|
|
241
|
-
|
242
|
-
|
247
|
+
it "intializes a new protobuf message with attributes from #to_proto_hash" do
|
248
|
+
user.to_proto.should eq proto
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
context "when a protobuf message is not configured" do
|
253
|
+
let(:user) { UnconfiguredUser.new }
|
254
|
+
|
255
|
+
it "raises an exception" do
|
256
|
+
expect { user.to_proto }.to raise_exception(Protobuf::ActiveRecord::MessageNotDefined)
|
257
|
+
end
|
243
258
|
end
|
244
259
|
end
|
245
260
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: protobuf-activerecord
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0.
|
4
|
+
version: 3.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: 2013-
|
11
|
+
date: 2013-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 0.1.1
|
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:
|
54
|
+
version: 0.1.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: protobuf
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|