ratatouille 1.2.2 → 1.2.4

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.
data/README.md CHANGED
@@ -158,6 +158,28 @@ Used to ensure that the list of keys exist in the Hash.
158
158
 
159
159
 
160
160
 
161
+ ### required\_key
162
+
163
+ Used to ensure given key exists in the Hash.
164
+
165
+ * Eliminates the need to perform "given\_key" methods within a "required\_keys" block.
166
+ * Block is optional
167
+
168
+
169
+ #### Syntax
170
+
171
+ ```ruby
172
+ # Validate that the keys exist and perform validation if they do
173
+ required_key(:foo) do
174
+ # Validation provided that :foo exists in Hash
175
+ end
176
+
177
+ # Validate that the keys exist
178
+ required_key(:foo)
179
+ ```
180
+
181
+
182
+
161
183
  ### is\_empty
162
184
 
163
185
  * Self-explanatory
@@ -80,6 +80,33 @@ module Ratatouille
80
80
  end#required_keys
81
81
 
82
82
 
83
+ # Perform validation on a key that must be present in the Hash to validate. Otherwise,
84
+ # an error will be added.
85
+ #
86
+ # @param [String,Symbol] req_key Required Key
87
+ # @return [void]
88
+ def required_key(req_key, &block)
89
+ if req_key.nil?
90
+ validation_error("required_key needs key argument")
91
+ return
92
+ end
93
+
94
+ unless @ratifiable_object.has_key?(req_key)
95
+ case req_key
96
+ when Symbol then validation_error("Missing key :#{req_key}")
97
+ when String then validation_error("Missing key #{req_key}")
98
+ when respond_to?(:to_s)
99
+ validation_error("Missing key #{req_key.to_s}")
100
+ end
101
+ return
102
+ end
103
+
104
+ instance_eval(&block) if block_given?
105
+ rescue Exception => e
106
+ validation_error("#{e.message}")
107
+ end
108
+
109
+
83
110
  # Provide a list of keys to choose from and a choice size (default 1).
84
111
  # When the Hash does not contain at least 'choice_size' keys of the key
85
112
  # list provided, an error will be added.
@@ -1,4 +1,4 @@
1
1
  module Ratatouille
2
2
  # Gem Version
3
- VERSION = "1.2.2"
3
+ VERSION = "1.2.4"
4
4
  end
@@ -63,6 +63,24 @@ describe "Ratatouille::HashMethods" do
63
63
  end
64
64
  end
65
65
 
66
+ describe "required_key" do
67
+ it "should be invalid when given a key for an empty hash" do
68
+ RatifierTest.new({}){ required_key(:foo) }.should_not be_valid
69
+ end
70
+
71
+ it "should be invalid when given a key that doesn't exist in the hash" do
72
+ RatifierTest.new({:foo => "foo"}){ required_key(:bar) }.should_not be_valid
73
+ end
74
+
75
+ it "should not progress into block if invalid" do
76
+ f = false
77
+ RatifierTest.new({}) do
78
+ required_key(:foo) { f = true }
79
+ end
80
+ f.should be_false
81
+ end
82
+ end
83
+
66
84
  describe "given_key" do
67
85
  it "should change the scope name to default to the key if no name passed as option" do
68
86
  n = ""
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ratatouille
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 2
9
- - 2
10
- version: 1.2.2
9
+ - 4
10
+ version: 1.2.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ryan Johnson