assette 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/.irbrc ADDED
@@ -0,0 +1,2 @@
1
+ Dir.chdir 'examples'
2
+ require '../lib/assette'
data/Gemfile CHANGED
@@ -6,6 +6,7 @@ group :development do
6
6
  gem "bundler", "~> 1.0.0"
7
7
  gem "jeweler", "~> 1.5.2"
8
8
  gem "rcov", ">= 0"
9
+ gem 'rack-test', :require => false
9
10
  end
10
11
 
11
12
  gem "rack", '~> 1'
data/Gemfile.lock CHANGED
@@ -4,9 +4,10 @@ GEM
4
4
  coffee-script (2.2.0)
5
5
  coffee-script-source
6
6
  execjs
7
- coffee-script-source (1.0.1)
7
+ coffee-script-source (1.1.1)
8
8
  diff-lcs (1.1.2)
9
- execjs (0.1.0)
9
+ execjs (1.0.0)
10
+ multi_json (~> 1.0)
10
11
  git (1.2.5)
11
12
  jeweler (1.5.2)
12
13
  bundler (~> 1.0.0)
@@ -14,8 +15,11 @@ GEM
14
15
  rake
15
16
  json (1.5.1)
16
17
  mime-types (1.16)
17
- rack (1.2.1)
18
- rake (0.8.7)
18
+ multi_json (1.0.3)
19
+ rack (1.3.0)
20
+ rack-test (0.6.0)
21
+ rack (>= 1.0)
22
+ rake (0.9.0)
19
23
  rcov (0.9.9)
20
24
  rspec (2.4.0)
21
25
  rspec-core (~> 2.4.0)
@@ -27,7 +31,7 @@ GEM
27
31
  rspec-mocks (2.4.0)
28
32
  sass (3.1.1)
29
33
  thor (0.14.6)
30
- yard (0.6.4)
34
+ yard (0.6.8)
31
35
 
32
36
  PLATFORMS
33
37
  ruby
@@ -40,6 +44,7 @@ DEPENDENCIES
40
44
  json (>= 1.4)
41
45
  mime-types (>= 1.16)
42
46
  rack (~> 1)
47
+ rack-test
43
48
  rcov
44
49
  rspec (~> 2.4.0)
45
50
  sass (>= 3.1)
data/Rakefile CHANGED
@@ -9,6 +9,8 @@ rescue Bundler::BundlerError => e
9
9
  end
10
10
  require 'rake'
11
11
 
12
+ include Rake::DSL
13
+
12
14
  require 'jeweler'
13
15
  Jeweler::Tasks.new do |gem|
14
16
  # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
@@ -26,7 +28,6 @@ Jeweler::Tasks.new do |gem|
26
28
  gem.add_runtime_dependency "json", '>= 1.4'
27
29
  gem.add_runtime_dependency "sass", '>= 3.1'
28
30
  gem.add_runtime_dependency "coffee-script", '~> 2'
29
- # gem.add_runtime_dependency "git"
30
31
  gem.add_runtime_dependency "mime-types", ">= 1.16"
31
32
  end
32
33
  Jeweler::RubygemsDotOrgTasks.new
@@ -46,3 +47,10 @@ task :default => :spec
46
47
 
47
48
  require 'yard'
48
49
  YARD::Rake::YardocTask.new
50
+
51
+ require 'rake/testtask'
52
+ Rake::TestTask.new(:test) do |test|
53
+ test.libs << 'lib' << 'test'
54
+ test.pattern = 'test/**/test_*.rb'
55
+ test.verbose = true
56
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.5
1
+ 0.0.6
data/assette.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{assette}
8
- s.version = "0.0.5"
8
+ s.version = "0.0.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tal Atlas"]
12
- s.date = %q{2011-05-08}
12
+ s.date = %q{2011-06-14}
13
13
  s.default_executable = %q{assette}
14
14
  s.description = %q{Renders all asset types (coffeescript/sass/scss) as equals}
15
15
  s.email = %q{me@tal.by}
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
20
20
  ]
