Files
mruby-mruby/mrbgems/mruby-env/mrblib/env.rb
Yukihiro "Matz" Matsumoto 3272955bf1 mruby-env: add ENV object for environment variable access
ENV is a plain Object with singleton methods and Enumerable,
matching CRuby's behavior. C methods wrap getenv/setenv/unsetenv
with platform support for POSIX, macOS, and Windows.

Co-authored-by: Claude <noreply@anthropic.com>
2026-04-23 19:25:21 +09:00

154 lines
2.2 KiB
Ruby

class << ENV
def each(&block)
return to_enum(:each) unless block
keys.each do |k|
v = self[k]
block.call([k, v]) if v
end
self
end
alias each_pair each
def each_key(&block)
return to_enum(:each_key) unless block
keys.each(&block)
self
end
def each_value(&block)
return to_enum(:each_value) unless block
__values.each(&block)
self
end
def values
__values
end
def delete(key, &block)
val = __delete(key)
if val.nil? && block
block.call(key)
else
val
end
end
def clear
__clear
self
end
def fetch(key, *args, &block)
val = self[key]
return val unless val.nil?
if block
block.call(key)
elsif args.length > 0
args[0]
else
raise KeyError, "key not found: \"#{key}\""
end
end
def store(key, val)
self[key] = val
end
def to_h(&block)
h = {}
each do |k, v|
if block
k, v = block.call(k, v)
end
h[k] = v
end
h
end
def to_a
each_pair.to_a
end
def inspect
to_h.inspect
end
def empty?
size == 0
end
def has_value?(val)
__values.include?(val)
end
alias value? has_value?
def assoc(key)
val = self[key]
val.nil? ? nil : [key, val]
end
def rassoc(val)
each do |k, v|
return [k, v] if v == val
end
nil
end
def key(val)
each do |k, v|
return k if v == val
end
nil
end
def replace(hash)
clear
hash.each do |k, v|
self[k] = v
end
self
end
def update(hash, &block)
hash.each do |k, v|
if block && key?(k)
self[k] = block.call(k, self[k], v)
else
self[k] = v
end
end
self
end
alias merge! update
def select(&block)
return to_enum(:select) unless block
to_h.select(&block)
end
alias filter select
def reject(&block)
return to_enum(:reject) unless block
to_h.reject(&block)
end
def slice(*keys)
h = {}
keys.each do |k|
v = self[k]
h[k] = v unless v.nil?
end
h
end
alias include? key?
alias has_key? key?
alias member? key?
alias length size
def freeze
raise TypeError, "cannot freeze ENV"
end
end