Skip to content

Instantly share code, notes, and snippets.

@m1foley
Last active December 16, 2015 01:59
Show Gist options
  • Save m1foley/5359184 to your computer and use it in GitHub Desktop.
Save m1foley/5359184 to your computer and use it in GitHub Desktop.
def redefine_constant(full_const_name, value)
parent_class, const_name = *parse_constant_namespace(full_const_name)
orig = parent_class.const_get(const_name).dup
parent_class.send(:remove_const, const_name)
parent_class.const_set(const_name, value)
yield
parent_class.send(:remove_const, const_name)
parent_class.const_set(const_name, orig)
end
def parse_constant_namespace(full_const_name)
match = full_const_name.match(/\A((?<parent_class>.+)::)?(?<const_name>[^:]+)\z/)
parent_class = match[:parent_class] ? eval(match[:parent_class]) : Object
const_name = match[:const_name]
[parent_class, const_name]
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment