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