class Depository::Collection
Public Class Methods
config()
click to toggle source
# File lib/depository/collection.rb, line 18 def config @_config ||= CollectionConfig.new end
convert(attrs)
click to toggle source
# File lib/depository/collection.rb, line 72 def convert(attrs) case attrs when Array attrs.map(&method(:convert)) when Hash config.model.new(Serialize.unpack(config, attrs)) else raise UnknownConversionType, "unable to convert #{attrs.inspect}" end end
create(attrs)
click to toggle source
# File lib/depository/collection.rb, line 47 def create(attrs) save(config.model.new(attrs)) end
db()
click to toggle source
# File lib/depository/collection.rb, line 22 def db Result.new(config.db, self) end
delete(key)
click to toggle source
# File lib/depository/collection.rb, line 68 def delete(key) db.where(config.primary_key => key).delete end
find(key)
click to toggle source
# File lib/depository/collection.rb, line 59 def find(key) result = key.nil? ? nil : where(config.primary_key => key).first raise RecordNotFound, "no record found in collection with id `#{key.inspect}'" if result.nil? return result end
find_by(key, value)
click to toggle source
# File lib/depository/collection.rb, line 30 def find_by(key, value) where(key => value).first end
join_as(table, *args, &blk)
click to toggle source
# File lib/depository/collection.rb, line 83 def join_as(table, *args, &blk) select(*config.model._fields.map { |f| :"#{table}__#{f}"}).join(*args, &blk) end
save(model)
click to toggle source
# File lib/depository/collection.rb, line 34 def save(model) pkey = config.primary_key if new?(model) model.send(:"#{pkey}=", db.insert(Serialize.pack(config, model))) else db.where(pkey => model.send(pkey)). update(Serialize.pack(config, model)) end return model end
scope(name, blk)
click to toggle source
# File lib/depository/collection.rb, line 26 def scope(name, blk) define_singleton_method(name) { |*args| instance_exec *args, &blk } end
update(*args, &blk)
click to toggle source
# File lib/depository/collection.rb, line 51 def update(*args, &blk) model = find(*args) blk.call(model) save(model) model end
Private Class Methods
new?(model)
click to toggle source
# File lib/depository/collection.rb, line 89 def new?(model) model.send(config.primary_key).nil? end