Class: CustomTracker::Table
- Inherits:
-
Object
- Object
- CustomTracker::Table
- Includes:
- Enumerable
- Defined in:
- lib/custom_tracker/table.rb
Overview
A group of entries with similar data.
Instance Attribute Summary collapse
-
#columns ⇒ Array<Symbol>
readonly
Array of column names.
Instance Method Summary collapse
-
#accepts?(entry) ⇒ Boolean
Whether this entry is acceptable.
-
#initialize(options) ⇒ Table
constructor
Creates new table.
-
#record(entry, options = {}) ⇒ Entry?
Checks whether this entry is acceptable and saves it.
-
#save ⇒ Integer
Saves all unsaved entries.
-
#size ⇒ Integer
Total amount of entries.
-
#size_saved ⇒ Integer
Amount of saved entries.
-
#size_unsaved ⇒ Integer
Amount of unsaved entries.
Constructor Details
#initialize(options) ⇒ Table
Creates new table.
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/custom_tracker/table.rb', line 41 def initialize() @columns = [:columns].select { |s| s.is_a? Symbol } @columns.freeze @saving_block = [:saving_block] unless @saving_block.respond_to? :call raise ArgumentError, "saving_block is not responding to call method!", caller end @autosave = [:autosave] ? [:autosave].to_i : nil @size_saved = 0 @unsaved_entries = [] @mutex = Mutex.new end |
Instance Attribute Details
#columns ⇒ Array<Symbol> (readonly)
28 29 30 |
# File 'lib/custom_tracker/table.rb', line 28 def columns @columns end |
Instance Method Details
#accepts?(entry) ⇒ Boolean
61 62 63 |
# File 'lib/custom_tracker/table.rb', line 61 def accepts?(entry) @columns.all? { |sym| entry.has? sym } end |
#record(entry, options = {}) ⇒ Entry?
Checks whether this entry is acceptable and saves it.
75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/custom_tracker/table.rb', line 75 def record(entry, = {}) entry = Entry.new(entry) if entry.is_a? Hash instant_save = !![:instant_save] if accepts? entry @unsaved_entries.push(entry) save if instant_save || (@autosave && size_unsaved >= @autosave) entry else nil end end |
#save ⇒ Integer
Saves all unsaved entries.
Execution of this method is syncronized with Mutex local to current table.
95 96 97 98 99 100 101 102 103 104 |
# File 'lib/custom_tracker/table.rb', line 95 def save @mutex.synchronize do @saving_block.call(@unsaved_entries, self) re = @unsaved_entries.size @size_saved += re @unsaved_entries.clear re end end |
#size ⇒ Integer
10 11 12 |
# File 'lib/custom_tracker/table.rb', line 10 def size size_unsaved + size_saved end |
#size_saved ⇒ Integer
22 23 24 |
# File 'lib/custom_tracker/table.rb', line 22 def size_saved @size_saved end |
#size_unsaved ⇒ Integer
16 17 18 |
# File 'lib/custom_tracker/table.rb', line 16 def size_unsaved @unsaved_entries.size end |