class Protip::Transformers::EnumTransformer::SingleMessageEnumTransformer
Internal helper classes - under the hood we use separate transformers for the scalar and repeated cases, and both of them share transformation logic by inheriting from SingleMessageEnumTransformer
.
Private Instance Methods
enum_for_field(field)
click to toggle source
Instance-level cached version of the class method above
# File lib/protip/transformers/enum_transformer.rb, line 23 def enum_for_field(field) @enum_for_field_cache ||= {} name = EnumTransformer.enum_for_field(field) @enum_for_field_cache[name] ||= EnumTransformer.enum_for_field(field) @enum_for_field_cache[name] || raise("protip_enum missing or invalid for field '#{field.name}'") end
to_int(symbol_or_int, field)
click to toggle source
Matches the protobuf enum setter behavior. Convert :VALUE
or 5
to their corresponding enum integer value. @example
// foo.proto enum Foo { BAR = 0; BAZ = 1; } // ScalarTransformer.to_int(:BAZ) # => 1 // ScalarTransformer.to_int(4) # => 4
# File lib/protip/transformers/enum_transformer.rb, line 42 def to_int(symbol_or_int, field) if symbol_or_int.is_a?(1.class) symbol_or_int else # Convert +.to_sym+ explicitly to allow strings (or other # symobolizable objects) to be passed in to setters. enum_for_field(field).lookup_name(symbol_or_int.to_sym) || raise(RangeError.new "unknown symbol value for field '#{field.name}'") end end
to_symbol_or_int(int, field)
click to toggle source
Matches the protobuf enum getter behavior. Convert integers to their associated enum symbol, or pass them through if the
# File lib/protip/transformers/enum_transformer.rb, line 56 def to_symbol_or_int(int, field) enum = EnumTransformer.enum_for_field(field) || raise("protip_enum missing or invalid for field '#{field.name}'") enum.lookup_value(int) || int end