class Locomotive::Steam::Adapters::Memory::Query

Attributes

conditions[R]

Public Class Methods

key(name, operator) click to toggle source
# File lib/locomotive/steam/adapters/memory/query.rb, line 105
def self.key(name, operator)
  "#{name}.#{operator}"
end
new(dataset, locale = nil, &block) click to toggle source
# File lib/locomotive/steam/adapters/memory/query.rb, line 19
def initialize(dataset, locale = nil, &block)
  @dataset    = dataset
  @conditions = []
  @sorting    = nil
  @limit      = nil
  @offset     = 0
  @locale     = locale
  instance_eval(&block) if block_given?
end

Public Instance Methods

+(query) click to toggle source
# File lib/locomotive/steam/adapters/memory/query.rb, line 34
def +(query)
  @conditions += query.conditions
  self
end
==(other) click to toggle source
Calls superclass method
# File lib/locomotive/steam/adapters/memory/query.rb, line 58
def ==(other)
  if other.kind_of? Array
    all == other
  else
    super
  end
end
all() click to toggle source
# File lib/locomotive/steam/adapters/memory/query.rb, line 66
def all
  # TODO: instrumentation here
  # Locomotive::Common::Logger.debug "[dataset][#{@dataset.name}] conditions = #{@conditions.map(&:inspect).join(' AND ')}"
  limited sorted(filtered)
end
filtered() click to toggle source
# File lib/locomotive/steam/adapters/memory/query.rb, line 90
def filtered
  @dataset.all.dup.find_all do |entry|
    accepted = true

    @conditions.each do |_condition|
      unless _condition.matches?(entry)
        accepted = false
        break # no to go further
      end
    end

    accepted
  end
end
k(name, operator)
Alias for: key
key(name, operator) click to toggle source
# File lib/locomotive/steam/adapters/memory/query.rb, line 109
def key(name, operator)
  self.class.key(name, operator)
end
Also aliased as: k
limit(num) click to toggle source
# File lib/locomotive/steam/adapters/memory/query.rb, line 44
def limit(num)
  @limit = num
  self
end
limited(entries) click to toggle source
# File lib/locomotive/steam/adapters/memory/query.rb, line 78
def limited(entries)
  return [] if @limit == 0
  return entries if @offset == 0 && @limit.nil?

  subentries = entries.drop(@offset || 0)
  if @limit.kind_of? Integer
    subentries.take(@limit)
  else
    subentries
  end
end
offset(num) click to toggle source
# File lib/locomotive/steam/adapters/memory/query.rb, line 49
def offset(num)
  @offset = num
  self
end
only(*fields) click to toggle source
# File lib/locomotive/steam/adapters/memory/query.rb, line 54
def only(*fields)
  self
end
order_by(*args) click to toggle source
# File lib/locomotive/steam/adapters/memory/query.rb, line 39
def order_by(*args)
  @sorting = Order.new(*args)
  self
end
sorted(entries) click to toggle source
# File lib/locomotive/steam/adapters/memory/query.rb, line 72
def sorted(entries)
  return entries if @sorting.blank?

  entries.sort_by { |entry| @sorting.apply_to(entry, @locale) }
end
where(conditions = {}) click to toggle source
# File lib/locomotive/steam/adapters/memory/query.rb, line 29
def where(conditions = {})
  @conditions += conditions.map { |name, value| Condition.new(name, value, @locale) }
  self
end