require 'sequel_core' module Sequel class Model alias_method :model, :class end end files = %w[ inflector inflections base hooks record schema associations caching plugins validations eager_loading deprecated ] dir = File.join(File.dirname(__FILE__), "sequel_model") files.each {|f| require(File.join(dir, f))} module Sequel class Model extend Enumerable extend Associations # Returns a string representation of the model instance including # the class name and values. def inspect "#<%s @values=%s>" % [self.class.name, @values.inspect] end # Defines a method that returns a filtered dataset. def self.subset(name, *args, &block) def_dataset_method(name){filter(*args, &block)} end # Finds a single record according to the supplied filter, e.g.: # # Ticket.find :author => 'Sharon' # => record # Ticket.find {:price == 17} # => Dataset # def self.find(*args, &block) dataset.filter(*args, &block).first end # TODO: doc def self.[](*args) args = args.first if (args.size == 1) if args === true || args === false raise Error::InvalidFilter, "Did you mean to supply a hash?" end dataset[(Hash === args) ? args : primary_key_hash(args)] end # TODO: doc def self.fetch(*args) db.fetch(*args).set_model(self) end # Like find but invokes create with given conditions when record does not # exists. def self.find_or_create(cond) find(cond) || create(cond) end # Deletes all records in the model's table. def self.delete_all dataset.delete end # Like delete_all, but invokes before_destroy and after_destroy hooks if used. def self.destroy_all dataset.destroy end # Add dataset methods via metaprogramming DATASET_METHODS = %w'all avg count delete distinct eager eager_graph each each_page empty? except exclude filter first from_self full_outer_join graph group group_and_count group_by having import inner_join insert insert_multiple intersect interval invert_order join join_table last left_outer_join limit multi_insert naked order order_by order_more paginate print query range reverse_order right_outer_join select select_all select_more set set_graph_aliases single_value size to_csv transform union uniq unordered update where' def_dataset_method *DATASET_METHODS end end