Sha256: 03d1570ad93902ec525ef471c2f7517a17aa479f434098e6c9f5dd3d75e007be

Contents?: true

Size: 1.91 KB

Versions: 1

Compression:

Stored size: 1.91 KB

Contents

require 'active_model'

module BuhoCfdi
  class BaseNode
    include ActiveModel::Validations
    attr_accessor :node_hash

    def initialize(params = {})
      @node_hash = {}

      params.each_pair do |key, value|
        if respond_to? key
          instance_variable_set("@#{key}", value)
        end
      end
    end

    def to_hash
      self.class.params.each do |param|
        node_hash[define_locale(param)] = send(param) unless send(param).blank?
      end

      node_hash
    end

    def build_child!(klass, params)
      node = klass.new(params)

      if node.valid?
        self.class.send(:attr_reader, klass.name.downcase.sub( '::', '_'))
        instance_variable_set("@#{klass.name.downcase.sub( '::', '_')}", node)
      else
        nil
      end
    end

    def build_child(params)
      node = self.class.new(params)

      if node.valid?
        self.class.send(:attr_reader, self.class.name.downcase.sub( '::', '_'))
        instance_variable_set("@#{self.class.name.downcase.sub( '::', '_')}", self.class.new)
      else
        nil
      end
    end

    def build_children(klass)
      self.class.send(:attr_reader, klass.name.downcase.sub( '::', '_'))

      instance_variable_set(
        "@#{klass.name.downcase.sub( '::', '_')}",
        ::Nodes::Collection.new(klass)
      )

      self
    end

    private

    def define_locale(param)
      I18n.t("nodes.#{self.class.name.demodulize.underscore}.#{param}")
    end

    class << self
      def build_child(params)
        node = self.new(params)

        if node.valid?
          self.class.send(:attr_reader, self.name.downcase.sub( '::', '_'))
          instance_variable_set("@#{self.name.downcase.sub( '::', '_')}", self.new)
        else
          nil
        end
      end

      def attr_accessor(*args)
        @params ||= []
        @params.concat(args)
        
        super(*args)
      end

      def params
        @params
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
buho_cfdi-0.1.12 lib/buho_cfdi/base_node.rb