ar_protobuf_store 0.2.3 → 1.0.0

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: 55b67ef49a41ab742a3297873aca775dd9924c09
4
- data.tar.gz: 9c12f9608f7cf76ad0974f5411f835667f01923f
3
+ metadata.gz: 98e9759f6a95859a2855c87b78b2d64e07f5ad51
4
+ data.tar.gz: dd06b77140489773f24e6f1b38aa1e8213fdcc7c
5
5
  SHA512:
6
- metadata.gz: a5d54888716c80b4a92fa1fb8f1c2e06c9fa2a18c0ccd3c9372410fba150fa4da0cacaae7ea3954548e6dd7fac25cdddda317ae26e948b083db32cdaac022bcb
7
- data.tar.gz: c912925d794e7e9f2901b22e22554c1a8ee3c192a1c6129226d65173e88ebad5e36083d1d9cf73bf89a57c5cc7bdab14621f00aeed7cc8c36e55ad120c1c53f8
6
+ metadata.gz: 07c55b3e1e88d423f33efd5426dd0fafdfe1eb742fa51714d1f2baef0ef9226ad0e3cbd49b5f28980700bdce25f6a4d36e13c471f3e96202419fbdf585bbfb87
7
+ data.tar.gz: 0852128fcfc9d4786a991ee07836bd753a78ae2d30c841008b117ac74c76d67e6efa6f2be825ca676abf59c2a01ad66f281b91850a88901f969235c8f3a3e6fe
data/.travis.yml CHANGED
@@ -1,6 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.8.7
4
3
  - 1.9.3
5
4
  - 2.0.0
6
5
  - 2.1.0