21
21
  s.files = [
22
22
  ".document",
23
+ ".irbrc",
23
24
  ".rspec",
24
25
  "Gemfile",
25
26
  "Gemfile.lock",
@@ -30,6 +31,7 @@ Gem::Specification.new do |s|
30
31
  "assette.gemspec",
31
32
  "bin/assette",
32
33
  "examples/config/assets.rb",
34
+ "examples/myapp/templates/bar/index.html.mustache",
33
35
  "examples/myapp/templates/foo/_partial.html.mustache",
34
36
  "examples/myapp/templates/foo/index.html.mustache",
35
37
  "examples/public/images/test.pdf",
@@ -63,14 +65,18 @@ Gem::Specification.new do |s|
63
65
  "lib/assette/server.rb",
64
66
  "lib/assette/template.rb",
65
67
  "lib/assette/template_set.rb",
68
+ "lib/assette/view_helper.rb",
66
69
  "spec/assette_spec.rb",
67
70
  "spec/config_spec.rb",
68
71
  "spec/file_spec.rb",
72
+ "spec/helper_spec.rb",
69
73
  "spec/post_processor_spec.rb",
70
74
  "spec/reader_spec.rb",
71
75
  "spec/server_spec.rb",
72
76
  "spec/spec_helper.rb",
73
- "spec/template_spec.rb"
77
+ "spec/template_spec.rb",
78
+ "test/helper.rb",
79
+ "test/test_server.rb"
74
80
  ]
75
81
  s.homepage = %q{http://github.com/Talby/assette}
76
82
  s.licenses = ["MIT"]
@@ -82,11 +88,14 @@ Gem::Specification.new do |s|
82
88
  "spec/assette_spec.rb",
83
89
  "spec/config_spec.rb",
84
90
  "spec/file_spec.rb",
91
+ "spec/helper_spec.rb",
85
92
  "spec/post_processor_spec.rb",
86
93
  "spec/reader_spec.rb",
87
94
  "spec/server_spec.rb",
88
95
  "spec/spec_helper.rb",
89
- "spec/template_spec.rb"
96
+ "spec/template_spec.rb",
97
+ "test/helper.rb",
98
+ "test/test_server.rb"
90
99
  ]
91
100
 
92
101
  if s.respond_to? :specification_version then
@@ -105,6 +114,7 @@ Gem::Specification.new do |s|
105
114
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
106
115
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
107
116
  s.add_development_dependency(%q<rcov>, [">= 0"])
117
+ s.add_development_dependency(%q<rack-test>, [">= 0"])
108
118
  s.add_runtime_dependency(%q<rack>, ["~> 1"])
109
119
  s.add_runtime_dependency(%q<thor>, ["~> 0"])
110
120
  s.add_runtime_dependency(%q<json>, [">= 1.4"])
@@ -124,6 +134,7 @@ Gem::Specification.new do |s|
124
134
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
125
135
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
126
136
  s.add_dependency(%q<rcov>, [">= 0"])
137
+ s.add_dependency(%q<rack-test>, [">= 0"])
127
138
  s.add_dependency(%q<rack>, ["~> 1"])
128
139
  s.add_dependency(%q<thor>, ["~> 0"])
129
140
  s.add_dependency(%q<json>, [">= 1.4"])
@@ -144,6 +155,7 @@ Gem::Specification.new do |s|
144
155
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
145
156
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
146
157
  s.add_dependency(%q<rcov>, [">= 0"])
158
+ s.add_dependency(%q<rack-test>, [">= 0"])
147
159
  s.add_dependency(%q<rack>, ["~> 1"])
148
160
  s.add_dependency(%q<thor>, ["~> 0"])
149
161
  s.add_dependency(%q<json>, [">= 1.4"])
@@ -12,6 +12,7 @@ template_partial 'Handlebars.registerPartial({*path*},{*template*});'
12
12
 
13
13
  template_format 'GC.foo.t[{*path*}] = Handlebars.compile({*template*});'
14
14
 
15
+ cache_method 'param'
15
16
 
16
17
  after_compile do
17
18
  a = 1
@@ -0,0 +1,3 @@
1
+ <div>
2
+ #Bar
3
+ </div>
data/lib/assette.rb CHANGED
@@ -19,7 +19,7 @@ MIME::Types.add coffee_type, sass_type
19
19
  module Assette
20
20
  extend self
21
21
  CONFIG_WRAPPER = 'ASSETTE CONFIG'
22
- VERSION = File.open(File.expand_path(File.dirname(__FILE__)+'/../VERSION')).read
22
+ VERSION = File.open(File.expand_path(File.dirname(__FILE__)+'/../VERSION')).read.freeze
23
23
 
24
24
  def logger
25
25
  @logger ||= Logger.new(STDOUT)
@@ -31,6 +31,6 @@ module Assette
31
31
  end
32
32
 
33
33
  %w{config reader readers post_processor post_processors
34
- compiled_file file template_set template}.each do |f|
34
+ compiled_file file template_set template view_helper}.each do |f|
35
35
  require File.dirname(__FILE__)+'/assette/'+f
36
36
  end
@@ -10,6 +10,10 @@ module Assette
10
10
  @config = Assette::Config.load(p)
11
11
  end
12
12
 
