Skip to content

Commit 45a2fb1

Browse files
committed
Merge pull request #305 from ruby-protobuf/ah/revert_memoize_on_encode
Remove memoization on encode
2 parents 2970c0d + ad4d852 commit 45a2fb1

6 files changed

Lines changed: 4 additions & 69 deletions

File tree

lib/protobuf/field/base_field.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,6 @@ def define_array_setter
198198

199199
message_class.class_eval do
200200
define_method(method_name) do |val|
201-
@encode = nil
202201
if val.is_a?(Array)
203202
val = val.dup
204203
val.compact!
@@ -240,7 +239,6 @@ def define_setter
240239

241240
message_class.class_eval do
242241
define_method(method_name) do |val|
243-
@encode = nil
244242
if val.nil? || (val.respond_to?(:empty?) && val.empty?)
245243
@values.delete(field.name)
246244
elsif field.acceptable?(val)

lib/protobuf/field/bytes_field.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ def define_setter
6262

6363
message_class.class_eval do
6464
define_method(method_name) do |val|
65-
@encode = nil
6665
case val
6766
when String, Symbol
6867
@values[field.name] = "#{val}"

lib/protobuf/field/enum_field.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ def define_setter
4242
field = self
4343
message_class.class_eval do
4444
define_method("#{field.name}=") do |value|
45-
@encode = nil
4645
orig_value = value
4746
if value.nil?
4847
@values.delete(field.name)

lib/protobuf/field/message_field.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ def define_setter
4040
field = self
4141
message_class.class_eval do
4242
define_method("#{field.name}=") do |val|
43-
@encode = nil
4443
case
4544
when val.nil?
4645
@values.delete(field.name)

lib/protobuf/message/serialization.rb

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,10 @@ def decode_from(stream)
4848
# Encode this message
4949
#
5050
def encode
51-
@encode ||= begin
52-
stream = ::StringIO.new
53-
stream.set_encoding(::Protobuf::Field::BytesField::BYTES_ENCODING)
54-
encode_to(stream)
55-
stream.string
56-
end
51+
stream = ::StringIO.new
52+
stream.set_encoding(::Protobuf::Field::BytesField::BYTES_ENCODING)
53+
encode_to(stream)
54+
stream.string
5755
end
5856

5957
# Encode this message to the given stream.

spec/lib/protobuf/message_spec.rb

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -268,64 +268,6 @@
268268
end
269269
end
270270

271-
describe 'memoization' do
272-
it "should memoize enum message" do
273-
test_enum = Test::EnumTestMessage.new
274-
test_enum.encode
275-
expect(test_enum.instance_variable_get(:@encode)).to eq("")
276-
test_enum.non_default_enum = 2
277-
expect(test_enum.instance_variable_get(:@encode)).to be_nil
278-
end
279-
280-
context "boolean fields" do
281-
let(:values) { { :ext_is_searchable => true, :name => "STEPH CURRY" } }
282-
let(:test_resource) { ::Test::Resource.new(values) }
283-
284-
it "should memoize after bool values change " do
285-
test_resource.encode
286-
expect(test_resource.instance_variable_get(:@encode)).to eq(test_resource.encode)
287-
test_resource.ext_is_searchable = false
288-
expect(test_resource.instance_variable_get(:@encode)).to be_nil
289-
end
290-
end
291-
292-
context "string" do
293-
let(:values) { { :ext_is_searchable => true, :name => "STEPH CURRY" } }
294-
let(:test_resource) { ::Test::Resource.new(values) }
295-
296-
it "should memoize after bool values change " do
297-
test_resource.encode
298-
expect(test_resource.instance_variable_get(:@encode)).to eq(test_resource.encode)
299-
test_resource.name = "MVP"
300-
expect(test_resource.instance_variable_get(:@encode)).to be_nil
301-
end
302-
end
303-
304-
context "string" do
305-
let(:values) { { :ext_is_searchable => true, :name => "STEPH CURRY" } }
306-
let(:test_resource) { ::Test::Resource.new(values) }
307-
308-
it "should memoize after string values change " do
309-
test_resource.encode
310-
expect(test_resource.instance_variable_get(:@encode)).to eq(test_resource.encode)
311-
test_resource.name = "MVP"
312-
expect(test_resource.instance_variable_get(:@encode)).to be_nil
313-
end
314-
end
315-
316-
context "Int64" do
317-
let(:values) { { :name => "STEPH CURRY", :date_created => 1454712125 } }
318-
let(:test_resource) { ::Test::Resource.new(values) }
319-
320-
it "should memoize after Int64 values change " do
321-
test_resource.encode
322-
expect(test_resource.instance_variable_get(:@encode)).to eq(test_resource.encode)
323-
test_resource.date_created = 5554712127
324-
expect(test_resource.instance_variable_get(:@encode)).to be_nil
325-
end
326-
end
327-
end
328-
329271
context "when there's no value for a required field" do
330272
let(:message) { ::Test::ResourceWithRequiredField.new }
331273

0 commit comments

Comments
 (0)