Module: VResource

Extended by:
Observable2
Defined in:
lib/vresource/vresource.rb,
lib/vresource/class_loader.rb,
lib/vresource/file_system_provider.rb,
lib/vresource/file_system_reloader.rb

Defined Under Namespace

Modules: ClassLoader Classes: FileSystemProvider, FileSystemReloader, NotExist

Class Method Summary collapse

Methods included from Observable2

add_observer, delete_observer, delete_observers, notify_observers, observers_count

Class Method Details

.add_resource_provider(provider) ⇒ Object



12
13
14
# File 'lib/vresource/vresource.rb', line 12

def add_resource_provider provider
  @providers.unshift provider
end

.class_delete(class_name) ⇒ Object

Deletes in each Providers.



59
60
61
# File 'lib/vresource/vresource.rb', line 59

def class_delete class_name
  providers.each{|p| p.class_delete class_name}
end

.class_exist?(class_name) ⇒ Boolean

Returns:

  • (Boolean)


54
55
56
# File 'lib/vresource/vresource.rb', line 54

def class_exist? class_name
  providers.any?{|p| p.class_exist? class_name}
end

.class_get(class_name) ⇒ Object

Returns from first Provider that contains this Class.



30
31
32
33
34
35
36
37
38
# File 'lib/vresource/vresource.rb', line 30

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

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

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



41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/vresource/vresource.rb', line 41

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

.class_to_virtual_file(class_name) ⇒ Object



126
127
128
129
130
131
132
133
134
# File 'lib/vresource/vresource.rb', line 126

def class_to_virtual_file class_name
  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

.hook!Object



136
# File 'lib/vresource/vresource.rb', line 136

def hook!; ClassLoader.hook! end

.providersObject



16
17
18
19
# File 'lib/vresource/vresource.rb', line 16

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

.register_resource_extension(extension, load, save) ⇒ Object



21
22
23
# File 'lib/vresource/vresource.rb', line 21

def register_resource_extension extension, load, save
  resource_extensions[extension] = load, save
end

.resource_delete(klass, resource_name) ⇒ Object

Deletes Resource in all Providers.



92
93
94
95
96
97
# File 'lib/vresource/vresource.rb', line 92

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

.resource_exist?(klass, resource_name) ⇒ Boolean

Check also for Class existence.

Returns:

  • (Boolean)


119
120
121
122
123
124
# File 'lib/vresource/vresource.rb', line 119

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

.resource_extensionsObject



10
# File 'lib/vresource/vresource.rb', line 10

def resource_extensions; @resource_extensions ||= {} end

.resource_get(klass, resource_name) ⇒ Object

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



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/vresource/vresource.rb', line 70

def resource_get klass, resource_name        
  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

.resource_set(klass, resource_name, data) ⇒ Object

Set Resource in fist Provider that contains this Class.



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/vresource/vresource.rb', line 100

def resource_set klass, resource_name, data
  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

.unhook!Object



137
# File 'lib/vresource/vresource.rb', line 137

def unhook!; ClassLoader.unhook! end

.unregister_resource_extension(extension) ⇒ Object



25
26
27
# File 'lib/vresource/vresource.rb', line 25

def unregister_resource_extension extension
  resource_extensions.delete extension
end