Sha256: 51891641e67a55fec8ad198468b1b192e949108cbae9df4255660a0e853b4cef

Contents?: true

Size: 1.6 KB

Versions: 4

Compression:

Stored size: 1.6 KB

Contents

# encoding: utf-8

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

4 entries across 4 versions & 1 rubygems

Version Path
pupu-0.0.5.2 lib/pupu/parser.rb
pupu-0.0.5.1 lib/pupu/parser.rb
pupu-0.0.5 lib/pupu/parser.rb
pupu-0.0.4.pre lib/pupu/parser.rb