Sha256: 2863bc771f648d015c0aa4312b2fc258efd7a4ed623461a28b641be46b75db6a

Contents?: true

Size: 1.41 KB

Versions: 2

Compression:

Stored size: 1.41 KB

Contents

require 'chemicals'

module Commute
  module Common

    module Chemicals

      module Chemicals::Base
        TEMPLATE_CACHE = {}

        def initialize template_root = './'
          @template_root = template_root
        end

        def template path
          file = File.expand_path "#{path}.xml", @template_root

          if TEMPLATE_CACHE.has_key? file
            TEMPLATE_CACHE[file]
          else
            TEMPLATE_CACHE[file] = ::Chemicals::Template.new IO.read(file)
          end
        end
      end

      class Parser
        include Chemicals::Base
        @name = :parse

        def call router, request, options
          path = options[:path]

          _request = router.call(request.http) do |_response, status|
            response = request.respond _response.http, status

            _response.inject('', &:<<).map { |body|
              template(path).parse body
            }.pipe response
          end
          request.pipe _request
        end
      end

      class Renderer
        include Chemicals::Base
        @name = :render

        def call router, request, options
          path = options[:path]

          _request = router.call(request.http) do |_response, status|
            _response.pipe request.respond(_response.http, status)
          end

          request.map { |body|
            template(path).render(body).to_s
          }.pipe _request
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
commute-0.3.0.pre.2 lib/commute/common/chemicals.rb
commute-0.3.0.pre lib/commute/common/chemicals.rb