Class: MagicPath::PathManager

Inherits:
Object
  • Object
show all
Defined in:
lib/magic_path/path_manager.rb

Defined Under Namespace

Classes: AlreadyExistsError, Error, MethodError

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#resolversObject



21
22
23
# File 'lib/magic_path/path_manager.rb', line 21

def resolvers
  @resolvers ||= default_resolvers
end

Class Method Details

._create_path_accessor(klass, meth) ⇒ Object



44
45
46
47
48
# File 'lib/magic_path/path_manager.rb', line 44

def _create_path_accessor(klass, meth)
  _fail_if_accessor_exists(klass, meth)
  _create_path_writer(klass, meth)
  _create_path_reader(klass, meth)
end

._create_path_reader(klass, meth) ⇒ Object



57
58
59
60
61
# File 'lib/magic_path/path_manager.rb', line 57

def _create_path_reader(klass, meth)
  klass.send(:define_method, meth.to_s.delete('=')) do
    klass.class_variable_get("@@#{meth}".to_sym)
  end
end

._create_path_writer(klass, meth) ⇒ Object



50
51
52
53
54
55
# File 'lib/magic_path/path_manager.rb', line 50

def _create_path_writer(klass, meth)
  klass.send(:define_method, "#{meth}=") do |opts|
    path = DynamicPath.new(opts[:pattern], opts[:params])
    klass.class_variable_set("@@#{meth}".to_sym, path)
  end
end

._fail_if_accessor_exists(klass, meth) ⇒ Object

Raises:



63
64
65
# File 'lib/magic_path/path_manager.rb', line 63

def _fail_if_accessor_exists(klass, meth)
  raise(AlreadyExistsError, meth) if klass.method_defined?(meth)
end

.create_path(meth, opts) ⇒ Object



39
40
41
42
# File 'lib/magic_path/path_manager.rb', line 39

def create_path(meth, opts)
  _create_path_accessor(self, meth, opts)
  send("#{meth}=", opts)
end

Instance Method Details

#add_resolver(resolver) ⇒ Object



29
30
31
# File 'lib/magic_path/path_manager.rb', line 29

def add_resolver(resolver)
  resolvers << resolver
end

#create_path(meth, opts) ⇒ Object



33
34
35
36
# File 'lib/magic_path/path_manager.rb', line 33

def create_path(meth, opts)
  self.class._create_path_accessor(singleton_class, meth)
  send("#{meth}=", opts)
end

#default_resolversObject



25
26
27
# File 'lib/magic_path/path_manager.rb', line 25

def default_resolvers
  defined?(Nenv) ? [Nenv] : []
end