Sha256: a188e7fec4fa78ecb2948e1c164e69812ce77e276b9c563055442fb0006a7a6a

Contents?: true

Size: 1.59 KB

Versions: 5

Compression:

Stored size: 1.59 KB

Contents

require "pupu/dsl"
require "pupu/pupu"

module Pupu
  class Parser
    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

    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

    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

    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

    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
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
pupu-0.0.3.pre lib/pupu/parser.rb
pupu-0.0.2.pre lib/pupu/parser.rb
pupu-0.0.2 lib/pupu/parser.rb
pupu-0.1.pre lib/pupu/parser.rb
pupu-0.0.1 lib/pupu/parser.rb