class CfdiProcessor::DataExtractorBase
Attributes
nokogiri_xml[RW]
xml[RW]
Public Class Methods
new(xml)
click to toggle source
# File lib/cfdi_processor/data_extractor_base.rb, line 7 def initialize(xml) @xml = xml @nokogiri_xml = ::Nokogiri::XML(xml) @nokogiri_xml.remove_namespaces! I18n.load_path << File.expand_path("locale/en.yml", __dir__) I18n.locale = :en # => Hook methods: # # * Execute data extraction # * Translate data extracted # extract_data_from_xml translate_data end
Public Instance Methods
extract_data_from_xml()
click to toggle source
# File lib/cfdi_processor/data_extractor_base.rb, line 23 def extract_data_from_xml raise 'Undefined abstract method: #extract_data_from_xml' end
method_missing(name, *args, &block)
click to toggle source
> Search for the translate pattern at the beginning of the method,¶ ↑
if it is found, look for the translation based on the end of the method name and the argument that is passed to it.
Calls superclass method
# File lib/cfdi_processor/data_extractor_base.rb, line 35 def method_missing(name, *args, &block) if name.to_s.start_with?('_translate_') resource_name = name.to_s.sub('_translate_', '') instance_variable_get("@#{resource_name}").inject({}) do |translated, (key,value)| if value.kind_of?(Array) next if value.empty? items = value.each do |item| item.transform_keys!{ |k| I18n.t("#{args.first}.#{key}.#{k}") } end translated.merge!(I18n.t("#{args.first}.#{resource_name}.#{key}") => items) else translated.merge!(I18n.t("#{args.first}.#{resource_name}.#{key}") => value) end instance_variable_set("@#{resource_name}", translated) end else super end end
translate_data()
click to toggle source
# File lib/cfdi_processor/data_extractor_base.rb, line 27 def translate_data raise 'Undefined abstract method: #translate_data' end