protobuf-activerecord 6.1.0 → 7.1.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.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -27
  3. data/.standard.yml +3 -0
  4. data/CHANGELOG.md +13 -0
  5. data/CODE_OF_CONDUCT.md +132 -0
  6. data/LICENSE.txt +17 -18
  7. data/README.md +8 -4
  8. data/Rakefile +13 -9
  9. data/lib/protobuf/active_record/attribute_methods.rb +2 -2
  10. data/lib/protobuf/active_record/columns.rb +3 -5
  11. data/lib/protobuf/active_record/middleware/connection_management_async.rb +2 -3
  12. data/lib/protobuf/active_record/middleware/query_cache.rb +1 -3
  13. data/lib/protobuf/active_record/nested_attributes.rb +2 -2
  14. data/lib/protobuf/active_record/persistence.rb +6 -6
  15. data/lib/protobuf/active_record/scope.rb +10 -10
  16. data/lib/protobuf/active_record/serialization.rb +29 -34
  17. data/lib/protobuf/active_record/transformation.rb +22 -25
  18. data/lib/protobuf/active_record/transformer.rb +1 -1
  19. data/lib/protobuf/active_record/version.rb +1 -1
  20. metadata +20 -174
  21. data/.gitignore +0 -12
  22. data/.travis.yml +0 -4
  23. data/Gemfile +0 -4
  24. data/protobuf-activerecord.gemspec +0 -43
  25. data/spec/protobuf/active_record/columns_spec.rb +0 -100
  26. data/spec/protobuf/active_record/nested_attributes_spec.rb +0 -28
  27. data/spec/protobuf/active_record/persistence_spec.rb +0 -70
  28. data/spec/protobuf/active_record/scope_spec.rb +0 -201
  29. data/spec/protobuf/active_record/serialization_spec.rb +0 -208
  30. data/spec/protobuf/active_record/transformation_spec.rb +0 -254
  31. data/spec/protobuf/active_record/transformer_spec.rb +0 -42
  32. data/spec/spec_helper.rb +0 -27
  33. data/spec/support/db/setup.rb +0 -29
  34. data/spec/support/db.rb +0 -1
  35. data/spec/support/definitions/messages.proto +0 -23
  36. data/spec/support/models/photo.rb +0 -3
  37. data/spec/support/models/user.rb +0 -53
  38. data/spec/support/models.rb +0 -2
  39. data/spec/support/protobuf/messages.pb.rb +0 -41
@@ -35,23 +35,21 @@ module Protobuf
35
35
 
36
36
  filtered_attributes = _filtered_attributes + _protobuf_attribute_transformers.keys
37
37
 
38
- attribute_fields = filtered_attributes.inject({}) do |hash, column_name|
38
+ attribute_fields = filtered_attributes.each_with_object({}) do |column_name, hash|
39
39
  symbolized_column = column_name.to_sym
40
40
 
41
41
  if fields.key?(symbolized_column) || _protobuf_attribute_transformers.key?(symbolized_column)
42
42
  hash[symbolized_column] = fields[symbolized_column]
43
43
  end
44
-
45
- hash
46
44
  end
47
45
 
48
46
  _protobuf_nested_attributes.each do |attribute_name|
49
- nested_attribute_name = "#{attribute_name}_attributes".to_sym
47
+ nested_attribute_name = :"#{attribute_name}_attributes"
50
48
  value = if proto.field?(nested_attribute_name)
51
- proto.__send__(nested_attribute_name)
52
- elsif proto.field?(attribute_name)
53
- proto.__send__(attribute_name)
54
- end
49
+ proto.__send__(nested_attribute_name)
50
+ elsif proto.field?(attribute_name)
51
+ proto.__send__(attribute_name)
52
+ end
55
53
 
56
54
  next unless value
57
55
  attribute_fields[nested_attribute_name] = value
@@ -64,7 +62,7 @@ module Protobuf
64
62
  #
65
63
  # :nodoc:
66
64
  def _filtered_attributes
67
- return self.attribute_names
65
+ attribute_names
68
66
  end
69
67
 
70
68
  # :nodoc:
@@ -72,18 +70,19 @@ module Protobuf
72
70
  return nil if value.nil?
73
71
  return value unless _protobuf_date_datetime_time_or_timestamp_column?(key)
74
72
 
