simple_params 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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