simple_params 1.0.0 → 1.0.1

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
- ZGFjNDQ2M2VjMDY5MDExZTI3MGMxOGQzYzA5M2ExOGY3MDA0YzlhNg==
4
+ ZTliMTVhZjE0OTJmN2M3MDgxYTJkZjQ2NTZmNTc1NWRmYzkyOWFmOQ==
5
5
  data.tar.gz: !binary |-
6
- MGMzOGQ3MDNjMDY2ZjE2ZTY1ZTBjM2IyYTExMTJlOWZmMjZhOWYxZQ==
6
+ MzZjMDI5OTIyZjgzMjkzMDI0MGQ2ODAwMDc3ODZmYjBhMzkzMTBkMA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YjU1ZmI0OGRiNzZlYjFmZjcyMTAyMjFjNjViMTNiMGQzNzUzODVjYTEwY2U0
10
- OTkwMmUzYWVmMTI0NmZmYTFlYzMzOTA5NGE2NWRmMGZjMWUwYjBjYjE3YzRm
11
- OGNjZjFmYWMzZDlkMTEyYjM0Yjg5ZDMwOGU1MmRmNTQ1YzYwODc=
9
+ MTJhNGIxYjEyNzg5ZDgyZmUwYzk2YjcyYTAwZDUxY2M3NTExZjY2MTUyZDc5
10
+ MGQ1ZWViODEzZjJlMGFjOWI4ODAwOTVhYjNlZWE4ZDYzY2RlMmIzZTVkOTZh
11
+ MjRhNjIyZDNjMzBlZmI3YmFjM2Q5YmVmYjE1NWIxMzdjYWJiMzg=
12
12
  data.tar.gz: !binary |-
13
- NzA2NjI5OWM0MDJiOGE1YTBlZmYwMTgyYzlkMTYyN2RkM2Q5NzNkNDliOWQx
14
- NmQ5Yjc4OWY3YTZjYjBkNTBjYWMyN2NjZmQ4NjExNDM5ZGE2N2QwZGY0Yjcx
15
- ZDkxYmU4YzZmMTliOTc3ZDVhYjU1MTE0MzZlMTA5YjQ5NTU3ZDE=
13
+ MDAyODRiN2ZhZGY5YTg5NjM2M2NjMTZhZGFjYjhjN2EyMDkzZGM0NTgyZWIx
14
+ M2JjZjMwODU2YTFmOTkzNDAzYTQwY2RiZWM4NGRiYWJjZmM5MTQ2MTM2YWFj
15
+ ZDM3NjJlMmVmNDY3MDZiMmU4MDgxODhlYjAwZjMwNzI3Y2NlNjk=
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- simple_params (0.0.5)
4
+ simple_params (1.0.0)
5
5
  activemodel (>= 3.0, < 5.0)
6
6
  shoulda-matchers (~> 2.8)
7
7
  virtus (>= 1.0.0)
@@ -15,12 +15,10 @@ module SimpleParams
15
15
  NotValidValueError = Class.new(StandardError)
16
16
 
17
17
  def requirement_description
18
- value = options[:optional]
19
- case value
20
- when true
18
+ optional = options[:optional]
19
+ has_default = options.has_key?(:default)
20
+ if optional || has_default
21
21
  "required: false"
22
- when false
23
- "required: true"
24
22
  else
25
23
  "required: true"
26
24
  end
@@ -5,6 +5,10 @@ module SimpleParams
5
5
  class Attribute
6
6
  attr_reader :parent
7
7
  attr_reader :name
8
+ attr_reader :type
9
+ attr_reader :default
10
+ attr_reader :validations
11
+ attr_reader :formatter
8
12
 
9
13
  def initialize(parent, name, opts={})
10
14
  @parent = parent
@@ -13,11 +17,12 @@ module SimpleParams
13
17
  @value = nil
14
18
  @default = opts[:default]
15
19
  @formatter = opts[:formatter]
20
+ @validations = opts[:validations] || {}
16
21
  end
17
22
 
18
23
  def raw_value