75
- value = case
76
- when _protobuf_datetime_column?(key) then
77
- convert_int64_to_datetime(value)
78
- when _protobuf_timestamp_column?(key) then
79
- convert_int64_to_time(value)
80
- when _protobuf_time_column?(key) then
81
- convert_int64_to_time(value)
82
- when _protobuf_date_column?(key) then
83
- convert_int64_to_date(value)
84
- end
85
-
86
- return value
73
+ if _protobuf_datetime_column?(key)
74
+
75
+ convert_int64_to_datetime(value)
76
+ elsif _protobuf_timestamp_column?(key)
77
+
78
+ convert_int64_to_time(value)
79
+ elsif _protobuf_time_column?(key)
80
+
81
+ convert_int64_to_time(value)
82
+ elsif _protobuf_date_column?(key)
83
+
84
+ convert_int64_to_date(value)
85
+ end
87
86
  end
88
87
 
89
88
  # Define an attribute transformation from protobuf. Accepts a Symbol,
@@ -113,7 +112,7 @@ module Protobuf
113
112
  symbol_or_block = args.first || block
114
113
 
115
114
  if symbol_or_block.is_a?(Symbol)
116
- callable = lambda { |value| self.__send__(symbol_or_block, value) }
115
+ callable = lambda { |value| __send__(symbol_or_block, value) }
117
116
  else
118
117
  raise AttributeTransformerError unless symbol_or_block.respond_to?(:call)
119
118
  callable = symbol_or_block
@@ -138,7 +137,7 @@ module Protobuf
138
137
  def attributes_from_proto(proto)
139
138
  attribute_fields = _filter_attribute_fields(proto)
140
139
 
141
- attributes = attribute_fields.inject({}) do |hash, (key, value)|
140
+ attributes = attribute_fields.each_with_object({}) do |(key, value), hash|
142
141
  if _protobuf_attribute_transformers.key?(key)
143
142
  transformer = _protobuf_attribute_transformers[key]
144
143
  attribute = transformer.call(proto)
@@ -147,8 +146,6 @@ module Protobuf
147
146
  else
148
147
  hash[key] = _protobuf_convert_fields_to_attributes(key, value)
149
148
  end
150
-
151
- hash
152
149
  end
153
150
 
154
151
  return attributes unless proto.field?(:nullify) && proto.nullify.is_a?(Array)
@@ -8,7 +8,7 @@ module Protobuf
8
8
  @options = options
9
9
  end
10
10
 
11
- delegate :call, :to => :callable
11
+ delegate :call, to: :callable
12
12
 
13
13
  def nullify?(proto)
14
14
  return false unless options[:nullify_on]
@@ -1,5 +1,5 @@
1
1
  module Protobuf
2
2
  module ActiveRecord
3
- VERSION = "6.1.0"
3
+ VERSION = "7.1.0"
4
4
  end
5
5
  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: 6.1.0
4
+ version: 7.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Hutchison
8
- autorequire:
9
- bindir: bin
8
+ autorequire:
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-16 00:00:00.000000000 Z
11
+ date: 2025-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 6.1.0
19
+ version: 7.1.0
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
- version: 6.1.0
26
+ version: 7.1.0
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
- version: 6.1.0
33
+ version: 7.1.0
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
- version: 6.1.0
40
+ version: 7.1.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: concurrent-ruby
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -80,132 +80,6 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '3.0'
83
- - !ruby/object:Gem::Dependency
84
- name: benchmark-ips
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: mad_rubocop
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: rake
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: rspec
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: 3.3.0
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: 3.3.0
139
- - !ruby/object:Gem::Dependency
140
- name: rspec-pride
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: 3.1.0
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: 3.1.0
153
- - !ruby/object:Gem::Dependency
154
- name: pry-nav
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
- - !ruby/object:Gem::Dependency
168
- name: simplecov
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- version: '0'
181
- - !ruby/object:Gem::Dependency
182
- name: sqlite3
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - ">="
186
- - !ruby/object:Gem::Version
187
- version: '1.4'
188
- type: :development
189
- prerelease: false
190
- version_requirements: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - ">="
193
- - !ruby/object:Gem::Version
194
- version: '1.4'
195
- - !ruby/object:Gem::Dependency
196
- name: timecop
197
- requirement: !ruby/object:Gem::Requirement
198
- requirements:
199
- - - ">="
200
- - !ruby/object:Gem::Version
201
- version: '0'
202
- type: :development
203
- prerelease: false
204
- version_requirements: !ruby/object:Gem::Requirement
205
- requirements:
206
- - - ">="
207
- - !ruby/object:Gem::Version
208
- version: '0'
209
83
  description: Provides the ability to create Active Record objects from Protocol Buffer
