Class: Reality::Model::Repository

Inherits:
Object
  • Object
show all
Defined in:
lib/reality/model/repository.rb

Overview

nodoc

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key, model_container, options = {}) ⇒ Repository

Returns a new instance of Repository.



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/reality/model/repository.rb', line 33

def initialize(key, model_container, options = {})
  Reality::Options.check(options, [:log_container, :facet_container, :instance_container, :default_id_method], Reality::Model, 'create repository')

  @key = key
  @model_container = model_container
  @log_container = options[:log_container] || model_container
  @facet_container = options[:facet_container]
  @instance_container = options[:instance_container] || model_container
  @default_id_method = (options[:default_id_method] || :name).to_sym
  @locked = false
  if block_given?
    yield self
    lock!
  end
end

Instance Attribute Details

#default_id_methodObject (readonly)

The default name of the method that used as the key or identity field for model. This can be overriden at a model element level.



31
32
33
# File 'lib/reality/model/repository.rb', line 31

def default_id_method
  @default_id_method
end

#facet_containerObject (readonly)

The ruby module where the facet manager is defined if any. This will be nil if faceted? returns false.



26
27
28
# File 'lib/reality/model/repository.rb', line 26

def facet_container
  @facet_container
end

#instance_containerObject (readonly)

The ruby module in which all the top level instances will be stored.



28
29
30
# File 'lib/reality/model/repository.rb', line 28

def instance_container
  @instance_container
end

#keyObject (readonly)

A symbolic name for the system model



20
21
22
# File 'lib/reality/model/repository.rb', line 20

def key
  @key
end

#log_containerObject (readonly)

The ruby module where the log methods are defined



24
25
26
# File 'lib/reality/model/repository.rb', line 24

def log_container
  @log_container
end

#model_containerObject (readonly)

The ruby module in which all the model classes will be defined



22
23
24
# File 'lib/reality/model/repository.rb', line 22

def model_container
  @model_container
end

Instance Method Details

#faceted?Boolean

Returns:

  • (Boolean)


49
50
51
# File 'lib/reality/model/repository.rb', line 49

def faceted?
  !@facet_container.nil?
end

#lock!Object

This method is called when the repository is finalized, after which no changes can be made.



80
81
82
83
84
85
86
# File 'lib/reality/model/repository.rb', line 80

def lock!
  Reality::Model.error("Attempting to lock repository '#{key}' when repository is already locked.") if locked?
  @locked = true
  define_ruby_classes
  define_facet_targets
  define_top_level_instance_accessors
end

#locked?Boolean

Returns:

  • (Boolean)


88
89
90
# File 'lib/reality/model/repository.rb', line 88

def locked?
  @locked
end

#model_element(key, container_key = nil, options = {}) ⇒ Object



71
72
73
# File 'lib/reality/model/repository.rb', line 71

def model_element(key, container_key = nil, options = {})
  ModelElement.new(self, key, container_key, options)
end

#model_element_by_key(key) ⇒ Object



65
66
67
68
69
# File 'lib/reality/model/repository.rb', line 65

def model_element_by_key(key)
  model_element = model_element_map[key.to_s]
  Reality::Model.error("Can not find model element '#{key}' in repository '#{self.key}'.") unless model_element
  model_element
end

#model_element_by_key?(key) ⇒ Boolean

Returns:

  • (Boolean)


61
62
63
# File 'lib/reality/model/repository.rb', line 61

def model_element_by_key?(key)
  !!model_element_map[key.to_s]
end

#model_element_keysObject



53
54
55
# File 'lib/reality/model/repository.rb', line 53

def model_element_keys
  model_element_map.keys
end

#model_elementsObject



57
58
59
# File 'lib/reality/model/repository.rb', line 57

def model_elements
  model_element_map.values
end

#model_elements_by_container(container_key) ⇒ Object



75
76
77
# File 'lib/reality/model/repository.rb', line 75

def model_elements_by_container(container_key)
  model_element_map.values.select { |model_element| model_element.container_key == container_key }
end