Skip to content

Commit

Permalink
[Issue #139] Add variable interpolation to *.js files.
Browse files Browse the repository at this point in the history
  • Loading branch information
lance committed Aug 1, 2012
1 parent 598c832 commit 8100cb6
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 0 deletions.
2 changes: 2 additions & 0 deletions lib/awestruct/handler_chains.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
require 'awestruct/handlers/haml_handler'
require 'awestruct/handlers/sass_handler'
require 'awestruct/handlers/scss_handler'
require 'awestruct/handlers/javascript_handler'
require 'awestruct/handlers/coffeescript_handler'

module Awestruct
Expand All @@ -25,6 +26,7 @@ class HandlerChains
Awestruct::Handlers::HamlHandler::CHAIN,
Awestruct::Handlers::SassHandler::CHAIN,
Awestruct::Handlers::ScssHandler::CHAIN,
Awestruct::Handlers::JavascriptHandler::CHAIN,
Awestruct::Handlers::CoffeescriptHandler::CHAIN,
HandlerChain.new( /.*/, Awestruct::Handlers::FileHandler )
]
Expand Down
47 changes: 47 additions & 0 deletions lib/awestruct/handlers/javascript_handler.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@

require 'awestruct/handler_chain'
require 'awestruct/handlers/base_handler'
require 'awestruct/handlers/file_handler'
require 'awestruct/handlers/front_matter_handler'
require 'awestruct/handlers/interpolation_handler'

module Awestruct
module Handlers
class JavascriptHandler < BaseHandler


CHAIN = Awestruct::HandlerChain.new( /\.js$/,
Awestruct::Handlers::FileHandler,
Awestruct::Handlers::FrontMatterHandler,
Awestruct::Handlers::InterpolationHandler,
Awestruct::Handlers::JavascriptHandler
)

def initialize(site, delegate)
super( site, delegate )
end

def simple_name
File.basename( relative_source_path, '.js' )
end

def output_filename
File.basename( relative_source_path )
end

def output_extension
'.js'
end

def content_syntax
:javascript
end

def rendered_content(context, with_layouts=false)
delegate.rendered_content( context, with_layouts )
end

end
end
end

35 changes: 35 additions & 0 deletions spec/javascript_handler_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
require 'awestruct/handlers/file_handler'
require 'awestruct/handlers/javascript_handler'

require 'hashery/open_cascade'

describe Awestruct::Handlers::JavascriptHandler do

before :all do
@site = OpenCascade.new :encoding=>false, :dir=>Pathname.new( File.dirname(__FILE__) + '/test-data/handlers' ), :foo => "bacon"
end

def handler_file(path)
File.dirname( __FILE__ ) + "/test-data/handlers/#{path}"
end

def create_context
OpenCascade.new :site=>@site
end

it "should render a Javascript file" do
file_handler = Awestruct::Handlers::FileHandler.new( @site, handler_file( "javascript-page.js" ) )
javascript_handler = Awestruct::Handlers::JavascriptHandler.new( @site, file_handler )

rendered = javascript_handler.rendered_content( create_context )
rendered.should_not be_nil
rendered.should =~ %r(var crunchy = "bacon")

end

it "should interpolate Javascript files" do
Awestruct::Handlers::JavascriptHandler::CHAIN.handler_classes.include?( Awestruct::Handlers::InterpolationHandler ).should be_true
end

end

1 change: 1 addition & 0 deletions spec/test-data/handlers/javascript-page.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
var crunchy = "bacon"

0 comments on commit 8100cb6

Please sign in to comment.