-
Notifications
You must be signed in to change notification settings - Fork 85
Commit
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,161 @@ | ||
class << ENV | ||
def to_hash | ||
{}.tap{ |h| self.each { |k, v| h[k] = v } } | ||
end | ||
|
||
def empty? | ||
self.size == 0 | ||
end | ||
|
||
def replace(hash) | ||
hash = Topaz.convert_type(hash, Hash, :to_hash) | ||
self.clear | ||
hash.each { |k, v| self[k] = v } | ||
self | ||
end | ||
|
||
def update(hash, &block) | ||
hash = Topaz.convert_type(hash, Hash, :to_hash) | ||
hash.each do |k, v| | ||
if block && self[k] | ||
self[k] = yield(k, self[k], v) | ||
else | ||
self[k] = v | ||
end | ||
end | ||
self | ||
end | ||
|
||
def clear | ||
self.each_key { |k| self[k] = nil } | ||
end | ||
|
||
def values | ||
self.map { |_, v| v } | ||
end | ||
|
||
def keys | ||
self.map { |k, _| k } | ||
end | ||
|
||
def value?(value) | ||
self.each_value { |v| return true if v == value } | ||
false | ||
end | ||
alias has_value? value? | ||
|
||
def key(value) | ||
self.each { |k, v| return k if v == value } | ||
nil | ||
end | ||
alias index key | ||
|
||
def each_value(&block) | ||
return enum_for(:each_value) unless block | ||
self.each { |_, v| yield(v) } | ||
end | ||
|
||
def each_key(&block) | ||
return enum_for(:each_key) unless block | ||
self.each { |k, _| yield(k) } | ||
end | ||
|
||
def assoc(key) | ||
key = Topaz.convert_type(key, String, :to_str) | ||
self.each { |k, v| return [k, v] if key == k } | ||
nil | ||
end | ||
|
||
def rassoc(value) | ||
value = Topaz.convert_type(value, String, :to_str) | ||
self.each { |k, v| return [k, v] if value == v } | ||
nil | ||
end | ||
|
||
def select!(&block) | ||
return enum_for(:select!) unless block | ||
modified = false | ||
self.each do |key, value| | ||
unless yield(key, value) | ||
delete(key) | ||
modified = true | ||
end | ||
end | ||
modified ? self : nil | ||
end | ||
|
||
def keep_if(&block) | ||
return enum_for(:keep_if) unless block | ||
select!(&block) | ||
self | ||
end | ||
|
||
def reject!(&block) | ||
return enum_for(:reject!) unless block | ||
modified = false | ||
self.each do |key, value| | ||
if yield(key, value) | ||
delete(key) | ||
modified = true | ||
end | ||
end | ||
modified ? self : nil | ||
end | ||
|
||
def delete_if(&block) | ||
return enum_for(:delete_if) unless block | ||
reject!(&block) | ||
self | ||
end | ||
|
||
def fetch(key, *args, &block) | ||
val = self[key] | ||
return val if val | ||
return yield(key) if block | ||
return args[0] if args.size == 1 | ||
raise KeyError.new("key not found") | ||
end | ||
|
||
def to_s | ||
'ENV' | ||
end | ||
|
||
def inspect | ||
to_hash.inspect | ||
end | ||
|
||
def shift | ||
self.each do |k, v| | ||
delete(k) | ||
return [k, v] | ||
end | ||
nil | ||
end | ||
|
||
def values_at(*keys) | ||
keys.map { |k| self[k] } | ||
end | ||
|
||
def invert | ||
{}.tap { |h| self.each { |k, v| h[v] = k } } | ||
end | ||
|
||
def select(&block) | ||
return enum_for(:select) unless block | ||
to_hash.keep_if(&block) | ||
end | ||
|
||
def reject(&block) | ||
return enum_for(:reject) unless block | ||
to_hash.delete_if(&block) | ||
end | ||
|
||
def delete(key, &block) | ||
key = Topaz.convert_type(key, String, :to_str) | ||
if val = self[key] | ||
self[key] = nil | ||
return val | ||
end | ||
block ? yield(key) : nil | ||
end | ||
end |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -16,4 +16,7 @@ class EISDIR < SystemCallError | |
|
||
class ENOTEMPTY < SystemCallError | ||
end | ||
|
||
class EINVAL < SystemCallError | ||
end | ||
end |
This file was deleted.
This file was deleted.
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1 @@ | ||
fails:ENV.each_key returns each key | ||
fails:ENV.each_key returns an Enumerator if called without a block | ||
fails:ENV.each_key returns keys in the locale encoding |
This file was deleted.
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1 @@ | ||
fails:ENV.each_value returns each value | ||
fails:ENV.each_value returns an Enumerator if called without a block | ||
fails:ENV.each_value uses the locale encoding |
This file was deleted.
This file was deleted.
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,2 @@ | ||
fails:ENV.fetch returns a value | ||
fails:ENV.fetch raises IndexError for an invalid key | ||
fails:ENV.fetch provides the given default parameter | ||
fails:ENV.fetch provides a default value from a block | ||
fails:ENV.fetch warns on block and default parameter given | ||
fails:ENV.fetch uses the locale encoding |
This file was deleted.
This file was deleted.
This file was deleted.
This file was deleted.
This file was deleted.
This file was deleted.
This file was deleted.
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1 @@ | ||
fails:ENV.keys returns all the keys | ||
fails:ENV.keys returns the keys in the locale encoding |
This file was deleted.
This file was deleted.
This file was deleted.
This file was deleted.
This file was deleted.
This file was deleted.
This file was deleted.
This file was deleted.
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1 @@ | ||
fails:ENV.to_a returns the ENV as an array | ||
fails:ENV.to_a returns the entries in the locale encoding |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,2 @@ | ||
fails:ENV.to_hash returns the ENV as a hash | ||
fails:ENV.to_hash uses the locale encoding for keys | ||
fails:ENV.to_hash uses the locale encoding for values |
This file was deleted.
This file was deleted.
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1 @@ | ||
fails:ENV.values_at returns an array of the values referenced by the parameters as keys | ||
fails:ENV.values_at uses the locale encoding |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1 @@ | ||
fails:ENV.values returns an array of the values | ||
fails:ENV.values uses the locale encoding |