13
+ def compiled_path i, path
14
+ File.join(Assette.config.asset_host(i),Assette.config.compiled_path(path))
15
+ end
16
+
13
17
  class Config
14
18
  MULTIPLES = %w{file_path asset_host}.freeze
15
19
  SINGLES = %w{asset_dir templates_path template_format cache_method
@@ -26,6 +30,7 @@ module Assette
26
30
 
27
31
  attr_reader *OPTIONS
28
32
  attr_accessor :compiling, :sha
33
+ attr_writer :env
29
34
 
30
35
  DEFAULTS = {
31
36
  :asset_dir => 'assets',
@@ -43,6 +48,33 @@ module Assette
43
48
  end
44
49
  end
45
50
 
51
+ def env
52
+ return @env if @env
53
+
54
+ case
55
+ when defined?(ENVIRONMENT)
56
+ ENVIRONMENT
57
+ when defined?(Merb)
58
+ Merb.env
59
+ when defined?(Rails)
60
+ Rails.env
61
+ else
62
+ ENV['RACK_ENV'] || ENV['RAILS_ENV']
63
+ end
64
+ end
65
+
66
+ def env? e
67
+ env == e
68
+ end
69
+
70
+ def prod?
71
+ env == 'production'
72
+ end
73
+
74
+ def dev?
75
+ !prod?
76
+ end
77
+
46
78
  def find_file_from_relative_path path
47
79
  a = Assette.config.file_paths.find do |pp|
48
80
  File.exist?(File.join(pp,path))
data/lib/assette/file.rb CHANGED
@@ -14,7 +14,7 @@ class Assette::File < ::File
14
14
  if klass = Assette::Reader::ALL[extension]
15
15
  klass
16
16
  else
17
- raise "Can't find reader class Assette::Reader::#{extension.capitalize}"
17
+ raise Assette::Reader::UnknownReader, "Can't find reader class Assette::Reader::#{extension.capitalize}"
18
18
  end
19
19
  end
20
20
 
@@ -27,7 +27,7 @@ class Assette::File < ::File
27
27
  if @target_class = Assette::Reader::ALL[ex.to_s]
28
28
  @target_class
29
29
  else
30
- raise "Can't find reader class Assette::Reader::#{ex.capitalize}"
30
+ raise Assette::Reader::UnknownReader, "Can't find reader class Assette::Reader::#{ex.capitalize}"
31
31
  end
32
32
  end
33
33
 
@@ -35,8 +35,9 @@ class Assette::File < ::File
35
35
  @mime_type ||= MIME::Types.type_for(path).first
36
36
  end
37
37
 
38
- def comment_str
39
- target_class.comment_str
38
+ def comment_str(str = nil)
39
+ comm = target_class.comment_str
40
+ str ? (comm % str) : comm
40
41
  end
41
42
 
42
43
  def code
@@ -45,13 +46,15 @@ class Assette::File < ::File
45
46
  target_class.error(e.to_s,path)
46
47
  end
47
48
 
49
+ def template_set
50
+ Assette::TemplateSet.new(templates)
51
+ end
52
+
48
53
  def all_code_array
49
54
  dep = Assette::CompiledFile.new(self)
50
55
 
51
56
  if !templates.empty?
52
- set = Assette::TemplateSet.new(templates)
53
-
54
- dep << set.compile
57
+ dep << template_set.compile
55
58
  end
56
59
 
57
60
  dependencies.each {|d| dep.add_dependency(d)}
@@ -62,7 +65,11 @@ class Assette::File < ::File
62
65
  end
63
66
 
64
67
  def all_code
65
- all_code_array.join("\n")
68
+ if target_class.respond_to? :compile_array
69
+ target_class.compile_array all_code_array
70
+ else
71
+ all_code_array.join("\n")
72
+ end
66
73
  end
67
74
 
68
75
  def dirname
@@ -82,6 +89,10 @@ class Assette::File < ::File
82
89
  tp
83
90
  end
84
91
 
92
+ def dev_tag
93
+ target_class.tag "#{relative_target_path}?nodep"
94
+ end
95
+
85
96
  def filename
86
97
  File.basename(path)
87
98
  end
@@ -172,6 +183,18 @@ class Assette::File < ::File
172
183
  end
173
184
  end
174
185
 
186
+ def path_array
187
+ code = []
188
+
189
+ code << "/__templates/#{templates.join(':')}" unless templates.empty?
190
+
191
+ code += dependencies.collect do |d|
192
+ d.relative_target_path
193
+ end
194
+
195
+ code << relative_target_path
196
+ end
197
+
175
198
  class << self
176
199
 
177
200
  def all_code_for *args
@@ -182,20 +205,20 @@ class Assette::File < ::File
182
205
  code << f.comment_str % "Time taken to generate: #{Time.now-start}s"
183
206
  end
184
207
 
208
+ # This code is aweful. gotta fix it
209
+ #shitty
185
210
  def rack_resp_if_exists path, opts = {}
186
211
  return unless File.exist?(path)
187
212
  start = Time.now
188
213
  f = open(path)
189
214
 
190
215
  if opts[:deparr]
191
- code = f.dependencies.collect do |d|
192
- d.relative_target_path
193
- end
194
-
195
- code << f.relative_target_path
216
+ code = f.path_array
196
217
 
197
218
  resp = {:dependencies => code, :target_type => f.target_class.mime_type, :target_extension => f.extension}
198
219
 
220
+ resp[:generation_time] = Time.now-start
221
+
199
222
  return [200,{"Content-Type" => 'text/javascript'}, [resp.to_json]]
200
223
  end
201
224
 
@@ -1,18 +1,20 @@
1
- class Assette::PostProcessor::CacheBuster < Assette::PostProcessor(:css)
2
- URL_MATCHER = /url\((?:["'])?(?!http)(?!\/\/)([\w\/\.\-\s\?=]+)(?:["'])?\)/i
1
+ module Assette
2
+ class PostProcessor::CacheBuster < Assette::PostProcessor(:css)
3
+ URL_MATCHER = /url\((?:["'])?(?!http)(?!\/\/)([\w\/\.\-\s\?=]+)(?:["'])?\)/i
3
4
 
4
- def should_process?
5
- Assette.config.compiling?
6
- end
5
+ def should_process?
6
+ Assette.config.compiling?
7
+ end
7
8
 
8
- def processor
9
- @@i ||= -1
9
+ def processor
10
+ @@i ||= -1
10
11
 
11
- @str.gsub(URL_MATCHER) do |s|
12
- url = File.join(Assette.config.asset_host(@@i+=1),Assette.config.compiled_path($1))
12
+ @str.gsub(URL_MATCHER) do |s|
13
+ url = Assette.compiled_path @@i+=1, $1
13
14
 
14
- %Q{url("#{url}")}
15
+ %Q{url("#{url}")}
16
+ end
15
17
  end
16
- end
17
18
 
19
+ end
18
20
  end
@@ -3,6 +3,7 @@ module Assette
3
3
  extend self
4
4
  OUTPUTS = Hash.new {|h,k| h[k] = []}
5
5
  ALL = {}
6
+ OUTPUT_MAP = {}
6
7
 
7
8
  def possible_targets path
8
9
  match = path.match(/(.+\.)([a-z]+)$/i)
@@ -13,6 +14,10 @@ module Assette
13
14
  OUTPUTS[ext.to_sym].collect { |cla| file + cla.extension }
14
15
  end
15
16
 
17
+ def target_class ex
18
+ Assette::Reader::ALL[Assette::Reader::OUTPUT_MAP[ex]]
19
+ end
20
+
16
21
  class Base
17
22
  attr_reader :file
18
23
  def initialize(file)
@@ -74,6 +79,7 @@ module Assette
74
79
 
75
80
  if ex = extension
76
81
  Assette::Reader::ALL[ex] = self
82
+ Assette::Reader::OUTPUT_MAP[ex] = outputs.to_s
77
83
  end
78
84
  end
79
85
 
@@ -85,6 +91,7 @@ module Assette
85
91
 
86
92
  end
87
93
 
94
+ class UnknownReader < StandardError; end
88
95
  end
89
96
 
90
97
  def self.Reader(type)
@@ -4,6 +4,8 @@
4
4
  coffee
5
5
  sass
6
6
  scss
7
- }.each do |f|
8
- require File.join(File.dirname(__FILE__),'readers',"#{f}.rb")
7
+ }.collect do |f|
8
+ File.join(File.dirname(__FILE__),'readers',"#{f}.rb")
9
+ end.each do |f|
10
+ require f
9
11
  end
@@ -29,5 +29,11 @@ class Assette::Reader::Css < Assette::Reader(:css)
29
29
  '/* %s */'
30
30
  end
31
31
 
32
+ def tag path
33
+ <<-HTML
34
+ <link href="#{path}" rel="stylesheet" type="text/css" media="all" />
35
+ HTML
36
+ end
37
+
32
38
  end
33
39
  end
@@ -21,5 +21,11 @@ class Assette::Reader::Js < Assette::Reader(:js)
21
21
  def comment_str
22
22
  '// %s'
23
23
  end
24
+
25
+ def tag path
26
+ <<-HTML
27
+ <script src="#{path}" type="text/javascript"></script>
28
+ HTML
29
+ end
24
30
  end
25
31
  end
@@ -73,7 +73,17 @@ module Assette
73
73
  f
74
74
  end
75
75
 
76
+ def looking_for_template?
77
+ m = path.match /__templates\/(.+)/
78
+ m[1].gsub(/.js$/,'').split(':') if m
79
+ end
80
+
76
81
  def rack_resp
82
+ if templates = looking_for_template?
83
+ set = TemplateSet.new(templates)
84
+ return [200,{"Content-Type" => Reader::Js.mime_type.content_type},[set.compile]]
85
+ end
86
+
77
87
  if has_registered_reader? && (f = find_compiled_file)
78
88
  f
79
89
  elsif f = find_file
@@ -1,4 +1,16 @@
1
1
  module Assette
2
+ #shitty
3
+ def preloader_file
4
+ p = Assette.config.template_preloader
5
+ pp = Assette.config.find_file_from_relative_path(p) if p
6
+ Assette::File.open(pp) if pp
7
+ end
8
+
9
+ #shitty
10
+ def preloader_code
11
+ pp = preloader_file
12
+ pp.all_code if pp
13
+ end
2
14
 
3
15
  class TemplateSet
4
16
  attr_reader :templates
@@ -36,14 +48,7 @@ module Assette
36
48
  end
37
49
  end
38
50
 
39
- def insert_preloader
40
- p = Assette.config.template_preloader
41
- if p && pp = Assette.config.find_file_from_relative_path(p)
42
- Assette::File.open(pp).all_code
43
- end
44
- end
45
-
46
- def compile
51
+ def compile(opts={})
47
52
  coffee = Array.new
48
53
 
49
54
  vars = storage_variable
@@ -67,7 +72,7 @@ module Assette
67
72
  end
68
73
 
69
74
  t = Assette::Reader::Coffee.compile_str(coffee.join("\n"))
70
- pre = insert_preloader
75
+ pre = Assette.preloader_code unless opts[:no_preloader]
71
76
  pre ? [pre,t].join("\n") : t
72
77
  end
73
78
 
@@ -0,0 +1,60 @@
1
+ module Assette
2
+ module ViewHelper
3
+
4
+ module Development
5
+ def asset_tag file
6
+ output = ["<!-- Assets for #{file} -->"]
7
+ real_path = Assette.config.find_file_from_relative_path(file)
8
+ f = Assette::File.open(real_path)
9
+
10
+ output << Assette::Reader::Js.tag("/__templates/#{f.templates.join(':')}") unless f.templates.empty?
11
+
12
+ f.dependencies.each do |d|
13
+ output << d.dev_tag
14
+ end
15
+ output << f.dev_tag
16
+
17
+ output << "<!-- END #{file} -->"
18
+
19
+ output.join("\n")
20
+ end
21
+ end
22
+
23
+ module Production
24
+ ASSET_TAGS = Hash.new
25
+
26
+ # Store the path name for each asset so to speed up things a little and to make sure it's alwasy getting the smae host
27
+ def asset_tag file
28
+ ASSET_TAGS[file] ||= __asset_tag(file)
29
+ end
30
+
31
+ def __asset_tag file
32
+ ex = file.match(/\.(\w+)$/)
33
+ if ex && target_class = Assette::Reader.target_class(ex[1])
34
+ @__asset_iterator ||= -1 # Conerns about whether this will get re_instantiated on each request must investigate
35
+
36
+ file.gsub!(/\.(\w+)$/) do |s|
37
+ ".#{Assette::Reader::OUTPUT_MAP[$1]}"
38
+ end
39
+
40
+ url = Assette.compiled_path @__asset_iterator+=1, file
41
+
42
+ target_class.tag url
43
+ else
44
+ <<-HTML
45
+ <!-- Can't find file or reader for #{file.inspect}-->
46
+ HTML
47
+ end
48
+ end
49
+ end
50
+
51
+ def self.included receiver
52
+ if Assette.config.prod?
53
+ receiver.send :include, Production
54
+ else
55
+ receiver.send :include, Development
56
+ end
57
+ end
58
+
59
+ end
60
+ end
@@ -0,0 +1,99 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe Assette::ViewHelper do
4
+
5
+ after(:all) do
6
+ Dir.chdir(@dir_before)
7
+ end
8
+
9
+ before(:all) do
10
+ @dir_before = Dir.pwd
11
+ Dir.chdir(File.dirname(__FILE__) + '/../examples')
12
+ end
13
+
14
+ describe Assette::ViewHelper::Development do
15
+ before :all do
16
+ Assette.config.env = 'development'
17
+
18
+ class DevHelper
19
+ include Assette::ViewHelper
20
+ end
21
+
22
+ @dev = DevHelper.new
23
+ end
24
+
25
+ it "should be a development helper" do
26
+ @dev.should be_a Assette::ViewHelper::Development
27
+ end
28
+
29
+ it "should return dev tag" do
30
+ tag = @dev.asset_tag 'javascripts/test.coffee'
31
+ tag.should include '<script src="/__templates/foo" type="text/javascript"></script>'
32
+ tag.should include '<script src="/javascripts/one.js?nodep" type="text/javascript"></script>'
33
+ tag.should include '<script src="/javascripts/test.js?nodep" type="text/javascript"></script>'
34
+ end
35
+ end
36
+
37
+ describe Assette::ViewHelper::Production do
38
+ before :all do
39
+ Assette.config.env = 'production'
40
+
41
+ class ProdHelper
42
+ include Assette::ViewHelper
43
+ attr_reader :__asset_iterator
44
+ end
45
+
46
+ @prod = ProdHelper.new
47
+ end
48
+
49
+ it "should be a production helper" do
50
+ @prod.should be_a Assette::ViewHelper::Production
51
+ end
52
+
53
+ it "should return prod tag" do
54
+ tag = @prod.asset_tag 'javascripts/test.coffee'
55
+ tag.strip.should == '<script src="http://cdn1.gilt.com/javascripts/test.js" type="text/javascript"></script>'
56
+ end
57
+
58
+ describe "cachebusting" do
59
+ before :all do
60
+ @pre_sha = Assette.config.sha
61
+ Assette.config.sha = @sha = '1234567890abcdef'
62
+ end
63
+
64
+ after :all do
65
+ Assette.config.sha = @pre_sha
66
+ end
67
+
68
+ it "should use path" do
69
+ Assette.config.instance_variable_set(:@cache_method,'path')
70
+ tag = @prod.asset_tag 'javascripts/test2.coffee'
71
+ tag.strip.should include %Q{.gilt.com/#{@sha}/javascripts/test2.js}
72
+ end
73
+
74
+ it "should use param" do
75
+ Assette.config.instance_variable_set(:@cache_method,'param')
76
+ tag = @prod.asset_tag 'javascripts/test3.coffee'
77
+ tag.strip.should include %Q{gilt.com/javascripts/test3.js?v=#{@sha}}
78
+ end
79
+ end
80
+
81
+ describe "caching" do
82
+ before do
83
+ @prod2 = ProdHelper.new
84
+ @prod3 = ProdHelper.new
85
+ end
86
+
87
+ it "should only generate a link the first time" do
88
+ @prod2.should_not_receive(:__asset_tag)
89
+ file = 'javascripts/asdfasdf.coffee'
90
+ tag = @prod.asset_tag file
91
+ tag2 = @prod2.asset_tag file
92
+
93
+ tag.should == tag2
94
+ end
95
+ end
96
+
97
+ end
98
+
99
+ end
data/spec/spec_helper.rb CHANGED
@@ -10,3 +10,5 @@ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
10
10
  RSpec.configure do |config|
11
11
 
12
12
  end
13
+
14
+ Assette.logger.level = Logger::WARN
data/test/helper.rb ADDED
@@ -0,0 +1,21 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+
12
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
13
+ $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
14
+ require 'assette'
15
+
16
+ Assette.logger.level = Logger::WARN
17
+
18
+ Dir.chdir(File.join(File.dirname(__FILE__),'../examples/'))
19
+
20
+ class Test::Unit::TestCase
21
+ end
@@ -0,0 +1,154 @@
1
+ require 'helper'
2
+ require 'rack/test'
3
+ require 'assette/server'
4
+
5
+ class ServerTest < Test::Unit::TestCase
6
+ include Rack::Test::Methods
7
+
8
+ def app
9
+ Assette::Server
10
+ end
11
+
12
+ def test_test_coffee
13
+ get "/javascripts/test.js"
14
+
15
+ assert last_response.ok?
16
+ is_js?
17
+ has_pre_template
18
+ has_foo_template
19
+ has_bar_template false
20
+ end
21
+
22
+ def test_nodep
23
+ get "/javascripts/test.js?nodep"
24
+
25
+ assert last_response.ok?
26
+ is_js?
27
+ has_pre_template false
28
+ has_foo_template false
29
+ has_bar_template false
30
+ end
31
+
32
+ def test_two_scss
33
+ get '/stylesheets/two2.css'
34
+
35
+ assert last_response.ok?
36
+ is_css?
37
+ assert_match /#foo3/, last_response.body
38
+ assert_match /#one/, last_response.body
39
+ end
40
+
41
+ def test_all_template
42
+ get '/__templates/all'
43
+
44
+ assert last_response.ok?
45
+ is_js?
46
+ has_pre_template
47
+ has_foo_template
48
+ has_bar_template
49
+ end
50
+
51
+ def test_all_template2
52
+ get '/__templates/foo:bar'
53
+
54
+ assert last_response.ok?
55
+ is_js?
56
+ has_pre_template
57
+ has_foo_template
58
+ has_bar_template
59
+
60
+ get '/__templates/bar:foo.js'
61
+
62
+ assert last_response.ok?
63
+ is_js?
64
+ has_pre_template
65
+ has_foo_template
66
+ has_bar_template
67
+ end
68
+
69
+ def test_foo_template
70
+ get '/__templates/foo'
71
+
72
+ assert last_response.ok?
73
+ is_js?
74
+ has_pre_template
75
+ has_foo_template
76
+ has_bar_template false
77
+ end
78
+
79
+ def test_bar_template
80
+ get '/__templates/bar.js'
81
+
82
+ assert last_response.ok?
83
+ is_js?
84
+ has_pre_template
85
+ has_foo_template false
86
+ has_bar_template
87
+ end
88
+
89
+ def test_getting_js_dependencies
90
+ get "/javascripts/test.js?deparr"
91
+ json = nil
92
+ assert_nothing_raised do
93
+ json = JSON.parse(last_response.body)
94
+ end
95
+
96
+ assert json['dependencies'].is_a?(Array)
97
+ assert_equal json['target_type'], 'application/javascript'
98
+ assert json['dependencies'].include?('/__templates/foo')
99
+ assert json['dependencies'].include?('/javascripts/one.js')
100
+ assert json['dependencies'].include?('/javascripts/test.js')
101
+ end
102
+
103
+ def test_getting_js_dependencies
104
+ get '/stylesheets/two2.css?deparr'
105
+ json = nil
106
+ assert_nothing_raised do
107
+ json = JSON.parse(last_response.body)
108
+ end
109
+
110
+ assert json['dependencies'].is_a?(Array)
111
+ assert_equal json['target_type'], 'text/css'
112
+ assert json['dependencies'].include?('/stylesheets/two2.css')
113
+
114
+
115
+ get '/stylesheets/two.css?deparr'
116
+ json = JSON.parse(last_response.body)
117
+
118
+ assert json['dependencies'].is_a?(Array)
119
+ assert_equal json['target_type'], 'text/css'
120
+ assert_equal json['dependencies'], ['/stylesheets/one.css','/stylesheets/two.css']
121
+ end
122
+
123
+ private
124
+
125
+ def is_js?
126
+ assert_equal last_response.content_type, 'application/javascript'
127
+ end
128
+
129
+ def is_css?
130
+ assert_equal last_response.content_type, 'text/css'
131
+ end
132
+
133
+ def has_pre_template(tf = true)
134
+ has_or_not tf, /Handlebars\.registerPartial =/, last_response.body
135
+ end
136
+
137
+ def has_foo_template(tf = true)
138
+ has_or_not tf, /GC\.foo\.t\["foo\/index"\]/, last_response.body
139
+ end
140
+
141
+ def has_bar_template(tf = true)
142
+ has_or_not tf, /GC\.foo\.t\["bar\/index"\]/, last_response.body
143
+ end
144
+
145
+ def has_or_not(tf, *args)
146
+ args.flatten!
147
+ if tf
148
+ assert_match(*args)
149
+ else
150
+ assert_no_match(*args)
151
+ end
152
+ end
153
+
154
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: assette
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 5
10
- version: 0.0.5
9
+ - 6
10
+ version: 0.0.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tal Atlas
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-05-08 00:00:00 -04:00
18
+ date: 2011-06-14 00:00:00 -04:00
19
19
  default_executable: assette
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -198,8 +198,22 @@ dependencies:
198
198
  type: :development
199
199
  requirement: *id012
200
200
  - !ruby/object:Gem::Dependency
201
- name: rack
201
+ name: rack-test
202
202
  version_requirements: &id013 !ruby/object:Gem::Requirement
203
+ none: false
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ hash: 3
208
+ segments:
209
+ - 0
210
+ version: "0"
211
+ prerelease: false
212
+ type: :development
213
+ requirement: *id013
214
+ - !ruby/object:Gem::Dependency
215
+ name: rack
216
+ version_requirements: &id014 !ruby/object:Gem::Requirement
203
217
  none: false
204
218
  requirements:
205
219
  - - ~>
@@ -210,10 +224,10 @@ dependencies:
210
224
  version: "1"
211
225
  prerelease: false
212
226
  type: :runtime
213
- requirement: *id013
227
+ requirement: *id014
214
228
  - !ruby/object:Gem::Dependency
215
229
  name: thor
216
- version_requirements: &id014 !ruby/object:Gem::Requirement
230
+ version_requirements: &id015 !ruby/object:Gem::Requirement
217
231
  none: false
218
232
  requirements:
219
233
  - - ~>
@@ -224,10 +238,10 @@ dependencies:
224
238
  version: "0"
225
239
  prerelease: false
226
240
  type: :runtime
227
- requirement: *id014
241
+ requirement: *id015
228
242
  - !ruby/object:Gem::Dependency
229
243
  name: json
230
- version_requirements: &id015 !ruby/object:Gem::Requirement
244
+ version_requirements: &id016 !ruby/object:Gem::Requirement
231
245
  none: false
232
246
  requirements:
233
247
  - - ">="
@@ -239,10 +253,10 @@ dependencies:
239
253
  version: "1.4"
240
254
  prerelease: false
241
255
  type: :runtime
242
- requirement: *id015
256
+ requirement: *id016
243
257
  - !ruby/object:Gem::Dependency
244
258
  name: sass
245
- version_requirements: &id016 !ruby/object:Gem::Requirement
259
+ version_requirements: &id017 !ruby/object:Gem::Requirement
246
260
  none: false
247
261
  requirements:
248
262
  - - ">="
@@ -254,10 +268,10 @@ dependencies:
254
268
  version: "3.1"
255
269
  prerelease: false
256
270
  type: :runtime
257
- requirement: *id016
271
+ requirement: *id017
258
272
  - !ruby/object:Gem::Dependency
259
273
  name: coffee-script
260
- version_requirements: &id017 !ruby/object:Gem::Requirement
274
+ version_requirements: &id018 !ruby/object:Gem::Requirement
261
275
  none: false
262
276
  requirements:
263
277
  - - ~>
@@ -268,10 +282,10 @@ dependencies:
268
282
  version: "2"
269
283
  prerelease: false
270
284
  type: :runtime
271
- requirement: *id017
285
+ requirement: *id018
272
286
  - !ruby/object:Gem::Dependency
273
287
  name: mime-types
274
- version_requirements: &id018 !ruby/object:Gem::Requirement
288
+ version_requirements: &id019 !ruby/object:Gem::Requirement
275
289
  none: false
276
290
  requirements:
277
291
  - - ">="
@@ -283,7 +297,7 @@ dependencies:
283
297
  version: "1.16"
284
298
  prerelease: false
285
299
  type: :runtime
286
- requirement: *id018
300
+ requirement: *id019
287
301
  description: Renders all asset types (coffeescript/sass/scss) as equals
288
302
  email: me@tal.by
289
303
  executables:
@@ -295,6 +309,7 @@ extra_rdoc_files:
295
309
  - README.rdoc
296
310
  files:
297
311
  - .document
312
+ - .irbrc
298
313
  - .rspec
299
314
  - Gemfile
300
315
  - Gemfile.lock
@@ -305,6 +320,7 @@ files:
305
320
  - assette.gemspec
306
321
  - bin/assette
307
322
  - examples/config/assets.rb
323
+ - examples/myapp/templates/bar/index.html.mustache
308
324
  - examples/myapp/templates/foo/_partial.html.mustache
309
325
  - examples/myapp/templates/foo/index.html.mustache
310
326
  - examples/public/images/test.pdf
@@ -338,14 +354,18 @@ files:
338
354
  - lib/assette/server.rb
339
355
  - lib/assette/template.rb
340
356
  - lib/assette/template_set.rb
357
+ - lib/assette/view_helper.rb
341
358
  - spec/assette_spec.rb
342
359
  - spec/config_spec.rb
343
360
  - spec/file_spec.rb
361
+ - spec/helper_spec.rb
344
362
  - spec/post_processor_spec.rb
345
363
  - spec/reader_spec.rb
346
364
  - spec/server_spec.rb
347
365
  - spec/spec_helper.rb
348
366
  - spec/template_spec.rb
367
+ - test/helper.rb
368
+ - test/test_server.rb
349
369
  has_rdoc: true
350
370
  homepage: http://github.com/Talby/assette
351
371
  licenses:
@@ -385,8 +405,11 @@ test_files:
385
405
  - spec/assette_spec.rb
386
406
  - spec/config_spec.rb
387
407
  - spec/file_spec.rb
408
+ - spec/helper_spec.rb
388
409
  - spec/post_processor_spec.rb
389
410
  - spec/reader_spec.rb
390
411
  - spec/server_spec.rb
391
412
  - spec/spec_helper.rb
392
413
  - spec/template_spec.rb
414
+ - test/helper.rb
415
+ - test/test_server.rb