Class: ModelFact::Registry

Inherits:
Object
  • Object
show all
Includes:
Singleton, TR::CondUtils
Defined in:
lib/model_fact/registry.rb

Instance Method Summary collapse

Instance Method Details

#find(id) ⇒ Object



48
49
50
51
52
53
54
55
56
57
# File 'lib/model_fact/registry.rb', line 48

def find(id)
  if is_registered?(id)
    idCls[id][:target]
  elsif is_alias_registered?(id)
    indx = aliases[id]
    idCls[indx][:target]
  else
    nil
  end
end

#is_alias_registered?(als) ⇒ Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/model_fact/registry.rb', line 44

def is_alias_registered?(als)
  aliases.keys.include?(als)
end

#is_registered?(id) ⇒ Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/model_fact/registry.rb', line 40

def is_registered?(id)
  idCls.keys.include?(id)
end

#on_event(id, event, opts = {}, &block) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/model_fact/registry.rb', line 59

def on_event(id, event ,opts = {}, &block)
  inst = find(id)
  if not_empty?(inst) 
    hasMethod = inst.respond_to?(:on_event)
    if hasMethod
      inst.on_event(event,opts,&block)
      true
    else
      logger.warn "Instance '#{id}' does not have method on_event"
      false
    end

  else
    false
  end
end

#register(id, cls, opts = { }) ⇒ Object

To be called by application developer during startup to match which model to give to application This is configuration per se like on which ‘database adapter’ to go

Raises:



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/model_fact/registry.rb', line 14

def register(id, cls, opts = { })

  opts = { } if opts.nil?

  overwrite = opts[:overwrite]
  overwrite = false if is_empty?(overwrite) or not_bool?(overwrite)

  raise  InvalidParamValue, "Given ID is nil or empty" if is_empty?(id)
  raise  InvalidParamValue, "Given class is nil or empty" if is_empty?(cls)

  raise DuplicatedIDException, "Given ID '#{id}' already registered" if is_registered?(id)

  idCls[id] = { target: cls }

  als = opts[:alias]
  if not_empty?(als)
    if is_alias_registered?(als) and not overwrite
      raise DuplicatedIDException, "Given alias '#{als}' already registered" 
    else
      aliases[als] = id 
    end
  end

  cls
end