protobuf-activerecord 1.0.3 → 1.0.4
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.
- data/lib/protoable/fields.rb +20 -24
- data/lib/protoable/serialization.rb +11 -11
- data/lib/protobuf/activerecord/version.rb +2 -2
- data/spec/protoable/fields_spec.rb +15 -44
- data/spec/protoable/serialization_spec.rb +9 -25
- metadata +4 -4
data/lib/protoable/fields.rb
CHANGED
@@ -55,29 +55,26 @@ module Protoable
|
|
55
55
|
#
|
56
56
|
# Examples:
|
57
57
|
# convert_field :created_at, :int64
|
58
|
-
# convert_field :public_key, method(:extract_public_key_from_proto)
|
59
58
|
# convert_field :public_key, :extract_public_key_from_proto
|
60
59
|
# convert_field :status, lambda { |proto_field| ... }
|
61
|
-
# convert_field :symmetric_key, :base64
|
62
60
|
# convert_field :symmetric_key, :from => :base64, :to => :encoded_string
|
63
|
-
# convert_field :symmetric_key, :from => :base64, :to => :raw_string
|
64
61
|
#
|
65
|
-
def convert_field(field,
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
unless self.respond_to?(callable)
|
74
|
-
column = _protobuf_columns[field.to_sym]
|
75
|
-
callable = :"convert_#{callable}_to_#{column.try(:type)}"
|
62
|
+
def convert_field(field, transformer = nil, &blk)
|
63
|
+
transformer ||= blk
|
64
|
+
transformer = :"convert_#{transformer[:from]}_to_#{transformer[:to]}" if transformer.is_a?(Hash)
|
65
|
+
|
66
|
+
if transformer.is_a?(Symbol)
|
67
|
+
unless self.respond_to?(transformer, true)
|
68
|
+
column = _protobuf_columns[field.to_sym]
|
69
|
+
transformer = :"convert_#{transformer}_to_#{column.try(:type)}"
|
76
70
|
end
|
77
|
-
|
71
|
+
|
72
|
+
callable = lambda { |value| self.__send__(transformer, value) }
|
73
|
+
else
|
74
|
+
callable = transformer
|
78
75
|
end
|
79
76
|
|
80
|
-
|
77
|
+
unless callable.respond_to?(:call)
|
81
78
|
raise FieldConverterError, 'Field converters must be a callable or block!'
|
82
79
|
end
|
83
80
|
|
@@ -98,17 +95,16 @@ module Protoable
|
|
98
95
|
# transform_column :public_key, :extract_public_key_from_proto
|
99
96
|
# transform_column :status, lambda { |proto_field| ... }
|
100
97
|
#
|
101
|
-
def transform_column(field,
|
102
|
-
|
98
|
+
def transform_column(field, transformer = nil, &blk)
|
99
|
+
transformer ||= blk
|
103
100
|
|
104
|
-
if
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
callable = method(callable) if self.respond_to?(callable)
|
101
|
+
if transformer.is_a?(Symbol)
|
102
|
+
callable = lambda { |value| self.__send__(transformer, value) }
|
103
|
+
else
|
104
|
+
callable = transformer
|
109
105
|
end
|
110
106
|
|
111
|
-
|
107
|
+
unless callable.respond_to?(:call)
|
112
108
|
raise ColumnTransformerError, 'Protoable casting needs a callable or block!'
|
113
109
|
end
|
114
110
|
|
@@ -41,22 +41,22 @@ module Protoable
|
|
41
41
|
# convert_column :status, lambda { |proto_field| ... }
|
42
42
|
# convert_column :symmetric_key, :from => :base64, :to => :raw_string
|
43
43
|
#
|
44
|
-
def convert_column(field,
|
45
|
-
|
44
|
+
def convert_column(field, converter = nil, &blk)
|
45
|
+
converter ||= blk
|
46
|
+
converter = :"convert_#{converter[:from]}_to_#{converter[:to]}" if converter.is_a?(Hash)
|
46
47
|
|
47
|
-
if
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
if callable.is_a?(Symbol)
|
52
|
-
unless self.respond_to?(callable)
|
48
|
+
if converter.is_a?(Symbol)
|
49
|
+
unless self.respond_to?(converter, true)
|
53
50
|
column = _protobuf_columns[field.to_sym]
|
54
|
-
|
51
|
+
converter = :"convert_#{converter}_to_#{column.try(:type)}"
|
55
52
|
end
|
56
|
-
|
53
|
+
|
54
|
+
callable = lambda { |value| __send__(converter, value) }
|
55
|
+
else
|
56
|
+
callable = converter
|
57
57
|
end
|
58
58
|
|
59
|
-
|
59
|
+
unless callable.respond_to?(:call)
|
60
60
|
raise ColumnConverterError, 'Column converters must be a callable or block!'
|
61
61
|
end
|
62
62
|
|
@@ -30,46 +30,30 @@ describe Protoable::Fields do
|
|
30
30
|
|
31
31
|
describe ".convert_field" do
|
32
32
|
context "when the given converter is a hash" do
|
33
|
-
let(:method) { User.
|
33
|
+
let(:method) { lambda { User.__send__(:convert_base64_to_string, value) } }
|
34
34
|
|
35
35
|
before { User.convert_field :public_key, :from => :base64, :to => :string }
|
36
36
|
|
37
37
|
it "determines the method using the hash's :to and :from keys" do
|
38
|
-
User.
|
38
|
+
User.should_receive(:convert_base64_to_string)
|
39
|
+
User._protobuf_field_converters[:public_key].call(1)
|
39
40
|
end
|
40
41
|
end
|
41
42
|
|
42
43
|
context "when the given converter is a symbol" do
|
43
|
-
|
44
|
-
let(:callable) { User.method(:convert_base64_to_string) }
|
44
|
+
let(:callable) { lambda { User.__send__(:convert_email_to_lowercase, value) } }
|
45
45
|
|
46
|
-
|
46
|
+
before { User.convert_field :email, :convert_email_to_lowercase }
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
|
-
context "when the converter is a defined method" do
|
54
|
-
let(:callable) { User.method(:convert_email_to_lowercase) }
|
55
|
-
|
56
|
-
before { User.convert_field :email, :convert_email_to_lowercase }
|
57
|
-
|
58
|
-
it "creates a callable method object from the converter" do
|
59
|
-
User._protobuf_field_converters[:email].should eq callable
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
context "when the given converter is nil" do
|
65
|
-
it "raises an exception" do
|
66
|
-
expect { User.convert_field :email, nil }.to raise_exception(Protoable::FieldConverterError)
|
48
|
+
it "creates a callable method object from the converter" do
|
49
|
+
User.should_receive(:convert_email_to_lowercase)
|
50
|
+
User._protobuf_field_converters[:email].call(1)
|
67
51
|
end
|
68
52
|
end
|
69
53
|
|
70
54
|
context "when the given converter is not callable" do
|
71
55
|
it "raises an exception" do
|
72
|
-
expect { User.convert_field :email,
|
56
|
+
expect { User.convert_field :email, nil }.to raise_exception(Protoable::FieldConverterError)
|
73
57
|
end
|
74
58
|
end
|
75
59
|
|
@@ -86,32 +70,19 @@ describe Protoable::Fields do
|
|
86
70
|
|
87
71
|
describe ".transform_column" do
|
88
72
|
context "when the given converter is a symbol" do
|
89
|
-
|
90
|
-
it "raises an exception" do
|
91
|
-
expect { User.transform_column :name, :foo }.to raise_exception(Protoable::ColumnTransformerError)
|
92
|
-
end
|
93
|
-
end
|
73
|
+
let(:callable) { lambda { |value| User.__send__(:extract_first_name) } }
|
94
74
|
|
95
|
-
|
96
|
-
let(:callable) { User.method(:extract_first_name) }
|
75
|
+
before { User.transform_column :first_name, :extract_first_name }
|
97
76
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
User._protobuf_column_transformers[:first_name].should eq callable
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
context "when the given converter is nil" do
|
107
|
-
it "raises an exception" do
|
108
|
-
expect { User.transform_column :name, nil }.to raise_exception(Protoable::ColumnTransformerError)
|
77
|
+
it "creates a callable method object from the converter" do
|
78
|
+
User.should_receive(:extract_first_name)
|
79
|
+
User._protobuf_column_transformers[:first_name].call(1)
|
109
80
|
end
|
110
81
|
end
|
111
82
|
|
112
83
|
context "when the given converter is not callable" do
|
113
84
|
it "raises an exception" do
|
114
|
-
expect { User.transform_column :name,
|
85
|
+
expect { User.transform_column :name, nil }.to raise_exception(Protoable::ColumnTransformerError)
|
115
86
|
end
|
116
87
|
end
|
117
88
|
|
@@ -5,46 +5,30 @@ describe Protoable::Serialization do
|
|
5
5
|
|
6
6
|
describe ".convert_column" do
|
7
7
|
context "when the given converter is a hash" do
|
8
|
-
let(:method) { User.
|
8
|
+
let(:method) { lambda { |value| User.__send__(:convert_base64_to_string, value) } }
|
9
9
|
|
10
10
|
before { User.convert_column :public_key, :from => :base64, :to => :string }
|
11
11
|
|
12
12
|
it "determines the method using the hash's :to and :from keys" do
|
13
|
-
User.
|
13
|
+
User.should_receive(:convert_base64_to_string)
|
14
|
+
User._protobuf_column_converters[:public_key].call(1)
|
14
15
|
end
|
15
16
|
end
|
16
17
|
|
17
18
|
context "when the given converter is a symbol" do
|
18
|
-
|
19
|
-
let(:callable) { User.method(:convert_base64_to_string) }
|
19
|
+
let(:callable) { lambda { |value| User.__send__(:convert_email_to_lowercase, value) } }
|
20
20
|
|
21
|
-
|
21
|
+
before { User.convert_column :email, :convert_email_to_lowercase }
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
context "when the converter is a defined method" do
|
29
|
-
let(:callable) { User.method(:convert_email_to_lowercase) }
|
30
|
-
|
31
|
-
before { User.convert_column :email, :convert_email_to_lowercase }
|
32
|
-
|
33
|
-
it "creates a callable method object from the converter" do
|
34
|
-
User._protobuf_column_converters[:email].should eq callable
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
context "when the given converter is nil" do
|
40
|
-
it "raises an exception" do
|
41
|
-
expect { User.convert_column :email, nil }.to raise_exception(Protoable::ColumnConverterError)
|
23
|
+
it "creates a callable method object from the converter" do
|
24
|
+
User.should_receive(:convert_email_to_lowercase)
|
25
|
+
User._protobuf_column_converters[:email].call(1)
|
42
26
|
end
|
43
27
|
end
|
44
28
|
|
45
29
|
context "when the given converter is not callable" do
|
46
30
|
it "raises an exception" do
|
47
|
-
expect { User.convert_column :email,
|
31
|
+
expect { User.convert_column :email, nil }.to raise_exception(Protoable::ColumnConverterError)
|
48
32
|
end
|
49
33
|
end
|
50
34
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: protobuf-activerecord
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -222,7 +222,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
222
222
|
version: '0'
|
223
223
|
segments:
|
224
224
|
- 0
|
225
|
-
hash:
|
225
|
+
hash: 3415879493130708479
|
226
226
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
227
227
|
none: false
|
228
228
|
requirements:
|
@@ -231,7 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
231
231
|
version: '0'
|
232
232
|
segments:
|
233
233
|
- 0
|
234
|
-
hash:
|
234
|
+
hash: 3415879493130708479
|
235
235
|
requirements: []
|
236
236
|
rubyforge_project:
|
237
237
|
rubygems_version: 1.8.24
|