class Cronbox::DataFile

Attributes

config[RW]
entries[RW]

Public Class Methods

new(file) click to toggle source
# File lib/cronbox/data_file.rb, line 5
def initialize(file)
  @file = file
  reset
  reload if File.exist?(@file)
end

Public Instance Methods

add_entry(entry) click to toggle source
# File lib/cronbox/data_file.rb, line 47
def add_entry(entry)
  entry['id'] = next_id
  @entries.push entry
end
del_entry(entry) click to toggle source
# File lib/cronbox/data_file.rb, line 52
def del_entry(entry)
  @entries.delete(entry)
end
empty!() click to toggle source
# File lib/cronbox/data_file.rb, line 28
def empty!
  reset
  save!
end
find_entry(query) click to toggle source
# File lib/cronbox/data_file.rb, line 35
def find_entry(query)
  k = query.keys.first
  v = query[k]
  return nil unless v
  @entries.each do |e|
    if e[k.to_s] == v
      return e
    end
  end
  nil
end
reload() click to toggle source
# File lib/cronbox/data_file.rb, line 16
def reload
  import_text(File.read(@file))
end
reset() click to toggle source
# File lib/cronbox/data_file.rb, line 11
def reset
  @config ||= Hash.new
  @entries = Array.new
end
save!() click to toggle source
# File lib/cronbox/data_file.rb, line 20
def save!
  save_dir = File.dirname(@file)
  unless Dir.exist?(save_dir)
    raise "Directory does not exist, #{save_dir}"
  end
  File.open(@file, 'w') { |file| file.write(export_text) }
end

Protected Instance Methods

export_text() click to toggle source
# File lib/cronbox/data_file.rb, line 64
def export_text
  JSON.pretty_generate({
      :'config' => @config,
      :'entries' => @entries.sort_by { |e| e['id'] }
  })
end
import_text(input) click to toggle source
# File lib/cronbox/data_file.rb, line 58
def import_text(input)
  data = JSON.parse(input)
  @config = data['config'] || Hash.new
  @entries = data['entries'] || Array.new
end
next_id() click to toggle source
# File lib/cronbox/data_file.rb, line 71
def next_id
  ni = 1
  indexes = @entries.map { |e| e['id'].to_i }
  indexes.sort.each do |i|
    if i > ni
      return ni
    elsif i == ni
      ni += 1
    end
  end
  ni
end