210
84
  messages and vice versa.
211
85
  email:
@@ -214,11 +88,11 @@ executables: []
214
88
  extensions: []
215
89
  extra_rdoc_files: []
216
90
  files:
217
- - ".gitignore"
218
91
  - ".rspec"
219
92
  - ".rubocop.yml"
220
- - ".travis.yml"
221
- - Gemfile
93
+ - ".standard.yml"
94
+ - CHANGELOG.md
95
+ - CODE_OF_CONDUCT.md
222
96
  - LICENSE.txt
223
97
  - README.md
224
98
  - Rakefile
@@ -240,27 +114,14 @@ files:
240
114
  - lib/protobuf/active_record/transformer.rb
241
115
  - lib/protobuf/active_record/validations.rb
242
116
  - lib/protobuf/active_record/version.rb
243
- - protobuf-activerecord.gemspec
244
- - spec/protobuf/active_record/columns_spec.rb
245
- - spec/protobuf/active_record/nested_attributes_spec.rb
246
- - spec/protobuf/active_record/persistence_spec.rb
247
- - spec/protobuf/active_record/scope_spec.rb
248
- - spec/protobuf/active_record/serialization_spec.rb
249
- - spec/protobuf/active_record/transformation_spec.rb
250
- - spec/protobuf/active_record/transformer_spec.rb
251
- - spec/spec_helper.rb
252
- - spec/support/db.rb
253
- - spec/support/db/setup.rb
254
- - spec/support/definitions/messages.proto
255
- - spec/support/models.rb
256
- - spec/support/models/photo.rb
257
- - spec/support/models/user.rb
258
- - spec/support/protobuf/messages.pb.rb
259
117
  homepage: http://github.com/liveh2o/protobuf-activerecord
260
118
  licenses:
261
119
  - MIT
262
- metadata: {}
263
- post_install_message:
120
+ metadata:
121
+ homepage_uri: http://github.com/liveh2o/protobuf-activerecord
122
+ source_code_uri: http://github.com/liveh2o/protobuf-activerecord
123
+ changelog_uri: http://github.com/liveh2o/protobuf-activerecord/blob/main/CHANGELOG.md
124
+ post_install_message:
264
125
  rdoc_options: []
265
126
  require_paths:
266
127
  - lib
@@ -268,30 +129,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
268
129
  requirements:
269
130
  - - ">="
270
131
  - !ruby/object:Gem::Version
271
- version: '0'
132
+ version: 2.7.0
272
133
  required_rubygems_version: !ruby/object:Gem::Requirement
273
134
  requirements:
274
135
  - - ">="
275
136
  - !ruby/object:Gem::Version
276
137
  version: '0'
277
138
  requirements: []
278
- rubygems_version: 3.1.2
279
- signing_key:
139
+ rubygems_version: 3.4.22
140
+ signing_key:
280
141
  specification_version: 4
281
142
  summary: Google Protocol Buffers integration for Active Record
