Module: Zena::Use::QueryBuilder::ViewMethods

Includes:
RubyLess
Defined in:
lib/zena/use/query_builder.rb

Instance Method Summary collapse

Instance Method Details

#find_node_by_zip(zip) ⇒ Object



10
11
12
13
# File 'lib/zena/use/query_builder.rb', line 10

def find_node_by_zip(zip)
  return nil unless zip
  secure(Node) { Node.find_by_zip(zip) }
end

#query(class_name, node_name, pseudo_sql, opts = {}) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/zena/use/query_builder.rb', line 19

def query(class_name, node_name, pseudo_sql, opts = {})
  type = opts[:type] || :find
  @query_errors = nil
  if klass = VirtualClass[class_name]
    begin
      query = klass.build_query(:all, pseudo_sql,
        :node_name       => node_name,
        :main_class      => klass,
        # We use 'zafu_helper' (which is slower) instead of 'self' because our helper needs to have helper modules
        # mixed in and strangely RubyLess cannot access the helpers from 'self'.
        :rubyless_helper => zafu_helper.helpers
      )
      if type == :count
        return klass.do_find(:count, eval(query.to_s(:count)))
      else
        return klass.do_find(:all, eval(query.to_s))
      end
    rescue ::QueryBuilder::Error => err
      @query_errors = "<span class='query'>#{pseudo_sql}</span> <span class='error'>#{err}</span>"
    end
  end
  # error
  type == :count ? 0 : nil
end

#query_errorsObject



15
16
17
# File 'lib/zena/use/query_builder.rb', line 15

def query_errors
  @query_errors
end

#query_parse(params) ⇒ Object

Takes a hash of parameters and builds query arguments for SQLiss the query ends up like ‘ AND param_name = “foo” AND param_name > 35’…



46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/zena/use/query_builder.rb', line 46

def query_parse(params)
  params ||= {}
  res = []
  if params.kind_of?(String)
    return params
  elsif params.kind_of?(Hash)
    params.each do |k,v|
      clause = query_build_clause(k,v)
      res << clause unless clause.blank?
    end
  end
  res.empty? ? '1=1' : res.join(' and ')
end