filter_form 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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