Sha256: b0b03c8a3f0751dc397891744b42af55fc975ed0a2102de98859338c8c21837e

Contents?: true

Size: 1.41 KB

Versions: 1

Compression:

Stored size: 1.41 KB

Contents

require 'pathname'

module SlimGruntHelpers

  module Models

    class Usemin

      BASE_OPTIONS = {}.freeze

      def initialize
        @links = []
      end

      def <<(path, options={})
        @links << { path: path.to_s, options: base_options.merge(options) }
      end
      alias_method :add,     :<<
      alias_method :include, :<<

      def require(path, options={})
        self.include(path, options) unless file_already_included? path
      end

      def each(options={})
        @links.each { |link| yield(transform_link(link, options)) }
      end

      def base_options
        BASE_OPTIONS
      end

      def require_tree(root_path, pattern, options={})
        unless root_path.respond_to? :join
          root_path = Pathname.new(root_path.to_s)
        end
        
        Dir[root_path.join(pattern).to_s].reject do |file|
          File.directory? file
        end.each do |file|
          file_name      = file.to_s
          real_root_path = "#{ root_path }/"
          file_name[real_root_path] = ''
          
          self.require file_name, options
        end
      end

      protected

        def transform_link(link, options={})
          raise NotImplementedError, 'This method must be implemented in child classes'
        end

      private

        def file_already_included?(path)
          path = path.to_s
          @links.find { |link| link[:path] == path }
        end

    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
slim-grunt-helpers-0.3.0 lib/slim-grunt-helpers/models/usemin.rb