Module: Entity

Includes:
OpenConstructor
Defined in:
lib/ObjectModel/Entity.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#back_referencesObject (readonly)

Returns the value of attribute back_references.



3
4
5
# File 'lib/ObjectModel/Entity.rb', line 3

def back_references
  @back_references
end

#entity_idObject (readonly)

Returns the value of attribute entity_id.



3
4
5
# File 'lib/ObjectModel/Entity.rb', line 3

def entity_id
  @entity_id
end

#om_repositoryObject (readonly)

Returns the value of attribute om_repository.



3
4
5
# File 'lib/ObjectModel/Entity.rb', line 3

def om_repository
  @om_repository
end

#om_versionObject (readonly)

Returns the value of attribute om_version.



3
4
5
# File 'lib/ObjectModel/Entity.rb', line 3

def om_version
  @om_version
end

Instance Method Details

#==(other) ⇒ Object



5
6
7
8
9
# File 'lib/ObjectModel/Entity.rb', line 5

def == other
	@entity_id.should_not! :be_nil
	return false unless other.respond_to? :entity_id
	@entity_id == other.entity_id
end

#[](path) ⇒ Object



167
168
169
170
171
172
173
174
175
176
177
# File 'lib/ObjectModel/Entity.rb', line 167

def [] path		
	path = path.to_s if path.is_a? Path
	path.should! :be_a, String
	
	absolute_path = "#{path_get}/#{path}"		
	entity_id = @om_repository.index(:path).get_entity_id absolute_path
	raise_without_self NotFoundError, "Entity with Path '#{path}' not found!", ObjectModel if entity_id == nil
	
	entity_id.should! :be_a, String
	return @om_repository.by_id entity_id
end

#_parent=(parent) ⇒ Object



100
101
102
103
104
105
106
107
# File 'lib/ObjectModel/Entity.rb', line 100

def _parent= parent		
	if tr = Thread.current[:om_transaction]			
		copy = tr.copy_get! self												
		copy.parent = parent != nil ? parent.entity_id : nil
	else
		raise NoTransactionError
	end
end

#deleteObject

Raises:



38
39
40
41
42
43
44
45
46
47
48
# File 'lib/ObjectModel/Entity.rb', line 38

def delete					
	tr = Thread.current[:om_transaction]			
	raise NoTransactionError unless tr
	copy = tr.copy_get!(self)
	copy.new?.should! :be_false
	
	tr.event_processor.fire_before self, :delete
	tr.event_processor.fire_after self, :delete
	
	copy.deleted!
end

#each(specificator, &block) ⇒ Object



146
147
148
149
150
151
152
153
154
# File 'lib/ObjectModel/Entity.rb', line 146

def each specificator, &block
	case specificator
		when :attribute then AnEntity::EntityType.each_attribute self, &block
		when :child then AnEntity::EntityType.each_child self, &block
		when :reference then AnEntity::EntityType.each_reference self, &block
	else
		should! :be_never_called
	end
end

#eql?(other) ⇒ Boolean

Returns:

  • (Boolean)


11
12
13
14
15
# File 'lib/ObjectModel/Entity.rb', line 11

def eql? other
	@entity_id.should_not! :be_nil
	return false unless self.class == other.class
	@entity_id == other.entity_id
end

#hashObject



17
18
19
20
# File 'lib/ObjectModel/Entity.rb', line 17

def hash
	@entity_id.should_not! :be_nil
	return @entity_id.hash
end

#include?(path) ⇒ Boolean

Returns:

  • (Boolean)


156
157
158
159
160
161
162
163
164
165
# File 'lib/ObjectModel/Entity.rb', line 156

def include? path
	path = path.to_s if path.is_a? Path
	path.should! :be_a, String
	
	absolute_path = "#{path_get}/#{path}"		
	entity_id = @om_repository.index(:path).get_entity_id absolute_path
	
	entity_id.should! :be_a, [String, NilClass]		
	return entity_id != nil
end

#inspectObject



26
27
28
# File 'lib/ObjectModel/Entity.rb', line 26

def inspect
	to_s
end

#metaObject



34
35
36
# File 'lib/ObjectModel/Entity.rb', line 34

def meta
	self.class.meta
end

#nameObject



50
51
52
53
54
55
56
57
58
59
60
# File 'lib/ObjectModel/Entity.rb', line 50

def name
	if tr = Thread.current[:om_transaction]			
		if tr.changed? @entity_id
			tr.copies[@entity_id].name
		else
			@name
		end
	else
		@name
	end		
end

#name=(eid) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
# File 'lib/ObjectModel/Entity.rb', line 66

def name= eid
	if tr = Thread.current[:om_transaction]			
		copy = tr.copy_get! self
		old_value = copy.name
		tr.event_processor.fire_before self, :name_update, eid, old_value			
		copy.name = eid
		tr.event_processor.fire_after self, :name_update, eid, old_value			
	else
		raise NoTransactionError
	end
end

#name_getObject



62
63
64
# File 'lib/ObjectModel/Entity.rb', line 62

def name_get
	@name
end

#parentObject



86
87
88
89
90
91
92
93
94
# File 'lib/ObjectModel/Entity.rb', line 86

def parent
	tr = Thread.current[:om_transaction]
	if tr and tr.changed? @entity_id
		entity_id = tr.copies[@entity_id].parent
		entity_id ? tr.resolve(entity_id) : nil
	else
		@parent ? @om_repository.by_id(@parent) : nil
	end		
end

#parent_getObject



96
97
98
# File 'lib/ObjectModel/Entity.rb', line 96

def parent_get
	@parent ? @om_repository.by_id(@parent) : nil
end

#pathObject



78
79
80
81
82
83
84
# File 'lib/ObjectModel/Entity.rb', line 78

def path
	path, current = Path.new(name), self
	while current = current.parent
		path = Path.new(current.name) + path
	end 		
	path
end

#search_up(&b) ⇒ Object



132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'lib/ObjectModel/Entity.rb', line 132

def search_up &b
	return self if b.call self
	parent = parent_get
	if parent 
		if b.call(parent)
			return parent
		else
			return parent.search_up &b
		end
	else
		nil
	end
end

#to_sObject



22
23
24
# File 'lib/ObjectModel/Entity.rb', line 22

def to_s; 
	"#<#{self.class.name.split("::").last}: #{name}>" 
end

#to_yaml(io) ⇒ Object



30
31
32
# File 'lib/ObjectModel/Entity.rb', line 30

def to_yaml io
	raise "You can't save Entity as YAML!"
end

#up(method_name, *p, &b) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/ObjectModel/Entity.rb', line 109

def up method_name, *p, &b			
	result = nil
	e = search_up do |e| 
		result = e.respond_to method_name, *p
		result != nil
	end
	return result
	
	#		if respond_to? method_name
	#			value = send(method_name, *p, &b) 
	#			if value != nil
	#				return value
	#			elsif parent_get and parent_get.respond_to? method_name
	#				parent_get.up method_name, *p, &b
	#			else
	#				return value
	#			end
	#		else
	#			return parent_get.up method_name, *p, &b if parent_get
	#			return nil #raise NoMethodError, "Undefined method '#{method_name}' for '#{self.class.name}' and for it's parents!", caller
	#		end		
end

#validateObject



179
180
181
# File 'lib/ObjectModel/Entity.rb', line 179

def validate
	AnEntity::EntityType.validate_entity self
end