simple_params 0.0.5 → 1.0.0

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZWM1MGE4MTFhODA2YzgzZDFiNDFmNGIxZjFiNTIxMzI4ZDNjOTg5OQ==
4
+ ZGFjNDQ2M2VjMDY5MDExZTI3MGMxOGQzYzA5M2ExOGY3MDA0YzlhNg==
5
5
  data.tar.gz: !binary |-
6
- MGJlNGI0MDM4MGFlZTA5NDUwZTBhYTdhNDRhMmI5YzYwYTRhMTBhNw==
6
+ MGMzOGQ3MDNjMDY2ZjE2ZTY1ZTBjM2IyYTExMTJlOWZmMjZhOWYxZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NGJmZDhjNDYxOWYxZjc0ODk5OGMwNjdmNDQwMGE4NDgyZjg4NGU3MDkwODdl
10
- NmQ4YTFhNGNiNzUyYTMzODFmODVlYzgzYmU4MzdkYjY5MmIxNGMxMDJiMzZk
11
- OWYyZDVmNDc5N2JjZjAwMzEwMWEzZjZkOTdlNjY4ZTA2NzNmNDY=
9
+ YjU1ZmI0OGRiNzZlYjFmZjcyMTAyMjFjNjViMTNiMGQzNzUzODVjYTEwY2U0
10
+ OTkwMmUzYWVmMTI0NmZmYTFlYzMzOTA5NGE2NWRmMGZjMWUwYjBjYjE3YzRm
11
+ OGNjZjFmYWMzZDlkMTEyYjM0Yjg5ZDMwOGU1MmRmNTQ1YzYwODc=
12
12
  data.tar.gz: !binary |-
13
- MWY2OGU5NmUyM2Y5ZWY1YmExYWY5NTkxOTc2ZDk2ZjUwNTNjZGRlNTFlMGJm
14
- NjVmN2ZkZTdhNDM1M2RjNDY1YjY2ZjYyMWJiY2M5MmVmY2YyYjk0YTA1YzI5
15
- ODczNjgzMjhmNjIwNzBmNDY0ZmYwNDVlMmEyZmE5ZTY0NWY1ZDE=
13
+ NzA2NjI5OWM0MDJiOGE1YTBlZmYwMTgyYzlkMTYyN2RkM2Q5NzNkNDliOWQx
14
+ NmQ5Yjc4OWY3YTZjYjBkNTBjYWMyN2NjZmQ4NjExNDM5ZGE2N2QwZGY0Yjcx
15
+ ZDkxYmU4YzZmMTliOTc3ZDVhYjU1MTE0MzZlMTA5YjQ5NTU3ZDE=
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- simple_params (0.0.4)
4
+ simple_params (0.0.5)
5
5
  activemodel (>= 3.0, < 5.0)
6
6
  shoulda-matchers (~> 2.8)
7
7
  virtus (>= 1.0.0)
@@ -50,7 +50,7 @@ module SimpleParams
50
50
 
51
51
  def nested_hash(name, opts={}, &block)
52
52
  attr_accessor name
53
- nested_class = define_nested_class(opts, &block)
53
+ nested_class = define_nested_class(name, opts, &block)
54
54
  @nested_hashes ||= {}
55
55
  @nested_hashes[name.to_sym] = nested_class
56
56
  end
@@ -88,16 +88,12 @@ module SimpleParams
88
88
  validates name, validations unless validations.empty?
89
89
  end
90
90
 
91
- def define_nested_class(options, &block)
91
+ def define_nested_class(name, options, &block)
92
+ klass_name = name.to_s.split('_').collect(&:capitalize).join
92
93
  Class.new(Params).tap do |klass|
93
- name_function = Proc.new {
94
- def self.model_name
95
- ActiveModel::Name.new(self, nil, "temp")
96
- end
97
- }
98
- klass.class_eval(&name_function)
99
94
  klass.class_eval(&block)
100
- klass.class_eval("self.options = options")
95
+ klass.class_eval("self.options = #{options}")
96
+ self.const_set(klass_name, klass)
101
97
  end
102
98
  end
103
99
  end
@@ -146,7 +142,7 @@ module SimpleParams
146
142
  if @original_params.include?(method_name.to_sym)
147
143
  value = @original_params[method_name.to_sym]
148
144
  if value.is_a?(Hash)
149
- define_anonymous_class(value)
145
+ define_anonymous_class(method_name, value)
150
146
  else
