Class: Gitter::EnumerableDriver

Inherits:
AbstractDriver show all
Defined in:
lib/gitter/drivers/enumerable_driver.rb

Instance Attribute Summary

Attributes inherited from AbstractDriver

#scope

Instance Method Summary collapse

Methods inherited from AbstractDriver

#initialize, #new

Constructor Details

This class inherits a constructor from Gitter::AbstractDriver

Instance Method Details

#countObject



6
7
8
# File 'lib/gitter/drivers/enumerable_driver.rb', line 6

def count
  scope.size
end

#distinct_values(attr) ⇒ Object



65
66
67
# File 'lib/gitter/drivers/enumerable_driver.rb', line 65

def distinct_values attr
  group(attr).keys.uniq
end

#each(&block) ⇒ Object



57
58
59
# File 'lib/gitter/drivers/enumerable_driver.rb', line 57

def each &block
  new scope.each(&block)
end

#greater_or_equal(attr, value) ⇒ Object



49
50
51
# File 'lib/gitter/drivers/enumerable_driver.rb', line 49

def greater_or_equal attr, value
  scope.find_all{|item| item.send(:attr) >= value}
end

#group(arg) ⇒ Object



23
24
25
# File 'lib/gitter/drivers/enumerable_driver.rb', line 23

def group arg
  new scope.group_by(&arg)
end

#less_or_equal(attr, value) ⇒ Object



53
54
55
# File 'lib/gitter/drivers/enumerable_driver.rb', line 53

def less_or_equal attr, value
  scope.find_all{|item| item.send(:attr) <= value}
end

#named_scope(name) ⇒ Object

Raises:

  • (NotImplementError)


61
62
63
# File 'lib/gitter/drivers/enumerable_driver.rb', line 61

def named_scope name
  raise NotImplementError
end

#order(attr, desc = nil) ⇒ Object



10
11
12
13
14
15
16
17
# File 'lib/gitter/drivers/enumerable_driver.rb', line 10

def order attr, desc = nil
  sign = case desc
    when true, 'true'   then 1 
    when false, 'false' then -1
    else -1 
  end
  new scope.sort{|a,b| sign * (a.send(attr).try(:to_s) <=> b.send(attr).try(:to_s)) }
end

#to_sObject



69
70
71
# File 'lib/gitter/drivers/enumerable_driver.rb', line 69

def to_s
  scope.to_s
end

#unorderedObject



19
20
21
# File 'lib/gitter/drivers/enumerable_driver.rb', line 19

def unordered
  self
end

#where(attr_values, opts = {}) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/gitter/drivers/enumerable_driver.rb', line 27

def where attr_values, opts = {}
  exact = opts.fetch(:exact){true}
  ignore_case = opts.fetch(:ignore_case){false}
  strip_blank = opts.fetch(:strip_blank){false}

  attr_texts =  attr_values.map do |attr,value| 
    value = value.strip if strip_blank
    text = exact ? value : /#{value}/
    text = /#{value}/i if ignore_case
    [attr,text]
  end

  s = scope.find_all do |item|
    attr_texts.all? do |attr,text| 
      data = item.send(attr).try(:to_s)
      text === data
    end
  end

  new s
end