Class: CXML::DocumentNode

Inherits:
Object
  • Object
show all
Defined in:
lib/cxml/document_node.rb

Overview

base class for document nodes

Direct Known Subclasses

Accounting, AdditionalCost, AdditionalDeduction, Address, BillTo, BrowserFormPost, Charge, Classification, Comments, ConfirmationHeader, ConfirmationItem, ConfirmationRequest, ConfirmationStatus, Contact, Country, CountryCode, Credential, CredentialMac, DeductedPrice, DeductionAmount, DepositAmount, Description, Discount, DiscountPercent, Distribution, Document, DocumentReference, DueAmount, Email, Extrinsic, From, GrossAmount, Header, IdReference, InvoiceDetailDiscount, InvoiceDetailHeaderIndicator, InvoiceDetailHeaderOrder, InvoiceDetailItem, InvoiceDetailItemReference, InvoiceDetailLineIndicator, InvoiceDetailLineShipping, InvoiceDetailLineSpecialHandling, InvoiceDetailOrder, InvoiceDetailOrderInfo, InvoiceDetailOrderSummary, InvoiceDetailRequest, InvoiceDetailRequestHeader, InvoiceDetailShipping, InvoiceDetailSummary, InvoiceIDInfo, InvoicePartner, ItemDetail, ItemID, ItemIn, ItemOut, MasterAgreementReference, Message, Modification, ModificationDetail, Modifications, Money, Name, NetAmount, OrderReference, OrderRequest, OrderRequestHeader, PaymentTerm, Period, Phone, PostalAddress, PunchOutOrderMessage, PunchOutOrderMessageHeader, PunchOutSetupRequest, PunchOutSetupResponse, Request, Response, Segment, Sender, ShipTo, Shipping, ShippingAmount, SpecialHandlingAmount, StartPage, State, Status, SubtotalAmount, SupplierSetup, Tax, TaxAdjustmentAmount, TaxAmount, TaxDetail, TaxLocation, TaxableAmount, TelephoneNumber, To, Total, TotalAllowances, TotalAmountWithoutTax, TotalCharges, UnitPrice

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data = {}) ⇒ DocumentNode

Returns a new instance of DocumentNode.



30
31
32
33
34
35
36
37
38
39
# File 'lib/cxml/document_node.rb', line 30

def initialize(data = {})
  if data.is_a?(String)
    @content = data
    return
  end
  data = data.serializable_hash if data.is_a?(self.class)
  return unless data.is_a?(Hash)

  data.each { |arr| initialize_attribute(*arr) }
end

Instance Attribute Details

#contentObject

Returns the value of attribute content.



6
7
8
# File 'lib/cxml/document_node.rb', line 6

def content
  @content
end

Class Method Details

.accessible_attributes(attrs) ⇒ Object

Raises:

  • (ArgumentError)


8
9
10
11
12
13
# File 'lib/cxml/document_node.rb', line 8

def self.accessible_attributes(attrs)
  raise(ArgumentError) unless attrs.is_a?(Array)

  @attributes = attrs
  attr_accessor(*attrs)
end

.accessible_nodes(new_nodes) ⇒ Object

Raises:

  • (ArgumentError)


19
20
21
22
23
24
# File 'lib/cxml/document_node.rb', line 19

def self.accessible_nodes(new_nodes)
  raise(ArgumentError) unless new_nodes.is_a?(Array)

  @nodes = new_nodes
  attr_accessor(*new_nodes)
end

.attributesObject



15
16
17
# File 'lib/cxml/document_node.rb', line 15

def self.attributes
  @attributes || []
end

.nodesObject



26
27
28
# File 'lib/cxml/document_node.rb', line 26

def self.nodes
  @nodes || []
end

Instance Method Details

#node_nameObject



51
52
53
# File 'lib/cxml/document_node.rb', line 51

def node_name
  self.class.name.split('::').last
end

#serializable_hashObject



41
42
43
44
45
46
47
48
49
# File 'lib/cxml/document_node.rb', line 41

def serializable_hash
  (self.class.attributes + self.class.nodes + [:content]).each_with_object({}) do |attr, obj|
    value = send(attr)
    value = value.iso8601 if value.is_a?(Time)
    next if value.respond_to?(:empty?) ? value.empty? : !value

    obj[attr] = value.is_a?(DocumentNode) ? value.serializable_hash : value
  end
end

#to_elementObject



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/cxml/document_node.rb', line 55

def to_element
  element = ox_element
  element << content.to_s if content
  self.class.nodes.each do |child_node_name|
    child_value = send(child_node_name)
    if child_value.is_a?(Array)
      child_value.each do |child_value_n|
        render_child_node(element, child_node_name, child_value_n)
      end
    else
      render_child_node(element, child_node_name, child_value)
    end
  end
  element
end