Class: Koi::Database

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/koi.rb

Constant Summary collapse

EntityNotFound =
Class.new(RuntimeError)

Instance Method Summary collapse

Constructor Details

#initialize(path = nil) ⇒ Database

Returns a new instance of Database.



236
237
238
239
240
241
242
# File 'lib/koi.rb', line 236

def initialize path = nil
  if @path = path
    self.load path
  else
    @data = []
  end
end

Instance Method Details

#<<(entry) ⇒ Object



289
290
291
# File 'lib/koi.rb', line 289

def << entry
  @data << (entry.is_a?(Entity) ? entry : Entity.new(entry))
end

#delete(arg) ⇒ Object



272
# File 'lib/koi.rb', line 272

def delete(arg)   @data.delete  arg  end

#each(&blk) ⇒ Object



285
286
287
# File 'lib/koi.rb', line 285

def each &blk
  @data.each &blk
end

#find(key) ⇒ Object Also known as: []



244
245
246
247
248
249
250
251
252
253
254
255
# File 'lib/koi.rb', line 244

def find key
  if key.is_a? String
    @data.find {|e| e[:title].include? key }
  elsif key.is_a? Fixnum
    entities = @data.select {|e| e[:status] == :created}
    (entities.select(&:sticky?) + entities.reject(&:sticky?))[key]
  else
    raise ArgumentError, "key must be a String or Fixnum, but is #{key.class}"
  end.tap do |result|
    raise EntityNotFound if result.nil?
  end
end

#firstObject



270
# File 'lib/koi.rb', line 270

def first; fresh.first end

#freshObject



258
259
260
# File 'lib/koi.rb', line 258

def fresh
  @data.select {|e| e.new? }
end

#index(*args, &blk) ⇒ Object



274
# File 'lib/koi.rb', line 274

def index(*args, &blk) @data.index *args, &blk end

#insert(*args) ⇒ Object



273
# File 'lib/koi.rb', line 273

def insert(*args) @data.insert *args end

#lastObject



271
# File 'lib/koi.rb', line 271

def last;  fresh.last  end

#listObject



262
263
264
# File 'lib/koi.rb', line 262

def list
  fresh.select(&:sticky?) + fresh.reject(&:sticky?)
end

#load(path = ) ⇒ Object



276
277
278
279
280
281
282
283
# File 'lib/koi.rb', line 276

def load path = @path || Path[:db]
  @data = if db = YAML.load_file(path)
    db.map {|e| Entity.new(e) }
  else
    []
  end
  self
end

#sizeObject

Hash-like methods on @data



269
# File 'lib/koi.rb', line 269

def size;  fresh.size  end

#to_yaml(*args, &blk) ⇒ Object



293
294
295
# File 'lib/koi.rb', line 293

def to_yaml *args, &blk
  @data.to_yaml *args, &blk
end