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.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/LICENSE +19 -0
  4. data/README.md +3160 -0
  5. data/Rakefile +19 -0
  6. data/example/controllers/ramaze/press_release.rb +104 -0
  7. data/example/controllers/ramaze/profile.rb +38 -0
  8. data/example/controllers/sinatra/press_release.rb +114 -0
  9. data/example/controllers/sinatra/profile.rb +39 -0
  10. data/example/forms/change_password_form.rb +17 -0
  11. data/example/forms/login_form.rb +14 -0
  12. data/example/forms/lost_password_form.rb +14 -0
  13. data/example/forms/new_password_form.rb +15 -0
  14. data/example/forms/password_form.rb +18 -0
  15. data/example/forms/press_release_form.rb +153 -0
  16. data/example/forms/profile_form.rb +21 -0
  17. data/example/forms/signup_form.rb +25 -0
  18. data/example/views/press_release.slim +65 -0
  19. data/example/views/profile.slim +28 -0
  20. data/example/views/snippets/form_block.slim +27 -0
  21. data/example/views/snippets/form_chunked.slim +25 -0
  22. data/example/views/snippets/form_hidden.slim +21 -0
  23. data/example/views/snippets/form_panel.slim +89 -0
  24. data/form_input.gemspec +32 -0
  25. data/lib/form_input/core.rb +1165 -0
  26. data/lib/form_input/localize.rb +49 -0
  27. data/lib/form_input/r18n/cs.yml +97 -0
  28. data/lib/form_input/r18n/en.yml +70 -0
  29. data/lib/form_input/r18n/pl.yml +122 -0
  30. data/lib/form_input/r18n/sk.yml +120 -0
  31. data/lib/form_input/r18n.rb +163 -0
  32. data/lib/form_input/steps.rb +365 -0
  33. data/lib/form_input/types.rb +176 -0
  34. data/lib/form_input/version.rb +12 -0
  35. data/lib/form_input.rb +5 -0
  36. data/test/helper.rb +21 -0
  37. data/test/localize/en.yml +63 -0
  38. data/test/r18n/cs.yml +60 -0
  39. data/test/r18n/xx.yml +51 -0
  40. data/test/reference/cs.txt +352 -0
  41. data/test/reference/cs.yml +14 -0
  42. data/test/reference/en.txt +76 -0
  43. data/test/reference/en.yml +8 -0
  44. data/test/reference/pl.txt +440 -0
  45. data/test/reference/pl.yml +16 -0
  46. data/test/reference/sk.txt +352 -0
  47. data/test/reference/sk.yml +14 -0
  48. data/test/test_core.rb +1272 -0
  49. data/test/test_localize.rb +27 -0
  50. data/test/test_r18n.rb +373 -0
  51. data/test/test_steps.rb +482 -0
  52. data/test/test_types.rb +307 -0
  53. 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 //
@@ -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 #