Class: DearInventory::Model

Inherits:
Object
  • Object
show all
Extended by:
IsASubclass
Defined in:
lib/dear_inventory/model.rb

Direct Known Subclasses

DearInventory::Models::AdditionalAttributes, DearInventory::Models::Address, DearInventory::Models::AdvancedPurchase, DearInventory::Models::Attachment, DearInventory::Models::BillOfMaterialsProduct, DearInventory::Models::BillOfMaterialsService, DearInventory::Models::Customer, DearInventory::Models::Customers, DearInventory::Models::Customers::Address, DearInventory::Models::Customers::Contact, DearInventory::Models::InventoryMovement, DearInventory::Models::Product, DearInventory::Models::ProductAvailability, DearInventory::Models::ProductAvailabilityResults, DearInventory::Models::Products, DearInventory::Models::Products::Movement, DearInventory::Models::Purchase, DearInventory::Models::Purchases, DearInventory::Models::Purchases::AdditionalCharge, DearInventory::Models::Purchases::Advanced::Invoice, DearInventory::Models::Purchases::Advanced::PutAway, DearInventory::Models::Purchases::Advanced::Stock, DearInventory::Models::Purchases::Advanced::StockLine, DearInventory::Models::Purchases::CreditNote, DearInventory::Models::Purchases::InventoryMovement, DearInventory::Models::Purchases::Invoice, DearInventory::Models::Purchases::Line, DearInventory::Models::Purchases::ManualJournal, DearInventory::Models::Purchases::ManualJournalLine, DearInventory::Models::Purchases::Order, DearInventory::Models::Purchases::PaymentLine, DearInventory::Models::Purchases::Stock, DearInventory::Models::Purchases::StockLine, DearInventory::Models::Purchases::UnstockLine, DearInventory::Models::PurchasesResults, DearInventory::Models::ReorderLevel, DearInventory::Models::Request, DearInventory::Models::Sale, DearInventory::Models::Sales, DearInventory::Models::Sales::AdditionalCharge, DearInventory::Models::Sales::CreditNote, DearInventory::Models::Sales::Fulfilment, DearInventory::Models::Sales::Fulfilments::PickPack, DearInventory::Models::Sales::Fulfilments::PickPackLine, DearInventory::Models::Sales::Fulfilments::Ship, DearInventory::Models::Sales::Fulfilments::ShipLine, DearInventory::Models::Sales::Invoice, DearInventory::Models::Sales::Line, DearInventory::Models::Sales::ManualJournal, DearInventory::Models::Sales::ManualJournalLine, DearInventory::Models::Sales::Order, DearInventory::Models::Sales::PaymentLine, DearInventory::Models::Sales::Quote, DearInventory::Models::SalesResults, DearInventory::Models::Supplier, DearInventory::Models::Transaction

Class Method Summary collapse

Instance Method Summary collapse

Methods included from IsASubclass

is_a?

Constructor Details

#initialize(values = nil) ⇒ Model

Returns a new instance of Model.



30
31
32
33
34
35
36
37
# File 'lib/dear_inventory/model.rb', line 30

def initialize(values = nil)
  return if values.nil?

  self.class.enumerate_fields do |response_name, specifications|
    value = field_value(response_name, values, specifications)
    instance_variable_set(:"@#{specifications[:name]}", value)
  end
end

Class Method Details

.define_readersObject



18
19
20
21
22
23
24
# File 'lib/dear_inventory/model.rb', line 18

def self.define_readers
  enumerate_fields do |_, specifications|
    __send__(:attr_reader, specifications[:name])

    alias_method :records, specifications[:name] if specifications[:type] == :ResultSet
  end
end

.enumerate_fieldsObject



26
27
28
# File 'lib/dear_inventory/model.rb', line 26

def self.enumerate_fields(&)
  const_get(:FIELDS).each(&)
end

.fields(fields) ⇒ Object



10
11
12
13
14
15
16
# File 'lib/dear_inventory/model.rb', line 10

def self.fields(fields)
  ancestor = ancestors[1]
  fields = ancestor.const_get(:FIELDS).merge(fields) if ancestor.const_defined?(:FIELDS)
  const_set(:FIELDS, fields.freeze)

  define_readers
end

Instance Method Details

#to_hObject



39
40
41
42
43
44
45
46
47
48
# File 'lib/dear_inventory/model.rb', line 39

def to_h
  {}.tap do |hash|
    self.class.enumerate_fields do |_, specifications|
      key = specifications[:name]
      hash[key] = public_send(key)

      nested_attributes_to_hash(hash[key]) if hash[key].is_a?(Array)
    end
  end
end