class YmlBuilder::Currencies

Public Class Methods

new() click to toggle source
# File lib/yml_builder/currencies.rb, line 4
def initialize
  init_class
end

Public Instance Methods

to_yml(ident = 4) click to toggle source

Метод формирует фрагмент YML файла каталога Яндекс.Маркет, содержащий список валют

@param [Integer] ident отступ от левого края в символах @return [String] фрагмент YML файла каталога Яндекс.Маркет

# File lib/yml_builder/currencies.rb, line 13
def to_yml(ident = 4)
  out = Array.new
  out << '<currencies>'

  @params.each do |key, value|
    out << "  <currency id=#{key.to_s.upcase.inspect} rate=#{value.to_s.upcase.inspect}/>" unless value.nil?
  end
  warn "Предупреждение: не указано ни одной валюты в секции 'currencies'" if out.count == 1

  out << '</currencies>'

  out.map! { |line| line = ' '.rjust(ident, ' ') + line }

  out.join("\n")
end

Private Instance Methods

init_class() click to toggle source
# File lib/yml_builder/currencies.rb, line 54
def init_class
  @params = Hash.new

  @params[:rur] = nil
  @params[:rub] = nil
  @params[:usd] = nil
  @params[:eur] = nil
  @params[:uah] = nil
  @params[:kzt] = nil
end
method_missing(method_sym, *arguments, &block) click to toggle source
Calls superclass method
# File lib/yml_builder/currencies.rb, line 66
def method_missing(method_sym, *arguments, &block)
  if @params.include?(method_sym.to_s.gsub(/=$/, '').to_sym)
    processing_method(method_sym, arguments.first)
  else
    super
  end
end
processing_method(method_sym, value) click to toggle source
# File lib/yml_builder/currencies.rb, line 41
def processing_method(method_sym, value)
  if method_sym.to_s.match(/=$/)
    key   = method_sym.to_s.gsub(/=$/, '')
    allow = [:cbrf, :nbu, :nbk, :cb]
    valid?(key.to_s, allow, value)

    @params[key.to_sym] = value
  else
    @params[method_sym.to_s.gsub(/=$/, '').to_sym]
  end
end
valid?(method_sym, allow, value) click to toggle source
# File lib/yml_builder/currencies.rb, line 33
def valid?(method_sym, allow, value)
  return true if value.to_s.match(/^\s*[+-]?((\d+_?)*\d+(\.(\d+_?)*\d+)?|\.(\d+_?)*\d+)(\s*|([eE][+-]?(\d+_?)*\d+)\s*)$/)
  return true if allow.include?(value)
  warn "Предупреждение: значение валюты #{method_sym.to_s.upcase} может быть цифрой или значением из #{allow.inspect}"
  false
end