Module: RubyScriptProvider::RubyScripts

Defined in:
lib/rubyscriptprovider.rb

Overview

keeps loaded scripts

Constant Summary collapse

@@scripts =
{}

Class Method Summary collapse

Class Method Details

.add(name, datetime, capsule) ⇒ Object

add(name, datetime, capsule) -> Hash Register new script with update time.



76
77
78
# File 'lib/rubyscriptprovider.rb', line 76

def self.add(name, datetime, capsule)
  @@scripts[name] = {:timestamp => datetime, :module => capsule}
end

.delete(name) ⇒ Object

delete(name) -> Hash Delete specific script.



82
83
84
# File 'lib/rubyscriptprovider.rb', line 82

def self.delete(name)
  @@scripts.delete(name)
end

.get(name, datetime) ⇒ Object

get(name, datetime) -> RubyScript|nil Try to get script. If the script is updated, nil is returned. Otherwise found script is returned.



62
63
64
65
66
67
68
69
70
71
72
# File 'lib/rubyscriptprovider.rb', line 62

def self.get(name, datetime)
  item = @@scripts[name]
  if item
    if item[:timestamp] >= datetime
      return item[:module]
    else
      @@scripts.delete(name)
      return nil
    end
  end
end

.get_script(storage, script_context, url, uri) ⇒ Object

get_script(storage, script_context, url, uri) -> RubyScript Creates capsulated script.



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/rubyscriptprovider.rb', line 88

def self.get_script(storage, script_context, url, uri)
  script = nil
  capsule = nil
  file_name, func_name = url.to_url(uri)
  if storage.exists?(file_name)
    if file_name.start_with?(DOC_PROTOCOL)
      t = Time.new # avoide illegal error
    else
      t = RubyScripts.datetime_to_time(storage.modified_time(file_name))
    end
    capsule = RubyScripts.get(uri, t)
    unless capsule
      klass = Class.new
      klass.const_set(:XSCRIPTCONTEXT, script_context)
      text = storage.file_content(file_name)
      klass.class_eval(text, Uno.to_system_path(file_name))
      capsule = klass.new
      RubyScripts.add(uri, t, capsule)
    end
  end
  unless capsule
    ex = ScriptFrameworkErrorException.new(
               "script not found", nil, uri, LANGUAGE, 2)
    raise ex
  end
  if capsule.public_methods(false).include?(func_name.intern)
    script = RubyScript.new(capsule, file_name, func_name)
  end
  return script
end