Sha256: b346212095edfcf4718bfaee7a9f405779bc7dc89c1a603a636e8873d1863059

Contents?: true

Size: 990 Bytes

Versions: 1

Compression:

Stored size: 990 Bytes

Contents

require_relative 'consty/version'

class Consty
  
  class << self

    def get(name, namespace=Object)
      current_namespace = namespace
      while current_namespace do
       begin
         return secuential_get name, current_namespace
       rescue NameError
         namespace_name = current_namespace.name.split('::')[0..-2].join('::')
         current_namespace = namespace_name.empty? ? nil : secuential_get(namespace_name)
        end
      end
      namespace.const_missing name
    end

    private

    def secuential_get(name, namespace=Object)
      name_sections = name.to_s.split('::')
      
      if name_sections.first.empty?
        namespace = Object 
        name_sections = name_sections[1..-1]
      end
      
      name_sections.inject(namespace) do |namespace, section|
        if namespace.constants.include?(section.to_sym)
          namespace.const_get section
        else
          namespace.const_missing section
        end
      end

    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
consty-1.0.1 lib/consty.rb