filter_form 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9426e908a32ac701218c4ba33aaaadef4e6575cb
4
- data.tar.gz: 78121225fa25f3cf8008e5677f16403c7d0497e5
3
+ metadata.gz: a5c64e1aac94322bc5abb235cab80a8d4247b2db
4
+ data.tar.gz: f8e50efe3a8d295b9e0365e39d73554f7454ecf5
5
5
  SHA512:
6
- metadata.gz: 1e2ec010b96b771e578d82f082392f1f9ee1543c1610e7ecf050e84611382b4d546213b559720403cee58c2aba5a0358df3b30ed15e76816774cdc31197063a2
7
- data.tar.gz: 2a48d297c0ef88a01d1c9cb66cd2f1952a62e78830a91b4caf43d23e7aa8a6a9f0e7bc606618750d1423d413bf07a85cd8825bd2ce4481d93e8a3585e1af067b
6
+ metadata.gz: ac4df24288cf564c677c9bbebcf5e7f3879600abb93fa6d02d891b053fabd61f67506e7e320b1c9dc59e434a338ec238b5931969123b7a551da80f5abe1dafb7
7
+ data.tar.gz: 5280ac3c9afb28987196dd4cc2676c069075a0f8525ac2a2d9650008eaf5e1027dd634ae7e8afd609e0ba6b42116524b62442cd86796ac93d067844fbedcc902
data/README.md CHANGED
@@ -35,7 +35,7 @@ In your view file:
35
35
  <%= filter_form_for @q do |f| %>
36
36
  <%= f.filter_input :name %>
37
37
  <%= f.filter_input :age %>
38
- <%= f.filter_input :city_id %>
38
+ <%= f.filter_input :city %>
39
39
  <%= f.filter_input :birthday %>
40
40
  <%= f.button :submit %>
41
41
  <% end %>
@@ -45,7 +45,7 @@ For `string` attribute (like name) it will automatically create a text input wit
45
45
 
46
46
  For `integer` type (age) it will set predicate `eq`.
47
47
 
48
- For association's belongs_to `foreign key` (city_id) it will automatically build a select tag.
48
+ For association `belongs_to` (city) it will automatically build a select tag.
49
49
 
