sprockets-foo 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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