class Relation
Constants
- SQL_COMMANDS
Attributes
cache[RW]
klass[R]
sql_clauses[R]
values[RW]
Public Class Methods
new(klass, values = [], sql_clauses = {})
click to toggle source
# File lib/laris/larisrecord/relation.rb, line 14 def initialize(klass, values = [], sql_clauses = {}) @klass = klass @values = values @sql_clauses = sql_defaults.merge(sql_clauses) @cache = nil end
Public Instance Methods
joins(table, on = nil)
click to toggle source
allows only a single join
# File lib/laris/larisrecord/relation.rb, line 36 def joins(table, on = nil) condition = "#{table} ON #{on}" sql_clauses[:joins] = [sql_clauses[:joins], condition].compact.join(' JOIN ') self end
limit(n)
click to toggle source
# File lib/laris/larisrecord/relation.rb, line 45 def limit(n) sql_clauses[:limit] = n self end
method_missing(method, *args, &blk)
click to toggle source
# File lib/laris/larisrecord/relation.rb, line 21 def method_missing(method, *args, &blk) query if cache.nil? cache.send(method, *args, &blk) end
order(column, direction = 'ASC')
click to toggle source
# File lib/laris/larisrecord/relation.rb, line 30 def order(column, direction = 'ASC') sql_clauses[:order] = "#{table_name}.#{column} #{direction}" self end
reload!()
click to toggle source
# File lib/laris/larisrecord/relation.rb, line 26 def reload! query end
where(conditions)
click to toggle source
# File lib/laris/larisrecord/relation.rb, line 50 def where(conditions) new_fragments = conditions.map do |attr_name, value| values << value "#{table_name}.#{attr_name} = ?" end where_fragments = new_fragments.unshift(sql_clauses[:where]) sql_clauses[:where] = where_fragments.compact.join(" AND ") self end
Private Instance Methods
query()
click to toggle source
# File lib/laris/larisrecord/relation.rb, line 63 def query results = DBConnection.execute(statement, values) self.cache = klass.parse_all(results) end
sql_defaults()
click to toggle source
# File lib/laris/larisrecord/relation.rb, line 68 def sql_defaults { select: "#{table_name}.*", from: "#{table_name}" } end
statement()
click to toggle source
# File lib/laris/larisrecord/relation.rb, line 75 def statement clauses = SQL_COMMANDS.map do |keyword, command| "#{command} #{sql_clauses[keyword]}" if sql_clauses[keyword] end clauses.compact.join(" ") end
table_name()
click to toggle source
# File lib/laris/larisrecord/relation.rb, line 82 def table_name klass.table_name end