livelist-rails 0.0.14 → 0.0.15
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/livelist/rails/active_record.rb +3 -0
- data/lib/livelist/rails/filter.rb +15 -5
- data/lib/livelist/rails/filter_criteria.rb +1 -1
- data/lib/livelist/rails/filter_criterion.rb +5 -5
- data/lib/livelist/rails/version.rb +1 -1
- data/spec/livelist/rails/filter_criterion_spec.rb +17 -1
- data/spec/livelist/rails/filter_spec.rb +27 -1
- data/spec/spec_helper.rb +1 -0
- metadata +3 -3
@@ -14,6 +14,8 @@ module Livelist
|
|
14
14
|
:reference_criteria => options[:reference_criteria],
|
15
15
|
:name => options[:name],
|
16
16
|
:model_name => model_name,
|
17
|
+
:attribute => options[:attribute],
|
18
|
+
:key_name => options[:key_name],
|
17
19
|
:slug => slug
|
18
20
|
)
|
19
21
|
end
|
@@ -25,6 +27,7 @@ module Livelist
|
|
25
27
|
def filter(params, options = {})
|
26
28
|
filters.relation(scoped, params, options)
|
27
29
|
end
|
30
|
+
|
28
31
|
end
|
29
32
|
end
|
30
33
|
end
|
@@ -1,31 +1,37 @@
|
|
1
1
|
require 'active_record'
|
2
|
+
require 'active_support/inflector'
|
2
3
|
require 'livelist/rails/filter_criteria'
|
3
4
|
|
4
5
|
module Livelist
|
5
6
|
module Rails
|
6
7
|
|
7
8
|
class Filter
|
8
|
-
DEFAULT_FILTER_OPTIONS = {
|
9
|
-
:reference_criteria => nil
|
10
|
-
}
|
9
|
+
DEFAULT_FILTER_OPTIONS = { :reference_criteria => nil }
|
11
10
|
|
12
11
|
attr_accessor :slug,
|
13
12
|
:name,
|
14
13
|
:key_name,
|
15
14
|
:model_name,
|
16
15
|
:model_class,
|
16
|
+
:attribute,
|
17
17
|
:join,
|
18
18
|
:type,
|
19
|
+
:criterion_label,
|
19
20
|
:criteria
|
20
21
|
|
21
22
|
# slug should always be a symbol
|
22
23
|
def initialize(options = {})
|
24
|
+
raise ArgumentError, 'slug option required' unless options[:slug]
|
25
|
+
raise ArgumentError, 'model_name option required' unless options[:model_name]
|
26
|
+
|
23
27
|
@filter_collection = options[:filter_collection]
|
24
28
|
@slug = options[:slug].to_sym
|
25
29
|
@name = options[:name] || @slug.to_s.capitalize
|
26
30
|
@model_name = options[:model_name]
|
27
31
|
@type = options[:type] || initialize_type
|
28
32
|
@key_name = options[:key_name] || default_key_name
|
33
|
+
@attribute = options[:attribute] || default_key_name
|
34
|
+
@criterion_label = options[:criterion_label]
|
29
35
|
@criteria = FilterCriteria.new(
|
30
36
|
:filter => self,
|
31
37
|
:reference_criteria => options[:reference_criteria],
|
@@ -76,7 +82,7 @@ module Livelist
|
|
76
82
|
|
77
83
|
def default_key_name
|
78
84
|
case @type
|
79
|
-
when :association then :id
|
85
|
+
when :association then @attribute || :id
|
80
86
|
when :attribute then @slug
|
81
87
|
end
|
82
88
|
end
|
@@ -92,8 +98,12 @@ module Livelist
|
|
92
98
|
@model_name.classify.constantize
|
93
99
|
end
|
94
100
|
|
101
|
+
def filter_class
|
102
|
+
slug.to_s.classify.constantize
|
103
|
+
end
|
104
|
+
|
95
105
|
def where(slug_params)
|
96
|
-
{ table_name => { @
|
106
|
+
{ table_name => { @attribute => slug_params } }
|
97
107
|
end
|
98
108
|
|
99
109
|
def as_json(params)
|
@@ -30,7 +30,7 @@ module Livelist
|
|
30
30
|
def default_reference_criteria
|
31
31
|
case @filter.type
|
32
32
|
when :attribute then @filter.model_class.select("distinct #{@filter.slug}")
|
33
|
-
when :association then @filter.
|
33
|
+
when :association then @filter.filter_class.scoped
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -9,14 +9,14 @@ module Livelist
|
|
9
9
|
:count,
|
10
10
|
:value,
|
11
11
|
:type,
|
12
|
-
:
|
12
|
+
:label
|
13
13
|
|
14
14
|
def initialize(options = {})
|
15
15
|
@filter = options[:filter]
|
16
16
|
@criteria = options[:criteria]
|
17
17
|
@reference = options[:reference]
|
18
18
|
@type = infer_type
|
19
|
-
@
|
19
|
+
@label = @filter.criterion_label || infer_label
|
20
20
|
@slug = infer_slug
|
21
21
|
@name = infer_name
|
22
22
|
end
|
@@ -48,7 +48,7 @@ module Livelist
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
def
|
51
|
+
def infer_label
|
52
52
|
case @type
|
53
53
|
when :scalar then nil
|
54
54
|
when :hash then :name
|
@@ -71,8 +71,8 @@ module Livelist
|
|
71
71
|
def infer_name
|
72
72
|
case @type
|
73
73
|
when :scalar then @reference
|
74
|
-
when :hash then @reference[@
|
75
|
-
when :model then @reference.send(@
|
74
|
+
when :hash then @reference[@label]
|
75
|
+
when :model then @reference.send(@label)
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
@@ -2,10 +2,26 @@ require 'spec_helper.rb'
|
|
2
2
|
require File.expand_path('./lib/livelist/rails/filter_criterion.rb')
|
3
3
|
|
4
4
|
describe Livelist::Rails::FilterCriterion do
|
5
|
-
|
5
|
+
|
6
|
+
let(:filter) { double(:filter, :criterion_label => nil) }
|
7
|
+
let(:criteria) { double(:criteria, :slug => :name) }
|
8
|
+
let(:reference) { {} }
|
9
|
+
|
10
|
+
subject do
|
11
|
+
Livelist::Rails::FilterCriterion.new(
|
12
|
+
:filter => filter,
|
13
|
+
:criteria => criteria,
|
14
|
+
:reference => reference
|
15
|
+
)
|
16
|
+
end
|
6
17
|
|
7
18
|
context :initialize do
|
19
|
+
its(:label) { should_not be_nil }
|
8
20
|
|
21
|
+
context 'when criterion_label is set on the filter' do
|
22
|
+
let(:filter) { double(:filter, :criterion_label => :label) }
|
23
|
+
its(:label) { should == :label }
|
24
|
+
end
|
9
25
|
end
|
10
26
|
|
11
27
|
context :selected? do
|
@@ -2,10 +2,36 @@ require 'spec_helper.rb'
|
|
2
2
|
require File.expand_path('./lib/livelist/rails/filter.rb')
|
3
3
|
|
4
4
|
describe Livelist::Rails::Filter do
|
5
|
-
|
5
|
+
|
6
|
+
class MyModel; end
|
7
|
+
|
8
|
+
let(:options) do
|
9
|
+
{
|
10
|
+
:slug => :my_filter,
|
11
|
+
:model_name => :my_model
|
12
|
+
}
|
13
|
+
end
|
14
|
+
subject { Livelist::Rails::Filter.new(options) }
|
6
15
|
|
7
16
|
context :initialize do
|
8
17
|
|
18
|
+
its(:criterion_label) { should be_nil }
|
19
|
+
|
20
|
+
context 'when criterion_label option is set' do
|
21
|
+
before { options[:criterion_label] = :label }
|
22
|
+
its(:criterion_label) { should == :label }
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'when slug option is not set' do
|
26
|
+
subject { Livelist::Rails::Filter.new }
|
27
|
+
it { -> { subject }.should raise_error ArgumentError, 'slug option required' }
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'when model_name option is not set' do
|
31
|
+
subject { Livelist::Rails::Filter.new(:slug => :my_filter) }
|
32
|
+
it { -> { subject }.should raise_error ArgumentError, 'model_name option required' }
|
33
|
+
end
|
34
|
+
|
9
35
|
end
|
10
36
|
|
11
37
|
context :group_by do
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: livelist-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.15
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-03-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -170,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
170
170
|
version: '0'
|
171
171
|
requirements: []
|
172
172
|
rubyforge_project: livelist-rails
|
173
|
-
rubygems_version: 1.8.
|
173
|
+
rubygems_version: 1.8.25
|
174
174
|
signing_key:
|
175
175
|
specification_version: 3
|
176
176
|
summary: A Rails Engine/Extension Incorporating Livelist.js
|