Class: Card::Query

Inherits:
Object show all
Defined in:
lib/card/query.rb,
lib/card/query/ref_clause.rb,
lib/card/query/card_clause.rb,
lib/card/query/value_clause.rb

Defined Under Namespace

Classes: CardClause, Clause, RefClause, SqlCond, SqlStatement, ValueClause

Constant Summary collapse

MODIFIERS =
{}
OPERATORS =
%w{ != = =~ < > in ~ }.inject({}) {|h,v| h[v]=nil; h }.merge({
  :eq    => '=',   :gt => '>',    :lt      => '<',
  :match => '~',   :ne => '!=',   'not in' => nil
}.stringify_keys)

Instance Method Summary collapse

Constructor Details

#initialize(query) ⇒ Query

Returns a new instance of Query.



16
17
18
# File 'lib/card/query.rb', line 16

def initialize query
  @card_clause = CardClause.build query
end

Instance Method Details

#queryObject



20
21
22
# File 'lib/card/query.rb', line 20

def query
  @card_clause.query
end

#runObject



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/card/query.rb', line 28

def run
#    puts "~~~~~~~~~~~~~~\nCARD SPEC =\n#{@card_clause.rawclause}\n\n-----\n\nSQL=\n#{sql}"
  rows = ActiveRecord::Base.connection.select_all( sql )
  retrn = query[:return].present? ? query[:return].to_s : 'card'
  case retrn 
  when 'card'
    rows.map do |row|
      card=
        if query[:prepend] || query[:append]
          cardname = [query[:prepend], row['name'], query[:append]].compact.join('+')
          Card.fetch cardname, :new=>{}
        else
          Card[ row['name'] ]
        end
      card.nil? ? Card.find_by_name_and_trash(row['name'],false).repair_key : card
    end
  when 'count'
    rows.first['count'].to_i
  when 'raw'
    rows
  else
    integer = ( retrn =~ /id$/ )
    rows.map do |row|
      integer ? row[retrn].to_i : row[retrn]
    end
  end
end

#sqlObject



24
25
26
# File 'lib/card/query.rb', line 24

def sql
  @sql ||= @card_clause.to_sql
end