form_input 0.9.0.pre1
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 +7 -0
- data/.gitignore +5 -0
- data/LICENSE +19 -0
- data/README.md +3160 -0
- data/Rakefile +19 -0
- data/example/controllers/ramaze/press_release.rb +104 -0
- data/example/controllers/ramaze/profile.rb +38 -0
- data/example/controllers/sinatra/press_release.rb +114 -0
- data/example/controllers/sinatra/profile.rb +39 -0
- data/example/forms/change_password_form.rb +17 -0
- data/example/forms/login_form.rb +14 -0
- data/example/forms/lost_password_form.rb +14 -0
- data/example/forms/new_password_form.rb +15 -0
- data/example/forms/password_form.rb +18 -0
- data/example/forms/press_release_form.rb +153 -0
- data/example/forms/profile_form.rb +21 -0
- data/example/forms/signup_form.rb +25 -0
- data/example/views/press_release.slim +65 -0
- data/example/views/profile.slim +28 -0
- data/example/views/snippets/form_block.slim +27 -0
- data/example/views/snippets/form_chunked.slim +25 -0
- data/example/views/snippets/form_hidden.slim +21 -0
- data/example/views/snippets/form_panel.slim +89 -0
- data/form_input.gemspec +32 -0
- data/lib/form_input/core.rb +1165 -0
- data/lib/form_input/localize.rb +49 -0
- data/lib/form_input/r18n/cs.yml +97 -0
- data/lib/form_input/r18n/en.yml +70 -0
- data/lib/form_input/r18n/pl.yml +122 -0
- data/lib/form_input/r18n/sk.yml +120 -0
- data/lib/form_input/r18n.rb +163 -0
- data/lib/form_input/steps.rb +365 -0
- data/lib/form_input/types.rb +176 -0
- data/lib/form_input/version.rb +12 -0
- data/lib/form_input.rb +5 -0
- data/test/helper.rb +21 -0
- data/test/localize/en.yml +63 -0
- data/test/r18n/cs.yml +60 -0
- data/test/r18n/xx.yml +51 -0
- data/test/reference/cs.txt +352 -0
- data/test/reference/cs.yml +14 -0
- data/test/reference/en.txt +76 -0
- data/test/reference/en.yml +8 -0
- data/test/reference/pl.txt +440 -0
- data/test/reference/pl.yml +16 -0
- data/test/reference/sk.txt +352 -0
- data/test/reference/sk.yml +14 -0
- data/test/test_core.rb +1272 -0
- data/test/test_localize.rb +27 -0
- data/test/test_r18n.rb +373 -0
- data/test/test_steps.rb +482 -0
- data/test/test_types.rb +307 -0
- metadata +145 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
// Render simple form parameters in block style.
|
2
|
+
|
3
|
+
// Fetch parameters.
|
4
|
+
|
5
|
+
- params ||= []
|
6
|
+
- focus ||= focus.nil?
|
7
|
+
- report ||= report.nil? && request.post?
|
8
|
+
|
9
|
+
// Choose parameter to focus on if enabled.
|
10
|
+
|
11
|
+
- focused ||= params.find{ |x| x.invalid? } || params.find{ |x| x.blank? } || params.first if focus
|
12
|
+
|
13
|
+
// Render each parameter, reporting errors as necessary.
|
14
|
+
|
15
|
+
- for p in params
|
16
|
+
- case p.type
|
17
|
+
- when :ignore
|
18
|
+
- when :hidden
|
19
|
+
input type='hidden' name=p.form_name value=p.form_value
|
20
|
+
- else
|
21
|
+
.form-group
|
22
|
+
input.form-control type=p.type name=p.form_name value=p.form_value placeholder=p.form_title autofocus=(p == focused)
|
23
|
+
- if report and error = p.error
|
24
|
+
.help-block
|
25
|
+
span.text-danger = error
|
26
|
+
|
27
|
+
// EOF //
|
@@ -0,0 +1,25 @@
|
|
1
|
+
// Render chunked form parameters in panel style.
|
2
|
+
|
3
|
+
// Fetch parameters.
|
4
|
+
|
5
|
+
- chunked_params = params || []
|
6
|
+
- params = chunked_params.flatten
|
7
|
+
- focus ||= focus.nil?
|
8
|
+
- report ||= report.nil? && request.post?
|
9
|
+
|
10
|
+
// Choose parameter to focus on if enabled.
|
11
|
+
|
12
|
+
- focused ||= params.find{ |x| x.invalid? } || params.find{ |x| x.blank? } || params.first if focus
|
13
|
+
|
14
|
+
// Render each row of parameters.
|
15
|
+
|
16
|
+
- for p in chunked_params
|
17
|
+
- if p.is_a?( Array )
|
18
|
+
.row
|
19
|
+
- for param in p
|
20
|
+
div class="col-sm-#{param[ :cols ] || 12 / p.count}"
|
21
|
+
== snippet :form_panel, params: [ param ], focus: focus, focused: focused, report: report
|
22
|
+
- else
|
23
|
+
== snippet :form_panel, params: [ p ], focus: focus, focused: focused, report: report
|
24
|
+
|
25
|
+
// EOF //
|
@@ -0,0 +1,21 @@
|
|
1
|
+
// Render all form parameters as hidden ones.
|
2
|
+
|
3
|
+
// Fetch parameters.
|
4
|
+
|
5
|
+
- params ||= []
|
6
|
+
|
7
|
+
// Render each parameter.
|
8
|
+
|
9
|
+
- for p in params
|
10
|
+
- next if p.ignored?
|
11
|
+
- next unless p.filled?
|
12
|
+
- if p.array?
|
13
|
+
- for value in p.form_value
|
14
|
+
input type='hidden' name=p.form_name value=value
|
15
|
+
- elsif p.hash?
|
16
|
+
- for key, value in p.form_value
|
17
|
+
input type='hidden' name=p.form_name( key ) value=value
|
18
|
+
- else
|
19
|
+
input type='hidden' name=p.form_name value=p.form_value
|
20
|
+
|
21
|
+
// EOF //
|
@@ -0,0 +1,89 @@
|
|
1
|
+
// Render form parameters in panel style.
|
2
|
+
|
3
|
+
// Fetch parameters.
|
4
|
+
|
5
|
+
- params ||= []
|
6
|
+
- focus ||= focus.nil?
|
7
|
+
- report ||= report.nil? && request.post?
|
8
|
+
|
9
|
+
// Choose parameter to focus on if enabled.
|
10
|
+
|
11
|
+
- focused ||= params.find{ |x| x.invalid? } || params.find{ |x| x.blank? } || params.first if focus
|
12
|
+
|
13
|
+
// Render each parameter, reporting errors as necessary.
|
14
|
+
|
15
|
+
- for p in params
|
16
|
+
- next if p.ignored?
|
17
|
+
- if p.hidden?
|
18
|
+
== snippet :form_hidden, params: [ p ]
|
19
|
+
- else
|
20
|
+
.form-group
|
21
|
+
- case p.type
|
22
|
+
- when :select
|
23
|
+
label
|
24
|
+
= p.form_title
|
25
|
+
- if subtitle = p[ :subtitle ]
|
26
|
+
small =< subtitle
|
27
|
+
select.form-control name=p.form_name multiple=p.array? autofocus=(p == focused) disabled=p.disabled? size=p[ :size ]
|
28
|
+
- for value, name in p.data
|
29
|
+
option selected=p.selected?( value ) value=p.format_value( value ) = name
|
30
|
+
- when :textarea
|
31
|
+
label
|
32
|
+
= p.form_title
|
33
|
+
- if subtitle = p[ :subtitle ]
|
34
|
+
small =< subtitle
|
35
|
+
textarea.form-control name=p.form_name autofocus=(p == focused) disabled=p.disabled? rows=p[ :size ] = p.form_value
|
36
|
+
- when :checkbox
|
37
|
+
- if p.array?
|
38
|
+
= p.form_title
|
39
|
+
- if subtitle = p[ :subtitle ]
|
40
|
+
small =< subtitle
|
41
|
+
- for value, name in p.data
|
42
|
+
label
|
43
|
+
input.form-control type=p.type name=p.form_name value=p.format_value( value ) autofocus=(p == focused) disabled=p.disabled? checked=p.selected?( value )
|
44
|
+
= name
|
45
|
+
- else
|
46
|
+
label
|
47
|
+
= p.form_title
|
48
|
+
- if subtitle = p[ :subtitle ]
|
49
|
+
small =< subtitle
|
50
|
+
input.form-control type=p.type name=p.form_name value='true' autofocus=(p == focused) disabled=p.disabled? checked=p.value
|
51
|
+
= p[ :text ]
|
52
|
+
- when :radio
|
53
|
+
= p.form_title
|
54
|
+
- if subtitle = p[ :subtitle ]
|
55
|
+
small =< subtitle
|
56
|
+
- for value, name in p.data
|
57
|
+
label
|
58
|
+
input.form-control type=p.type name=p.form_name value=p.format_value( value ) autofocus=(p == focused) disabled=p.disabled? checked=p.selected?( value )
|
59
|
+
= name
|
60
|
+
- else
|
61
|
+
label
|
62
|
+
= p.form_title
|
63
|
+
- if subtitle = p[ :subtitle ]
|
64
|
+
small =< subtitle
|
65
|
+
|
66
|
+
- if p.array?
|
67
|
+
- for value in p.form_value
|
68
|
+
.form-group
|
69
|
+
input.form-control type=p.type name=p.form_name value=value autofocus=(p.invalid? and p == focused) disabled=p.disabled? placeholder=p[ :placeholder ]
|
70
|
+
- unless limit = p[ :max_count ] and p.form_value.count >= limit
|
71
|
+
input.form-control type=p.type name=p.form_name autofocus=(p.valid? and p == focused) disabled=p.disabled? placeholder=p[ :placeholder ]
|
72
|
+
|
73
|
+
- elsif p.hash?
|
74
|
+
- for key, value in p.form_value
|
75
|
+
.form-group
|
76
|
+
input.form-control type=p.type name=p.form_name( key ) value=value autofocus=(p.invalid? and p == focused) disabled=p.disabled? placeholder=p[ :placeholder ]
|
77
|
+
- unless limit = p[ :max_count ] and p.form_value.count >= limit
|
78
|
+
input.form-control type=p.type name=p.form_name( p.form_value.count ) autofocus=(p.valid? and p == focused) disabled=p.disabled? placeholder=p[ :placeholder ]
|
79
|
+
|
80
|
+
- else
|
81
|
+
input.form-control type=p.type name=p.form_name value=p.form_value autofocus=(p == focused) disabled=p.disabled? placeholder=p[ :placeholder ]
|
82
|
+
|
83
|
+
- if report and error = p.error
|
84
|
+
.help-block
|
85
|
+
span.text-danger = error
|
86
|
+
- if help = p[ :help ]
|
87
|
+
.help-block = help
|
88
|
+
|
89
|
+
// EOF //
|
data/form_input.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# Gem specification.
|
2
|
+
|
3
|
+
require File.expand_path( '../lib/form_input/version', __FILE__ )
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'form_input'
|
7
|
+
s.version = FormInput::Version::STRING + '.pre1'
|
8
|
+
s.summary = 'Form helper which sanitizes, transforms, validates and encapsulates web request input.'
|
9
|
+
s.description = <<EOT
|
10
|
+
This gem allows you to describe your forms using a simple DSL
|
11
|
+
and then takes care of sanitizing, transforming, and validating the input for you,
|
12
|
+
providing you with the ready-to-use input in a model-like structure.
|
13
|
+
Both simple forms as well as multi-step forms are supported.
|
14
|
+
Includes handy accessors for automatically building the forms
|
15
|
+
and reporting error messages using a templating engine of your choice.
|
16
|
+
Localization support with builtin inflection rules can be enabled, too.
|
17
|
+
EOT
|
18
|
+
|
19
|
+
s.author = 'Patrik Rak'
|
20
|
+
s.email = 'patrik@raxoft.cz'
|
21
|
+
s.homepage = 'https://github.com/raxoft/form_input'
|
22
|
+
s.license = 'MIT'
|
23
|
+
|
24
|
+
s.files = `git ls-files`.split( "\n" )
|
25
|
+
|
26
|
+
s.required_ruby_version = '>= 2.0.0'
|
27
|
+
s.add_runtime_dependency 'rack', '~> 1.5'
|
28
|
+
s.add_development_dependency 'bacon', '~> 1.2'
|
29
|
+
s.add_development_dependency 'r18n-core', '~> 2.0'
|
30
|
+
end
|
31
|
+
|
32
|
+
# EOF #
|