Class: HashIndex

Inherits:
Object
  • Object
show all
Defined in:
lib/ObjectModel/Indexes/HashIndex.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, &hasher) ⇒ HashIndex

Returns a new instance of HashIndex.



4
5
6
7
# File 'lib/ObjectModel/Indexes/HashIndex.rb', line 4

def initialize name, &hasher
	name.should! :be_a, Symbol
	@name, @hasher = name, hasher
end

Instance Attribute Details

#nameObject

Returns the value of attribute name.



2
3
4
# File 'lib/ObjectModel/Indexes/HashIndex.rb', line 2

def name
  @name
end

#repositoryObject

Returns the value of attribute repository.



2
3
4
# File 'lib/ObjectModel/Indexes/HashIndex.rb', line 2

def repository
  @repository
end

#storageObject

Returns the value of attribute storage.



2
3
4
# File 'lib/ObjectModel/Indexes/HashIndex.rb', line 2

def storage
  @storage
end

Instance Method Details

#[](hash) ⇒ Object



14
15
16
17
# File 'lib/ObjectModel/Indexes/HashIndex.rb', line 14

def [] hash
	entity_id = get_entity_id hash		
	return entity_id != nil ? @repository.by_id(entity_id) : nil
end

#add(entity) ⇒ Object



32
33
34
35
36
# File 'lib/ObjectModel/Indexes/HashIndex.rb', line 32

def add entity
	hash = @hasher.call(entity)
	#		hash.should! :be_a, String
	storage[@name].insert :hash => hash.to_s, :entity_id => entity.entity_id if hash != nil
end

#create_indexObject



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/ObjectModel/Indexes/HashIndex.rb', line 45

def create_index
	if storage.db.table_exists? @name
		return true
	else			
		storage.db.create_table @name do			
			column :hash, :text
			column :entity_id, :text
			primary_key :hash
			
#				index :hash
#				index :entity_id
		end
		return false
	end
end

#delete_indexObject



61
62
63
# File 'lib/ObjectModel/Indexes/HashIndex.rb', line 61

def delete_index
	storage.db.drop_table @name if storage.db.table_exists? @name
end

#get_entity_id(hash) ⇒ Object



19
20
21
22
# File 'lib/ObjectModel/Indexes/HashIndex.rb', line 19

def get_entity_id hash
	row = storage[@name][:hash => hash.to_s]
	return row ? row[:entity_id] : nil
end

#include?(hash) ⇒ Boolean

Returns:

  • (Boolean)


9
10
11
12
# File 'lib/ObjectModel/Indexes/HashIndex.rb', line 9

def include? hash
	hash.should! :be_a, String
	return storage[@name][:hash => hash] != nil
end


38
39
40
41
42
43
# File 'lib/ObjectModel/Indexes/HashIndex.rb', line 38

def print_storage i_name
	return unless i_name == nil or i_name == @name
	puts "\nHashIndex #{@name}:"
	storage[@name].print
	@storage
end

#update(entity, copy) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/ObjectModel/Indexes/HashIndex.rb', line 24

def update entity, copy		
	storage[@name].filter(:entity_id => entity.entity_id).delete
	unless copy.deleted?
		hash = @hasher.call(entity)			
		storage[@name].insert :hash => hash.to_s, :entity_id => entity.entity_id if hash != nil	
	end
end