50
50
  For `date` and `datetime` (birthday) it will automatically add jQuery [datepicker](http://jqueryui.com/datepicker/) and set predicate `eq`.
51
51
 
@@ -63,6 +63,16 @@ And application.css:
63
63
  *= require jquery.ui.datepicker
64
64
  ```
65
65
 
66
+ And also you can customize your filter, like:
67
+
68
+ ```erb
69
+ <%= filter_form_for @q do |f| %>
70
+ <%= f.filter_input :year, as: :select, collection: ((Date.today.year - 3)..(Date.today.year + 3)).to_a, predicate: :eq %>
71
+ <%= f.button :submit %>
72
+ <% end %>
73
+ ```
74
+
75
+
66
76
  For more information about predicates visit [ransack](https://github.com/ernie/ransack).
67
77
 
68
78
  If you want to customize your form visit [simple_form](https://github.com/plataformatec/simple_form).
@@ -1,25 +1,33 @@
1
1
  require 'filter_form/inputs/base'
2
- require 'filter_form/inputs/string'
3
2
 
4
- require 'filter_form/inputs/belongs_to_eq'
5
- require 'filter_form/inputs/string_cont'
6
- require 'filter_form/inputs/integer_eq'
7
- require 'filter_form/inputs/date_eq'
3
+ require 'filter_form/inputs/select/base'
4
+ require 'filter_form/inputs/select/belongs_to_eq'
5
+
6
+ require 'filter_form/inputs/string/base'
7
+ require 'filter_form/inputs/string/string_cont'
8
+ require 'filter_form/inputs/string/integer_eq'
9
+ require 'filter_form/inputs/string/date_eq'
8
10
 
9
11
  module FilterForm
10
12
  class InputBuilder
11
13
  include ActiveModel::Model
12
14
 
13
- attr_accessor :attribute_name, :object
15
+ attr_accessor :attribute_name, :object, :options
14
16
 
15
17
  def build
16
- "FilterForm::Inputs::#{ input_type.camelize }".constantize.new(attribute_name: attribute_name, object: object)
18
+ "FilterForm::Inputs::#{ input_type.camelize }".constantize.new attribute_name: attribute_name,
19
+ object: object,
20
+ predicate: options[:predicate]
17
21
  end
18
22
 
19
23
  private
20
24
 
21
25
  def input_type
22
- "#{ type }_#{ predicate }"
26
+ if options[:as]
27
+ "#{ options[:as] }/base"
28
+ else
29
+ "#{ type }_#{ predicate }"
30
+ end
23
31
  end
24
32
 
25
33
  def predicate
@@ -34,13 +42,13 @@ module FilterForm
34
42
  def type
35
43
  case attribute_type
36
44
  when :string
37
- :string
45
+ 'string/string'
38
46
  when :integer
39
- :integer
47
+ 'string/integer'
40
48
  when :datetime, :date
41
- :date
49
+ 'string/date'
42
50
  when :belongs_to
43
- :belongs_to
51
+ 'select/belongs_to'
44
52
  end
45
53
  end
46
54
 
@@ -3,7 +3,7 @@ module FilterForm
3
3
  class Base
4
4
  include ActiveModel::Model
5
5
 
6
- attr_accessor :attribute_name, :object
6
+ attr_accessor :attribute_name, :object, :predicate
7
7
 
8
8
  def options
9
9
  {
@@ -15,15 +15,15 @@ module FilterForm
15
15
  private
16
16
 
17
17
  def input_name
18
- "q[#{ attribute_name }_#{ predicate }]"
18
+ "q[#{ attribute_name }_#{ predicate_name }]"
19
19
  end
20
20
 
21
21
  def input_value
22
22
  object_condition.values.first.value if object_condition
23
23
  end
24
24
 
25
- def predicate
26
- self.class.to_s.underscore.split('_').last
25
+ def predicate_name
26
+ predicate || self.class.to_s.underscore.split('_').last
27
27
  end
28
28
 
29
29
  def object_condition
@@ -0,0 +1,26 @@
1
+ module FilterForm
2
+ module Inputs
3
+ module Select
4
+ class Base < FilterForm::Inputs::Base
5
+ def options
6
+ super.merge(additional_options)
7
+ end
8
+
9
+ private
10
+
11
+ def additional_options
12
+ {
13
+ as: :select,
14
+ collection: collection,
15
+ include_blank: true,
16
+ selected: input_value
17
+ }
18
+ end
19
+
20
+ def collection
21
+ []
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,25 @@
1
+ module FilterForm
2
+ module Inputs
3
+ module Select
4
+ class BelongsToEq < FilterForm::Inputs::Select::Base
5
+ private
6
+
7
+ def object_condition
8
+ object.base.conditions.select { |c| c.a.first.name == custom_attribute_name }.first
9
+ end
10
+
11
+ def collection
12
+ attribute_name.to_s.camelize.constantize.all
13
+ end
14
+
15
+ def input_name
16
+ "q[#{ custom_attribute_name }_#{ predicate }]"
17
+ end
18
+
19
+ def custom_attribute_name
20
+ "#{ attribute_name }_id"
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,21 @@
1
+ module FilterForm
2
+ module Inputs
3
+ module String
4
+ class Base < FilterForm::Inputs::Base
5
+ def options
6
+ result = super.merge(as: :string)
7
+ result[:input_html].merge!(additional_input_options)
8
+ result
9
+ end
10
+
11
+ private
12
+
13
+ def additional_input_options
14
+ {
15
+ value: input_value
16
+ }
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,6 +1,6 @@
1
1
  module FilterForm
2
2
  module Inputs
3
- class DateEq < FilterForm::Inputs::String
3
+ class DateEq < FilterForm::Inputs::String::Base
4
4
  DATE_CLASS = 'filter_form_date'
5
5
 
6
6
  private
@@ -0,0 +1,6 @@
1
+ module FilterForm
2
+ module Inputs
3
+ class IntegerEq < FilterForm::Inputs::String::Base
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module FilterForm
2
+ module Inputs
3
+ class StringCont < FilterForm::Inputs::String::Base
4
+ end
5
+ end
6
+ end
@@ -3,7 +3,7 @@ require 'filter_form/input_builder'
3
3
  module SimpleForm
4
4
  class FormBuilder < ActionView::Helpers::FormBuilder
5
5
  def filter_input(attribute_name, options = {}, &block)
6
- filter_form_input = FilterForm::InputBuilder.new(attribute_name: attribute_name, object: object).build
6
+ filter_form_input = FilterForm::InputBuilder.new(attribute_name: attribute_name, options: options, object: object).build
7
7
 
8
8
  options.reverse_merge!(filter_form_input.options)
9
9
 
@@ -1,3 +1,3 @@
1
1
  module FilterForm
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: filter_form
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evgeny Li
@@ -97,11 +97,12 @@ files:
97
97
  - lib/filter_form/form_helper.rb
98
98
  - lib/filter_form/input_builder.rb
99
99
  - lib/filter_form/inputs/base.rb
100
- - lib/filter_form/inputs/belongs_to_eq.rb
101
- - lib/filter_form/inputs/date_eq.rb
102
- - lib/filter_form/inputs/integer_eq.rb
103
- - lib/filter_form/inputs/string.rb
104
- - lib/filter_form/inputs/string_cont.rb
100
+ - lib/filter_form/inputs/select/base.rb
101
+ - lib/filter_form/inputs/select/belongs_to_eq.rb
102
+ - lib/filter_form/inputs/string/base.rb
103
+ - lib/filter_form/inputs/string/date_eq.rb
104
+ - lib/filter_form/inputs/string/integer_eq.rb
105
+ - lib/filter_form/inputs/string/string_cont.rb
105
106
  - lib/filter_form/simple_form/form_builder.rb
106
107
  - lib/filter_form/version.rb
107
108
  homepage: https://github.com/exAspArk/filter_form
@@ -1,36 +0,0 @@
1
- module FilterForm
2
- module Inputs
3
- class BelongsToEq < FilterForm::Inputs::Base
4
- def options
5
- super.merge(additional_options)
6
- end
7
-
8
- private
9
-
10
- def additional_options
11
- {
12
- as: :select,
13
- collection: collection,
14
- include_blank: true,
15
- selected: input_value
16
- }
17
- end
18
-
19
- def object_condition
20
- object.base.conditions.select { |c| c.a.first.name == custom_attribute_name }.first
21
- end
22
-
23
- def collection
24
- attribute_name.to_s.camelize.constantize.all
25
- end
26
-
27
- def input_name
28
- "q[#{ custom_attribute_name }_#{ predicate }]"
29
- end
30
-
31
- def custom_attribute_name
32
- "#{ attribute_name }_id"
33
- end
34
- end
35
- end
36
- end
@@ -1,6 +0,0 @@
1
- module FilterForm
2
- module Inputs
3
- class IntegerEq < FilterForm::Inputs::String
4
- end
5
- end
6
- end
@@ -1,19 +0,0 @@
1
- module FilterForm
2
- module Inputs
3
- class String < FilterForm::Inputs::Base
4
- def options
5
- result = super.merge(as: :string)
6
- result[:input_html].merge!(additional_input_options)
7
- result
8
- end
9
-
10
- private
11
-
12
- def additional_input_options
13
- {
14
- value: input_value
15
- }
16
- end
17
- end
18
- end
19
- end
@@ -1,6 +0,0 @@
1
- module FilterForm
2
- module Inputs
3
- class StringCont < FilterForm::Inputs::String
4
- end
5
- end
6
- end