hash-utils 0.10.0 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/Gemfile.lock +6 -0
- data/TODO.txt +1 -0
- data/VERSION +1 -1
- data/hash-utils.gemspec +7 -3
- data/lib/hash-utils.rb +1 -0
- data/lib/hash-utils/file.rb +41 -0
- data/lib/hash-utils/hash.rb +32 -0
- data/lib/hash-utils/string.rb +28 -0
- data/test +42 -2
- metadata +16 -4
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -7,6 +7,11 @@ GEM
|
|
7
7
|
git (>= 1.2.5)
|
8
8
|
rake
|
9
9
|
rake (0.8.7)
|
10
|
+
riot (0.12.1)
|
11
|
+
rr
|
12
|
+
term-ansicolor
|
13
|
+
rr (1.0.2)
|
14
|
+
term-ansicolor (1.0.5)
|
10
15
|
|
11
16
|
PLATFORMS
|
12
17
|
ruby
|
@@ -14,3 +19,4 @@ PLATFORMS
|
|
14
19
|
DEPENDENCIES
|
15
20
|
bundler (~> 1.0.0)
|
16
21
|
jeweler (~> 1.5.2)
|
22
|
+
riot (>= 0.12.1)
|
data/TODO.txt
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.11.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.
|
8
|
+
s.version = "0.11.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-
|
12
|
+
s.date = %q{2011-03-01}
|
13
13
|
s.email = %q{martinkozak@martinkozak.net}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"LICENSE.txt",
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
"hash-utils.gemspec",
|
28
28
|
"lib/hash-utils.rb",
|
29
29
|
"lib/hash-utils/array.rb",
|
30
|
+
"lib/hash-utils/file.rb",
|
30
31
|
"lib/hash-utils/hash.rb",
|
31
32
|
"lib/hash-utils/numeric.rb",
|
32
33
|
"lib/hash-utils/object.rb",
|
@@ -44,7 +45,7 @@ to Ruby's one.
|
|
44
45
|
|
45
46
|
}
|
46
47
|
s.require_paths = ["lib"]
|
47
|
-
s.rubygems_version = %q{1.5.
|
48
|
+
s.rubygems_version = %q{1.5.3}
|
48
49
|
s.summary = %q{Adds a lot of useful fundamental utility methods which are missing in Ruby, both to Array and Hash classes and introduces some useful methods and syntactic sugar to Object and String classes too.}
|
49
50
|
|
50
51
|
if s.respond_to? :specification_version then
|
@@ -53,13 +54,16 @@ to Ruby's one.
|
|
53
54
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
54
55
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
55
56
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
57
|
+
s.add_development_dependency(%q<riot>, [">= 0.12.1"])
|
56
58
|
else
|
57
59
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
58
60
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
61
|
+
s.add_dependency(%q<riot>, [">= 0.12.1"])
|
59
62
|
end
|
60
63
|
else
|
61
64
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
62
65
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
66
|
+
s.add_dependency(%q<riot>, [">= 0.12.1"])
|
63
67
|
end
|
64
68
|
end
|
65
69
|
|
data/lib/hash-utils.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
|
3
|
+
|
4
|
+
##
|
5
|
+
# File extension.
|
6
|
+
# @since 0.11.0
|
7
|
+
#
|
8
|
+
|
9
|
+
class File
|
10
|
+
|
11
|
+
##
|
12
|
+
# Writes data to file and closes it in single call.
|
13
|
+
#
|
14
|
+
# @param [String] filepath path to file
|
15
|
+
# @param [String] data data for write
|
16
|
+
# @return [Integer] length of really written data
|
17
|
+
# @since 0.11.0
|
18
|
+
#
|
19
|
+
|
20
|
+
def self.write(filepath, data = "")
|
21
|
+
len = nil
|
22
|
+
File.open(filepath, "w") do |io|
|
23
|
+
len = io.write(data)
|
24
|
+
end
|
25
|
+
return len
|
26
|
+
end
|
27
|
+
|
28
|
+
##
|
29
|
+
# Creates file with zero size and closes it. (In fact, +touch+ is
|
30
|
+
# usually used for it.)
|
31
|
+
#
|
32
|
+
# @param [String] file filepath path for create
|
33
|
+
# @since 0.11.0
|
34
|
+
#
|
35
|
+
|
36
|
+
def self.touch(filepath)
|
37
|
+
File.open(filepath, "w").close()
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
data/lib/hash-utils/hash.rb
CHANGED
@@ -186,6 +186,38 @@ class Hash
|
|
186
186
|
|
187
187
|
alias :collect_keys! :map_keys!
|
188
188
|
|
189
|
+
##
|
190
|
+
# Returns a new hash with the results of running block once for
|
191
|
+
# every value in +self+.
|
192
|
+
#
|
193
|
+
# @param [Proc] block evaluating block
|
194
|
+
# @return [Hash] new hash
|
195
|
+
# @since 0.11.0
|
196
|
+
#
|
197
|
+
|
198
|
+
def map_values(&block)
|
199
|
+
self.map_pairs do |k, v|
|
200
|
+
[k, block.call(v)]
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
alias :collect_values :map_values
|
205
|
+
|
206
|
+
##
|
207
|
+
# Emulates {#map_values} on place. In fact, replaces old hash by
|
208
|
+
# new one.
|
209
|
+
#
|
210
|
+
# @param [Proc] block evaluating block
|
211
|
+
# @return [Hash] new hash
|
212
|
+
# @since 0.11.0
|
213
|
+
#
|
214
|
+
|
215
|
+
def map_values!(&block)
|
216
|
+
self.replace(self.map_values(&block))
|
217
|
+
end
|
218
|
+
|
219
|
+
alias :collect_values! :map_values!
|
220
|
+
|
189
221
|
##
|
190
222
|
# Converts all keys to symbols.
|
191
223
|
#
|
data/lib/hash-utils/string.rb
CHANGED
@@ -190,6 +190,34 @@ class String
|
|
190
190
|
self
|
191
191
|
end
|
192
192
|
|
193
|
+
##
|
194
|
+
# Returns first character of the string.
|
195
|
+
#
|
196
|
+
# @example
|
197
|
+
# "abc".first # will return 'a'
|
198
|
+
#
|
199
|
+
# @return [String] first character
|
200
|
+
# @since 0.11.0
|
201
|
+
#
|
202
|
+
|
203
|
+
def first
|
204
|
+
self[0].chr
|
205
|
+
end
|
206
|
+
|
207
|
+
##
|
208
|
+
# Returns last character of the string.
|
209
|
+
#
|
210
|
+
# @example
|
211
|
+
# "abc".last # will return 'c'
|
212
|
+
#
|
213
|
+
# @return [String] last character
|
214
|
+
# @since 0.11.0
|
215
|
+
#
|
216
|
+
|
217
|
+
def last
|
218
|
+
self[-1].chr
|
219
|
+
end
|
220
|
+
|
193
221
|
|
194
222
|
|
195
223
|
private
|
data/test
CHANGED
@@ -1,6 +1,46 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
# (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
|
2
4
|
|
3
5
|
$:.push("./lib")
|
4
|
-
require "hash-utils
|
6
|
+
require "hash-utils"
|
7
|
+
require "riot"
|
5
8
|
|
6
|
-
|
9
|
+
|
10
|
+
## FILE
|
11
|
+
|
12
|
+
context "File#touch" do
|
13
|
+
setup { File.touch("./~test") }
|
14
|
+
asserts("correctness") { File.exists? "./~test" }
|
15
|
+
teardown { File.unlink("./~test") }
|
16
|
+
end
|
17
|
+
|
18
|
+
context "File#write" do
|
19
|
+
setup { File.write("./~test", "some string") }
|
20
|
+
asserts("correctness") { File.read("./~test") == "some string" }
|
21
|
+
teardown { File.unlink("./~test") }
|
22
|
+
end
|
23
|
+
|
24
|
+
## HASH
|
25
|
+
|
26
|
+
context "Hash#map_values" do
|
27
|
+
setup { {:a => 1, :b => 2 }.map_values { |i| i + 1 } }
|
28
|
+
asserts("correctness") { topic == { :a => 2, :b => 3 } }
|
29
|
+
end
|
30
|
+
|
31
|
+
context "Hash#map_values!" do
|
32
|
+
setup { {:a => 1, :b => 2 }.map_values! { |i| i + 1 } }
|
33
|
+
asserts("correctness") { topic == { :a => 2, :b => 3 } }
|
34
|
+
end
|
35
|
+
|
36
|
+
## STRING
|
37
|
+
|
38
|
+
context "String#first" do
|
39
|
+
setup { "abc".first }
|
40
|
+
asserts("correctness") { topic == ?a }
|
41
|
+
end
|
42
|
+
|
43
|
+
context "String#last" do
|
44
|
+
setup { "abc".last }
|
45
|
+
asserts("correctness") { topic == ?c }
|
46
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: hash-utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.11.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- "Martin Koz\xC3\xA1k"
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-03-01 00:00:00 +01:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -35,6 +35,17 @@ dependencies:
|
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: riot
|
40
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.12.1
|
46
|
+
type: :development
|
47
|
+
prerelease: false
|
48
|
+
version_requirements: *id003
|
38
49
|
description:
|
39
50
|
email: martinkozak@martinkozak.net
|
40
51
|
executables: []
|
@@ -56,6 +67,7 @@ files:
|
|
56
67
|
- hash-utils.gemspec
|
57
68
|
- lib/hash-utils.rb
|
58
69
|
- lib/hash-utils/array.rb
|
70
|
+
- lib/hash-utils/file.rb
|
59
71
|
- lib/hash-utils/hash.rb
|
60
72
|
- lib/hash-utils/numeric.rb
|
61
73
|
- lib/hash-utils/object.rb
|
@@ -80,7 +92,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
80
92
|
requirements:
|
81
93
|
- - ">="
|
82
94
|
- !ruby/object:Gem::Version
|
83
|
-
hash:
|
95
|
+
hash: -2170088685788835511
|
84
96
|
segments:
|
85
97
|
- 0
|
86
98
|
version: "0"
|
@@ -93,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
105
|
requirements: []
|
94
106
|
|
95
107
|
rubyforge_project:
|
96
|
-
rubygems_version: 1.5.
|
108
|
+
rubygems_version: 1.5.3
|
97
109
|
signing_key:
|
98
110
|
specification_version: 3
|
99
111
|
summary: Adds a lot of useful fundamental utility methods which are missing in Ruby, both to Array and Hash classes and introduces some useful methods and syntactic sugar to Object and String classes too.
|