sprockets-foo 0.0.1 → 0.0.2

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.
Files changed (27) hide show
  1. data/Rakefile +1 -0
  2. data/VERSION +1 -1
  3. data/ext/sprockets_with_directives/lib/sprockets.rb +46 -0
  4. data/ext/sprockets_with_directives/lib/sprockets/concatenation.rb +38 -0
  5. data/ext/sprockets_with_directives/lib/sprockets/directive.rb +56 -0
  6. data/ext/sprockets_with_directives/lib/sprockets/directives.rb +15 -0
  7. data/ext/sprockets_with_directives/lib/sprockets/directives/provide_directive.rb +25 -0
  8. data/ext/sprockets_with_directives/lib/sprockets/directives/relative_require_directive.rb +18 -0
  9. data/ext/sprockets_with_directives/lib/sprockets/directives/require_directive.rb +34 -0
  10. data/ext/sprockets_with_directives/lib/sprockets/environment.rb +52 -0
  11. data/ext/sprockets_with_directives/lib/sprockets/error.rb +5 -0
  12. data/ext/sprockets_with_directives/lib/sprockets/pathname.rb +37 -0
  13. data/ext/sprockets_with_directives/lib/sprockets/preprocessor.rb +138 -0
  14. data/ext/sprockets_with_directives/lib/sprockets/secretary.rb +107 -0
  15. data/ext/sprockets_with_directives/lib/sprockets/source_file.rb +32 -0
  16. data/ext/sprockets_with_directives/lib/sprockets/version.rb +9 -0
  17. data/ext/sprockets_with_directives/test/test_concatenation.rb +28 -0
  18. data/ext/sprockets_with_directives/test/test_environment.rb +64 -0
  19. data/ext/sprockets_with_directives/test/test_helper.rb +51 -0
  20. data/ext/sprockets_with_directives/test/test_pathname.rb +43 -0
  21. data/ext/sprockets_with_directives/test/test_preprocessor.rb +107 -0
  22. data/ext/sprockets_with_directives/test/test_secretary.rb +89 -0
  23. data/ext/sprockets_with_directives/test/test_source_file.rb +33 -0
  24. data/ext/sprockets_with_directives/test/test_source_line.rb +89 -0
  25. data/sprockets-foo.gemspec +84 -0
  26. data/test/{test_preprocessor.rb → test_template_directive.rb} +0 -0
  27. metadata +27 -4
data/Rakefile CHANGED
@@ -12,6 +12,7 @@ begin
12
12
  gem.authors = ["Ben Curren"]
13
13
  gem.add_dependency "ejs-rcompiler", ">= 0.1.1"
14
14
  # gem.add_dependency "sprockets", ">= " # use when sprockets directive branch is merged
15
+ Dir.glob('ext/**/*.rb').each { |f| gem.files << f }
15
16
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
17
  end
17
18
  Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