19
24
  empty = @value.nil? || (@value.is_a?(String) && @value.blank?)
20
- empty ? default : @value
25
+ empty ? raw_default : @value
21
26
  end
22
27
 
23
28
  def value
@@ -39,7 +44,7 @@ module SimpleParams
39
44
  end
40
45
 
41
46
  private
42
- def default
47
+ def raw_default
43
48
  if @default.is_a?(Proc)
44
49
  @default.call(parent, self)
45
50
  else
@@ -84,7 +84,19 @@ module SimpleParams
84
84
 
85
85
  def add_validations(name, opts = {})
86
86
  validations = opts[:validations] || {}
87
- opts[:optional] ? validations.merge!(presence: false, allow_nil: true) : validations.merge!(presence: true)
87
+ has_default = opts.has_key?(:default) # checking has_key? because :default may be nil
88
+ optional = opts[:optional]
89
+ if !validations.empty?
90
+ if optional || has_default
91
+ validations.merge!(allow_nil: true)
92
+ else
93
+ validations.merge!(presence: true)
94
+ end
95
+ else
96
+ if !optional && !has_default
97
+ validations.merge!(presence: true)
98
+ end
99
+ end
88
100
  validates name, validations unless validations.empty?
89
101
  end
90
102
 
@@ -1,3 +1,3 @@
1
1
  module SimpleParams
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -49,11 +49,11 @@ describe SimpleParams::Params do
49
49
  name.should eq("AcceptanceParams::Address")
50
50
  end
51
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
52
+ it "names nested class model_class correctly" do
53
+ nested = AcceptanceParams.new.address
54
+ name = nested.class.name
55
+ name.should eq("AcceptanceParams::Address")
56
+ end
57
57
  end
58
58
 
59
59
  describe "accessors", accessors: true do
@@ -103,6 +103,21 @@ describe SimpleParams::Params do
103
103
  params = AcceptanceParams.new
104
104
  params.attributes.should eq([:reference, :name, :age, :color, :address])
105
105
  end
106
+
107
+ it "returns array of attribute symbols for nested class" do
108
+ params = AcceptanceParams::Address.new
109
+ params.attributes.should eq([:street, :city, :zip_code, :state, :company])
110
+ end
111
+
112
+ it "initializes attributes correctly" do
113
+ params = AcceptanceParams.new
114
+ attribute = params.instance_variable_get("@age_attribute")
115
+ attribute.parent.should eq(params)
116
+ attribute.name.should eq(:age)
117
+ attribute.type.should eq(Integer)
118
+ attribute.formatter.should be_nil
119
+ attribute.validations.should eq({ inclusion: { in: 18..100 }, allow_nil: true })
120
+ end
106
121
  end
107
122
 
108
123
  describe "array syntax", array_syntax: true do
@@ -235,12 +250,12 @@ describe SimpleParams::Params do
235
250
  param:reference, Object, desc:'', required: false
236
251
  param :name, String, desc: '', required: true
237
252
  param :age, Integer, desc: '', required: false
238
- param :color, String, desc: '', required: true
253
+ param :color, String, desc: '', required: false
239
254
  param :address, Hash, desc: '', required: true do
240
255
  param :street, String, desc: '', required: true
241
256
  param :city, String, desc: '', required: true
242
257
  param :zip_code, String, desc: '', required: false
243
- param :state, String, desc: '', required: true
258
+ param :state, String, desc: '', required: false
244
259
  param :company, String, desc: '', required: false
245
260
  end
246
261
  API_PIE_DOCS
@@ -40,7 +40,7 @@ describe SimpleParams::ApiPieDoc::NestedAttribute do
40
40
 
41
41
  describe '#to_s' do
42
42
  specify 'should return properly formatted string' do
43
- expect(nested_attribute.to_s).to eq("param :address, Hash, desc: 'i like pie', required: true do\nparam :street, String, desc: '', required: true\nparam :city, String, desc: '', required: true\nparam :zip_code, String, desc: '', required: false\nparam :state, String, desc: '', required: true\nend")
43
+ expect(nested_attribute.to_s).to eq("param :address, Hash, desc: 'i like pie', required: true do\nparam :street, String, desc: '', required: true\nparam :city, String, desc: '', required: true\nparam :zip_code, String, desc: '', required: false\nparam :state, String, desc: '', required: false\nend")
44
44
  end
