Class: Metrojobb::Category

Inherits:
Model
  • Object
show all
Defined in:
lib/metrojobb/category.rb

Constant Summary collapse

NAME_ID_MAP =
lambda {
  top_categories = {}

  data = CSV.read(
    File.expand_path('../../../data/categories.csv', __FILE__)
  ).map do |row|
    id, name = row
    if id.length < 3
      top_categories[id] = name
    else
      top_id = id[0..1]
      top_id = id[0] if id.length == 3
      top_name = top_categories[top_id]
      name = "#{top_name} > #{name}"
    end
    [id, name]
  end

  data.to_h.invert.freeze
}.call
ID_NAME_MAP =
NAME_ID_MAP.invert.freeze

Constants inherited from Model

Model::InvalidError

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Model

#to_xml!

Instance Attribute Details

#idObject

Returns the value of attribute id.



6
7
8
# File 'lib/metrojobb/category.rb', line 6

def id
  @id
end

#nameObject

Returns the value of attribute name.



6
7
8
# File 'lib/metrojobb/category.rb', line 6

def name
  @name
end

Class Method Details

.id_name_mapObject



45
46
47
# File 'lib/metrojobb/category.rb', line 45

def self.id_name_map
  NAME_ID_MAP.invert
end

.idsObject



37
38
39
# File 'lib/metrojobb/category.rb', line 37

def self.ids
  NAME_ID_MAP.values
end

.name_id_mapObject



41
42
43
# File 'lib/metrojobb/category.rb', line 41

def self.name_id_map
  NAME_ID_MAP
end

.namesObject



33
34
35
# File 'lib/metrojobb/category.rb', line 33

def self.names
  NAME_ID_MAP.keys
end

Instance Method Details

#category_idObject



55
56
57
58
59
# File 'lib/metrojobb/category.rb', line 55

def category_id
  self.class.name_id_map[name.presence || id.presence] ||
    id.presence ||
    name.presence
end

#to_xml(builder: Builder::XmlMarkup.new(indent: DEFAULT_INDENT)) ⇒ Object



49
50
51
52
53
# File 'lib/metrojobb/category.rb', line 49

def to_xml(builder: Builder::XmlMarkup.new(indent: DEFAULT_INDENT))
  builder.category do |node|
    node.id(category_id.to_s)
  end
end

#validate_known_categoryObject



61
62
63
64
65
# File 'lib/metrojobb/category.rb', line 61

def validate_known_category
  return if self.class.id_name_map[category_id]

  errors.add(:category_id, :inclusion)
end