hash-utils 0.1.0 → 0.2.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.
data/README.md CHANGED
@@ -2,7 +2,7 @@ Hash Utils
2
2
  ==========
3
3
 
4
4
  **Hash Utils** adds some utility methods well known from [Array][1]
5
- class to [Hash][2] class. Extends it with following methods:
5
+ class to [Hash][2] class. Extends them with following methods:
6
6
 
7
7
  * [`#compact`][3] – rejects elements with `nil` values,
8
8
  * [`#compact!`][4]
@@ -11,9 +11,9 @@ class to [Hash][2] class. Extends it with following methods:
11
11
  * `#map_keys` – works as [Array#map][5], but for *keys only*,
12
12
  * `#map_keys!`
13
13
  * `#keys_to_sym` – converts all keys to [Symbols][6],
14
- * `#keys_to_sym`
14
+ * `#keys_to_sym!`
15
15
 
16
- All methods with `!` emulates work *in place*, but in fact they will
16
+ All methods with `!` emulates work *in place*, but in fact they
17
17
  replace old hash with new one. An example of use:
18
18
 
19
19
  foo = {"a" => 1, "b" => 2}
@@ -22,7 +22,19 @@ replace old hash with new one. An example of use:
22
22
  # result will be
23
23
  # {:a => 1, :b => 2}
24
24
 
25
- This is the same as `#keys_to_sym!` for example.
25
+ This is the same as `#keys_to_sym!` for example. And also introduces
26
+ some methods known from Python to both [Array][1] and [Hash][2] class:
27
+
28
+ * `some?` – returns `true` if *some* element follows condition in block,
29
+ * `some_pairs?`
30
+ * `all?` – returns `true` if *all* element follows condition in block,
31
+ * `all_pairs?`
32
+
33
+ For example:
34
+
35
+ foo = [:alfa, :beta, 5, :gama]
36
+ foo.some? { |i| i.kind_of? Integer } # returns true
37
+ foo.all? { |i| i.kind_of? Symbol } # returns false
26
38
 
27
39
  Contributing
28
40
  ------------
@@ -38,7 +50,7 @@ Contributing
38
50
  Copyright
39
51
  ---------
40
52
 
41
- Copyright (c) 2011 [Martin Kozák][8]. See `LICENSE.txt` for
53
+ Copyright © 2011 [Martin Kozák][8]. See `LICENSE.txt` for
42
54
  further details.
43
55
 
44
56
  [1]: http://www.ruby-doc.org/core/classes/Array.html
data/Rakefile CHANGED
@@ -16,7 +16,7 @@ Jeweler::Tasks.new do |gem|
16
16
  gem.name = "hash-utils"
17
17
  gem.homepage = "http://github.com/martinkozak/hash-utils"
18
18
  gem.license = "MIT"
19
- gem.summary = 'Adds some useful well known methods similar to appropriate Array methods to Hash.'
19
+ gem.summary = 'Adds some useful well known methods similar to appropriate Array methods to Hash and some useful methods known from Python to both of them.'
20
20
  gem.email = "martinkozak@martinkozak.net"
21
21
  gem.authors = ["Martin Kozák"]
22
22
  # Include your dependencies below. Runtime dependencies are required when using your gem,
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
data/hash-utils.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{hash-utils}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Martin Kozák"]
12
- s.date = %q{2011-01-02}
12
+ s.date = %q{2011-01-04}
13
13
  s.email = %q{martinkozak@martinkozak.net}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE.txt",
@@ -30,7 +30,7 @@ Gem::Specification.new do |s|
30
30
  s.licenses = ["MIT"]
31
31
  s.require_paths = ["lib"]
32
32
  s.rubygems_version = %q{1.3.7}
33
- s.summary = %q{Adds some useful well known methods similar to appropriate Array methods to Hash.}
33
+ s.summary = %q{Adds some useful well known methods similar to appropriate Array methods to Hash and some useful methods known from Python to both of them.}
34
34
 
35
35
  if s.respond_to? :specification_version then
36
36
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
data/lib/hash-utils.rb CHANGED
@@ -24,7 +24,7 @@ class Hash
24
24
  ##
25
25
  # Returns a new hash with the results of running block once for
26
26
  # every pair in <tt>self</tt>.
27
- #
27
+ #
28
28
 
29
29
  def map_pairs(&block)
30
30
  new = Hash::new(&self.default_proc)
@@ -91,4 +91,116 @@ class Hash
91
91
  def keys_to_sym!
92
92
  self.replace(self.keys_to_sym)
93
93
  end
94
+
95
+ ##
96
+ # Checks, all elements values follow condition expressed in block.
97
+ # Block must return Boolean.
98
+ #
99
+ # If it's empty, returns <tt>true</tt>.
100
+ #
101
+
102
+ def all?(&block)
103
+ if self.empty?
104
+ return true
105
+ end
106
+
107
+ self.each_value do |v|
108
+ if block.call(v) == false
109
+ return false
110
+ end
111
+ end
112
+
113
+ return true
114
+ end
115
+
116
+ ##
117
+ # Checks, all elements follow condition expressed in block.
118
+ # Block must return Boolean.
119
+ #
120
+ # If it's empty, returns <tt>true</tt>.
121
+ #
122
+
123
+ def all_pairs?(&block)
124
+ if self.empty?
125
+ return true
126
+ end
127
+
128
+ self.each_pair do |k, v|
129
+ if block.call(k, v) == false
130
+ return false
131
+ end
132
+ end
133
+
134
+ return true
135
+ end
136
+
137
+ ##
138
+ # Checks, at least one element value follows condition expressed in
139
+ # block. Block must return Boolean.
140
+ #
141
+
142
+ def some?(&block)
143
+ self.each_value do |v|
144
+ if block.call(v) == true
145
+ return true
146
+ end
147
+ end
148
+
149
+ return false
150
+ end
151
+
152
+ ##
153
+ # Checks, at least one element follows condition expressed in
154
+ # block. Block must return Boolean.
155
+ #
156
+
157
+ def some_pairs?(&block)
158
+ self.each_pair do |k, v|
159
+ if block.call(k, v) == true
160
+ return true
161
+ end
162
+ end
163
+
164
+ return false
165
+ end
166
+ end
167
+
168
+ class Array
169
+
170
+ ##
171
+ # Checks, all values follow condition expressed in block.
172
+ # Block must return Boolean.
173
+ #
174
+ # If it's empty, returns <tt>true</tt>.
175
+ #
176
+
177
+ def all?(&block)
178
+ if self.empty?
179
+ return true
180
+ end
181
+
182
+ self.each do |v|
183
+ if block.call(v) == false
184
+ return false
185
+ end
186
+ end
187
+
188
+ return true
189
+ end
190
+
191
+ ##
192
+ # Checks, at least one value follows condition expressed in
193
+ # block. Block must return Boolean.
194
+ #
195
+
196
+ def some?(&block)
197
+ self.each do |v|
198
+ if block.call(v) == true
199
+ return true
200
+ end
201
+ end
202
+
203
+ return false
204
+ end
205
+
94
206
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
7
+ - 2
8
8
  - 0
9
- version: 0.1.0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - "Martin Koz\xC3\xA1k"
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-01-02 00:00:00 +01:00
17
+ date: 2011-01-04 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -80,7 +80,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - ">="
82
82
  - !ruby/object:Gem::Version
83
- hash: 3564167343409950295
83
+ hash: 3013449918055684649
84
84
  segments:
85
85
  - 0
86
86
  version: "0"
@@ -98,6 +98,6 @@ rubyforge_project:
98
98
  rubygems_version: 1.3.7
99
99
  signing_key:
100
100
  specification_version: 3
101
- summary: Adds some useful well known methods similar to appropriate Array methods to Hash.
101
+ summary: Adds some useful well known methods similar to appropriate Array methods to Hash and some useful methods known from Python to both of them.
102
102
  test_files: []
103
103