Sha256: c7a3ec3481c260968500b7f74eb1e1efb8008337fab31074d2692f99dbdd2b6d

Contents?: true

Size: 789 Bytes

Versions: 1

Compression:

Stored size: 789 Bytes

Contents

module MoneyS3
  module BaseElement
    EMPTY_ARRAY = []

    attr_accessor :raw

    def initialize(raw)
      @raw = raw
    end

    private

    def at(locator)
      return nil if raw.nil?

      raw[locator]
    end

    def submodel_at(klass, locator)
      element_xml = at locator

      klass.new(element_xml) if element_xml
    end

    def array_of_at(klass, locator)
      elements = raw.dig(*locator) || []
      if elements.is_a? Hash
        elements = [elements]
      end

      elements.map do |raw|
        klass.new(raw)
      end
    end

    def all(locator)
      return [] if raw.nil?

      result = raw[locator]

      if result.is_a? Hash
        [result]
      elsif result.is_a? Array
        result
      else
        EMPTY_ARRAY
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
money_s3-0.2.0 lib/money_s3/base_element.rb