Class: Pupu::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/pupu/parser.rb

Instance Method Summary collapse

Constructor Details

#initialize(plugin_name, plugin_params) ⇒ Parser

Returns a new instance of Parser.



8
9
10
11
12
13
14
# File 'lib/pupu/parser.rb', line 8

def initialize(plugin_name, plugin_params)
  @plugin    = Pupu[plugin_name, plugin_params]
  @output    = Array.new
  @dsl       = DSL.new(@plugin)
  @@loaded ||= Hash.new
  @@loaded[@plugin.name] = Array.new
end

Instance Method Details

#add_dependenciesObject



33
34
35
36
37
38
# File 'lib/pupu/parser.rb', line 33

def add_dependencies
  @dsl.get_dependencies.each do |dependency|
    parser = Parser.new(dependency.name, dependency.params)
    @output.push(parser.parse!) unless parser.loaded?
  end
end

#add_initializersObject



26
27
28
29
30
31
# File 'lib/pupu/parser.rb', line 26

def add_initializers
  js_initializer  = @plugin.initializer(:javascript)
  css_initializer = @plugin.initializer(:stylesheet)
  @output.push("\n<link href='#{css_initializer.url}' media='screen' rel='stylesheet' type='text/css' />") if css_initializer
  @output.push("\n<script src='#{js_initializer.url}' type='text/javascript'></script>") if js_initializer
end

#loaded?Boolean

Returns:

  • (Boolean)


16
17
18
19
20
21
22
23
24
# File 'lib/pupu/parser.rb', line 16

def loaded?
  # The reason why just array with plugin names isn't enough is that every time it can be called
  # with different parameters. For example pupu :mootools and then pupu :mootools, more: true
  @@loaded[@plugin.name] && @dsl.files.all? do |file|
    @@loaded[@plugin.name].include?(file)
  end

  false # FIXME: there is a bug in this method, it returns true in every case (not so important)
end

#parse!Object



40
41
42
43
44
45
46
47
# File 'lib/pupu/parser.rb', line 40

def parse!
  @dsl.instance_eval(File.read(@plugin.file("config.rb").path))
  self.add_dependencies
  @@loaded[@plugin.name].push(*@dsl.files)
  @output.push(@dsl.output)
  self.add_initializers
  return @output.join("\n")
end