class Queryalize::SerializableQuery
Attributes
chain_methods[R]
Public Class Methods
deserialize(data, mode = :json)
click to toggle source
# File lib/queryalize/serializable_query.rb, line 7 def self.deserialize(data, mode = :json) data = parse(data, mode) klass = data[:class].constantize chain_methods = data[:chain_methods] scope = klass chain_methods.each do |method, args| scope = scope.send(method, *args) end new(klass, scope, chain_methods) end
from_hash(hash)
click to toggle source
# File lib/queryalize/serializable_query.rb, line 21 def self.from_hash(hash) deserialize(hash, :hash) end
from_json(json)
click to toggle source
# File lib/queryalize/serializable_query.rb, line 25 def self.from_json(json) deserialize(json, :json) end
Also aliased as: _load
from_yaml(yaml)
click to toggle source
# File lib/queryalize/serializable_query.rb, line 29 def self.from_yaml(yaml) deserialize(yaml, :yaml) end
new(klass, scope = nil, chain_methods = { })
click to toggle source
# File lib/queryalize/serializable_query.rb, line 37 def initialize(klass, scope = nil, chain_methods = { }) @klass = klass if scope @scope = scope else @scope = klass end @chain_methods = chain_methods end
Private Class Methods
parse(data, mode)
click to toggle source
# File lib/queryalize/serializable_query.rb, line 98 def self.parse(data, mode) case mode when :json then data = JSON::parse(data) when :yaml then data = YAML.load(data) end data.symbolize_keys end
Public Instance Methods
_dump(depth)
click to toggle source
# File lib/queryalize/serializable_query.rb, line 64 def _dump(depth) to_json end
chain(name, *args)
click to toggle source
# File lib/queryalize/serializable_query.rb, line 72 def chain(name, *args) self.class.new(@klass, @scope.send(name, *args), @chain_methods.merge(name => args)) end
inspect()
click to toggle source
# File lib/queryalize/serializable_query.rb, line 88 def inspect if @chain_methods.empty? @klass.name else @klass.name + "." + @chain_methods.collect { |method, args| "#{method}(#{args.collect(&:inspect).join(", ")})" }.join(".") end end
method_missing(name, *args, &block)
click to toggle source
Calls superclass method
# File lib/queryalize/serializable_query.rb, line 76 def method_missing(name, *args, &block) if query_method?(name) chain(name, *args) elsif @scope.respond_to?(name) @scope.send(name, *args, &block) else super(name, *args, &block) end end
query_method?(name)
click to toggle source
# File lib/queryalize/serializable_query.rb, line 68 def query_method?(name) ActiveRecord::QueryMethods.public_instance_methods.include?(name.to_s) end
serialize(mode = :json)
click to toggle source
# File lib/queryalize/serializable_query.rb, line 48 def serialize(mode = :json) send("to_#{mode}") end
to_hash()
click to toggle source
# File lib/queryalize/serializable_query.rb, line 52 def to_hash { :class => @klass.name, :chain_methods => chain_methods } end
to_json()
click to toggle source
# File lib/queryalize/serializable_query.rb, line 56 def to_json to_hash.to_json end
to_yaml(opts = { })
click to toggle source
# File lib/queryalize/serializable_query.rb, line 60 def to_yaml(opts = { }) to_hash.to_yaml(opts) end