151
147
  Attribute.new(self, method_name).value = value
152
148
  end
@@ -206,17 +202,15 @@ module SimpleParams
206
202
  end
207
203
  end
208
204
 
209
- def define_anonymous_class(hash)
210
- klass = Class.new(Params).tap do |k|
211
- name_function = Proc.new {
212
- def self.model_name
213
- ActiveModel::Name.new(self, nil, "temp")
214
- end
215
- }
216
- k.class_eval(&name_function)
205
+ def define_anonymous_class(name, hash)
206
+ klass_name = name.to_s.split('_').collect(&:capitalize).join
207
+ anonymous_klass = Class.new(Params).tap do |klass|
208
+ # Have to undefine, then redefine, this const in order to avoid warnings.
209
+ self.class.send(:remove_const, klass_name) if self.class.const_defined?(klass_name)
210
+ self.class.const_set(klass_name, klass)
217
211
  end
218
- klass.allow_undefined_params
219
- klass.new(hash)
212
+ anonymous_klass.allow_undefined_params
213
+ anonymous_klass.new(hash)
220
214
  end
221
215
  end
222
216
  end
@@ -1,3 +1,3 @@
1
1
  module SimpleParams
2
- VERSION = "0.0.5"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -12,6 +12,7 @@ class AcceptanceParams < SimpleParams::Params
12
12
  param :city, validations: { length: { in: 4..40 } }
13
13
  param :zip_code, optional: true
14
14
  param :state, default: "North Carolina"
15
+ param :company, optional: true
15
16
  end
16
17
 
17
18
  def name_has_letters
@@ -41,6 +42,20 @@ describe SimpleParams::Params do
41
42
  end
42
43
  end
43
44
 
45
+ describe "nested_class", nested_class: true do
46
+ it "names nested class correctly" do
47
+ nested = AcceptanceParams.new.address
48
+ name = nested.class.name
49
+ name.should eq("AcceptanceParams::Address")
50
+ end
51
+
52
+ # it "names nested class model_class correctly" do
53
+ # nested = AcceptanceParams.new.address
54
+ # name = nested.model_class
55
+ # name.should eq("")
56
+ # end
57
+ end
58
+
44
59
  describe "accessors", accessors: true do
45
60
  let(:params) { AcceptanceParams.new }
46
61
 
@@ -183,6 +198,34 @@ describe SimpleParams::Params do
183
198
  )
184
199
  end
185
200
  end
201
+
202
+ describe "acceptance cases" do
203
+ let(:params) do
204
+ {
205
+ name: "Tom",
206
+ age: 41,
207
+ address: {
208
+ street: "1 Main St.",
209
+ city: "Chicago",
210
+ state: "IL",
211
+ zip_code: 33440
212
+ }
213
+ }
214
+ end
215
+
216
+ it "is valid after multiple times" do
217
+ acceptance_params = AcceptanceParams.new(params)
218
+ acceptance_params.should be_valid
219
+ acceptance_params.should be_valid
220
+ end
221
+
222
+ it "is invalidated if validity changes after initial assignment" do
223
+ acceptance_params = AcceptanceParams.new(params)
224
+ acceptance_params.should be_valid
225
+ acceptance_params.name = nil
226
+ acceptance_params.should_not be_valid
227
+ end
228
+ end
186
229
  end
187
230
 
188
231
  describe "api_pie_documentation", api_pie_documentation: true do
@@ -198,6 +241,7 @@ describe SimpleParams::Params do
198
241
  param :city, String, desc: '', required: true
199
242
  param :zip_code, String, desc: '', required: false
200
243
  param :state, String, desc: '', required: true
244
+ param :company, String, desc: '', required: false
201
245
  end
202
246
  API_PIE_DOCS
203
247
 
