daily_affirmation 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3a8c603a904381accd3632ef5a72f8b0fdb88d7f
4
- data.tar.gz: 92b4e916aefb6589644c63cde10a38e820768631
3
+ metadata.gz: 44d20be607b16937aac801de19c1973221a42cf4
4
+ data.tar.gz: 941f6d4296dde5aaa5fb754dcc418df3786dea44
5
5
  SHA512:
6
- metadata.gz: fc3b958edda00cdde56f72e407d93a039e2b37ba304d47200643c5a99246912b2f8babb2664f492004c9f017f7dff32c55ca77e73d0920a3c0fbcfeb9c284c6c
7
- data.tar.gz: 10be4946fe5db48e8794ca8dd3c0efaadee1f26de108121a7101d10f2befd2faa7c01216d6b6099644d59e99bf883a8c94c798491a130308771285e4ffa2bee0
6
+ metadata.gz: ae1c976af688895ad58f82c7aa718a1fa4a7f719d43d0cca1fc1036049940d2a8efd515c4016bc73104e9142e019ca529d4e2fc7735e5b9b49dae31b0b5e9418
7
+ data.tar.gz: 6531765cd121565299d0ad104584d60ed84a65c160e6be6f527a89b9efc59ce30283c77585e7cec23f7cf39a80415b602a03663102089dd5815046ab32fd94dc
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # DailyAffirmation
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/daily_affirmation.png)](http://badge.fury.io/rb/daily_affirmation)
3
4
  [![Semaphore](https://semaphoreapp.com/api/v1/projects/7268def52c792e50bfc60e1b1a6e905ed4e2a80d/118940/shields_badge.png)](https://semaphoreapp.com/minter/daily_affirmation)
4
5
  [![Code Climate](https://codeclimate.com/github/teamsnap/daily_affirmation.png)](https://codeclimate.com/github/teamsnap/daily_affirmation)
5
6
  [![Coverage Status](https://coveralls.io/repos/teamsnap/daily_affirmation/badge.png?branch=master)](https://coveralls.io/r/teamsnap/daily_affirmation?branch=master)
@@ -30,21 +31,23 @@ Or install it yourself as:
30
31
 
31
32
  ## Usage
32
33
 
33
- require "daily_affirmations"
34
+ ```ruby
35
+ require "daily_affirmations"
34
36
 
35
- class Team
36
- attr_accessor :name, :status_cd
37
- end
37
+ class Team
38
+ attr_accessor :name, :status_cd
39
+ end
38
40
 
39
- class TeamAffirmation
40
- include DailyAffirmation.affirmations
41
+ class TeamAffirmation
42
+ include DailyAffirmation.affirmations
41
43
 
42
- affirms_presence_of :name
43
- affirms_inclusion_of :status_cd, :list => 0..2
44
- end
44
+ affirms_presence_of :name
45
+ affirms_inclusion_of :status_cd, :list => 0..2
46
+ end
45
47
 
46
- team1 = OpenStruct.new(:name => "", :status_cd => 3)
47
- TeamAffirmation.new(team1).valid? #=> false
48
+ team1 = OpenStruct.new(:name => "", :status_cd => 3)
49
+ TeamAffirmation.new(team1).valid? #=> false
50
+ ```
48
51
 
49
52
  ## Roadmap
50
53
 
@@ -43,7 +43,15 @@ module DailyAffirmation
43
43
  if present?(attribute)
44
44
  [true, nil]
45
45
  else
46
- [false, "#{attribute} is not present"]
46
+ [false, "#{attribute} can't be blank"]
47
+ end
48
+ end
49
+
50
+ def affirm_absence_of(attribute, _ = {})
51
+ if present?(attribute)
52
+ [false, "#{attribute} must be blank"]
53
+ else
54
+ [true, nil]
47
55
  end
48
56
  end
49
57
 
@@ -55,6 +63,54 @@ module DailyAffirmation
55
63
  end
56
64
  end
57
65
 
66
+ def affirm_exclusion_of(attribute, list: [])
67
+ if list.include?(object.send(attribute))
68
+ [false, "#{attribute} is reserved"]
69
+ else
70
+ [true, nil]
71
+ end
72
+ end
73
+
74
+ def affirm_acceptance_of(attribute, _ = {})
75
+ if object.send(attribute)
76
+ [true, nil]
77
+ else
78
+ [false, "#{attribute} must be accepted"]
79
+ end
80
+ end
81
+
82
+ def affirm_confirmation_of(attribute, _ = {})
83
+ if object.send(attribute) == object.send("#{attribute}_confirmation")
84
+ [true, nil]
85
+ else
86
+ [false, "#{attribute} doesn't match confirmation"]
87
+ end
88
+ end
89
+
90
+ def affirm_format_of(attribute, regex: //)
91
+ if regex.match(object.send(attribute))
92
+ [true, nil]
93
+ else
94
+ [false, "#{attribute} is invalid"]
95
+ end
96
+ end
97
+
98
+ def affirm_length_of(attribute, range: 0..0)
99
+ if range.include?(object.send(attribute).size)
100
+ [true, nil]
101
+ else
102
+ [false, "#{attribute} is the wrong length (allowed: #{range})"]
103
+ end
104
+ end
105
+
106
+ def affirm_numericality_of(attribute, _ = {})
107
+ if object.send(attribute).is_a?(Numeric)
108
+ [true, nil]
109
+ else
110
+ [false, "#{attribute} is not a number"]
111
+ end
112
+ end
113
+
58
114
  def blank?(attribute)
59
115
  value = object.send(attribute)
60
116
  case value
@@ -74,12 +130,46 @@ module DailyAffirmation
74
130
  affirmations << {:attribute => attribute, :type => :presence}
75
131
  end
76
132
 
133
+ def affirms_absence_of(attribute)
134
+ affirmations << {:attribute => attribute, :type => :absence}
135
+ end
136
+
77
137
  def affirms_inclusion_of(attribute, list: [])
78
138
  affirmations << {
79
139
  :attribute => attribute, :type => :inclusion, :list => list
80
140
  }
81
141
  end
82
142
 
143
+ def affirms_acceptance_of(attribute)
144
+ affirmations << {:attribute => attribute, :type => :acceptance}
145
+ end
146
+
147
+ def affirms_confirmation_of(attribute)
148
+ affirmations << {:attribute => attribute, :type => :confirmation}
149
+ end
150
+
151
+ def affirms_exclusion_of(attribute, list: [])
152
+ affirmations << {
153
+ :attribute => attribute, :type => :exclusion, :list => list
154
+ }
155
+ end
156
+
157
+ def affirms_format_of(attribute, regex: //)
158
+ affirmations << {
159
+ :attribute => attribute, :type => :format, :regex => regex
160
+ }
161
+ end
162
+
163
+ def affirms_length_of(attribute, range: 0..0)
164
+ affirmations << {
165
+ :attribute => attribute, :type => :length, :range => range
166
+ }
167
+ end
168
+
169
+ def affirms_numericality_of(attribute)
170
+ affirmations << {:attribute => attribute, :type => :numericality}
171
+ end
172
+
83
173
  def affirmations
84
174
  @affirmations ||= []
85
175
  end
@@ -1,3 +1,3 @@
1
1
  module DailyAffirmation
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -33,6 +33,37 @@ describe DailyAffirmation do
33
33
  end
34
34
  end
35
35
 
36
+ describe ".affirms_absence_of" do
37
+ let(:cls) do
38
+ Class.new do
39
+ include DailyAffirmation.affirmations
40
+
41
+ affirms_absence_of :name
42
+ end
43
+ end
44
+
45
+ it "passes validation if attribute is nil" do
46
+ obj = double(:name => nil)
47
+
48
+ affirmation = cls.new(obj)
49
+ expect(affirmation).to be_valid
50
+ end
51
+
52
+ it "passes validation if attribute is empty" do
53
+ obj = double(:name => " ")
54
+
55
+ affirmation = cls.new(obj)
56
+ expect(affirmation).to be_valid
57
+ end
58
+
59
+ it "fails validation if attribute is present" do
60
+ obj = double(:name => :foo)
61
+
62
+ affirmation = cls.new(obj)
63
+ expect(affirmation).to_not be_valid
64
+ end
65
+ end
66
+
36
67
  describe ".affirms_inclusion_of" do
37
68
  let(:cls) do
38
69
  Class.new do
@@ -57,6 +88,164 @@ describe DailyAffirmation do
57
88
  end
58
89
  end
59
90
 
91
+ describe ".affirms_exclusion_of" do
92
+ let(:cls) do
93
+ Class.new do
94
+ include DailyAffirmation.affirmations
95
+
96
+ affirms_exclusion_of :age, :list => 13..18
97
+ end
98
+ end
99
+
100
+ it "passes validation if attribute is not in the list" do
101
+ obj = double(:age => 12)
102
+
103
+ affirmation = cls.new(obj)
104
+ expect(affirmation).to be_valid
105
+ end
106
+
107
+ it "fails validation if attribute is in the list" do
108
+ obj = double(:age => 13)
109
+
110
+ affirmation = cls.new(obj)
111
+ expect(affirmation).to_not be_valid
112
+ end
113
+ end
114
+
115
+ describe ".affirms_format_of" do
116
+ let(:cls) do
117
+ Class.new do
118
+ include DailyAffirmation.affirmations
119
+
120
+ affirms_format_of :name, :regex => /Bobby/
121
+ end
122
+ end
123
+
124
+ it "passes validation if the attribute matches the format" do
125
+ obj = double(:name => "Bobby Tabbles")
126
+
127
+ affirmation = cls.new(obj)
128
+ expect(affirmation).to be_valid
129
+ end
130
+
131
+ it "fails validation if the attribute doesn't match the format" do
132
+ obj = double(:name => "Tommy Tabbles")
133
+
134
+ affirmation = cls.new(obj)
135
+ expect(affirmation).to_not be_valid
136
+ end
137
+ end
138
+
139
+ describe ".affirms_length_of" do
140
+ let(:cls) do
141
+ Class.new do
142
+ include DailyAffirmation.affirmations
143
+
144
+ affirms_length_of :name, :range => 1..10
145
+ end
146
+ end
147
+
148
+ it "passes validation if the attribute's size is within range" do
149
+ obj = double(:name => "Bobby")
150
+
151
+ affirmation = cls.new(obj)
152
+ expect(affirmation).to be_valid
153
+ end
154
+
155
+ it "fails validation if the attribute's size is lower than range" do
156
+ obj = double(:name => "")
157
+
158
+ affirmation = cls.new(obj)
159
+ expect(affirmation).to_not be_valid
160
+ end
161
+
162
+ it "fails validation if the attribute's size is higher than range" do
163
+ obj = double(:name => "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
164
+
165
+ affirmation = cls.new(obj)
166
+ expect(affirmation).to_not be_valid
167
+ end
168
+ end
169
+
170
+ describe ".affirms_numericality_of" do
171
+ let(:cls) do
172
+ Class.new do
173
+ include DailyAffirmation.affirmations
174
+
175
+ affirms_numericality_of :age
176
+ end
177
+ end
178
+
179
+ it "passes validation if the attribute is a Numeric" do
180
+ obj = double(:age => 1.0)
181
+
182
+ affirmation = cls.new(obj)
183
+ expect(affirmation).to be_valid
184
+ end
185
+
186
+ it "fails validation if the attribute is not a Numeric" do
187
+ obj = double(:age => "Bobby")
188
+
189
+ affirmation = cls.new(obj)
190
+ expect(affirmation).to_not be_valid
191
+ end
192
+ end
193
+
194
+ describe ".affirms_acceptance_of" do
195
+ let(:cls) do
196
+ Class.new do
197
+ include DailyAffirmation.affirmations
198
+
199
+ affirms_acceptance_of :eula
200
+ end
201
+ end
202
+
203
+ it "passes validation if attribute is not nil/false" do
204
+ obj = double(:eula => true)
205
+
206
+ affirmation = cls.new(obj)
207
+ expect(affirmation).to be_valid
208
+ end
209
+
210
+ it "fails validation if attribute is nil" do
211
+ obj = double(:eula => nil)
212
+
213
+ affirmation = cls.new(obj)
214
+ expect(affirmation).to_not be_valid
215
+ end
216
+
217
+ it "fails validation if attribute is false" do
218
+ obj = double(:eula => false)
219
+
220
+ affirmation = cls.new(obj)
221
+ expect(affirmation).to_not be_valid
222
+ end
223
+ end
224
+
225
+ describe ".affirms_confirmation_of" do
226
+ let(:cls) do
227
+ Class.new do
228
+ include DailyAffirmation.affirmations
229
+
230
+ affirms_confirmation_of :password
231
+ end
232
+ end
233
+
234
+ it "passes validation if the attributes match" do
235
+ obj = double(:password => 1, :password_confirmation => 1)
236
+
237
+ affirmation = cls.new(obj)
238
+ expect(affirmation).to be_valid
239
+ end
240
+
241
+ it "fails validation if the attributes don't match" do
242
+ obj = double(:password => 1, :password_confirmation => 2)
243
+
244
+ affirmation = cls.new(obj)
245
+ expect(affirmation).to_not be_valid
246
+ end
247
+ end
248
+
60
249
  describe "#validate" do
61
250
  let(:cls) do
62
251
  Class.new do
@@ -80,7 +269,7 @@ describe DailyAffirmation do
80
269
  affirmation = cls.new(obj)
81
270
 
82
271
  messages = affirmation.validate[1]
83
- expect(messages).to include("name is not present")
272
+ expect(messages).to include("name can't be blank")
84
273
  expect(messages).to include("age is not included in 13..18")
85
274
  end
86
275
  end
@@ -125,7 +314,7 @@ describe DailyAffirmation do
125
314
  affirmation = cls.new(obj)
126
315
  messages = affirmation.error_messages
127
316
 
128
- expect(messages).to include("name is not present")
317
+ expect(messages).to include("name can't be blank")
129
318
  expect(messages).to include("age is not included in 13..18")
130
319
  end
131
320
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daily_affirmation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane Emmons