class Hashematics::Category
A Category
is an index of objects. It holds two things:
-
list of top-level objects
-
list of top-level objects cross-referenced by a parent.
Attributes
default_parent_id[R]
id_key[R]
include_blank[R]
lookup[R]
parent_key[R]
Public Class Methods
new(id_key:, include_blank: false, parent_key: nil)
click to toggle source
# File lib/hashematics/category.rb, line 17 def initialize(id_key:, include_blank: false, parent_key: nil) raise ArgumentError, 'id_key is required' unless id_key @default_parent_id = Id.default @id_key = Key.get(id_key) @include_blank = include_blank || false @lookup = {} @parent_key = Key.get(parent_key) freeze end
Public Instance Methods
add(record)
click to toggle source
# File lib/hashematics/category.rb, line 35 def add(record) return self if skip_record?(record) set( record.id(parent_key), record.id(id_key), record ) end
records(parent_record = nil)
click to toggle source
# File lib/hashematics/category.rb, line 29 def records(parent_record = nil) parent_id = parent_record&.id(parent_key) || default_parent_id get(parent_id).values end
Private Instance Methods
get(parent_id)
click to toggle source
# File lib/hashematics/category.rb, line 57 def get(parent_id) lookup[parent_id] ||= {} end
include_record?(record)
click to toggle source
# File lib/hashematics/category.rb, line 53 def include_record?(record) include_blank || record.id?(id_key) end
set(parent_id, id, record)
click to toggle source
# File lib/hashematics/category.rb, line 61 def set(parent_id, id, record) get(parent_id)[id] = record self end
skip_record?(record)
click to toggle source
# File lib/hashematics/category.rb, line 49 def skip_record?(record) !include_record?(record) end