class Multext::MSD

Attributes

category_code_to_category[RW]
category_to_category_code[RW]
parse_dictionary[RW]
raw[RW]
value[RW]

Public Class Methods

new() click to toggle source
# File lib/multext/msd.rb, line 6
def initialize
  json = File.read("#{File.dirname(__FILE__)}/../../meta/structure.json")
  @raw = JSON.parse(json)

  @parse_dictionary = {}

  @category_code_to_category = {}
  @category_to_category_code = {}

  @value = {}

  @raw.each do |item|
    @category_code_to_category[item['category_code']] = item['category']
    @category_to_category_code[item['category']] = item['category_code']

    @parse_dictionary[item['language']] = {} if @parse_dictionary[item['language']].nil?
    @parse_dictionary[item['language']][item['category_code']] = {} if @parse_dictionary[item['language']][item['category_code']].nil?
    @parse_dictionary[item['language']][item['category_code']][item['position']] = {} if @parse_dictionary[item['language']][item['category_code']][item['position']].nil?
    @parse_dictionary[item['language']][item['category_code']][item['position']][item['value_code']] = item['attribute'] if @parse_dictionary[item['language']][item['category_code']][item['position']][item['value_code']].nil?

    @value[item['category_code']] = {} if @value[item['category_code']].nil?
    @value[item['category_code']][item['attribute']] = item['value'] if @value[item['category_code']][item['attribute']] .nil?
  end
end

Public Instance Methods

filter(params) click to toggle source
# File lib/multext/msd.rb, line 32
def filter(params)
  @raw.find_all do |item|
    bool = true

    params.each do |arr|
      name  = arr.first.to_s.downcase
      value = arr.last

      if (value.respond_to? 'map')
        value = value.map { |ele| ele.to_s.downcase }
        bool = value.include?(item[name].to_s.downcase)
      else
        bool = item[name].to_s.downcase == value.to_s.downcase
      end

      break unless bool
    end

    bool
  end
end
parse(str, language) click to toggle source
# File lib/multext/msd.rb, line 54
def parse(str, language)
  result = { 
    language: language,
    category: {
      name: nil,
      code: nil
    },
    attributes: []
  }

  str.split('').each_with_index do |char, i|
    if i == 0
      result[:category][:code] = char
      result[:category][:name] = @category_code_to_category[char]
      next
    end

    next if char == '-'

    attribute = {
      position: i,
      value: {
        code: char
      }
    }
    
    attribute[:name] = @parse_dictionary[language.to_s][result[:category][:code]][i.to_s][attribute[:value][:code]]
    attribute[:value][:name] = @value[result[:category][:code]][attribute[:name]]

    result[:attributes] << attribute
  end

  result
end