Class: Samovar::Table
- Inherits:
-
Object
- Object
- Samovar::Table
- Defined in:
- lib/samovar/table.rb
Class Method Summary collapse
Instance Method Summary collapse
- #<<(row) ⇒ Object
- #[](key) ⇒ Object
- #each(&block) ⇒ Object
- #empty? ⇒ Boolean
- #freeze ⇒ Object
-
#initialize(parent = nil, name: nil) ⇒ Table
constructor
A new instance of Table.
- #merge_into(table) ⇒ Object
- #merged ⇒ Object
- #parse(input, parent) ⇒ Object
- #usage ⇒ Object
Constructor Details
#initialize(parent = nil, name: nil) ⇒ Table
Returns a new instance of Table.
31 32 33 34 35 |
# File 'lib/samovar/table.rb', line 31 def initialize(parent = nil, name: nil) @parent = parent @name = name @rows = {} end |
Class Method Details
.nested(klass, parent = nil) ⇒ Object
23 24 25 26 27 28 29 |
# File 'lib/samovar/table.rb', line 23 def self.nested(klass, parent = nil) if klass.superclass.respond_to?(:table) parent = klass.superclass.table end self.new(parent, name: klass.name) end |
Instance Method Details
#<<(row) ⇒ Object
53 54 55 56 57 58 59 60 |
# File 'lib/samovar/table.rb', line 53 def << row if existing_row = @rows[row.key] and existing_row.respond_to?(:merge!) existing_row.merge!(row) else # In the above case where there is an existing row, but it doensn't support being merged, we overwrite it. This preserves order. @rows[row.key] = row.dup end end |
#[](key) ⇒ Object
45 46 47 |
# File 'lib/samovar/table.rb', line 45 def [] key @rows[key] end |
#each(&block) ⇒ Object
49 50 51 |
# File 'lib/samovar/table.rb', line 49 def each(&block) @rows.each_value(&block) end |
#empty? ⇒ Boolean
62 63 64 |
# File 'lib/samovar/table.rb', line 62 def empty? @rows.empty? && @parent&.empty? end |
#freeze ⇒ Object
37 38 39 40 41 42 43 |
# File 'lib/samovar/table.rb', line 37 def freeze return self if frozen? @rows.freeze super end |
#merge_into(table) ⇒ Object
66 67 68 69 70 71 72 73 74 |
# File 'lib/samovar/table.rb', line 66 def merge_into(table) @parent&.merge_into(table) @rows.each_value do |row| table << row end return table end |
#merged ⇒ Object
76 77 78 79 80 81 82 |
# File 'lib/samovar/table.rb', line 76 def merged if @parent.nil? or @parent.empty? return self else merge_into(self.class.new) end end |
#parse(input, parent) ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/samovar/table.rb', line 88 def parse(input, parent) @rows.each do |key, row| next unless row.respond_to?(:parse) current = parent.send(key) if result = row.parse(input, parent, current) parent.send("#{row.key}=", result) end end end |
#usage ⇒ Object
84 85 86 |
# File 'lib/samovar/table.rb', line 84 def usage @rows.each_value.collect(&:to_s).reject(&:empty?).join(' ') end |