Module: RubyExt::Resource

Extended by:
Observable
Defined in:
lib/RubyExt/resource.rb

Defined Under Namespace

Classes: NotExist

Class Method Summary collapse

Methods included from Observable

add_observer, delete_observer, delete_observers, notify_observers, observers_count

Class Method Details

.add_resource_provider(provider) ⇒ Object



14
15
16
# File 'lib/RubyExt/resource.rb', line 14

def add_resource_provider provider
	@providers.unshift provider
end

.class_delete(class_name) ⇒ Object

Deletes in each Providers.



70
71
72
73
74
# File 'lib/RubyExt/resource.rb', line 70

def class_delete class_name
	@monitor.synchronize do
		providers.each{|p| p.class_delete class_name}
	end
end

.class_exist?(class_name) ⇒ Boolean

Returns:

  • (Boolean)


63
64
65
66
67
# File 'lib/RubyExt/resource.rb', line 63

def class_exist? class_name
	@monitor.synchronize do
		providers.any?{|p| p.class_exist? class_name}
	end
end

.class_get(class_name) ⇒ Object

Returns from first Provider that contains this Class.



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/RubyExt/resource.rb', line 36

def class_get class_name
	@monitor.synchronize do
		providers.each do |p|
			begin
				return p.class_get(class_name) 
			rescue NotExist;
			end
		end
		raise "Class '#{class_name}' doesn't exist!"
	end
end

.class_set(class_name, data, *args) ⇒ Object

Search for first Provider that contains Class Namespace and creates Class in it, then exits.



49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/RubyExt/resource.rb', line 49

def class_set class_name, data, *args
	@monitor.synchronize do					
		namespace = Module.namespace_for class_name
		namespace = namespace ? namespace.to_s : nil
		found = true
		providers.each do |p|
			next unless !namespace or p.class_exist?(namespace)
			p.class_set class_name, data, *args
			break
		end
		raise "Namespace '#{namespace}' doesn't exist!" unless found
	end
end

.class_to_virtual_file(class_name) ⇒ Object



147
148
149
150
151
152
153
154
155
156
157
# File 'lib/RubyExt/resource.rb', line 147

def class_to_virtual_file class_name
	@monitor.synchronize do				
		providers.each do |p|
			begin
				return p.class_to_virtual_file class_name 
			rescue NotExist;
			end
		end
		raise "Class '#{class_name}' doesn't exist!"					
	end
end

.providersObject



18
19
20
21
# File 'lib/RubyExt/resource.rb', line 18

def providers
	raise "There's no any Resource Provider!" if @providers.empty?
	@providers
end

.register_resource_extension(extension, load, save) ⇒ Object



23
24
25
26
27
# File 'lib/RubyExt/resource.rb', line 23

def register_resource_extension extension, load, save
	@monitor.synchronize do
		@resource_extensions[extension] = load, save
	end
end

.resource_delete(klass, resource_name) ⇒ Object

Deletes Resource in all Providers.



107
108
109
110
111
112
113
114
# File 'lib/RubyExt/resource.rb', line 107

def resource_delete klass, resource_name
	@monitor.synchronize do
		providers.each do |p|
			next unless p.class_exist?(klass.name)
			p.resource_delete klass.name, resource_name		
		end
	end
end

.resource_exist?(klass, resource_name) ⇒ Boolean

Check also for Class existence.

Returns:

  • (Boolean)


138
139
140
141
142
143
144
145
# File 'lib/RubyExt/resource.rb', line 138

def resource_exist? klass, resource_name
	@monitor.synchronize do
		providers.any? do |p|
			next unless p.class_exist?(klass.name)
			p.resource_exist? klass.name, resource_name
		end
	end
end

.resource_get(klass, resource_name) ⇒ Object

Search each Provider that contains this Class and returns first found Resource.



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/RubyExt/resource.rb', line 83

def resource_get klass, resource_name				
	@monitor.synchronize do					
		providers.each do |p|
			next unless p.class_exist?(klass.name)
			begin
				data = p.resource_get(klass.name, resource_name)
				
				if data
					extension = File.extname(resource_name)
					if @resource_extensions.include? extension
						load, save = @resource_extensions[extension]
						data = load.call data, klass, resource_name
					end
				end
				
				return data
			rescue NotExist;
			end
		end
		raise "Resource '#{resource_name}' for Class '#{klass.name}' doesn't exist!"
	end
end

.resource_set(klass, resource_name, data) ⇒ Object

Set Resource in fist Provider that contains this Class.



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/RubyExt/resource.rb', line 117

def resource_set klass, resource_name, data
	@monitor.synchronize do
		extension = File.extname(resource_name)
		if @resource_extensions.include? extension
			load, save = @resource_extensions[extension]
			data = save.call data, klass, resource_name
		end
		
		found = false
		providers.each do |p|
			next unless p.class_exist?(klass.name)
			p.resource_set klass.name, resource_name, data
			found = true
			break
		end
		
		raise "Class '#{klass.name}' doesn't exist!" unless found
	end
end

.unregister_resource_extension(extension) ⇒ Object



29
30
31
32
33
# File 'lib/RubyExt/resource.rb', line 29

def unregister_resource_extension extension
	@monitor.synchronize do
		@resource_extensions.delete extension
	end
end