lib/nenv/environment.rb in nenv-0.0.3 vs lib/nenv/environment.rb in nenv-0.1.0

- old
+ new

@@ -20,28 +20,39 @@ def initialize(namespace = nil) @namespace = (namespace ? namespace.upcase : nil) end + def self.create_method(meth, &block) + _create_env_method(self, meth, &block) + end + def create_method(meth, &block) - fail(AlreadyExistsError, meth) if respond_to?(meth) + self.class._create_env_method(class << self; self; end, meth, &block) + end - (class << self; self; end).send(:define_method, meth) do |*args| - raw_value = args.first + private + + def _sanitize(meth) + meth.to_s[/^([^=?]*)[=?]?$/, 1].upcase + end + + def self._create_env_method(instance, meth, &block) + _fail_if_exists(instance, meth) + + instance.send(:define_method, meth) do |*args| env_name = [@namespace, _sanitize(meth)].compact.join('_') - callback = block if args.size == 1 - ENV[env_name] = Dumper.new.dump(raw_value, &callback) + raw_value = args.first + ENV[env_name] = Dumper.new.dump(raw_value, &block) else - Loader.new(meth).load(ENV[env_name], &callback) + Loader.new(meth).load(ENV[env_name], &block) end end end - private - - def _sanitize(meth) - meth.to_s[/^([^=?]*)[=?]?$/, 1].upcase + def self._fail_if_exists(instance, meth) + fail(AlreadyExistsError, meth) if instance.instance_methods.include?(meth) end end end