Class: Qwe::Function

Inherits:
Object
  • Object
show all
Defined in:
lib/qwe/function.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(klass, name) ⇒ Function

Returns a new instance of Function.



20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/qwe/function.rb', line 20

def initialize(klass, name)
  self.klass = klass
  self.name = name
  self.class.instances.push(self)
  Qwe[klass, :functions, name] = self

  unless klass.respond_to?(:compile)
    klass.define_singleton_method(:compile) do
      Qwe[self, :functions].each do |n, f|
        f.compile
      end
    end
  end
end

Instance Attribute Details

#klassObject

Returns the value of attribute klass.



5
6
7
# File 'lib/qwe/function.rb', line 5

def klass
  @klass
end

#nameObject

Returns the value of attribute name.



6
7
8
# File 'lib/qwe/function.rb', line 6

def name
  @name
end

Class Method Details

.compile(klass, name) {|f| ... } ⇒ Object

Yields:

  • (f)


92
93
94
95
96
# File 'lib/qwe/function.rb', line 92

def self.compile(klass, name, &block)
  f = Qwe::Function.new(klass, name)
  yield f
  f.compile
end

.compile_allObject



16
17
18
# File 'lib/qwe/function.rb', line 16

def self.compile_all
  instances.each(&:compile)
end

.instancesObject



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

def self.instances
  @@instances ||= []
end

Instance Method Details

#arg(name, default = nil) ⇒ Object



39
40
41
# File 'lib/qwe/function.rb', line 39

def arg(name, default = nil)
  args[name] = default
end

#argsObject



35
36
37
# File 'lib/qwe/function.rb', line 35

def args
  @args ||= {}
end

#codeObject



60
61
62
63
64
65
66
67
68
69
# File 'lib/qwe/function.rb', line 60

def code
  rb = "def #{name}(" + \
    ((args.to_a.map { |a| "#{a[0]} = #{a[1].to_rb}" }) + \
    (keywords.to_a.map { |a| "#{a[0]}: #{a[1].to_rb}" })).join(", ") + \
    ")\n"
  stages.each do |s|
    rb += "  " + s + "\n"
  end
  rb += "end"
end

#compileObject



71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/qwe/function.rb', line 71

def compile
  return if @compiled

  begin
    klass.module_eval(code)
  rescue ScriptError, StandardError => e
    log "Error compiling #{klass}.#{name}, code is: \n#{code}\n"
    raise e
  end

  @compiled = true
end

#compiled?Boolean

Returns:

  • (Boolean)


84
85
86
# File 'lib/qwe/function.rb', line 84

def compiled?
  @compiled
end

#inspectObject



88
89
90
# File 'lib/qwe/function.rb', line 88

def inspect
  "\nFunction #{klass}.#{name}\n#{code}\n"
end

#keyword(name, default = nil) ⇒ Object



47
48
49
# File 'lib/qwe/function.rb', line 47

def keyword(name, default = nil)
  keywords[name] = default
end

#keywordsObject



43
44
45
# File 'lib/qwe/function.rb', line 43

def keywords
  @keywords ||= {}
end

#stage(code) ⇒ Object



55
56
57
58
# File 'lib/qwe/function.rb', line 55

def stage(code)
  @compiled = false
  stages.push(code) if code
end

#stagesObject



51
52
53
# File 'lib/qwe/function.rb', line 51

def stages
  @stages ||= []
end