@@ -0,0 +1,46 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
3
+ require "yaml"
4
+ require "fileutils"
5
+
6
+ module Sprockets
7
+ class << self
8
+ def running_on_windows?
9
+ RUBY_PLATFORM =~ /(win|w)32$/
10
+ end
11
+
12
+ def absolute?(location)
13
+ same_when_expanded?(location) || platform_absolute_path?(location)
14
+ end
15
+
16
+ protected
17
+ def same_when_expanded?(location)
18
+ location[0, 1] == File.expand_path(location)[0, 1]
19
+ end
20
+
21
+ def platform_absolute_path?(location)
22
+ false
23
+ end
24
+
25
+ if Sprockets.running_on_windows?
26
+ def platform_absolute_path?(location)
27
+ location[0, 1] == File::SEPARATOR && File.expand_path(location) =~ /[A-Za-z]:[\/\\]/
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ require "sprockets/concatenation"
34
+ require "sprockets/directive"
35
+ require "sprockets/directives"
36
+ require "sprockets/directives/provide_directive"
37
+ require "sprockets/directives/require_directive"
38
+ require "sprockets/directives/relative_require_directive"
39
+ require "sprockets/error"
40
+ require "sprockets/environment"
41
+ require "sprockets/pathname"
42
+ require "sprockets/preprocessor"
43
+ require "sprockets/source_file"
44
+ require "sprockets/secretary"
45
+ require "sprockets/version"
46
+
@@ -0,0 +1,38 @@
1
+ module Sprockets
2
+ class Concatenation
3
+ attr_reader :lines
4
+
5
+ def initialize
6
+ @lines = []
7
+ @source_files_and_numbers = []
8
+ @source_file_mtimes = {}
9
+ end
10
+
11
+ def record(source_file, line, number)
12
+ @lines << line
13
+ @source_files_and_numbers << [source_file, number]
14
+ record_mtime_for(source_file)
15
+ line
16
+ end
17
+
18
+ def to_s
19
+ lines.join
20
+ end
21
+
22
+ def mtime
23
+ @source_file_mtimes.values.max
24
+ end
25
+
26
+ def save_to(filename)
27
+ timestamp = mtime
28
+ File.open(filename, "w") { |file| file.write(to_s) }
29
+ File.utime(timestamp, timestamp, filename)
30
+ true
31
+ end
32
+
33
+ protected
34
+ def record_mtime_for(source_file)
35
+ @source_file_mtimes[source_file] ||= source_file.mtime
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,56 @@
1
+ module Sprockets
2
+ class Directive
3
+ attr_reader :source_file, :line, :number, :name, :argument
4
+
5
+ QUOTED_STRING = /(?:"([^"]+|\\"+)*")/
6
+ ANGLED_STRING = /(?:<([^>]+|\\>+)*>)/
7
+
8
+ class << self
9
+ def for(source_file, line, number)
10
+ if directive_klass = Directives.find(line)
11
+ directive_klass.new(source_file, line, number)
12
+ end
13
+ end
14
+
15
+ def parse(line)
16
+ if matches = full_pattern.match(line)
17
+ matches.captures
18
+ end
19
+ end
20
+
21
+ protected
22
+ def full_pattern
23
+ @full_pattern ||= /\s*\/\/=\s+#{pattern}\s*$/
24
+ end
25
+
26
+ def pattern
27
+ /^$/
28
+ end
29
+ end
30
+
31
+ def initialize(source_file, line, number)
32
+ @source_file = source_file
33
+ @line, @number = line, number
34
+ @name, @argument = self.class.parse(line)
35
+ end
36
+
37
+ protected
38
+ def environment
39
+ source_file.environment
40
+ end
41
+
42
+ def parse_quoted_string(string)
43
+ QUOTED_STRING.match(string)[1].gsub(/\\"/, "\"")
44
+ end
45
+
46
+ def parse_angled_string(string)
47
+ ANGLED_STRING.match(string)[1].gsub(/\\>/, "\>")
48
+ end
49
+
50
+ def raise_load_error
51
+ raise LoadError,
52
+ "can't find file for #{name} `#{require_location}' " +
53
+ "(line #{number} of #{source_file.pathname})"
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,15 @@
1
+ module Sprockets
2
+ module Directives
3
+ def self.find(line)
4
+ directives.find do |directive_klass|
5
+ directive_klass.parse(line)
6
+ end
7
+ end
8
+
9
+ def self.directives
10
+ constants.grep(/Directive$/).map do |directive_name|
11
+ const_get(directive_name)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,25 @@
1
+ module Sprockets
2
+ module Directives
3
+ class ProvideDirective < Directive
4
+ def self.pattern
5
+ /(provide)\s+(#{QUOTED_STRING})/
6
+ end
7
+
8
+ def evaluate_in(preprocessor)
9
+ if asset_path
10
+ preprocessor.provide(asset_path)
11
+ else
12
+ raise_load_error
13
+ end
14
+ end
15
+
16
+ def asset_path
17
+ source_file.find(provide_location, :directory)
18
+ end
19
+
20
+ def provide_location
21
+ parse_quoted_string(argument)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,18 @@
1
+ module Sprockets
2
+ module Directives
3
+ class RelativeRequireDirective < RequireDirective
4
+ def self.pattern
5
+ /(require)\s+(#{QUOTED_STRING})/
6
+ end
7
+
8
+ def require_location
9
+ parse_quoted_string(argument)
10
+ end
11
+
12
+ protected
13
+ def location_finder
14
+ source_file
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,34 @@
1
+ module Sprockets
2
+ module Directives
3
+ class RequireDirective < Directive
4
+ def self.pattern
5
+ /(require)\s+(#{ANGLED_STRING})/
6
+ end
7
+
8
+ def evaluate_in(preprocessor)
9
+ if source_file_path
10
+ preprocessor.require(source_file_path.source_file)
11
+ else
12
+ raise_load_error
13
+ end
14
+ end
15
+
16
+ def source_file_path
17
+ @source_file_path ||= location_finder.find(normalize(require_location))
18
+ end
19
+
20
+ def require_location
21
+ parse_angled_string(argument)
22
+ end
23
+
24
+ protected
25
+ def location_finder
26
+ environment
27
+ end
28
+
29
+ def normalize(location)
30
+ File.join(File.dirname(location), File.basename(location, ".js") + ".js")
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,52 @@
1
+ module Sprockets
2
+ class Environment
3
+ attr_reader :root, :load_path
4
+
5
+ def initialize(root, load_path = [])
6
+ @load_path = [@root = Pathname.new(self, root)]
7
+
8
+ load_path.reverse_each do |location|
9
+ register_load_location(location)
10
+ end
11
+ end
12
+
13
+ def pathname_from(location)
14
+ Pathname.new(self, absolute_location_from(location))
15
+ end
16
+
17
+ def register_load_location(location)
18
+ pathname = pathname_from(location)
19
+ load_path.delete(pathname)
20
+ load_path.unshift(pathname)
21
+ location
22
+ end
23
+
24
+ def find(location)
25
+ if Sprockets.absolute?(location) && File.exists?(location)
26
+ pathname_from(location)
27
+ else
28
+ find_all(location).first
29
+ end
30
+ end
31
+
32
+ def constants(reload = false)
33
+ @constants = nil if reload
34
+ @constants ||= find_all("constants.yml").inject({}) do |constants, pathname|
35
+ contents = YAML.load(pathname.contents) rescue nil
36
+ contents = {} unless contents.is_a?(Hash)
37
+ constants.merge(contents)
38
+ end
39
+ end
40
+
41
+ protected
42
+ def absolute_location_from(location)
43
+ location = location.to_s
44
+ location = File.join(root.absolute_location, location) unless Sprockets.absolute?(location)
45
+ File.expand_path(location)
46
+ end
47
+
48
+ def find_all(location)
49
+ load_path.map { |pathname| pathname.find(location) }.compact
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,5 @@
1
+ module Sprockets
2
+ class Error < ::StandardError; end
3
+ class LoadError < Error; end
4
+ class UndefinedConstantError < Error; end
5
+ end
@@ -0,0 +1,37 @@
1
+ module Sprockets
2
+ class Pathname
3
+ attr_reader :environment, :absolute_location
4
+
5
+ def initialize(environment, absolute_location)
6
+ @environment = environment
7
+ @absolute_location = File.expand_path(absolute_location)
8
+ end
9
+
10
+ # Returns a Pathname for the location relative to this pathname's absolute location.
11
+ def find(location, kind = :file)
12
+ location = File.join(absolute_location, location)
13
+ File.send("#{kind}?", location) ? Pathname.new(environment, location) : nil
14
+ end
15
+
16
+ def parent_pathname
17
+ Pathname.new(environment, File.dirname(absolute_location))
18
+ end
19
+
20
+ def source_file
21
+ SourceFile.new(environment, self)
22
+ end
23
+
24
+ def contents
25
+ IO.read(absolute_location)
26
+ end
27
+
28
+ def ==(pathname)
29
+ environment == pathname.environment &&
30
+ absolute_location == pathname.absolute_location
31
+ end
32
+
33
+ def to_s
34
+ absolute_location
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,138 @@
1
+ module Sprockets
2
+ class Preprocessor
3
+ attr_reader :environment, :concatenation, :source_files, :pdoc_lines, :asset_paths
4
+
5
+ def initialize(environment, options = {})
6
+ @environment = environment
7
+ @concatenation = Concatenation.new
8
+ @source_files = []
9
+ @comment_lines = []
10
+ @pdoc_lines = []
11
+ @asset_paths = []
12
+ @options = options
13
+ end
14
+
15
+ def require(source_file)
16
+ return if source_files.include?(source_file)
17
+ source_files << source_file
18
+
19
+ source_file.each_line do |line, number|
20
+ process(source_file, line, number)
21
+ end
22
+ end
23
+
24
+ def provide(asset_path)
25
+ return if !asset_path || asset_paths.include?(asset_path)
26
+ asset_paths << asset_path
27
+ end
28
+
29
+ protected
30
+ attr_reader :options, :comment_lines
31
+
32
+ def process(source_file, line, number)
33
+ if inside_multi_line_comment?
34
+ comment_lines.push([source_file, line, number])
35
+
36
+ if line_closes_multi_line_pdoc_comment?(line)
37
+ record_comment_lines_as(:pdoc)
38
+ elsif line_closes_multi_line_comment?(line)
39
+ record_comment_lines_as(:source)
40
+ end
41
+
42
+ elsif line_opens_multi_line_pdoc_comment?(line)
43
+ comment_lines.push([source_file, line, number])
44
+
45
+ elsif line_is_single_line_comment?(line)
46
+ if directive = Directive.for(source_file, line, number)
47
+ directive.evaluate_in(self)
48
+ else
49
+ record_single_comment_line(source_file, line, number)
50
+ end
51
+
52
+ else
53
+ record_source_line(source_file, line, number)
54
+ end
55
+
56
+ rescue UndefinedConstantError => constant
57
+ raise UndefinedConstantError,
58
+ "couldn't find constant `#{constant}' in line #{number} of #{source_file.pathname}"
59
+ end
60
+
61
+ private
62
+ def record_source_line(source_file, line, number)
63
+ concatenation.record(source_file, format(line), number)
64
+ end
65
+
66
+ def record_pdoc_line(source_file, line, number)
67
+ pdoc_lines.push([source_file, line, number])
68
+ record_source_line(source_file, line, number) unless stripping_comments?
69
+ end
70
+
71
+ def record_single_comment_line(source_file, line, number)
72
+ record_source_line(source_file, line, number) unless stripping_comments?
73
+ end
74
+
75
+ def record_comment_lines_as(kind)
76
+ comment_lines.each do |comment_line|
77
+ send(:"record_#{kind}_line", *comment_line)
78
+ end
79
+ comment_lines.clear
80
+ end
81
+
82
+ def format(line)
83
+ result = line.chomp
84
+ interpolate_constants!(result, environment.constants)
85
+ strip_trailing_whitespace!(result)
86
+ result << $/
87
+ end
88
+
89
+ def interpolate_constants!(result, constants)
90
+ result.gsub!(/<%=(.*?)%>/) do
91
+ constant = $1.strip
92
+ if value = constants[constant]
93
+ value
94
+ else
95
+ raise UndefinedConstantError, constant
96
+ end
97
+ end
98
+ end
99
+
100
+ def strip_trailing_whitespace!(result)
101
+ result.gsub!(/\s+$/, "")
102
+ end
103
+
104
+ def inside_multi_line_comment?
105
+ comment_lines.any?
106
+ end
107
+
108
+ def line_opens_multi_line_pdoc_comment?(line)
109
+ if rest = line[/^\s*\/\*\*(.*)/, 1]
110
+ !line_closes_multi_line_comment?(rest)
111
+ end
112
+ end
113
+
114
+ def line_closes_multi_line_pdoc_comment?(line)
115
+ line =~ /\*\*\/\s*$/
116
+ end
117
+
118
+ def line_opens_multi_line_comment?(line)
119
+ if rest = line[/^\s*\/\*(.*)/, 1]
120
+ !line_closes_multi_line_comment?(rest)
121
+ end
122
+ end
123
+
124
+ def line_closes_multi_line_comment?(line)
125
+ if rest = line[/\*\/(.*)/, 1]
126
+ !line_opens_multi_line_comment?(rest)
127
+ end
128
+ end
129
+
130
+ def line_is_single_line_comment?(line)
131
+ line =~ /^\s*\/\//
132
+ end
133
+
134
+ def stripping_comments?
135
+ options[:strip_comments] != false
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,107 @@
1
+ module Sprockets
2
+ class Secretary
3
+ DEFAULT_OPTIONS = {
4
+ :root => ".",
5
+ :load_path => [],
6
+ :source_files => [],
7
+ :expand_paths => true,
8
+ :strip_comments => true
9
+ }
10
+
11
+ attr_reader :environment, :preprocessor
12
+
13
+ def initialize(options = {})
14
+ reset!(options)
15
+ end
16
+
17
+ def reset!(options = @options)
18
+ @options = DEFAULT_OPTIONS.merge(options)
19
+ @environment = Sprockets::Environment.new(@options[:root])
20
+ @preprocessor = Sprockets::Preprocessor.new(@environment, :strip_comments => @options[:strip_comments])
21
+
22
+ add_load_locations(@options[:load_path])
23
+ add_source_files(@options[:source_files])
24
+ end
25
+
26
+ def add_load_location(load_location, options = {})
27
+ add_load_locations([load_location], options)
28
+ end
29
+
30
+ def add_load_locations(load_locations, options = {})
31
+ expand_paths(load_locations, options).each do |load_location|
32
+ environment.register_load_location(load_location)
33
+ end
34
+ end
35
+
36
+ def add_source_file(source_file, options = {})
37
+ add_source_files([source_file], options)
38
+ end
39
+
40
+ def add_source_files(source_files, options = {})
41
+ expand_paths(source_files, options).each do |source_file|
42
+ if pathname = environment.find(source_file)
43
+ preprocessor.require(pathname.source_file)
44
+ else
45
+ raise Sprockets::LoadError, "no such file `#{source_file}'"
46
+ end
47
+ end
48
+ end
49
+
50
+ def concatenation
51
+ preprocessor.concatenation
52
+ end
53
+
54
+ def install_assets
55
+ if @options[:asset_root]
56
+ preprocessor.asset_paths.each do |asset_path|
57
+ copy_assets_from(asset_path.absolute_location)
58
+ end
59
+ end
60
+ end
61
+
62
+ def source_last_modified
63
+ preprocessor.source_files.map { |s| s.mtime }.max
64
+ end
65
+
66
+ protected
67
+ def expand_paths(paths, options = {})
68
+ if options.has_key?(:expand_paths) ? options[:expand_paths] : @options[:expand_paths]
69
+ paths.map { |path| Dir[from_root(path)].sort }.flatten.compact
70
+ else
71
+ paths.map { |path| from_root(path) }
72
+ end
73
+ end
74
+
75
+ def from_root(path)
76
+ if Sprockets.absolute?(path)
77
+ path
78
+ else
79
+ File.join(@options[:root], path)
80
+ end
81
+ end
82
+
83
+ def copy_assets_from(asset_path)
84
+ relative_file_paths_beneath(asset_path).each do |filename|
85
+ source, destination = File.join(asset_path, filename), File.join(asset_root, File.dirname(filename))
86
+ if !File.directory?(source)
87
+ FileUtils.mkdir_p(destination)
88
+ FileUtils.cp(source, destination)
89
+ end
90
+ end
91
+ end
92
+
93
+ def relative_file_paths_beneath(path)
94
+ Dir[File.join(path, "**", "*")].map do |filename|
95
+ File.join(*path_pieces(filename)[path_pieces(path).length..-1])
96
+ end
97
+ end
98
+
99
+ def asset_root
100
+ from_root(@options[:asset_root])
101
+ end
102
+
103
+ def path_pieces(path)
104
+ path.split(File::SEPARATOR)
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,32 @@
1
+ module Sprockets
2
+ class SourceFile
3
+ attr_reader :environment, :pathname
4
+
5
+ def initialize(environment, pathname)
6
+ @environment = environment
7
+ @pathname = pathname
8
+ end
9
+
10
+ def find(location, kind = :file)
11
+ pathname.parent_pathname.find(location, kind)
12
+ end
13
+
14
+ def ==(source_file)
15
+ pathname == source_file.pathname
16
+ end
17
+
18
+ def mtime
19
+ File.mtime(pathname.absolute_location)
20
+ rescue Errno::ENOENT
21
+ Time.now
22
+ end
23
+
24
+ def each_line
25
+ File.open(pathname.absolute_location) do |file|
26
+ file.each_line do |line|
27
+ yield line, file.lineno
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,9 @@
1
+ module Sprockets
2
+ module Version
3
+ MAJOR = 1
4
+ MINOR = 0
5
+ TINY = 2
6
+
7
+ STRING = [MAJOR, MINOR, TINY].join(".")
8
+ end
9
+ end
@@ -0,0 +1,28 @@
1
+ require "test_helper"
2
+
3
+ class ConcatenationTest < Test::Unit::TestCase
4
+ def setup
5
+ @concatenation = Sprockets::Concatenation.new
6
+ @environment = environment_for_fixtures
7
+ end
8
+
9
+ def test_record
10
+ assert_equal [], @concatenation.lines
11
+ assert_equal "hello\n", @concatenation.record(source_file, "hello\n", 1).to_s
12
+ assert_equal "world\n", @concatenation.record(source_file, "world\n", 2).to_s
13
+ assert_equal ["hello\n", "world\n"], @concatenation.lines
14
+ end
15
+
16
+ def test_to_s
17
+ @concatenation.record(source_file, "hello\n", 1)
18
+ @concatenation.record(source_file, "world\n", 2)
19
+ assert_equal "hello\nworld\n", @concatenation.to_s
20
+ end
21
+
22
+ def test_save_to
23
+ filename = File.join(FIXTURES_PATH, "output.js")
24
+ @concatenation.save_to(filename)
25
+ assert_equal @concatenation.to_s, IO.read(filename)
26
+ File.unlink(filename)
27
+ end
28
+ end
@@ -0,0 +1,64 @@
1
+ require "test_helper"
2
+
3
+ class EnvironmentTest < Test::Unit::TestCase
4
+ def test_load_path_locations_become_pathnames_for_absolute_locations_from_the_root
5
+ environment = Sprockets::Environment.new("/root", ["/a", "b"])
6
+ assert_load_path_equals ["/a", "/root/b", "/root"], environment
7
+ end
8
+
9
+ def test_pathname_from_for_location_with_leading_slash_should_return_a_pathname_with_the_location_unchanged
10
+ environment = Sprockets::Environment.new("/root")
11
+ assert_absolute_location "/a", environment.pathname_from("/a")
12
+ end
13
+
14
+ def test_pathname_from_for_relative_location_should_return_a_pathname_for_the_expanded_absolute_location_from_root
15
+ environment = Sprockets::Environment.new("/root")
16
+ assert_absolute_location "/root/a", environment.pathname_from("a")
17
+ assert_absolute_location "/root/a", environment.pathname_from("./a")
18
+ assert_absolute_location "/a", environment.pathname_from("../a")
19
+ end
20
+
21
+ def test_register_load_location_should_unshift_the_location_onto_the_load_path
22
+ environment = Sprockets::Environment.new("/root")
23
+ environment.register_load_location("a")
24
+ assert_load_path_equals ["/root/a", "/root"], environment
25
+ environment.register_load_location("b")
26
+ assert_load_path_equals ["/root/b", "/root/a", "/root"], environment
27
+ end
28
+
29
+ def test_register_load_location_should_remove_already_existing_locations_before_unshifting
30
+ environment = Sprockets::Environment.new("/root")
31
+ environment.register_load_location("a")
32
+ environment.register_load_location("b")
33
+ assert_load_path_equals ["/root/b", "/root/a", "/root"], environment
34
+ environment.register_load_location("a")
35
+ assert_load_path_equals ["/root/a", "/root/b", "/root"], environment
36
+ end
37
+
38
+ def test_find_should_return_the_first_matching_pathname_in_the_load_path
39
+ environment = environment_for_fixtures
40
+ first_pathname = environment.find("foo.js")
41
+ assert_absolute_location_ends_with "src/foo.js", first_pathname
42
+
43
+ environment.register_load_location(File.join(FIXTURES_PATH, "src", "foo"))
44
+ second_pathname = environment.find("foo.js")
45
+ assert_not_equal first_pathname, second_pathname
46
+ assert_absolute_location_ends_with "foo/foo.js", second_pathname
47
+ end
48
+
49
+ def test_find_should_return_nil_when_no_matching_source_file_is_found
50
+ environment = environment_for_fixtures
51
+ assert_nil environment.find("nonexistent.js")
52
+ end
53
+
54
+ def test_constants_should_return_a_hash_of_all_constants_defined_in_the_load_path
55
+ constants = environment_for_fixtures.constants
56
+ assert_kind_of Hash, constants
57
+ assert_equal %w(HELLO ONE TWO VERSION), constants.keys.sort
58
+ end
59
+
60
+ protected
61
+ def assert_load_path_equals(load_path_absolute_locations, environment)
62
+ assert load_path_absolute_locations.zip(environment.load_path).map { |location, pathname| File.expand_path(location) == pathname.absolute_location }.all?
63
+ end
64
+ end
@@ -0,0 +1,51 @@
1
+ require File.join(File.dirname(__FILE__), *%w".. lib sprockets")
2
+ require "test/unit"
3
+ require "fileutils"
4
+ require "tmpdir"
5
+
6
+ class Test::Unit::TestCase
7
+ FIXTURES_PATH = File.expand_path(File.join(File.dirname(__FILE__), "fixtures")) unless defined?(FIXTURES_PATH)
8
+
9
+ protected
10
+ def location_for_fixture(fixture)
11
+ File.join(FIXTURES_PATH, fixture)
12
+ end
13
+
14
+ def content_of_fixture(fixture)
15
+ IO.read(location_for_fixture(fixture))
16
+ end
17
+
18
+ def environment_for_fixtures
19
+ Sprockets::Environment.new(FIXTURES_PATH, source_directories_in_fixtures_path)
20
+ end
21
+
22
+ def source_directories_in_fixtures_path
23
+ Dir[File.join(FIXTURES_PATH, "**", "src")]
24
+ end
25
+
26
+ def assert_absolute_location(location, pathname)
27
+ assert_equal File.expand_path(location), pathname.absolute_location
28
+ end
29
+
30
+ def assert_absolute_location_ends_with(location_ending, pathname)
31
+ assert pathname.absolute_location[/#{Regexp.escape(location_ending)}$/]
32
+ end
33
+
34
+ def pathname(location, environment = @environment)
35
+ Sprockets::Pathname.new(environment, File.join(FIXTURES_PATH, location))
36
+ end
37
+
38
+ def source_file(location = "dummy", environment = @environment)
39
+ Sprockets::SourceFile.new(environment, pathname(location, environment))
40
+ end
41
+
42
+ def with_temporary_directory
43
+ path = File.join(Dir.tmpdir, [caller[0][/`(.*)'/, 1], Time.now.to_f].join("_"))
44
+ begin
45
+ FileUtils.mkdir(path)
46
+ yield path
47
+ ensure
48
+ FileUtils.rm_rf(path)
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,43 @@
1
+ require "test_helper"
2
+
3
+ class PathnameTest < Test::Unit::TestCase
4
+ def setup
5
+ @environment = environment_for_fixtures
6
+ end
7
+
8
+ def test_absolute_location_is_automatically_expanded
9
+ expanded_location = File.expand_path(File.join(FIXTURES_PATH, "foo"))
10
+ assert_absolute_location expanded_location, pathname("foo")
11
+ assert_absolute_location expanded_location, pathname("./foo")
12
+ assert_absolute_location expanded_location, pathname("./foo/../foo")
13
+ end
14
+
15
+ def test_find_should_return_a_pathname_for_the_location_relative_to_the_absolute_location_of_the_pathname
16
+ assert_absolute_location_ends_with "src/foo/bar.js", pathname("src/foo").find("bar.js")
17
+ end
18
+
19
+ def test_find_should_return_nil_when_the_location_relative_to_the_absolute_location_of_the_pathname_is_not_a_file_or_does_not_exist
20
+ assert_nil pathname("src/foo").find("nonexistent.js")
21
+ end
22
+
23
+ def test_parent_pathname_should_return_a_pathname_for_the_parent_directory
24
+ assert_absolute_location_ends_with "src", pathname("src/foo").parent_pathname
25
+ assert_absolute_location_ends_with "foo", pathname("src/foo/foo.js").parent_pathname
26
+ end
27
+
28
+ def test_source_file_should_return_a_source_file_for_the_pathname
29
+ source_file = pathname("src/foo.js").source_file
30
+ assert_kind_of Sprockets::SourceFile, source_file
31
+ assert_equal pathname("src/foo.js"), source_file.pathname
32
+ end
33
+
34
+ def test_equality_of_pathnames
35
+ assert_equal pathname("src/foo.js"), pathname("src/foo.js")
36
+ assert_equal pathname("src/foo.js"), pathname("src/foo/../foo.js")
37
+ assert_not_equal pathname("src/foo.js"), pathname("src/foo/foo.js")
38
+ end
39
+
40
+ def test_to_s_should_return_absolute_location
41
+ assert_equal pathname("src/foo.js").to_s, pathname("src/foo.js").absolute_location
42
+ end
43
+ end
@@ -0,0 +1,107 @@
1
+ require "test_helper"
2
+
3
+ class PreprocessorTest < Test::Unit::TestCase
4
+ def setup
5
+ @environment = environment_for_fixtures
6
+ @preprocessor = Sprockets::Preprocessor.new(@environment)
7
+ end
8
+
9
+ def test_double_slash_comments_that_are_not_requires_should_be_removed_by_default
10
+ require_file_for_this_test
11
+ assert_concatenation_does_not_contain_line "// This is a double-slash comment that should not appear in the resulting output file."
12
+ assert_concatenation_contains_line "/* This is a slash-star comment that should not appear in the resulting output file. */"
13
+ end
14
+
15
+ def test_double_slash_comments_that_are_not_requires_should_be_ignored_when_strip_comments_is_false
16
+ @preprocessor = Sprockets::Preprocessor.new(@environment, :strip_comments => false)
17
+ require_file_for_this_test
18
+ assert_concatenation_contains_line "// This is a double-slash comment that should appear in the resulting output file."
19
+ assert_concatenation_contains_line "/* This is a slash-star comment that should appear in the resulting output file. */"
20
+
21
+ assert_concatenation_contains_line "/* This is multiline slash-star comment"
22
+ assert_concatenation_contains_line "* that should appear in the resulting"
23
+ assert_concatenation_contains_line "* output file */"
24
+
25
+ assert_concatenation_contains_line "This is not a PDoc comment that should appear in the resulting output file."
26
+ end
27
+
28
+ def test_multiline_comments_should_be_removed_by_default
29
+ require_file_for_this_test
30
+ assert_concatenation_does_not_contain_line "/**"
31
+ assert_concatenation_does_not_contain_line " * This is a PDoc comment"
32
+ assert_concatenation_does_not_contain_line " * that should appear in the resulting output file."
33
+ assert_concatenation_does_not_contain_line "**/"
34
+ end
35
+
36
+ def test_requiring_a_single_file_should_replace_the_require_comment_with_the_file_contents
37
+ require_file_for_this_test
38
+ assert_concatenation_contains <<-LINES
39
+ var before_require;
40
+ var Foo = { };
41
+ var after_require;
42
+ LINES
43
+ end
44
+
45
+ def test_requiring_a_file_that_does_not_exist_should_raise_an_error
46
+ assert_raises(Sprockets::LoadError) do
47
+ require_file_for_this_test
48
+ end
49
+ end
50
+
51
+ def test_requiring_the_current_file_should_do_nothing
52
+ require_file_for_this_test
53
+ assert_equal "", output_text
54
+ end
55
+
56
+ def test_requiring_a_file_after_it_has_already_been_required_should_do_nothing
57
+ require_file_for_this_test
58
+ assert_concatenation_contains <<-LINES
59
+ var before_first_require;
60
+ var Foo = { };
61
+ var after_first_require_and_before_second_require;
62
+ var after_second_require;
63
+ LINES
64
+ end
65
+
66
+ protected
67
+ attr_reader :environment, :preprocessor
68
+
69
+ def concatenation
70
+ preprocessor.concatenation
71
+ end
72
+
73
+ def output_text
74
+ preprocessor.concatenation.to_s
75
+ end
76
+
77
+ def source_lines_matching(line)
78
+ concatenation.lines.select { |l| l.strip == line }
79
+ end
80
+
81
+ def require_file(location)
82
+ preprocessor.require(environment.find(location).source_file)
83
+ end
84
+
85
+ def require_file_for_this_test
86
+ require_file(file_for_this_test)
87
+ end
88
+
89
+ def file_for_this_test
90
+ caller.map { |c| c[/`(.*?)'$/, 1] }.grep(/^test_/).first[5..-1] + ".js"
91
+ end
92
+
93
+ def assert_concatenation_does_not_contain_line(line)
94
+ assert source_lines_matching(line).empty?, "Expected #{line.inspect} not to exist"
95
+ end
96
+
97
+ def assert_concatenation_contains_line(line)
98
+ assert source_lines_matching(line).any?, "Expected #{line.inspect} to exist"
99
+ end
100
+
101
+ def assert_concatenation_contains(indented_text)
102
+ lines = indented_text.split($/)
103
+ initial_indent = lines.first[/^\s*/].length
104
+ unindented_text = lines.map { |line| line[initial_indent..-1] }.join($/)
105
+ assert output_text[unindented_text]
106
+ end
107
+ end
@@ -0,0 +1,89 @@
1
+ require "test_helper"
2
+
3
+ class SecretaryTest < Test::Unit::TestCase
4
+ def test_load_locations_are_not_expanded_when_expand_paths_is_false
5
+ secretary = Sprockets::Secretary.new(:root => FIXTURES_PATH)
6
+ secretary.add_load_location("src/**/", :expand_paths => false)
7
+
8
+ assert_equal [File.join(FIXTURES_PATH, "src/**"), FIXTURES_PATH],
9
+ secretary.environment.load_path.map { |pathname| pathname.absolute_location }
10
+ end
11
+
12
+ def test_load_locations_are_expanded_when_expand_paths_is_true
13
+ secretary = Sprockets::Secretary.new(:root => FIXTURES_PATH)
14
+ secretary.add_load_location("src/**/", :expand_paths => true)
15
+
16
+ assert_equal [File.join(FIXTURES_PATH, "src", "foo"), File.join(FIXTURES_PATH, "src"), FIXTURES_PATH],
17
+ secretary.environment.load_path.map { |pathname| pathname.absolute_location }
18
+ end
19
+
20
+ def test_source_files_are_not_expanded_when_expand_paths_is_false
21
+ secretary = Sprockets::Secretary.new(:root => FIXTURES_PATH)
22
+ assert_raises(Sprockets::LoadError) do
23
+ secretary.add_source_file("src/f*.js", :expand_paths => false)
24
+ end
25
+ end
26
+
27
+ def test_source_files_are_expanded_when_expand_paths_is_true
28
+ secretary = Sprockets::Secretary.new(:root => FIXTURES_PATH)
29
+ secretary.add_source_file("src/f*.js", :expand_paths => true)
30
+
31
+ assert_equal [File.join(FIXTURES_PATH, "src", "foo.js")],
32
+ secretary.preprocessor.source_files.map { |source_file| source_file.pathname.absolute_location }
33
+ end
34
+
35
+ def test_install_assets_into_empty_directory
36
+ with_temporary_directory do |temp|
37
+ secretary = Sprockets::Secretary.new(:root => FIXTURES_PATH, :asset_root => temp)
38
+ secretary.add_source_file("src/script_with_assets.js")
39
+
40
+ assert_equal [], Dir[File.join(temp, "**", "*")]
41
+ secretary.install_assets
42
+ assert_equal paths_relative_to(temp,
43
+ "images", "images/script_with_assets", "images/script_with_assets/one.png",
44
+ "images/script_with_assets/two.png", "stylesheets", "stylesheets/script_with_assets.css"),
45
+ Dir[File.join(temp, "**", "*")].sort
46
+ end
47
+ end
48
+
49
+ def test_install_assets_into_nonexistent_directory
50
+ with_temporary_directory do |temp|
51
+ temp = File.join(temp, "assets")
52
+ secretary = Sprockets::Secretary.new(:root => FIXTURES_PATH, :asset_root => temp)
53
+ secretary.add_source_file("src/script_with_assets.js")
54
+
55
+ assert_equal [], Dir[File.join(temp, "**", "*")]
56
+ secretary.install_assets
57
+ assert_equal paths_relative_to(temp,
58
+ "images", "images/script_with_assets", "images/script_with_assets/one.png",
59
+ "images/script_with_assets/two.png", "stylesheets", "stylesheets/script_with_assets.css"),
60
+ Dir[File.join(temp, "**", "*")].sort
61
+ end
62
+ end
63
+
64
+ def test_install_assets_into_subdirectories_that_already_exist
65
+ with_temporary_directory do |temp|
66
+ secretary = Sprockets::Secretary.new(:root => FIXTURES_PATH, :asset_root => temp)
67
+ secretary.add_source_file("src/script_with_assets.js")
68
+
69
+ FileUtils.mkdir_p(File.join(temp, "images", "script_with_assets"))
70
+ assert_equal paths_relative_to(temp, "images", "images/script_with_assets"), Dir[File.join(temp, "**", "*")]
71
+ secretary.install_assets
72
+ assert_equal paths_relative_to(temp,
73
+ "images", "images/script_with_assets", "images/script_with_assets/one.png",
74
+ "images/script_with_assets/two.png", "stylesheets", "stylesheets/script_with_assets.css"),
75
+ Dir[File.join(temp, "**", "*")].sort
76
+ end
77
+ end
78
+
79
+ def test_secretary_passes_strip_comments_option_through_to_preprocessor
80
+ secretary = Sprockets::Secretary.new(:root => FIXTURES_PATH, :strip_comments => false)
81
+ secretary.add_source_file("src/script_with_comments.js")
82
+ assert_equal content_of_fixture("src/script_with_comments.js"), secretary.concatenation.to_s
83
+ end
84
+
85
+ protected
86
+ def paths_relative_to(root, *paths)
87
+ paths.map { |path| File.join(root, path) }
88
+ end
89
+ end
@@ -0,0 +1,33 @@
1
+ require "test_helper"
2
+
3
+ class SourceFileTest < Test::Unit::TestCase
4
+ def setup
5
+ @environment = environment_for_fixtures
6
+ end
7
+
8
+ def test_each_line
9
+ source_file_lines = []
10
+ source_file("src/foo/bar.js").each_line {|line, number| source_file_lines << line }
11
+ assert_equal content_of_fixture("src/foo/bar.js"), source_file_lines.join
12
+ assert_equal 4, source_file_lines.length
13
+ end
14
+
15
+ def test_find_should_return_pathname_for_file_relative_to_the_current_pathname
16
+ assert_absolute_location_ends_with "test/fixtures/src/foo/bar.js", source_file("src/foo/foo.js").find("bar.js")
17
+ end
18
+
19
+ def test_find_should_return_nil_for_nonexistent_file
20
+ assert_nil source_file("src/foo/foo.js").find("nonexistent.js")
21
+ end
22
+
23
+ def test_equality_of_source_files
24
+ assert_equal source_file("src/foo/foo.js"), source_file("src/foo/foo.js")
25
+ assert_equal source_file("src/foo/foo.js"), source_file("src/foo/../foo/foo.js")
26
+ assert_not_equal source_file("src/foo/foo.js"), source_file("src/foo.js")
27
+ assert_not_equal source_file("src/foo/foo.js"), source_file("src/foo/bar.js")
28
+ end
29
+
30
+ def test_mtime_should_return_now_if_file_does_not_exist
31
+ assert source_file("src/foo/nonexistent.js").mtime.instance_of?(Time)
32
+ end
33
+ end
@@ -0,0 +1,89 @@
1
+ require "test_helper"
2
+
3
+ class SourceLineTest # < Test::Unit::TestCase
4
+ def test_line_that_begins_with_double_slash_should_be_a_comment
5
+ assert source_line("//").comment?
6
+ assert source_line("//test").comment?
7
+ assert source_line("//= require").comment?
8
+ assert source_line("//= require <foo>").comment?
9
+ assert source_line(" //").comment?
10
+ assert source_line("\t//").comment?
11
+ end
12
+
13
+ def test_line_that_begins_a_multiline_comment
14
+ assert source_line(" /*").begins_multiline_comment?
15
+ assert source_line(" /**").begins_multiline_comment?
16
+ end
17
+
18
+ def test_line_that_begins_a_pdoc_comment
19
+ assert !source_line(" /*").begins_pdoc_comment?
20
+ assert source_line(" /**").begins_pdoc_comment?
21
+ end
22
+
23
+ def test_line_that_ends_a_multiline_comment
24
+ assert source_line(" */").ends_multiline_comment?
25
+ assert source_line(" **/").ends_multiline_comment?
26
+ end
27
+
28
+ def test_line_that_ends_a_pdoc_comment
29
+ assert !source_line(" */").ends_pdoc_comment?
30
+ assert source_line(" **/").ends_pdoc_comment?
31
+ end
32
+
33
+ def test_line_that_contains_but_does_not_begin_with_double_slash_should_not_be_a_comment
34
+ assert !source_line("f //").comment?
35
+ assert !source_line("f //= require <foo>").comment?
36
+ end
37
+
38
+ def test_comment_should_be_extracted_from_comment_lines
39
+ assert_equal "test", source_line("//test").comment
40
+ assert_equal " test", source_line("// test").comment
41
+ assert_equal nil, source_line("f //test").comment
42
+ end
43
+
44
+ def test_line_that_contains_require_comment_should_be_a_require
45
+ assert source_line("//= require <foo>").require?
46
+ assert !source_line("//= require<foo>").require?
47
+ assert source_line("//= require \"foo\"").require?
48
+ assert !source_line("//= require <foo> f").require?
49
+ end
50
+
51
+ def test_require_should_be_extracted_from_require_lines
52
+ assert_nil source_line("//= require").require
53
+ assert_equal "<foo>", source_line("//= require <foo>").require
54
+ assert_equal "<foo>", source_line("//= require <foo> ").require
55
+ assert_equal "\"foo\"", source_line("//= require \"foo\"").require
56
+ end
57
+
58
+ def test_line_that_contains_a_provide_comment_should_be_a_provide
59
+ assert source_line("//= provide \"../assets\"").provide?
60
+ assert !source_line("//= provide").provide?
61
+ assert !source_line("//= provide <../assets>").provide?
62
+ end
63
+
64
+ def test_provide_should_be_extracted_from_provide_lines
65
+ assert_nil source_line("//= provide").provide
66
+ assert_equal "../assets", source_line("//= provide \"../assets\"").provide
67
+ end
68
+
69
+ def test_inspect_should_include_source_file_location_and_line_number
70
+ environment = environment_for_fixtures
71
+ pathname = Sprockets::Pathname.new(environment, "/a/b/c.js")
72
+ source_file = Sprockets::SourceFile.new(environment, pathname)
73
+ assert_equal "line 25 of #{File.expand_path("/a/b/c.js")}", source_line("hello", source_file, 25).inspect
74
+ end
75
+
76
+ def test_interpolation_of_constants
77
+ assert_equal %(var VERSION = "1.0";\n), source_line('var VERSION = "<%= VERSION %>";').to_s("VERSION" => "1.0")
78
+ end
79
+
80
+ def test_interpolation_of_missing_constant_raises_undefined_constant_error
81
+ assert_raises(Sprockets::UndefinedConstantError) do
82
+ source_line('<%= NONEXISTENT %>').to_s("VERSION" => "1.0")
83
+ end
84
+ end
85
+
86
+ def test_to_s_should_strip_trailing_whitespace_before_adding_line_ending
87
+ assert_equal "hello();\n", source_line("hello(); \t \r\n").to_s({})
88
+ end
89
+ end
@@ -0,0 +1,84 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{sprockets-foo}
8
+ s.version = "0.0.2"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Ben Curren"]
12
+ s.date = %q{2010-09-27}
13
+ s.description = %q{Enhancements for sprockets including templating support with ejs.}
14
+ s.email = %q{ben@outright.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".gitignore",
22
+ ".gitmodules",
23
+ "LICENSE",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "ext/sprockets_with_directives/lib/sprockets.rb",
28
+ "ext/sprockets_with_directives/lib/sprockets/concatenation.rb",
29
+ "ext/sprockets_with_directives/lib/sprockets/directive.rb",
30
+ "ext/sprockets_with_directives/lib/sprockets/directives.rb",
31
+ "ext/sprockets_with_directives/lib/sprockets/directives/provide_directive.rb",
32
+ "ext/sprockets_with_directives/lib/sprockets/directives/relative_require_directive.rb",
33
+ "ext/sprockets_with_directives/lib/sprockets/directives/require_directive.rb",
34
+ "ext/sprockets_with_directives/lib/sprockets/environment.rb",
35
+ "ext/sprockets_with_directives/lib/sprockets/error.rb",
36
+ "ext/sprockets_with_directives/lib/sprockets/pathname.rb",
37
+ "ext/sprockets_with_directives/lib/sprockets/preprocessor.rb",
38
+ "ext/sprockets_with_directives/lib/sprockets/secretary.rb",
39
+ "ext/sprockets_with_directives/lib/sprockets/source_file.rb",
40
+ "ext/sprockets_with_directives/lib/sprockets/version.rb",
41
+ "ext/sprockets_with_directives/test/test_concatenation.rb",
42
+ "ext/sprockets_with_directives/test/test_environment.rb",
43
+ "ext/sprockets_with_directives/test/test_helper.rb",
44
+ "ext/sprockets_with_directives/test/test_pathname.rb",
45
+ "ext/sprockets_with_directives/test/test_preprocessor.rb",
46
+ "ext/sprockets_with_directives/test/test_secretary.rb",
47
+ "ext/sprockets_with_directives/test/test_source_file.rb",
48
+ "ext/sprockets_with_directives/test/test_source_line.rb",
49
+ "lib/sprockets-foo.rb",
50
+ "lib/sprockets/directives/template_directive.rb",
51
+ "sprockets-foo.gemspec",
52
+ "test/fixtures/requiring_a_template_should_compile_then_require.js",
53
+ "test/fixtures/requiring_a_template_with_namespace_should_compile_then_require.js",
54
+ "test/fixtures/src/MyTemplate.ejs",
55
+ "test/fixtures/src/MyTemplate.js",
56
+ "test/fixtures/src/or/ui/MyNamespacedTemplate.ejs",
57
+ "test/fixtures/src/or/ui/MyNamespacedTemplate.js",
58
+ "test/test_helper.rb",
59
+ "test/test_template_directive.rb"
60
+ ]
61
+ s.homepage = %q{http://github.com/bcurren/sprockets-foo}
62
+ s.rdoc_options = ["--charset=UTF-8"]
63
+ s.require_paths = ["lib"]
64
+ s.rubygems_version = %q{1.3.6}
65
+ s.summary = %q{Enhancements for sprockets including templating support with ejs.}
66
+ s.test_files = [
67
+ "test/test_helper.rb",
68
+ "test/test_template_directive.rb"
69
+ ]
70
+
71
+ if s.respond_to? :specification_version then
72
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
73
+ s.specification_version = 3
74
+
75
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
76
+ s.add_runtime_dependency(%q<ejs-rcompiler>, [">= 0.1.1"])
77
+ else
78
+ s.add_dependency(%q<ejs-rcompiler>, [">= 0.1.1"])
79
+ end
80
+ else
81
+ s.add_dependency(%q<ejs-rcompiler>, [">= 0.1.1"])
82
+ end
83
+ end
84
+
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Ben Curren
@@ -48,8 +48,31 @@ files:
48
48
  - README.rdoc
49
49
  - Rakefile
50
50
  - VERSION
51
+ - ext/sprockets_with_directives/lib/sprockets.rb
52
+ - ext/sprockets_with_directives/lib/sprockets/concatenation.rb
53
+ - ext/sprockets_with_directives/lib/sprockets/directive.rb
54
+ - ext/sprockets_with_directives/lib/sprockets/directives.rb
55
+ - ext/sprockets_with_directives/lib/sprockets/directives/provide_directive.rb
56
+ - ext/sprockets_with_directives/lib/sprockets/directives/relative_require_directive.rb
57
+ - ext/sprockets_with_directives/lib/sprockets/directives/require_directive.rb
58
+ - ext/sprockets_with_directives/lib/sprockets/environment.rb
59
+ - ext/sprockets_with_directives/lib/sprockets/error.rb
60
+ - ext/sprockets_with_directives/lib/sprockets/pathname.rb
61
+ - ext/sprockets_with_directives/lib/sprockets/preprocessor.rb
62
+ - ext/sprockets_with_directives/lib/sprockets/secretary.rb
63
+ - ext/sprockets_with_directives/lib/sprockets/source_file.rb
64
+ - ext/sprockets_with_directives/lib/sprockets/version.rb
65
+ - ext/sprockets_with_directives/test/test_concatenation.rb
66
+ - ext/sprockets_with_directives/test/test_environment.rb
67
+ - ext/sprockets_with_directives/test/test_helper.rb
68
+ - ext/sprockets_with_directives/test/test_pathname.rb
69
+ - ext/sprockets_with_directives/test/test_preprocessor.rb
70
+ - ext/sprockets_with_directives/test/test_secretary.rb
71
+ - ext/sprockets_with_directives/test/test_source_file.rb
72
+ - ext/sprockets_with_directives/test/test_source_line.rb
51
73
  - lib/sprockets-foo.rb
52
74
  - lib/sprockets/directives/template_directive.rb
75
+ - sprockets-foo.gemspec
53
76
  - test/fixtures/requiring_a_template_should_compile_then_require.js
54
77
  - test/fixtures/requiring_a_template_with_namespace_should_compile_then_require.js
55
78
  - test/fixtures/src/MyTemplate.ejs
@@ -57,7 +80,7 @@ files:
57
80
  - test/fixtures/src/or/ui/MyNamespacedTemplate.ejs
58
81
  - test/fixtures/src/or/ui/MyNamespacedTemplate.js
59
82
  - test/test_helper.rb
60
- - test/test_preprocessor.rb
83
+ - test/test_template_directive.rb
61
84
  has_rdoc: true
62
85
  homepage: http://github.com/bcurren/sprockets-foo
63
86
  licenses: []
@@ -90,4 +113,4 @@ specification_version: 3
90
113
  summary: Enhancements for sprockets including templating support with ejs.
91
114
  test_files:
92
115
  - test/test_helper.rb
93
- - test/test_preprocessor.rb
116
+ - test/test_template_directive.rb