ar_protobuf_store 0.2.3 → 1.0.0

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 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