class Queryalize::SerializableQuery

Attributes

chain_methods[R]

Public Class Methods

_load(json)
Alias for: from_json
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