282
- test_files:
283
- - spec/protobuf/active_record/columns_spec.rb
284
- - spec/protobuf/active_record/nested_attributes_spec.rb
285
- - spec/protobuf/active_record/persistence_spec.rb
286
- - spec/protobuf/active_record/scope_spec.rb
287
- - spec/protobuf/active_record/serialization_spec.rb
288
- - spec/protobuf/active_record/transformation_spec.rb
289
- - spec/protobuf/active_record/transformer_spec.rb
290
- - spec/spec_helper.rb
291
- - spec/support/db.rb
292
- - spec/support/db/setup.rb
293
- - spec/support/definitions/messages.proto
294
- - spec/support/models.rb
295
- - spec/support/models/photo.rb
296
- - spec/support/models/user.rb
297
- - spec/support/protobuf/messages.pb.rb
143
+ test_files: []
data/.gitignore DELETED
@@ -1,12 +0,0 @@
1
- *.db
2
- *.gem
3
- .DS_Store
4
- .bundle
5
- .config
6
- .rvmrc
7
- .yardoc
8
- .ruby-*
9
- Gemfile.lock
10
- coverage
11
- pkg/*
12
- tmp
data/.travis.yml DELETED
@@ -1,4 +0,0 @@
1
- ---
2
- language: ruby
3
- rvm:
4
- - 2.5
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in protobuf-activerecord.gemspec
4
- gemspec
@@ -1,43 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- lib = File.expand_path("../lib", __FILE__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require "protobuf/active_record/version"
6
-
7
- Gem::Specification.new do |spec|
8
- spec.name = "protobuf-activerecord"
9
- spec.version = Protobuf::ActiveRecord::VERSION
10
- spec.authors = ["Adam Hutchison"]
11
- spec.email = ["liveh2o@gmail.com"]
12
- spec.homepage = "http://github.com/liveh2o/protobuf-activerecord"
13
- spec.summary = "Google Protocol Buffers integration for Active Record"
14
- spec.description = "Provides the ability to create Active Record objects from Protocol Buffer messages and vice versa."
15
- spec.license = "MIT"
16
-
17
- spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
18
- spec.executables = spec.files.grep(%r{^bin/}).map { |f| File.basename(f) }
19
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
- spec.require_paths = ["lib"]
21
-
22
- ##
23
- # Dependencies
24
- #
25
- spec.add_dependency "activerecord", "~> 6.1.0"
26
- spec.add_dependency "activesupport", "~> 6.1.0"
27
- spec.add_dependency "concurrent-ruby"
28
- spec.add_dependency "heredity", ">= 0.1.1"
29
- spec.add_dependency "protobuf", ">= 3.0"
30
-
31
- ##
32
- # Development dependencies
33
- #
34
- spec.add_development_dependency "benchmark-ips"
35
- spec.add_development_dependency "mad_rubocop"
36
- spec.add_development_dependency "rake"
37
- spec.add_development_dependency "rspec", ">= 3.3.0"
38
- spec.add_development_dependency "rspec-pride", ">= 3.1.0"
39
- spec.add_development_dependency "pry-nav"
40
- spec.add_development_dependency "simplecov"
41
- spec.add_development_dependency "sqlite3", ">= 1.4"
42
- spec.add_development_dependency "timecop"
43
- end
@@ -1,100 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Protobuf::ActiveRecord::Columns do
4
- describe "._protobuf_map_columns" do
5
- context "when the class has a table" do
6
- let(:expected_column_names) {
7
- User.columns.inject({}) do |hash, column|
8
- hash[column.name.to_sym] = column
9
- hash
10
- end
11
- }
12
-
13
- let(:expected_column_types) {
14
- User.columns.inject({}) do |hash, column|
15
- hash[column.type.to_sym] ||= ::Set.new
16
- hash[column.type.to_sym] << column.name.to_sym
17
- hash
18
- end
19
- }
20
-
21
- it "maps columns by name" do
22
- expect(User._protobuf_columns).to eq expected_column_names
23
- end
24
-
25
- it "maps column names by column type" do
26
- expected_column_types.each do |expected_column_type, value|
27
- expect(User._protobuf_column_types).to include expected_column_type => value
28
- end
29
- end
30
- end
31
- end
32
-
33
- context "column type predicates" do
34
- before { allow(User).to receive(:_protobuf_column_types).and_return({}) }
35
-
36
- describe "._protobuf_date_column?" do
37
- before { User._protobuf_column_types[:date] = [:foo_date] }
38
-
39
- context "when the column type is :date" do
40
- it "is true" do
41
- expect(User._protobuf_date_column?(:foo_date)).to be true
42
- end
43
- end
44
-
45
- context "when the column type is not :date" do
46
- it "is false" do
47
- expect(User._protobuf_date_column?(:bar_date)).to be false
48
- end
49
- end
50
- end
51
-
52
- describe "._protobuf_datetime_column?" do
53
- before { User._protobuf_column_types[:datetime] = [:foo_datetime] }
54
-
55
- context "when the column type is :datetime" do
56
- it "is true" do
57
- expect(User._protobuf_datetime_column?(:foo_datetime)).to be true
58
- end
59
- end
60
-
61
- context "when the column type is not :datetime" do
62
- it "is false" do
63
- expect(User._protobuf_datetime_column?(:bar_datetime)).to be false
64
- end
65
- end
66
- end
67
-
68
- describe "._protobuf_time_column?" do
69
- before { User._protobuf_column_types[:time] = [:foo_time] }
70
-
71
- context "when the column type is :time" do
72
- it "is true" do
73
- expect(User._protobuf_time_column?(:foo_time)).to be true
74
- end
75
- end
76
-
77
- context "when the column type is not :time" do
78
- it "is false" do
79
- expect(User._protobuf_time_column?(:bar_time)).to be false
80
- end
81
- end
82
- end
83
-
84
- describe "._protobuf_timestamp_column?" do
85
- before { User._protobuf_column_types[:timestamp] = [:foo_timestamp] }
86
-
87
- context "when the column type is :timestamp" do
88
- it "is true" do
89
- expect(User._protobuf_timestamp_column?(:foo_timestamp)).to be true
90
- end
91
- end
92
-
93
- context "when the column type is not :timestamp" do
94
- it "is false" do
95
- expect(User._protobuf_timestamp_column?(:bar_timestamp)).to be false
96
- end
97
- end
98
- end
99
- end
100
- end
@@ -1,28 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Protobuf::ActiveRecord::NestedAttributes do
4
- let(:user_message) {
5
- UserMessage.new(:name => "foo bar", :email => "foo@test.co", :photos => [{ :url => "https://test.co/test.png" }])
6
- }
7
-
8
- describe "._filter_attribute_fields", :aggregate_failures => true do
9
- it "includes nested attributes" do
10
- attribute_fields = User._filter_attribute_fields(user_message)
11
- expect(attribute_fields[:photos_attributes]).to eq(user_message.photos)
12
- end
13
-
14
- context "when" do
15
- end
16
- end
17
-
18
- describe ".new" do
19
- context "when a model accepts nested attributes" do
20
- it "transforms nested attributes", :aggregate_failures => true do
21
- user_message.photos.each do |photo_message|
22
- expect(Photo).to receive(:attributes_from_proto).with(photo_message).and_call_original
23
- end
24
- User.new(user_message)
25
- end
26
- end
27
- end
28
- end
@@ -1,70 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Protobuf::ActiveRecord::Persistence do
4
- let(:user) { User.new(user_attributes) }
5
- let(:user_attributes) { { :first_name => "foo", :last_name => "bar", :email => "foo@test.co" } }
6
- let(:proto_hash) { { :name => "foo bar", :email => "foo@test.co" } }
7
- let(:proto) { UserMessage.new(proto_hash) }
8
-
9
- describe ".create" do
10
- it "accepts a protobuf message" do
11
- expect_any_instance_of(User).to receive(:save)
12
- User.create(proto)
13
- end
14
-
15
- it "accepts a hash" do
16
- expect_any_instance_of(User).to receive(:save)
17
- User.create(user_attributes)
18
- end
19
- end
20
-
21
- describe ".create!" do
22
- it "accepts a protobuf message" do
23
- expect_any_instance_of(User).to receive(:save!)
24
- User.create!(proto)
25
- end
26
-
27
- it "accepts a hash" do
28
- expect_any_instance_of(User).to receive(:save!)
29
- User.create!(user_attributes)
30
- end
31
- end
32
-
33
- describe "#assign_attributes" do
34
- let(:user) { ::User.new }
35
-
36
- it "accepts a protobuf message" do
37
- user.assign_attributes(proto)
38
- expect(user.changed?).to be true
39
- end
40
-
41
- it "accepts a hash" do
42
- user.assign_attributes(user_attributes)
43
- expect(user.changed?).to be true
44
- end
45
- end
46
-
47
- describe "#update" do
48
- it "accepts a protobuf message" do
49
- expect_any_instance_of(User).to receive(:save)
50
- user.update(proto)
51
- end
52
-
53
- it "accepts a hash" do
54
- expect_any_instance_of(User).to receive(:save)
55
- user.update(user_attributes)
56
- end
57
- end
58
-
59
- describe "#update!" do
60
- it "accepts a protobuf message" do
61
- expect_any_instance_of(User).to receive(:save!)
62
- user.update!(proto)
63
- end
64
-
65
- it "accepts a hash" do
66
- expect_any_instance_of(User).to receive(:save!)
67
- user.update!(user_attributes)
68
- end
69
- end
70
- end