45
45
  end
46
46
  end
@@ -105,6 +105,10 @@ describe SimpleParams::Attribute do
105
105
  context "with static default" do
106
106
  let(:model) { described_class.new(house, "color", { default: "something" })}
107
107
 
108
+ it "has default attr_reader" do
109
+ model.default.should eq("something")
110
+ end
111
+
108
112
  it "uses default when value not set" do
109
113
  model.value.should eq("something")
110
114
  end
@@ -116,6 +120,10 @@ describe SimpleParams::Attribute do
116
120
  end
117
121
  let(:model) { described_class.new(house, "color", { default: default })}
118
122
 
123
+ it "has default attr_reader" do
124
+ model.default.should eq(default)
125
+ end
126
+
119
127
  it "uses default when value not set" do
120
128
  model.value.should eq("My house rocks!")
121
129
  end
@@ -126,6 +134,10 @@ describe SimpleParams::Attribute do
126
134
  context "with function reference" do
127
135
  let(:model) { described_class.new(house, "color", { formatter: :capitalize })}
128
136
 
137
+ it "has formatter attr_reader" do
138
+ model.formatter.should eq(:capitalize)
139
+ end
140
+
129
141
  it "uses method formatter from parent" do
130
142
  model.value = "lower"
131
143
  model.value.should eq("LOWER")
@@ -139,10 +151,32 @@ describe SimpleParams::Attribute do
139
151
 
140
152
  let(:model) { described_class.new(house, "color", { formatter: formatter })}
141
153
 
154
+ it "has formatter attr_reader" do
155
+ model.formatter.should eq(formatter)
156
+ end
157
+
142
158
  it "uses Proc formatter on value" do
143
159
  model.value = "rocks"
144
160
  model.value.should eq("My house ROCKS")
145
161
  end
146
162
  end
147
163
  end
164
+
165
+ describe "validations" do
166
+ context "without validations" do
167
+ let(:model) { described_class.new(house, "color", {})}
168
+
169
+ it "has empty hash as validations" do
170
+ model.validations.should eq({})
171
+ end
172
+ end
173
+
174
+ context "with validations" do
175
+ let(:model) { described_class.new(house, "color", { validations: { presence: true } })}
176
+
177
+ it "has validations hash" do
178
+ model.validations.should eq({ presence: true })
179
+ end
180
+ end
181
+ end
148
182
  end
data/spec/params_spec.rb CHANGED
@@ -316,20 +316,20 @@ describe SimpleParams::Params do
316
316
  api_docs = <<-API_PIE_DOCS
317
317
  param :name, String, desc: '', required: true
318
318
  param :age, Integer, desc: '', required: false
319
- param :first_initial, String, desc: '', required: true
319
+ param :first_initial, String, desc: '', required: false
320
320
  param :amount, desc: '', required: false
321
- param :color, String, desc: '', required: true
321
+ param :color, String, desc: '', required: false
322
322
  param :height, String, desc: '', required: false
323
323
  param :address, Hash, desc: '', required: true do
324
324
  param :street, String, desc: '', required: true
325
325
  param :city, String, desc: '', required: true
326
326
  param :zip_code, String, desc: '', required: false
327
- param :state, String, desc: '', required: true
327
+ param :state, String, desc: '', required: false
328
328
  end
329
329
  param :phone, Hash, desc: '', required: true do
330
- param :cell_phone, desc: '', required: true
330
+ param :cell_phone, desc: '', required: false
331
331
  param :phone_number, String, desc: '', required: true
332
- param :area_code, String, desc: '', required: true
332
+ param :area_code, String, desc: '', required: false
333
333
  end
334
334
  API_PIE_DOCS
335
335
 
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: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - brycesenz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-07 00:00:00.000000000 Z
11
+ date: 2015-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel