class DearInventory::Model
Public Class Methods
define_readers()
click to toggle source
# File lib/dear_inventory/model.rb, line 34 def self.define_readers enumerate_fields do |_, specifications| __send__(:attr_reader, specifications[:name]) if specifications[:type] == :ResultSet alias_method :records, specifications[:name] end end end
enumerate_fields() { |response_name, specifications| ... }
click to toggle source
# File lib/dear_inventory/model.rb, line 45 def self.enumerate_fields const_get(:FIELDS).each do |response_name, specifications| yield(response_name, specifications) end end
fields(fields)
click to toggle source
# File lib/dear_inventory/model.rb, line 23 def self.fields(fields) ancestor = T.must(ancestors[1]) if ancestor.const_defined?(:FIELDS) fields = ancestor.const_get(:FIELDS).merge(fields) end const_set(:FIELDS, fields.freeze) define_readers end
new(values = nil)
click to toggle source
# File lib/dear_inventory/model.rb, line 56 def initialize(values = nil) initialize_abstract return if values.nil? self.class.enumerate_fields do |response_name, specifications| value = field_value(response_name, T.must(values), specifications) instance_variable_set(:"@#{specifications[:name]}", value) end end
Also aliased as: initialize_abstract
Public Instance Methods
to_h()
click to toggle source
# File lib/dear_inventory/model.rb, line 68 def to_h {}.tap do |hash| self.class.enumerate_fields do |_, specifications| key = specifications[:name] hash[key] = public_send(key) end end end
Private Instance Methods
field_value(response_name, values, specifications)
click to toggle source
# File lib/dear_inventory/model.rb, line 88 def field_value(response_name, values, specifications) model = T.cast( specifications[:model], T.nilable(T.class_of(DearInventory::Model)) ) value = values[response_name.to_s] return if value == "" format_value(value, specifications[:type], model) end
format_value(value, type, model)
click to toggle source
rubocop:disable Metrics/CyclomaticComplexity rubocop:disable Metrics/MethodLength
# File lib/dear_inventory/model.rb, line 101 def format_value(value, type, model) case type when :Array, :ResultSet initialize_array_values_in_models(value, T.must(model)) when :BigDecimal value.to_d when :Date ::Date.parse(value) unless value.nil? when :DateTime ::DateTime.parse(value) unless value.nil? when :Hash T.must(model).new(value) else value end end
initialize_array_values_in_models(array, model)
click to toggle source
# File lib/dear_inventory/model.rb, line 126 def initialize_array_values_in_models(array, model) return if array.nil? array.each_with_object([]) do |values, records| records << model.new(values) end end