module RFlags
Public Instance Methods
flag(definition)
click to toggle source
# File lib/rflags.rb, line 7 def flag(definition) name, backend = resolve_flag_params(definition) instance_variable_set("@#{name}".to_sym, backend) instance_eval <<-MTD, __FILE__, __LINE__ def #{name} @#{name} end MTD end
lazy_flag(name, &block)
click to toggle source
# File lib/rflags.rb, line 17 def lazy_flag(name, &block) if !block raise "RFlags##{__method__} needs a block" end resolve = -> do opts = block.call resolve_flag_backend_class(opts).new(*opts) end instance_variable_set(:"@#{name}_block", resolve) instance_eval(<<-MTD, __FILE__, __LINE__) def #{name} @#{name} ||= @#{name}_block.call end MTD end
Private Instance Methods
resolve_flag_backend_class(opts)
click to toggle source
# File lib/rflags.rb, line 53 def resolve_flag_backend_class(opts) case opts when String, Pathname RFlags::FileFlag when Array class_name = opts[0].class ::Object.const_get("::RFlags::#{class_name}Flag") else raise TypeError, "Can't handle #{opts.class}" end end
resolve_flag_params(definition)
click to toggle source
# File lib/rflags.rb, line 37 def resolve_flag_params(definition) case definition when String, Symbol [definition, RFlags::Flag.new] when Hash name = definition.keys[0] backend_opts = definition[name] backend_class = resolve_flag_backend_class(backend_opts) [name, backend_class.new(*backend_opts)] else raise TypeError, "Can't handle #{definition.class}" end end