Module: Gitter::Base

Extended by:
ActiveSupport::Concern
Included in:
Grid, PivotGrid
Defined in:
lib/gitter/base.rb

Defined Under Namespace

Modules: ClassMethods

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#decoratorObject (readonly)

Returns the value of attribute decorator.



22
23
24
# File 'lib/gitter/base.rb', line 22

def decorator
  @decorator
end

#optionsObject (readonly)

Returns the value of attribute options.



22
23
24
# File 'lib/gitter/base.rb', line 22

def options
  @options
end

#paramsObject (readonly)

Returns the value of attribute params.



22
23
24
# File 'lib/gitter/base.rb', line 22

def params
  @params
end

#valuesObject (readonly)

Returns the value of attribute values.



22
23
24
# File 'lib/gitter/base.rb', line 22

def values
  @values
end

Instance Method Details

#driverObject



61
62
63
64
65
66
# File 'lib/gitter/base.rb', line 61

def driver
  @driver ||= begin
    scope = Proc === @scope ? instance_eval(&@scope) : @scope
    create_driver scope
  end
end

#facet(name) ⇒ Object



130
131
132
# File 'lib/gitter/base.rb', line 130

def facet name
  @facets[name]
end

#facetsObject



126
127
128
# File 'lib/gitter/base.rb', line 126

def facets
  @_facets_ ||= @facets.values
end

#filter(*args, &block) ⇒ Object

Raises:



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/gitter/base.rb', line 86

def filter *args, &block
  opts = args.extract_options!
  raise ConfigurationError, 'only zero or one argument allowed' if args.size > 1
  name = args.first

  filter = case
  when opts.delete(:range)
    raise ConfigurationError, "no block allowed for range filter #{name}" if block
    return range_filter name, opts # return is required
  when block 
    BlockFilter.new self, name, opts, &block
  when select = opts.delete(:select)
    if opts[:facet] && opts[:facet] != true
      opts.merge! values: opts[:facet]
    end
    select = [select] unless select.respond_to?(:each)
    filters = select.map do |label,filter_name| 
      filter_name ||= label
      @filters[filter_name] || scope_filter(label,filter_name,label: label)
    end
    SelectFilter.new self, name, filters, opts
  when scope_name = opts.delete(:scope)
    scope_name = name if scope_name == true
    scope_filter name, scope_name
  else 
    if opts[:facet] && opts[:facet] != true
      opts.merge! values: opts[:facet]
    end
    ColumnFilter.new self, name, opts
  end

  @facets[name] = Facet.new(filter) if opts[:facet]
  @filters[name] = filter 
end

#filter_for(name) ⇒ Object



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

def filter_for name
  @filters[name]     
end

#filter_value(filter_name) ⇒ Object



45
46
47
# File 'lib/gitter/base.rb', line 45

def filter_value filter_name
  @values[filter_name] 
end

#filtered_driverObject



68
69
70
71
72
73
74
75
76
# File 'lib/gitter/base.rb', line 68

def filtered_driver
  @filter_driver ||= begin
    d = driver
    @values.each do |name, value| 
      d = @filters[name].apply d, value
    end
    d
  end
end

#filtersObject



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

def filters
  @filters.values 
end

#initialize(*args) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/gitter/base.rb', line 24

def initialize *args
  opts = args.extract_options!
  @decorator = Artdeco::Decorator.new *args, opts

  @params = @decorator.params.fetch(key){{}}.symbolize_keys

  @filters, @values, @facets = {}.with_indifferent_access, {}.with_indifferent_access, {}.with_indifferent_access 
  scope = opts.delete(:scope){nil}
  @options = opts.dup

  instance_eval &self.class.grid

  @scope = scope || @scope

  @params.each do |name, value|
    if filter = @filters[name] 
      @values[name] = value
    end
  end
end

#label(name) ⇒ Object



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

def label name
  filter_for(name).label
end

#scope(&scope) ⇒ Object



78
79
80
81
82
83
84
# File 'lib/gitter/base.rb', line 78

def scope &scope
  if scope
    @scope = scope
  else
    filtered_driver.scope
  end 
end

#search(name, opts = {}) ⇒ Object

shortcut for filter name, { exact: false, ignore_case: true, strip_blank: true }.merge(options)



122
123
124
# File 'lib/gitter/base.rb', line 122

def search name, opts = {} 
  filter name, { exact: false, ignore_case: true, strip_blank: true }.merge(opts)
end