simple_params 0.0.1pre2

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.
@@ -0,0 +1,215 @@
1
+ require 'spec_helper'
2
+
3
+ class DummyParams < SimpleParams::Params
4
+ string_param :name
5
+ integer_param :age, optional: true
6
+ string_param :first_initial, default: lambda { |params, param| params.name[0] if params.name.present? }
7
+ decimal_param :amount, optional: true, default: 0.10
8
+ param :color, default: "red", validations: { inclusion: { in: ["red", "green"] }}
9
+
10
+ nested_hash :address do
11
+ string_param :street
12
+ string_param :city, validations: { length: { in: 4..40 } }
13
+ string_param :zip_code, optional: true, validations: { length: { in: 5..9 } }
14
+ param :state, default: "North Carolina"
15
+ end
16
+
17
+ nested_hash :phone do
18
+ boolean_param :cell_phone, default: true
19
+ string_param :phone_number, validations: { length: { in: 7..10 } }
20
+ string_param :area_code, default: lambda { |params, param|
21
+ if params.phone_number.present?
22
+ params.phone_number[0..2]
23
+ end
24
+ }
25
+ end
26
+ end
27
+
28
+ describe SimpleParams::Params do
29
+ describe "accessors", accessors: true do
30
+ let(:params) { DummyParams.new }
31
+
32
+ it "has getter and setter methods for required param" do
33
+ params.should respond_to(:name)
34
+ params.name.should be_nil
35
+ params.name = "Tom"
36
+ params.name.should eq("Tom")
37
+ end
38
+
39
+ it "has getter and setter methods for optional param" do
40
+ params.should respond_to(:age)
41
+ params.name.should be_nil
42
+ params.age = 19
43
+ params.age.should eq(19)
44
+ end
45
+
46
+ describe "nested params", nested: true do
47
+ it "has getter and setter methods for required param" do
48
+ params.address.should respond_to(:street)
49
+ params.address.street.should be_nil
50
+ params.address.street = "1 Main St."
51
+ params.address.street.should eq("1 Main St.")
52
+ end
53
+
54
+ it "has getter and setter methods for optional param" do
55
+ params.address.should respond_to(:zip_code)
56
+ params.address.zip_code.should be_nil
57
+ params.address.zip_code = "20165"
58
+ params.address.zip_code.should eq("20165")
59
+ end
60
+ end
61
+ end
62
+
63
+ describe "array syntax", array_syntax: true do
64
+ let(:params) do
65
+ DummyParams.new(
66
+ name: "Bill",
67
+ age: 30,
68
+ address: {
69
+ city: "Greenville"
70
+ }
71
+ )
72
+ end
73
+
74
+ it "can access 'name' through array syntax" do
75
+ params[:name].should eq("Bill")
76
+ params["name"].should eq("Bill")
77
+ end
78
+
79
+ it "can set 'name' through array syntax" do
80
+ params[:name] = "Tom"
81
+ params[:name].should eq("Tom")
82
+ params["name"].should eq("Tom")
83
+ end
84
+
85
+ it "can access 'age' through array syntax" do
86
+ params[:age].should eq(30)
87
+ params["age"].should eq(30)
88
+ end
89
+
90
+ it "can set 'age' through array syntax" do
91
+ params[:age] = 42
92
+ params[:age].should eq(42)
93
+ params["age"].should eq(42)
94
+ end
95
+
96
+ describe "nested params", nested: true do
97
+ it "can access 'city' through array syntax" do
98
+ params[:address][:city].should eq("Greenville")
99
+ params["address"]["city"].should eq("Greenville")
100
+ end
101
+
102
+ it "can set 'city' through array syntax" do
103
+ params[:address][:city] = "Asheville"
104
+ params[:address][:city].should eq("Asheville")
105
+ params["address"]["city"].should eq("Asheville")
106
+ end
107
+ end
108
+ end
109
+
110
+ describe "coercion", coercion: true do
111
+ it "coerces values on initialization" do
112
+ params = DummyParams.new(age: "42")
113
+ params.age.should eq(42)
114
+ end
115
+
116
+ it "coerces values from setters" do
117
+ params = DummyParams.new
118
+ params.age = "42"
119
+ params.age.should eq(42)
120
+ end
121
+
122
+ it "coerces nested attributes on initialization" do
123
+ params = DummyParams.new(address: { zip_code: 90210 })
124
+ params.address.zip_code.should eq("90210")
125
+ end
126
+
127
+ it "coerces nested attributes from setters" do
128
+ params = DummyParams.new
129
+ params.address.zip_code = 90210
130
+ params.address.zip_code.should eq("90210")
131
+ end
132
+ end
133
+
134
+ describe "defaults", defaults: true do
135
+ describe "simple defaults" do
136
+ it "sets default values on initialization without key" do
137
+ params = DummyParams.new
138
+ params.amount.should eq(0.10)
139
+ end
140
+
141
+ it "sets default values on initialization with nil value" do
142
+ params = DummyParams.new(amount: nil)
143
+ params.amount.should eq(0.10)
144
+ end
145
+
146
+ it "sets default values on initialization with blank value" do
147
+ params = DummyParams.new(amount: "")
148
+ params.amount.should eq(0.10)
149
+ end
150
+
151
+ describe "nested params" do
152
+ it "sets default values on initialization without key" do
153
+ params = DummyParams.new
154
+ params.phone.cell_phone.should be_truthy
155
+ end
156
+
157
+ it "sets default values on initialization with nil value" do
158
+ params = DummyParams.new(phone: { cell_phone: nil })
159
+ params.phone.cell_phone.should be_truthy
160
+ end
161
+
162
+ it "sets default values on initialization with blank value" do
163
+ params = DummyParams.new(phone: { cell_phone: "" })
164
+ params.phone.cell_phone.should be_truthy
165
+ end
166
+ end
167
+ end
168
+
169
+ describe "Proc defaults" do
170
+ it "sets default values on initialization without key" do
171
+ params = DummyParams.new
172
+ params.first_initial.should be_nil
173
+ params = DummyParams.new(name: "Tom")
174
+ params.first_initial.should eq("T")
175
+ end
176
+
177
+ it "sets default values on initialization with nil value" do
178
+ params = DummyParams.new
179
+ params.first_initial.should be_nil
180
+ params = DummyParams.new(name: "Tom", first_initial: nil)
181
+ params.first_initial.should eq("T")
182
+ end
183
+
184
+ it "sets default values on initialization with blank value" do
185
+ params = DummyParams.new
186
+ params.first_initial.should be_nil
187
+ params = DummyParams.new(name: "Tom", first_initial: "")
188
+ params.first_initial.should eq("T")
189
+ end
190
+
191
+ describe "nested params", failing: true do
192
+ it "sets default values on initialization without key" do
193
+ params = DummyParams.new
194
+ params.phone.area_code.should be_nil
195
+ params = DummyParams.new(phone: { phone_number: "8185559988" })
196
+ params.phone.area_code.should eq("818")
197
+ end
198
+
199
+ it "sets default values on initialization with nil value" do
200
+ params = DummyParams.new
201
+ params.phone.area_code.should be_nil
202
+ params = DummyParams.new(phone: { phone_number: "8185559988", area_code: nil })
203
+ params.phone.area_code.should eq("818")
204
+ end
205
+
206
+ it "sets default values on initialization with blank value" do
207
+ params = DummyParams.new
208
+ params.phone.area_code.should be_nil
209
+ params = DummyParams.new(phone: { phone_number: "8185559988", area_code: "" })
210
+ params.phone.area_code.should eq("818")
211
+ end
212
+ end
213
+ end
214
+ end
215
+ end
@@ -0,0 +1,12 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'simple_params'
4
+
5
+ spec = Gem::Specification.find_by_name("simple_params")
6
+ gem_root = spec.gem_dir
7
+ Dir[("#{gem_root}/spec/support/**/*.rb")].each {|f| require f}
8
+ I18n.config.enforce_available_locales = true
9
+
10
+ RSpec.configure do |config|
11
+ config.mock_with :rspec
12
+ end
metadata ADDED
@@ -0,0 +1,140 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simple_params
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1pre2
5
+ platform: ruby
6
+ authors:
7
+ - brycesenz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activemodel
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ - - <
21
+ - !ruby/object:Gem::Version
22
+ version: '5.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '3.0'
30
+ - - <
31
+ - !ruby/object:Gem::Version
32
+ version: '5.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: virtus
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: 1.0.0
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: 1.0.0
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '1.5'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ version: '1.5'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rake
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ~>
66
+ - !ruby/object:Gem::Version
67
+ version: '10.1'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ~>
73
+ - !ruby/object:Gem::Version
74
+ version: '10.1'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rspec
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ~>
80
+ - !ruby/object:Gem::Version
81
+ version: '2.6'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ version: '2.6'
89
+ description: Simple way to specify API params
90
+ email:
91
+ - bryce.senz@gmail.com
92
+ executables: []
93
+ extensions: []
94
+ extra_rdoc_files: []
95
+ files:
96
+ - .rspec
97
+ - .ruby-gemset
98
+ - .ruby-version
99
+ - Gemfile
100
+ - Gemfile.lock
101
+ - README.md
102
+ - lib/simple_params.rb
103
+ - lib/simple_params/errors.rb
104
+ - lib/simple_params/params.rb
105
+ - lib/simple_params/validations.rb
106
+ - lib/simple_params/version.rb
107
+ - simple_params.gemspec
108
+ - spec/acceptance_spec.rb
109
+ - spec/errors_spec.rb
110
+ - spec/params_spec.rb
111
+ - spec/spec_helper.rb
112
+ homepage: https://github.com/brycesenz/simple_params
113
+ licenses:
114
+ - MIT
115
+ metadata: {}
116
+ post_install_message:
117
+ rdoc_options: []
118
+ require_paths:
119
+ - lib
120
+ required_ruby_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ required_rubygems_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ! '>'
128
+ - !ruby/object:Gem::Version
129
+ version: 1.3.1
130
+ requirements: []
131
+ rubyforge_project:
132
+ rubygems_version: 2.2.2
133
+ signing_key:
134
+ specification_version: 4
135
+ summary: A DSL for specifying params, including type coercion and validation
136
+ test_files:
137
+ - spec/acceptance_spec.rb
138
+ - spec/errors_spec.rb
139
+ - spec/params_spec.rb
140
+ - spec/spec_helper.rb