module WiseGopher::Base::Methods
instance methods for WiseGopher::Base
Public Class Methods
new(inputs = {})
click to toggle source
# File lib/wise_gopher/base.rb, line 90 def initialize(inputs = {}) @inputs = inputs @binds = [] @bind_symbol = WiseGopher.postgresql? ? +"$1" : "?" @query_prepared = false self.class.ensure_all_params_are_given(inputs) prepare_query end
Public Instance Methods
execute()
click to toggle source
# File lib/wise_gopher/base.rb, line 101 def execute ensure_row_class_is_declared result = connection.exec_query(query.squish, query_class.to_s, @binds, prepare: true) ensure_all_columns_are_declared(result) result.entries.map { |entry| row_class.new(entry) } end
prepare_query()
click to toggle source
# File lib/wise_gopher/base.rb, line 111 def prepare_query return if @query_prepared prepare_raw_params prepare_params @query_prepared = true end
Private Instance Methods
bind_collection_param(values, param)
click to toggle source
# File lib/wise_gopher/base.rb, line 148 def bind_collection_param(values, param) bindings = values.map { use_bind_symbol } replace_placeholder(param.name, bindings.join(", ")) values.each { |value| register_binding(value, param) } end
bind_params(value, param)
click to toggle source
# File lib/wise_gopher/base.rb, line 140 def bind_params(value, param) if value.is_a? Array bind_collection_param(value, param) else bind_single_param(value, param) end end
bind_single_param(value, param)
click to toggle source
# File lib/wise_gopher/base.rb, line 156 def bind_single_param(value, param) replace_placeholder(param.name, use_bind_symbol) register_binding(value, param) end
connection()
click to toggle source
# File lib/wise_gopher/base.rb, line 192 def connection ActiveRecord::Base.connection end
ensure_all_columns_are_declared(result)
click to toggle source
# File lib/wise_gopher/base.rb, line 186 def ensure_all_columns_are_declared(result) undeclared_columns = result.columns - row_class.columns.keys - row_class.ignored_columns raise UndeclaredColumns, undeclared_columns if undeclared_columns.any? end
ensure_row_class_is_declared()
click to toggle source
# File lib/wise_gopher/base.rb, line 182 def ensure_row_class_is_declared raise RowClassIsMissing unless row_class end
prepare_params()
click to toggle source
# File lib/wise_gopher/base.rb, line 123 def prepare_params query_class.params.each do |name, param| name = name.to_sym value = @inputs[name] bind_params(value, param) end end
prepare_raw_params()
click to toggle source
# File lib/wise_gopher/base.rb, line 196 def prepare_raw_params query_class.raw_params.each do |name, param| name = name.to_sym value = @inputs[name] replace_placeholder(name, param.to_s(value)) end end
query()
click to toggle source
# File lib/wise_gopher/base.rb, line 136 def query @query ||= query_class::QUERY.dup end
query_class()
click to toggle source
# File lib/wise_gopher/base.rb, line 132 def query_class self.class end
register_binding(value, param)
click to toggle source
# File lib/wise_gopher/base.rb, line 166 def register_binding(value, param) @binds << param.build_bind(value) end
replace_placeholder(name, value_to_insert)
click to toggle source
# File lib/wise_gopher/base.rb, line 162 def replace_placeholder(name, value_to_insert) query.gsub!(/{{ ?#{name} ?}}/, value_to_insert) end
use_bind_symbol()
click to toggle source
# File lib/wise_gopher/base.rb, line 170 def use_bind_symbol if WiseGopher.postgresql? symbol = @bind_symbol.dup @bind_symbol.next! symbol else @bind_symbol end end