@@ -0,0 +1,95 @@
1
+ require 'spec_helper'
2
+
3
+ class Example
4
+ class ParamsOne < SimpleParams::Params
5
+ param :name
6
+ param :age, type: :integer, validations: { inclusion: { in: 18..100 } }
7
+
8
+ nested_hash :address do
9
+ param :street
10
+ param :city, validations: { length: { in: 4..40 } }
11
+ param :zip_code, optional: true
12
+ param :state, optional: true, default: "North Carolina"
13
+ end
14
+ end
15
+
16
+ class ParamsTwo < SimpleParams::Params
17
+ param :name
18
+ param :age, type: :integer, optional: true
19
+
20
+ nested_hash :address do
21
+ param :street
22
+ param :city, validations: { length: { in: 4..40 } }
23
+ param :zip_code
24
+ param :state
25
+ param :country
26
+ end
27
+ end
28
+ end
29
+
30
+ describe SimpleParams::Params do
31
+ describe "api_pie_documentation", api_pie_documentation: true do
32
+ it "generates valid api_pie documentation for Example::ParamsOne" do
33
+ documentation = Example::ParamsOne.api_pie_documentation
34
+ api_docs = <<-API_PIE_DOCS
35
+ param :name, String, desc: '', required: true
36
+ param :age, Integer, desc: '', required: true
37
+ param :address, Hash, desc: '', required: true do
38
+ param :street, String, desc: '', required: true
39
+ param :city, String, desc: '', required: true
40
+ param :zip_code, String, desc: '', required: false
41
+ param :state, String, desc: '', required: false
42
+ end
43
+ API_PIE_DOCS
44
+
45
+ expect(documentation).to be_a String
46
+ expect(documentation.gsub(/\s+/, "")).to eq api_docs.gsub(/\s+/, "")
47
+ end
48
+
49
+ it "generates valid api_pie documentation for Example::ParamsTwo" do
50
+ documentation = Example::ParamsTwo.api_pie_documentation
51
+ api_docs = <<-API_PIE_DOCS
52
+ param :name, String, desc: '', required: true
53
+ param :age, Integer, desc: '', required: false
54
+ param :address, Hash, desc: '', required: true do
55
+ param :street, String, desc: '', required: true
56
+ param :city, String, desc: '', required: true
57
+ param :zip_code, String, desc: '', required: true
58
+ param :state, String, desc: '', required: true
59
+ param :country, String, desc: '', required: true
60
+ end
61
+ API_PIE_DOCS
62
+
63
+ expect(documentation).to be_a String
64
+ expect(documentation.gsub(/\s+/, "")).to eq api_docs.gsub(/\s+/, "")
65
+ end
66
+ end
67
+
68
+ describe "acceptance", acceptance: true do
69
+ it "is valid with only required params for Example::ParamsOne" do
70
+ params = {
71
+ name: "Tom",
72
+ age: 21,
73
+ address: {
74
+ street: "1 Main St.",
75
+ city: "Chicago"
76
+ }
77
+ }
78
+ Example::ParamsOne.new(params).should be_valid
79
+ end
80
+
81
+ it "is valid with only required params for Example::ParamsTwo" do
82
+ params = {
83
+ name: "Tom",
84
+ address: {
85
+ street: "1 Main St.",
86
+ city: "Chicago",
87
+ zip_code: "20122",
88
+ state: "IL",
89
+ country: "USA"
90
+ }
91
+ }
92
+ Example::ParamsTwo.new(params).should be_valid
93
+ end
94
+ end
95
+ end
data/spec/params_spec.rb CHANGED
@@ -292,6 +292,11 @@ describe SimpleParams::Params do
292
292
  model.nested.should be_a(SimpleParams::Params)
293
293
  end
294
294
 
295
+ it "allows undefined nested params, and name class correctly" do
296
+ model = DummyParams.new(nested: { some_value: 1 } )
297
+ model.nested.class.name.should eq("DummyParams::Nested")
298
+ end
299
+
295
300
  it "allows accessors for nested attributes" do
296
301
  model = DummyParams.new(nested: { some_value: 1 } )
297
302
  model.nested.some_value.should eq(1)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_params
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - brycesenz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-29 00:00:00.000000000 Z
11
+ date: 2015-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -155,6 +155,7 @@ files:
155
155
  - spec/errors_spec.rb
156
156
  - spec/fixtures/dummy_params.rb
157
157
  - spec/formatter_spec.rb
158
+ - spec/multiple_classes_spec.rb
158
159
  - spec/params_spec.rb
159
160
  - spec/spec_helper.rb
160
161
  - spec/support/shared_examples/base_attribute.rb
@@ -196,6 +197,7 @@ test_files:
196
197
  - spec/errors_spec.rb
197
198
  - spec/fixtures/dummy_params.rb
198
199
  - spec/formatter_spec.rb
200
+ - spec/multiple_classes_spec.rb
199
201
  - spec/params_spec.rb
200
202
  - spec/spec_helper.rb
201
203
  - spec/support/shared_examples/base_attribute.rb