Skip to content

Commit

Permalink
Improvement: better ruby from_* support in well_known_types.rb
Browse files Browse the repository at this point in the history
* Added capability to support from_* requests properly by adding class methods and returning self for instance methods
    * `Timestamp.from_time`
    * `Value.from_ruby`
  • Loading branch information
jufemaiz committed Feb 3, 2021
1 parent aa13fde commit 697f064
Showing 1 changed file with 35 additions and 1 deletion.
36 changes: 35 additions & 1 deletion ruby/lib/google/protobuf/well_known_types.rb
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,14 @@ def to_time
end
end

def self.from_time(time)
Timestamp.new(seconds: time.to_i, nanos: time.nsec)
end

def from_time(time)
self.seconds = time.to_i
self.nanos = time.nsec
self
end

def to_i
Expand Down Expand Up @@ -131,6 +136,34 @@ def to_ruby(recursive = false)
raise UnexpectedStructType
end
end

def self.from_ruby(value)
ret = Value.new
case value
when NilClass
ret.null_value = 0
when Numeric
ret.number_value = value
when String
ret.string_value = value
when TrueClass
ret.bool_value = true
when FalseClass
ret.bool_value = false
when Struct
ret.struct_value = value
when Hash
ret.struct_value = Struct.from_hash(value)
when ListValue
ret.list_value = value
when Array
ret.list_value = ListValue.from_a(value)
else
raise UnexpectedStructType
end

ret
end

def from_ruby(value)
case value
Expand All @@ -155,6 +188,8 @@ def from_ruby(value)
else
raise UnexpectedStructType
end

self
end
end

Expand Down Expand Up @@ -225,6 +260,5 @@ def self.from_a(arr)
ret
end
end

end
end

0 comments on commit 697f064

Please sign in to comment.