simple_form_ransack 0.0.10 → 0.0.11
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 +4 -4
- data/Rakefile +8 -12
- data/app/helpers/simple_form_ransack_helper.rb +1 -1
- data/lib/simple_form_ransack.rb +1 -1
- data/lib/simple_form_ransack/attribute_inspector.rb +19 -14
- data/lib/simple_form_ransack/form_proxy.rb +41 -37
- data/lib/simple_form_ransack/version.rb +1 -1
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a1915bb4fc37a6163a9415b73e2555fd5b8ffe8
|
4
|
+
data.tar.gz: 939a9a718795a1624be9237d16415ae264151860
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 062fb8029ac90464a9717c6264386c3c3145a3e4a7d7a1644a784fab22ffa333764a6ea87c9d468fa5785494aa7b535156d9e7efd7613eba4fb36b658d56abc6
|
7
|
+
data.tar.gz: bb6f45e1de84c9897b8622f24d02d614ccbb8a2bb97e6ca55f7c460346ab54d2a19c7bf88412a17abc74b86c3410769095cc5e8b612a500c5d51d50e4d5c9531
|
data/Rakefile
CHANGED
@@ -1,21 +1,17 @@
|
|
1
1
|
begin
|
2
|
-
require
|
2
|
+
require "bundler/setup"
|
3
3
|
rescue LoadError
|
4
|
-
puts
|
4
|
+
puts "You must `gem install bundler` and `bundle install` to run rake tasks"
|
5
5
|
end
|
6
6
|
|
7
|
-
require
|
7
|
+
require "rdoc/task"
|
8
8
|
|
9
9
|
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
-
rdoc.rdoc_dir =
|
11
|
-
rdoc.title =
|
12
|
-
rdoc.options <<
|
13
|
-
rdoc.rdoc_files.include(
|
14
|
-
rdoc.rdoc_files.include(
|
10
|
+
rdoc.rdoc_dir = "rdoc"
|
11
|
+
rdoc.title = "SimpleFormRansack"
|
12
|
+
rdoc.options << "--line-numbers"
|
13
|
+
rdoc.rdoc_files.include("README.rdoc")
|
14
|
+
rdoc.rdoc_files.include("lib/**/*.rb")
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
17
|
Bundler::GemHelper.install_tasks
|
21
|
-
|
data/lib/simple_form_ransack.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module SimpleFormRansack
|
2
2
|
autoload :AttributeInspector, "simple_form_ransack/attribute_inspector"
|
3
|
-
autoload :FormProxy,
|
3
|
+
autoload :FormProxy, "simple_form_ransack/form_proxy"
|
4
4
|
end
|
5
5
|
|
6
6
|
require_relative "../app/helpers/simple_form_ransack_helper"
|
@@ -13,7 +13,7 @@ class SimpleFormRansack::AttributeInspector
|
|
13
13
|
@current_clazz = @clazz
|
14
14
|
@name_builtup = []
|
15
15
|
|
16
|
-
has_attribute_directly = @clazz.attribute_names.select{ |name| name.to_s == @ransack_name.to_s }.any?
|
16
|
+
has_attribute_directly = @clazz.attribute_names.select { |name| name.to_s == @ransack_name.to_s }.any?
|
17
17
|
|
18
18
|
research unless has_attribute_directly
|
19
19
|
end
|
@@ -25,9 +25,11 @@ class SimpleFormRansack::AttributeInspector
|
|
25
25
|
|
26
26
|
# The last part should be the attribute name.
|
27
27
|
if index == @name_parts.length - 1
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
attribute_result = attribute_by_builtup
|
29
|
+
|
30
|
+
if attribute_result
|
31
|
+
puts "Attribute was: #{attribute_result.fetch(:name)}" if @debug
|
32
|
+
@attribute = attribute_result.fetch(:name)
|
31
33
|
break
|
32
34
|
else
|
33
35
|
puts "Not found: #{@name_builtup.join("_")}" if @debug
|
@@ -36,11 +38,12 @@ class SimpleFormRansack::AttributeInspector
|
|
36
38
|
end
|
37
39
|
|
38
40
|
# Try next - maybe next key need to be added? (which is common!)
|
39
|
-
|
41
|
+
reflection_result = reflection_by_builtup
|
42
|
+
next unless reflection_result
|
40
43
|
|
41
44
|
@name_builtup = []
|
42
|
-
name = reflection_result
|
43
|
-
reflection = reflection_result
|
45
|
+
name = reflection_result.fetch(:name)
|
46
|
+
reflection = reflection_result.fetch(:reflection)
|
44
47
|
|
45
48
|
puts "Name: #{name}" if @debug
|
46
49
|
puts "Reflection: #{reflection}" if @debug
|
@@ -53,7 +56,7 @@ class SimpleFormRansack::AttributeInspector
|
|
53
56
|
# Returns true if a complicated label could be generated and simple form should not do this itself.
|
54
57
|
def generated_label?
|
55
58
|
return true if @attribute && @generated_name_classes.any?
|
56
|
-
|
59
|
+
false
|
57
60
|
end
|
58
61
|
|
59
62
|
# Generates the complicated label and returns it.
|
@@ -61,7 +64,9 @@ class SimpleFormRansack::AttributeInspector
|
|
61
64
|
name = ""
|
62
65
|
|
63
66
|
if @generated_name_classes.last
|
64
|
-
clazz
|
67
|
+
clazz = @generated_name_classes.last.fetch(:clazz)
|
68
|
+
reflection = @generated_name_classes.last.fetch(:reflection)
|
69
|
+
|
65
70
|
if reflection.collection?
|
66
71
|
name << clazz.model_name.human(count: 2)
|
67
72
|
else
|
@@ -72,22 +77,22 @@ class SimpleFormRansack::AttributeInspector
|
|
72
77
|
name << " " unless name.empty?
|
73
78
|
name << @current_clazz.human_attribute_name(@attribute).to_s.downcase
|
74
79
|
|
75
|
-
|
80
|
+
name
|
76
81
|
end
|
77
82
|
|
78
83
|
private
|
79
84
|
|
80
85
|
def reflection_by_builtup
|
81
86
|
total_name = @name_builtup.join("_")
|
82
|
-
result = @current_clazz.reflections.
|
87
|
+
result = @current_clazz.reflections.find { |name, _reflection| name.to_s == total_name }
|
83
88
|
return {name: result[0], reflection: result[1]} if result
|
84
|
-
|
89
|
+
false
|
85
90
|
end
|
86
91
|
|
87
92
|
def attribute_by_builtup
|
88
93
|
total_name = @name_builtup.join("_")
|
89
|
-
result = @current_clazz.attribute_names.
|
94
|
+
result = @current_clazz.attribute_names.find { |name| name.to_s == total_name }
|
90
95
|
return {name: result} if result
|
91
|
-
|
96
|
+
false
|
92
97
|
end
|
93
98
|
end
|
@@ -1,10 +1,24 @@
|
|
1
1
|
class SimpleFormRansack::FormProxy
|
2
|
+
def self.predicates_regex
|
3
|
+
unless @predicates_regex
|
4
|
+
predicates = Ransack::Configuration
|
5
|
+
.predicates
|
6
|
+
.map(&:first)
|
7
|
+
.map { |predicate| Regexp.escape(predicate) }
|
8
|
+
.join("|")
|
9
|
+
|
10
|
+
@predicates_regex = /^(.+)_(#{predicates})$/
|
11
|
+
end
|
12
|
+
|
13
|
+
@predicates_regex
|
14
|
+
end
|
15
|
+
|
2
16
|
def initialize(args)
|
3
|
-
@resource = args
|
17
|
+
@resource = args.fetch(:resource)
|
4
18
|
@object = @resource.object
|
5
19
|
@class = @resource.klass
|
6
|
-
@params = args
|
7
|
-
@form = args
|
20
|
+
@params = args.fetch(:params)
|
21
|
+
@form = args.fetch(:form)
|
8
22
|
|
9
23
|
raise "No params given in arguments: #{args.keys}" unless @params
|
10
24
|
end
|
@@ -16,7 +30,7 @@ class SimpleFormRansack::FormProxy
|
|
16
30
|
opts = {}
|
17
31
|
end
|
18
32
|
|
19
|
-
attribute_name = real_name(name
|
33
|
+
attribute_name = real_name(name)
|
20
34
|
as = as_from_opts(attribute_name, opts)
|
21
35
|
input_html = opts.delete(:input_html) || {}
|
22
36
|
set_value(as, name, opts, input_html)
|
@@ -26,7 +40,7 @@ class SimpleFormRansack::FormProxy
|
|
26
40
|
opts[:required] = false unless opts.key?(:required)
|
27
41
|
opts[:input_html] = input_html
|
28
42
|
args << opts
|
29
|
-
|
43
|
+
@form.input(attribute_name, *args)
|
30
44
|
end
|
31
45
|
|
32
46
|
def method_missing(method_name, *args, &blk)
|
@@ -35,13 +49,14 @@ class SimpleFormRansack::FormProxy
|
|
35
49
|
|
36
50
|
private
|
37
51
|
|
38
|
-
def set_label(attribute_name, opts,
|
39
|
-
|
52
|
+
def set_label(attribute_name, opts, _input_html)
|
53
|
+
unless opts.key?(:label)
|
40
54
|
attribute_inspector = ::SimpleFormRansack::AttributeInspector.new(
|
41
55
|
name: attribute_name,
|
42
56
|
instance: @object,
|
43
57
|
clazz: @class
|
44
58
|
)
|
59
|
+
|
45
60
|
if attribute_inspector.generated_label?
|
46
61
|
opts[:label] = attribute_inspector.generated_label
|
47
62
|
end
|
@@ -49,15 +64,15 @@ private
|
|
49
64
|
end
|
50
65
|
|
51
66
|
def set_name(as, name, input_html)
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
67
|
+
return if input_html.key?(:name)
|
68
|
+
|
69
|
+
input_html[:name] = "q[#{name}]"
|
70
|
+
input_html[:name] << "[]" if as == "check_boxes"
|
56
71
|
end
|
57
72
|
|
58
73
|
def set_value(as, name, opts, input_html)
|
59
74
|
if as == "select"
|
60
|
-
|
75
|
+
unless opts.key?(:selected)
|
61
76
|
if @params[name]
|
62
77
|
opts[:selected] = @params[name]
|
63
78
|
else
|
@@ -65,7 +80,7 @@ private
|
|
65
80
|
end
|
66
81
|
end
|
67
82
|
elsif as == "check_boxes" || as == "radio_buttons"
|
68
|
-
|
83
|
+
unless opts.key?(:checked)
|
69
84
|
if @params[name]
|
70
85
|
opts[:checked] = @params[name]
|
71
86
|
else
|
@@ -73,15 +88,11 @@ private
|
|
73
88
|
end
|
74
89
|
end
|
75
90
|
elsif as == "boolean"
|
76
|
-
|
77
|
-
if @params[name] == "1"
|
78
|
-
input_html[:checked] = "checked"
|
79
|
-
else
|
80
|
-
input_html[:checked] = nil
|
81
|
-
end
|
91
|
+
unless input_html.key?(:checked)
|
92
|
+
input_html[:checked] = ("checked" if @params[name] == "1")
|
82
93
|
end
|
83
94
|
else
|
84
|
-
|
95
|
+
unless input_html.key?(:value)
|
85
96
|
if @params[name]
|
86
97
|
input_html[:value] = @params[name]
|
87
98
|
else
|
@@ -92,33 +103,26 @@ private
|
|
92
103
|
end
|
93
104
|
|
94
105
|
def as_list?(opts)
|
95
|
-
if as_from_opts(opts) == "select"
|
96
|
-
|
97
|
-
else
|
98
|
-
return false
|
99
|
-
end
|
106
|
+
return true if as_from_opts(opts) == "select"
|
107
|
+
false
|
100
108
|
end
|
101
109
|
|
102
110
|
def as_from_opts(attribute_name, opts)
|
103
111
|
if opts[:as].present?
|
104
|
-
return opts
|
105
|
-
elsif opts[:collection] || attribute_name.end_with?(
|
112
|
+
return opts.fetch(:as).to_s
|
113
|
+
elsif opts[:collection] || attribute_name.end_with?("country")
|
106
114
|
return "select"
|
107
115
|
end
|
108
116
|
|
109
|
-
|
110
|
-
|
111
|
-
return "boolean"
|
112
|
-
end
|
113
|
-
end
|
117
|
+
column = @class.columns_hash[attribute_name]
|
118
|
+
return "boolean" if column && column.type == :boolean
|
114
119
|
|
115
|
-
|
120
|
+
"text"
|
116
121
|
end
|
117
122
|
|
118
|
-
def real_name(name
|
119
|
-
|
120
|
-
|
121
|
-
match = name.to_s.match(/^(.+)_(#{predicates})$/)
|
123
|
+
def real_name(name)
|
124
|
+
match = name.to_s.match(SimpleFormRansack::FormProxy.predicates_regex)
|
125
|
+
|
122
126
|
if match
|
123
127
|
return match[1]
|
124
128
|
else
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_form_ransack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kasper Johansen
|
@@ -150,6 +150,20 @@ dependencies:
|
|
150
150
|
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rubocop
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
153
167
|
description: Makes it easy to use SimpleForm::FormBuilder with Ransack without constantly
|
154
168
|
having to supply labels and other pains.
|
155
169
|
email:
|