Class: DiverDown::Web::DefinitionStore
- Inherits:
-
Object
- Object
- DiverDown::Web::DefinitionStore
- Includes:
- Enumerable
- Defined in:
- lib/diver_down/web/definition_store.rb
Instance Method Summary collapse
- #combined_definition ⇒ DiverDown::Definition
- #definition_groups ⇒ Array<String, nil>
- #each {|DiverDown::Definition| ... } ⇒ Object
- #empty? ⇒ Boolean
- #filter_by_definition_group(definition_group) ⇒ Array<DiverDown::Definition>
- #get(id) ⇒ DiverDown::Definition
-
#initialize ⇒ DefinitionStore
constructor
A new instance of DefinitionStore.
- #key?(id) ⇒ Boolean
- #length ⇒ Integer (also: #size)
-
#set(*definitions) ⇒ Array<Integer>
Ids of the definitions.
Constructor Details
#initialize ⇒ DefinitionStore
Returns a new instance of DefinitionStore.
8 9 10 11 12 13 |
# File 'lib/diver_down/web/definition_store.rb', line 8 def initialize # Hash{ Integer(unique bit flag) => DiverDown::Definition } @definitions = [] @definition_group_store = Hash.new { |h, k| h[k] = [] } @combined_definition = nil end |
Instance Method Details
#combined_definition ⇒ DiverDown::Definition
46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/diver_down/web/definition_store.rb', line 46 def combined_definition if @combined_definition.nil? @combined_definition = DiverDown::Definition.combine( definition_group: nil, title: 'All Definitions', definitions: @definitions ) @combined_definition.freeze end @combined_definition end |
#definition_groups ⇒ Array<String, nil>
61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/diver_down/web/definition_store.rb', line 61 def definition_groups keys = @definition_group_store.keys # Sort keys with nil at the end with_nil = keys.include?(nil) keys.delete(nil) if with_nil keys.sort! keys.push(nil) if with_nil keys end |
#each {|DiverDown::Definition| ... } ⇒ Object
97 98 99 100 101 102 103 104 |
# File 'lib/diver_down/web/definition_store.rb', line 97 def each return enum_for(__method__) unless block_given? # NOTE: To allow values to be rewritten during #each, duplicate the value through #to_a. @definitions.each.with_index(1) do |definition, id| yield(id, definition) end end |
#empty? ⇒ Boolean
92 93 94 |
# File 'lib/diver_down/web/definition_store.rb', line 92 def empty? @definitions.empty? end |
#filter_by_definition_group(definition_group) ⇒ Array<DiverDown::Definition>
75 76 77 |
# File 'lib/diver_down/web/definition_store.rb', line 75 def filter_by_definition_group(definition_group) @definition_group_store.fetch(definition_group, []) end |
#get(id) ⇒ DiverDown::Definition
18 19 20 21 22 23 24 |
# File 'lib/diver_down/web/definition_store.rb', line 18 def get(id) index = id - 1 raise(KeyError, "id not found: #{id}") if id <= 0 || @definitions.size < id @definitions.fetch(index) end |
#key?(id) ⇒ Boolean
81 82 83 |
# File 'lib/diver_down/web/definition_store.rb', line 81 def key?(id) id.positive? && id <= @definitions.size end |
#length ⇒ Integer Also known as: size
86 87 88 |
# File 'lib/diver_down/web/definition_store.rb', line 86 def length @definitions.length end |
#set(*definitions) ⇒ Array<Integer>
Returns ids of the definitions.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/diver_down/web/definition_store.rb', line 28 def set(*definitions) definitions.map do raise(ArgumentError, 'definition already set') if _1.store_id _1.store_id = @definitions.size + 1 _1.freeze @definitions.push(_1) @definition_group_store[_1.definition_group] << _1 # Reset combined_definition @combined_definition = nil _1.store_id end end |