data/Appraisals CHANGED
@@ -1,4 +1,4 @@
1
- RAILS_VERSIONS = ["3.2", "4.0", "4.1", "4.2", "4.2.5"]
1
+ RAILS_VERSIONS = ["3.2", "4.0.0", "4.1.0", "4.2.0", "4.2.6"]
2
2
  PROTOBUF_SPECS = [
3
3
  ["protobuf", "~> 3.0"],
4
4
  ["ruby_protobuf", "~> 0.4"]
data/ChangeLog.md CHANGED
@@ -1,3 +1,8 @@
1
+ ### 1.0.0 / 2015-05-15
2
+
3
+ * Don't allow coder's dump method to fail. Instead, return nil.
4
+ * Pass options through correctly, so coder can respect defaults.
5
+
1
6
  ### 0.2.3 / 2015-11-21
2
7
 
3
8
  Update gemspec, gem supports Rails 4.2
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 4.0.0"
6
+ gem "protobuf", "~> 3.0"
7
+
8
+ gemspec :path => "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 4.0.0"
6
+ gem "ruby_protobuf", "~> 0.4"
7
+
8
+ gemspec :path => "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 4.1.0"
6
+ gem "protobuf", "~> 3.0"
7
+
8
+ gemspec :path => "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 4.1.0"
6
+ gem "ruby_protobuf", "~> 0.4"
7
+
8
+ gemspec :path => "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 4.2.0"
6
+ gem "protobuf", "~> 3.0"
7
+
8
+ gemspec :path => "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 4.2.0"
6
+ gem "ruby_protobuf", "~> 0.4"
7
+
8
+ gemspec :path => "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 4.2.6"
6
+ gem "protobuf", "~> 3.0"
7
+
8
+ gemspec :path => "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 4.2.6"
6
+ gem "ruby_protobuf", "~> 0.4"
7
+
8
+ gemspec :path => "../"
@@ -12,19 +12,20 @@ module ArProtobufStore
12
12
  base.extend(ClassMethods)
13
13
  end
14
14
 
15
- def self.find_parser!(pb_class)
15
+ def self.find_parser!(pb_class, options={})
16
16
  if defined?(ProtocolBuffers) && ::ProtocolBuffers::Message > pb_class
17
- return ArProtobufStore::CodekitchenProtobufParser.new(pb_class)
17
+ return ArProtobufStore::CodekitchenProtobufParser.new(pb_class, options)
18
18
  elsif defined?(Protobuf) && ::Protobuf::Message > pb_class
19
- return ArProtobufStore::ProtobufParser.new(pb_class)
19
+ return ArProtobufStore::ProtobufParser.new(pb_class, options)
20
20
  else
21
21
  raise "Could not identify protocol buffer library for #{pb_class}"
22
22
  end
23
23
  end
24
24
 
25
25
  module ClassMethods
26
- def protobuf_store(store_attribute, pb_class, options={})
27
- parser = ArProtobufStore.find_parser!(pb_class)
26
+ def protobuf_store(store_attribute, pb_class, options=nil)
27
+ options ||= {}
28
+ parser = ArProtobufStore.find_parser!(pb_class, options)
28
29
  serialize(store_attribute, parser)
29
30
  protobuf_store_accessor(store_attribute, parser.extract_fields(options[:accessors]))
30
31
  end
@@ -2,8 +2,9 @@ module ArProtobufStore
2
2
  class CodekitchenProtobufParser
3
3
  def initialize(pb_class, opts = nil)
4
4
  @klass = pb_class
5
- @opts = opts
6
- @opts ||= { :default => Proc.new { pb_class.new() } }
5
+ @opts = {
6
+ :default => Proc.new { pb_class.new() }
7
+ }.merge(opts || {})
7
8
  end
8
9
 
9
10
  def load(str)
@@ -24,6 +25,14 @@ module ArProtobufStore
24
25
 
25
26
  def dump(str)
26
27
  str.serialize_to_string
28
+ rescue Exception
29
+ if defined?(Rails)
30
+ Rails.logger.error("Failed to serialize: #{$!}")
31
+ else
32
+ puts "Failed to serialize: #{$!}"
33
+ end
34
+
35
+ return nil
27
36
  end
28
37
 
29
38
  def extract_fields(accessors = nil)
@@ -2,8 +2,10 @@ module ArProtobufStore
2
2
  class ProtobufParser
3
3
  def initialize(pb_class, opts = nil)
4
4
  @klass = pb_class
5
- @opts = opts
6
- @opts ||= { :default => Proc.new { pb_class.new() } }
5
+ @opts = opts || {}
6
+ @opts = {
7
+ :default => Proc.new { pb_class.new() }
8
+ }.merge(opts || {})
7
9
  end
8
10
 
9
11
  def load(str)
@@ -24,6 +26,14 @@ module ArProtobufStore
24
26
 
25
27
  def dump(str)
26
28
  str.serialize_to_string
29
+ rescue Exception
30
+ if defined?(Rails)
31
+ Rails.logger.error("Failed to serialize: #{$!}")
32
+ else
33
+ puts "Failed to serialize: #{$!}"
34
+ end
35
+
36
+ return nil
27
37
  end
28
38
 
29
39
  def extract_fields(accessors = nil)
@@ -1,4 +1,4 @@
1
1
  module ArProtobufStore
2
2
  # ar_protobuf_store version
3
- VERSION = "0.2.3"
3
+ VERSION = "1.0.0"
4
4
  end
@@ -17,42 +17,118 @@ begin
17
17
  teardown_db
18
18
  end
19
19
 
20
- let(:ar_klass) {
21
- # Define everything using anonymous classes to reduce leakage.
22
- extras = Class.new(::ProtocolBuffers::Message) do
20
+ def pb_class
21
+ Class.new(::ProtocolBuffers::Message) do
23
22
  optional :uint64, :int_attr, 1
24
23
  optional :string, :str_attr, 2
25
24
  end
25
+ end
26
26
 
27
+ let :ar_class do
28
+ # Define everything using anonymous classes to reduce leakage.
29
+ pb_class = self.pb_class
27
30
  Class.new(::ActiveRecord::Base) do
28
31
  self.table_name = "foos"
29
32
 
30
33
  include ArProtobufStore
31
34
 
32
- protobuf_store :extras, extras
35
+ protobuf_store :extras, pb_class
33
36
  end
34
- }
37
+ end
35
38
 
36
39
  describe ArProtobufStore::ClassMethods do
37
40
  it "should allow setting fields individually" do
38
- record = ar_klass.create!
41
+ record = ar_class.create!
39
42
  record.int_attr = 2
40
43
  record.str_attr = "TEST"
41
44
  record.save
42
45
  expect(record.persisted?).to eq(true)
43
46
  record_id = record.id
44
47
 
45
- record = ar_klass.find(record_id)
48
+ record = ar_class.find(record_id)
46
49
  expect(record.int_attr).to eq(2)
47
50
  expect(record.str_attr).to eq("TEST")
48
51
  end
49
52
 
50
53
  it "should allow setting fields in constructor" do
51
- record = ar_klass.create!(:int_attr => 2, :str_attr => "TEST")
54
+ record = ar_class.create!(:int_attr => 2, :str_attr => "TEST")
55
+ expect(record.persisted?).to eq(true)
56
+ record_id = record.id
57
+
58
+ record = ar_class.find(record_id)
59
+ expect(record.int_attr).to eq(2)
60
+ expect(record.str_attr).to eq("TEST")
61
+ end
62
+
63
+ it "should allow required fields" do
64
+ pb_class = Class.new(::ProtocolBuffers::Message) do
65
+ optional :uint64, :int_attr, 1
66
+ required :string, :req_str_attr, 2
67
+ end
68
+ ar_class = Class.new(::ActiveRecord::Base) do
69
+ self.table_name = "foos"
70
+
71
+ include ArProtobufStore
72
+
73
+ protobuf_store :extras, pb_class
74
+ end
75
+
76
+ # Handle batch create:
77
+ record = ar_class.create!(:int_attr => 2, req_str_attr: "required")
52
78
  expect(record.persisted?).to eq(true)
79
+
53
80
  record_id = record.id
81
+ record = ar_class.find(record_id)
82
+ expect(record.int_attr).to eq(2)
83
+ expect(record.req_str_attr).to eq("required")
84
+
85
+ # Handle calling setters:
86
+ record.req_str_attr = "something"
87
+ record.save!
88
+ record = ar_class.find(record_id)
89
+ expect(record.req_str_attr).to eq("something")
90
+ end
54
91
 
55
- record = ar_klass.find(record_id)
92
+ it "should respect nil default value" do
93
+ pb_class = self.pb_class
94
+ ar_class = Class.new(::ActiveRecord::Base) do
95
+ self.table_name = "foos"
96
+
97
+ include ArProtobufStore
98
+
99
+ protobuf_store :extras, pb_class, :default => nil
100
+ end
101
+
102
+ # Handle batch create:
103
+ record = ar_class.create!
104
+ expect(record.persisted?).to eq(true)
105
+ expect(record.extras).to eq(nil)
106
+
107
+ record_id = record.id
108
+ record = ar_class.find(record_id)
109
+ expect(record.extras).to eq(nil)
110
+ end
111
+
112
+ it "should respect default proc" do
113
+ pb_class = self.pb_class
114
+ ar_class = Class.new(::ActiveRecord::Base) do
115
+ self.table_name = "foos"
116
+
117
+ include ArProtobufStore
118
+
119
+ protobuf_store :extras, pb_class, :default => Proc.new { pb_class.new(int_attr: 2) }
120
+ end
121
+
122
+ # Handle batch create:
123
+ record = ar_class.create!
124
+ expect(record.persisted?).to eq(true)
125
+ expect(record.int_attr).to eq(2)
126
+
127
+ record.str_attr = "TEST"
128
+ record.save!
129
+
130
+ record_id = record.id
131
+ record = ar_class.find(record_id)
56
132
  expect(record.int_attr).to eq(2)
57
133
  expect(record.str_attr).to eq("TEST")
58
134
  end
@@ -20,42 +20,119 @@ begin
20
20
  teardown_db
21
21
  end
22
22
 
23
- let(:ar_klass) {
24
- # Define everything using anonymous classes to reduce leakage.
25
- extras = Class.new(::Protobuf::Message) do
23
+ def pb_class
24
+ Class.new(::Protobuf::Message) do
26
25
  optional :uint64, :int_attr, 1
27
26
  optional :string, :str_attr, 2
28
27
  end
28
+ end
29
+
30
+ let :ar_class do
31
+ # Define everything using anonymous classes to reduce leakage.
32
+ pb_class = self.pb_class
29
33
 
30
34
  Class.new(::ActiveRecord::Base) do
31
35
  self.table_name = "foos"
32
36
 
33
37
  include ArProtobufStore
34
38
 
35
- protobuf_store :extras, extras
39
+ protobuf_store :extras, pb_class
36
40
  end
37
- }
41
+ end
38
42
 
39
43
  describe ArProtobufStore::ClassMethods do
40
44
  it "should allow setting fields individually" do
41
- record = ar_klass.create!
45
+ record = ar_class.create!
42
46
  record.int_attr = 2
43
47
  record.str_attr = "TEST"
44
48
  record.save
45
49
  expect(record.persisted?).to eq(true)
46
50
  record_id = record.id
47
51
 
48
- record = ar_klass.find(record_id)
52
+ record = ar_class.find(record_id)
49
53
  expect(record.int_attr).to eq(2)
50
54
  expect(record.str_attr).to eq("TEST")
51
55
  end
52
56
 
53
57
  it "should allow setting fields in constructor" do
54
- record = ar_klass.create!(:int_attr => 2, :str_attr => "TEST")
58
+ record = ar_class.create!(:int_attr => 2, :str_attr => "TEST")
59
+ expect(record.persisted?).to eq(true)
60
+ record_id = record.id
61
+
62
+ record = ar_class.find(record_id)
63
+ expect(record.int_attr).to eq(2)
64
+ expect(record.str_attr).to eq("TEST")
65
+ end
66
+
67
+ it "should allow required fields" do
68
+ pb_class = Class.new(::Protobuf::Message) do
69
+ optional :uint64, :int_attr, 1
70
+ required :string, :req_str_attr, 2
71
+ end
72
+ ar_class = Class.new(::ActiveRecord::Base) do
73
+ self.table_name = "foos"
74
+
75
+ include ArProtobufStore
76
+
77
+ protobuf_store :extras, pb_class
78
+ end
79
+
80
+ # Handle batch create:
81
+ record = ar_class.create!(:int_attr => 2, req_str_attr: "required")
82
+ expect(record.persisted?).to eq(true)
83
+
84
+ record_id = record.id
85
+ record = ar_class.find(record_id)
86
+ expect(record.int_attr).to eq(2)
87
+ expect(record.req_str_attr).to eq("required")
88
+
89
+ # Handle calling setters:
90
+ record.req_str_attr = "something"
91
+ record.save!
92
+ record = ar_class.find(record_id)
93
+ expect(record.req_str_attr).to eq("something")
94
+ end
95
+
96
+ it "should respect nil default value" do
97
+ pb_class = self.pb_class
98
+ ar_class = Class.new(::ActiveRecord::Base) do
99
+ self.table_name = "foos"
100
+
101
+ include ArProtobufStore
102
+
103
+ protobuf_store :extras, pb_class, :default => nil
104
+ end
105
+
106
+ # Handle batch create:
107
+ record = ar_class.create!
55
108
  expect(record.persisted?).to eq(true)
109
+ expect(record.extras).to eq(nil)
110
+
56
111
  record_id = record.id
112
+ record = ar_class.find(record_id)
113
+ expect(record.extras).to eq(nil)
114
+ end
57
115
 
58
- record = ar_klass.find(record_id)
116
+ it "should respect default proc" do
117
+ pb_class = self.pb_class
118
+ ar_class = Class.new(::ActiveRecord::Base) do
119
+ self.table_name = "foos"
120
+
121
+ include ArProtobufStore
122
+
123
+ protobuf_store :extras, pb_class, :default => Proc.new { pb_class.new(int_attr: 2) }
124
+ end
125
+
126
+ # Handle batch create:
127
+ record = ar_class.create!
128
+ expect(record.persisted?).to eq(true)
129
+ expect(record.int_attr).to eq(2)
130
+
131
+ record.str_attr = "TEST"
132
+ record.save!
133
+
134
+ record_id = record.id
135
+ record = ar_class.find(record_id)
59
136
  expect(record.int_attr).to eq(2)
60
137
  expect(record.str_attr).to eq("TEST")
61
138
  end
@@ -23,42 +23,119 @@ begin
23
23
  teardown_db
24
24
  end
25
25
 
26
- let(:ar_klass) {
27
- # Define everything using anonymous classes to reduce leakage.
28
- extras = Class.new(::Protobuf::Message) do
26
+ def pb_class
27
+ Class.new(::Protobuf::Message) do
29
28
  optional :uint64, :int_attr, 1
30
29
  optional :string, :str_attr, 2
31
30
  end
31
+ end
32
+
33
+ let :ar_class do
34
+ # Define everything using anonymous classes to reduce leakage.
35
+ pb_class = self.pb_class
32
36
 
33
37
  Class.new(::ActiveRecord::Base) do
34
38
  self.table_name = "foos"
35
39
 
36
40
  include ArProtobufStore
37
41
 
38
- protobuf_store :extras, extras
42
+ protobuf_store :extras, pb_class
39
43
  end
40
- }
44
+ end
41
45
 
42
46
  describe ArProtobufStore::ClassMethods do
43
47
  it "should allow setting fields individually" do
44
- record = ar_klass.create!
48
+ record = ar_class.create!
45
49
  record.int_attr = 2
46
50
  record.str_attr = "TEST"
47
51
  record.save
48
52
  expect(record.persisted?).to eq(true)
49
53
  record_id = record.id
50
54
 
51
- record = ar_klass.find(record_id)
55
+ record = ar_class.find(record_id)
52
56
  expect(record.int_attr).to eq(2)
53
57
  expect(record.str_attr).to eq("TEST")
54
58
  end
55
59
 
56
60
  it "should allow setting fields in constructor" do
57
- record = ar_klass.create!(:int_attr => 2, :str_attr => "TEST")
61
+ record = ar_class.create!(:int_attr => 2, :str_attr => "TEST")
62
+ expect(record.persisted?).to eq(true)
63
+ record_id = record.id
64
+
65
+ record = ar_class.find(record_id)
66
+ expect(record.int_attr).to eq(2)
67
+ expect(record.str_attr).to eq("TEST")
68
+ end
69
+
70
+ it "should allow required fields" do
71
+ pb_class = Class.new(::Protobuf::Message) do
72
+ optional :uint64, :int_attr, 1
73
+ required :string, :req_str_attr, 2
74
+ end
75
+ ar_class = Class.new(::ActiveRecord::Base) do
76
+ self.table_name = "foos"
77
+
78
+ include ArProtobufStore
79
+
80
+ protobuf_store :extras, pb_class
81
+ end
82
+
83
+ # Handle batch create:
84
+ record = ar_class.create!(:int_attr => 2, :req_str_attr => "required")
85
+ expect(record.persisted?).to eq(true)
86
+
87
+ record_id = record.id
88
+ record = ar_class.find(record_id)
89
+ expect(record.int_attr).to eq(2)
90
+ expect(record.req_str_attr).to eq("required")
91
+
92
+ # Handle calling setters:
93
+ record.req_str_attr = "something"
94
+ record.save!
95
+ record = ar_class.find(record_id)
96
+ expect(record.req_str_attr).to eq("something")
97
+ end
98
+
99
+ it "should respect nil default value" do
100
+ pb_class = self.pb_class
101
+ ar_class = Class.new(::ActiveRecord::Base) do
102
+ self.table_name = "foos"
103
+
104
+ include ArProtobufStore
105
+
106
+ protobuf_store :extras, pb_class, :default => nil
107
+ end
108
+
109
+ # Handle batch create:
110
+ record = ar_class.create!
58
111
  expect(record.persisted?).to eq(true)
112
+ expect(record.extras).to eq(nil)
113
+
59
114
  record_id = record.id
115
+ record = ar_class.find(record_id)
116
+ expect(record.extras).to eq(nil)
117
+ end
60
118
 
61
- record = ar_klass.find(record_id)
119
+ it "should respect default proc" do
120
+ pb_class = self.pb_class
121
+ ar_class = Class.new(::ActiveRecord::Base) do
122
+ self.table_name = "foos"
123
+
124
+ include ArProtobufStore
125
+
126
+ protobuf_store :extras, pb_class, :default => Proc.new { pb_class.new(int_attr: 2) }
127
+ end
128
+
129
+ # Handle batch create:
130
+ record = ar_class.create!
131
+ expect(record.persisted?).to eq(true)
132
+ expect(record.int_attr).to eq(2)
133
+
134
+ record.str_attr = "TEST"
135
+ record.save!
136
+
137
+ record_id = record.id
138
+ record = ar_class.find(record_id)
62
139
  expect(record.int_attr).to eq(2)
63
140
  expect(record.str_attr).to eq("TEST")
64
141
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ar_protobuf_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hsiu-Fan Wang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-21 00:00:00.000000000 Z
11
+ date: 2016-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -163,12 +163,20 @@ files:
163
163
  - ar_protobuf_store.gemspec
164
164
  - gemfiles/rails3.2_protobuf.gemfile
165
165
  - gemfiles/rails3.2_ruby_protobuf.gemfile
166
+ - gemfiles/rails4.0.0_protobuf.gemfile
167
+ - gemfiles/rails4.0.0_ruby_protobuf.gemfile
166
168
  - gemfiles/rails4.0_protobuf.gemfile
167
169
  - gemfiles/rails4.0_ruby_protobuf.gemfile
170
+ - gemfiles/rails4.1.0_protobuf.gemfile
171
+ - gemfiles/rails4.1.0_ruby_protobuf.gemfile
168
172
  - gemfiles/rails4.1_protobuf.gemfile
169
173
  - gemfiles/rails4.1_ruby_protobuf.gemfile
174
+ - gemfiles/rails4.2.0_protobuf.gemfile
175
+ - gemfiles/rails4.2.0_ruby_protobuf.gemfile
170
176
  - gemfiles/rails4.2.5_protobuf.gemfile
171
177
  - gemfiles/rails4.2.5_ruby_protobuf.gemfile
178
+ - gemfiles/rails4.2.6_protobuf.gemfile
179
+ - gemfiles/rails4.2.6_ruby_protobuf.gemfile
172
180
  - gemfiles/rails4.2_protobuf.gemfile
173
181
  - gemfiles/rails4.2_ruby_protobuf.gemfile
174
182
  - lib/ar_protobuf_store.rb