assette 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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