form_input 0.9.0.pre2 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +19 -0
- data/.rubocop.yml +1161 -0
- data/README.md +2 -2
- data/form_input.gemspec +1 -1
- data/lib/form_input/localize.rb +1 -1
- data/test/test_core.rb +62 -4
- metadata +6 -4
data/README.md
CHANGED
@@ -3120,14 +3120,14 @@ Trivial indeed, isn't it?
|
|
3120
3120
|
|
3121
3121
|
### Supported Locales
|
3122
3122
|
|
3123
|
-
The `FormInput` currently includes translations of builtin error messages for the following
|
3123
|
+
The `FormInput` currently includes translations of builtin error messages for the following languages:
|
3124
3124
|
|
3125
3125
|
* English
|
3126
3126
|
* Czech
|
3127
3127
|
* Slovak
|
3128
3128
|
* Polish
|
3129
3129
|
|
3130
|
-
To add support for another
|
3130
|
+
To add support for another language,
|
3131
3131
|
simply copy the content of one of the most similar files found in the `form_input/r18n` directory
|
3132
3132
|
to the appropriate translation file in your project,
|
3133
3133
|
and translate it as you see fit.
|
data/form_input.gemspec
CHANGED
@@ -4,7 +4,7 @@ require File.expand_path( '../lib/form_input/version', __FILE__ )
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = 'form_input'
|
7
|
-
s.version = FormInput::Version::STRING
|
7
|
+
s.version = FormInput::Version::STRING
|
8
8
|
s.summary = 'Form helper which sanitizes, transforms, validates and encapsulates web request input.'
|
9
9
|
s.description = <<EOT
|
10
10
|
This gem allows you to describe your forms using a simple DSL
|
data/lib/form_input/localize.rb
CHANGED
@@ -40,7 +40,7 @@ class FormInput
|
|
40
40
|
end
|
41
41
|
|
42
42
|
# Get string containing YAML representation of the default R18n translation for all/given FormInput classes.
|
43
|
-
def self.default_translation(forms = self.forms)
|
43
|
+
def self.default_translation( forms = self.forms )
|
44
44
|
hash = Hash[ forms.map{ |x| [ x.translation_name, x.translation_hash ] }.reject{ |k, v| v.empty? } ]
|
45
45
|
YAML::dump( { forms: hash }.stringify_keys )
|
46
46
|
end
|
data/test/test_core.rb
CHANGED
@@ -190,6 +190,28 @@ describe FormInput do
|
|
190
190
|
end
|
191
191
|
end
|
192
192
|
|
193
|
+
should 'allow defining parameters by several means' do
|
194
|
+
c = Class.new( FormInput )
|
195
|
+
c.param :p
|
196
|
+
c.param! :rp
|
197
|
+
c.array :a
|
198
|
+
c.array! :ra
|
199
|
+
c.hash :h
|
200
|
+
c.hash! :rh
|
201
|
+
c.param :p2, hash: false
|
202
|
+
c.param :rp2, array: false, required: true
|
203
|
+
c.param :a2, array: true
|
204
|
+
c.param :ra2, array: true, required: true
|
205
|
+
c.param :h2, hash: true
|
206
|
+
c.param :rh2, hash: true, required: true
|
207
|
+
f = c.new
|
208
|
+
names( f.scalar_params ).should == [ :p, :rp, :p2, :rp2 ]
|
209
|
+
names( f.array_params ).should == [ :a, :ra, :a2, :ra2 ]
|
210
|
+
names( f.hash_params ).should == [ :h, :rh, :h2, :rh2 ]
|
211
|
+
names( f.optional_params ).should == [ :p, :a, :h, :p2, :a2, :h2 ]
|
212
|
+
names( f.required_params ).should == [ :rp, :ra, :rh, :rp2, :ra2, :rh2 ]
|
213
|
+
end
|
214
|
+
|
193
215
|
should 'complain about incorrect parameter definition' do
|
194
216
|
->{ TestForm.param :x, "test", "test" }.should.raise( ArgumentError )
|
195
217
|
->{ TestForm.param :x, { type: :email }, :extra }.should.raise( ArgumentError )
|
@@ -375,6 +397,7 @@ describe FormInput do
|
|
375
397
|
|
376
398
|
f = c.new( request( "?str=1.5&int=1.5&float=1.5&date=2011-12-31&time=31.12.2000+10:24:05&bool=true&str2=Abc&arr=a,b&hsh=1:2,3:4" ) )
|
377
399
|
f.should.be.valid
|
400
|
+
names( f.blank_params ).should == [ :int2, :float2 ]
|
378
401
|
f.to_h.should == f.to_hash
|
379
402
|
f.to_hash.should == {
|
380
403
|
str: "1.5",
|
@@ -428,6 +451,8 @@ describe FormInput do
|
|
428
451
|
f.hsh.should == {}
|
429
452
|
names( f.incorrect_params ).should == []
|
430
453
|
names( f.invalid_params ).should == []
|
454
|
+
f.empty_params.should == f.params
|
455
|
+
f.blank_params.should == f.params
|
431
456
|
f.to_hash.should == {}
|
432
457
|
f.url_params.should == {}
|
433
458
|
f.url_query.should == ""
|
@@ -612,6 +637,7 @@ describe FormInput do
|
|
612
637
|
c.param :single, data: ->{ 2.times.map{ |i| [ i, ( 65 + i ).chr ] } }, class: Integer do to_i end
|
613
638
|
c.array :multi, data: ->{ 4.times.map{ |i| [ i, ( 65 + i ).chr ] } }, class: Integer do to_i end
|
614
639
|
c.param :x, filter: ->{ to_i }, class: Integer
|
640
|
+
c.hash :h
|
615
641
|
|
616
642
|
f = c.new( single: 1, multi: [ 1, 3 ], x: 5 )
|
617
643
|
f.should.be.valid
|
@@ -646,23 +672,46 @@ describe FormInput do
|
|
646
672
|
p.form_name.should == "x"
|
647
673
|
p.form_value.should == "5"
|
648
674
|
|
649
|
-
f = c.new( request( "?single=0&multi[]=0&multi[]=2&x=3" ) )
|
675
|
+
f = c.new( request( "?single=0&multi[]=0&multi[]=2&x=3" ) )
|
650
676
|
f.should.be.valid
|
651
677
|
f.to_hash.should == { single: 0, multi: [ 0, 2 ], x: 3 }
|
652
678
|
f.url_params.should == { single: "0", multi: [ "0", "2" ], x: "3" }
|
653
679
|
f.url_query.should == "single=0&multi[]=0&multi[]=2&x=3"
|
654
680
|
|
655
|
-
f = c.new( request( "?single=5&multi[]=5" ) )
|
681
|
+
f = c.new( request( "?single=5&multi[]=5" ) )
|
656
682
|
f.should.be.valid
|
657
683
|
f.to_hash.should == { single: 5, multi: [ 5 ] }
|
658
684
|
f.url_params.should == { single: "5", multi: [ "5" ] }
|
659
685
|
f.url_query.should == "single=5&multi[]=5"
|
660
686
|
|
661
|
-
f = c.new( request( "" ) )
|
687
|
+
f = c.new( request( "" ) )
|
662
688
|
f.should.be.valid
|
663
689
|
f.to_hash.should == {}
|
664
690
|
f.url_params.should == {}
|
665
691
|
f.url_query.should == ""
|
692
|
+
|
693
|
+
p = f.param( :single )
|
694
|
+
p.selected?( nil ).should.be.false
|
695
|
+
p.selected?( 0 ).should.be.false
|
696
|
+
p.selected?( 1 ).should.be.false
|
697
|
+
p.selected?( 2 ).should.be.false
|
698
|
+
p.selected?( 3 ).should.be.false
|
699
|
+
|
700
|
+
f = c.new( request( "?h[0]=" ) )
|
701
|
+
f.should.be.valid
|
702
|
+
f.to_hash.should == { h: { 0 => "" } }
|
703
|
+
f.url_params.should == { h: { "0" => "" } }
|
704
|
+
f.url_query.should == "h[0]="
|
705
|
+
|
706
|
+
p = f.param( :h )
|
707
|
+
p.data.should == []
|
708
|
+
p.code.should == :h
|
709
|
+
->{ p.form_name }.should.raise ArgumentError
|
710
|
+
p.form_name( 0 ).should == "h[0]"
|
711
|
+
p.form_value.should == { "0" => "" }
|
712
|
+
p.selected?( nil ).should.be.false
|
713
|
+
p.selected?( 0 ).should.be.false
|
714
|
+
p.selected?( "" ).should.be.false
|
666
715
|
end
|
667
716
|
|
668
717
|
should 'classify parameters' do
|
@@ -1075,7 +1124,7 @@ describe FormInput do
|
|
1075
1124
|
f.url_params.should == { q: s }
|
1076
1125
|
f.url_query.should == "q=%FF"
|
1077
1126
|
|
1078
|
-
f = TestForm.new(
|
1127
|
+
f = TestForm.new( request( "?q=%ff" ) )
|
1079
1128
|
->{ f.validate }.should.not.raise
|
1080
1129
|
f.should.not.be.valid
|
1081
1130
|
f.error_messages.should == [ "q must use valid encoding" ]
|
@@ -1085,6 +1134,15 @@ describe FormInput do
|
|
1085
1134
|
f.url_query.should == "q=%FF"
|
1086
1135
|
end
|
1087
1136
|
|
1137
|
+
should 'reject unexpected values in request input' do
|
1138
|
+
->{ TestForm.new.import( q: "", opts: [], on: {} ) }.should.not.raise
|
1139
|
+
->{ TestForm.new.import( q: [], opts: {}, on: "" ) }.should.not.raise
|
1140
|
+
->{ TestForm.new.import( q: {}, opts: "", on: [] ) }.should.not.raise
|
1141
|
+
->{ TestForm.new.import( q: 1 ) }.should.raise TypeError
|
1142
|
+
->{ TestForm.new.import( q: :x ) }.should.raise TypeError
|
1143
|
+
->{ TestForm.new.import( q: TestForm ) }.should.raise TypeError
|
1144
|
+
end
|
1145
|
+
|
1088
1146
|
should 'make it easy to create URLs' do
|
1089
1147
|
f = TestForm.new( query: "x", opts: [ 0, 0, 1 ], on: { 0 => 1 }, age: 10, email: nil, password: "", text: " " )
|
1090
1148
|
f.url_params.should == { q: "x", age: "10", text: " ", opts: [ "0", "0", "1" ], on: { "0" => "1" } }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: form_input
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.0
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patrik Rak
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -79,7 +79,9 @@ executables: []
|
|
79
79
|
extensions: []
|
80
80
|
extra_rdoc_files: []
|
81
81
|
files:
|
82
|
+
- ".codeclimate.yml"
|
82
83
|
- ".gitignore"
|
84
|
+
- ".rubocop.yml"
|
83
85
|
- ".travis.gemfile"
|
84
86
|
- ".travis.yml"
|
85
87
|
- ".yardopts"
|
@@ -148,9 +150,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
148
150
|
version: 2.0.0
|
149
151
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
150
152
|
requirements:
|
151
|
-
- - "
|
153
|
+
- - ">="
|
152
154
|
- !ruby/object:Gem::Version
|
153
|
-
version:
|
155
|
+
version: '0'
|
154
156
|
requirements: []
|
155
157
|
rubyforge_project:
|
156
158
|
rubygems_version: 2.4.5.1
|