Module: Zena::Use::QueryNode::ModelMethods
- Included in:
- Node
- Defined in:
- lib/zena/use/query_node.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#db_attr ⇒ Object
Return a hash with the values contained in the SQL query with ‘AS’ (used with custom queries).
-
#find(count, pseudo_sql = nil, opts = {}) ⇒ Object
Find related nodes.
- #safe_first(query) ⇒ Object
- #start_node_zip ⇒ Object
Class Method Details
.included(base) ⇒ Object
16 17 18 19 20 21 22 23 24 |
# File 'lib/zena/use/query_node.rb', line 16 def self.included(base) base.class_eval do include ::QueryBuilder extend ClassMethods self.query_compiler = Zena::Use::QueryNode::Compiler safe_method :db_attr => StringDictionary safe_method [:first, String] => {:class => Node, :nil => true, :method => 'safe_first'} end end |
Instance Method Details
#db_attr ⇒ Object
Return a hash with the values contained in the SQL query with ‘AS’ (used with custom queries).
63 64 65 66 67 68 |
# File 'lib/zena/use/query_node.rb', line 63 def db_attr @db_attr ||= Hash[*@attributes.select do |key, value| !self.class.column_names.include?(key) # db fetch only: select 'now() - created_at AS age' ----> 'age' can be read end.flatten] end |
#find(count, pseudo_sql = nil, opts = {}) ⇒ Object
Find related nodes. See Node#build_find for details on the options available. TODO: do we need rubyless translate here ? It should be removed.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/zena/use/query_node.rb', line 33 def find(count, pseudo_sql = nil, opts = {}) if pseudo_sql.nil? pseudo_sql = count count = Node.plural_relation?(pseudo_sql.split(' ').first) ? :all : :first end if !opts[:skip_rubyless] && type = RubyLess::SafeClass.safe_method_type_for(self.class, [pseudo_sql]) self.send(type[:method]) else begin query = self.class.build_query(count, pseudo_sql, :node_name => 'self', :main_class => virtual_class, :rubyless_helper => (opts[:rubyless_helper] || virtual_class), # should it be || self ? :default => opts[:default] ) if limit = opts[:limit] query.limit = " LIMIT #{limit.to_i}" query.offset = " OFFSET #{opts[:offset].to_i}" end rescue ::QueryBuilder::Error => err return opts[:errors] ? err : nil end type = [:all, :first].include?(count) ? :find : :count Node.do_find(count, eval(query.to_s(type))) end end |
#safe_first(query) ⇒ Object
26 27 28 |
# File 'lib/zena/use/query_node.rb', line 26 def safe_first(query) find(:first, query, :skip_rubyless => true) end |
#start_node_zip ⇒ Object
70 71 72 |
# File 'lib/zena/use/query_node.rb', line 70 def start_node_zip self.zip end |