sass-archive-importer 1.0.0.beta.2 → 1.0.0.beta.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3fb28da4710afdafc69011ba433ab7526160a97e
4
- data.tar.gz: fd5c4f71be7c2dccb8f1d1c8db7c54aa99a6de01
3
+ metadata.gz: 1c0c4de769bbc705e7197d64484bba78ba8098e5
4
+ data.tar.gz: e0c329a73043ac55bff9959d583cfe85622597da
5
5
  SHA512:
6
- metadata.gz: 9cb13cae43ea0c1af4bc8d214235dc1ca8cfe69bade30b3e2454fa1f4317a4ca4a1b829d9605245d0ec586cc2d9cbafb989b293653c8c950cd82efdb8bafd723
7
- data.tar.gz: 037103b6428ebccc39ca058ae9fe0eb46ea41aa7b07e4abfa65e565b8f4b61cdcba7000866954553f6d1a25c1e17d2454644600c8fa03753499216f0f4d58372
6
+ metadata.gz: de5fc2052f4fec4c70ccf40084b01916f9148f129dea8dba3e64ec8906996a01e6cc4bd4d0870fc459d3c26ab9e555a96d03753ae4b3642f7e0585797921a749
7
+ data.tar.gz: 80b8e6457dbdae079bbba09b83e6cea16d72935431768a3b3f40ac25ada2e049d89d6c5e710dff21bd177e81eec65319c699449dd11213c524c0b964c5af85d0
data/.gitignore CHANGED
@@ -1,3 +1,6 @@
1
1
  *.gem
2
2
  test/fixtures/jarred_files.jar
3
3
  test/fixtures/zipped_files.zip
4
+ .bundle
5
+ test/fixtures/class_loader_importer_test.jar
6
+ test/fixtures/tmpjava
data/Gemfile.lock CHANGED
@@ -1,18 +1,19 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sass-archive-importer (1.0.0.beta.1)
4
+ sass-archive-importer (1.0.0.beta.2)
5
5
  rubyzip (~> 0.9.9)
6
- sass (>= 3.1)
6
+ sass (>= 3.1, < 3.4)
7
7
 
8
8
  GEM
9
9
  remote: http://rubygems.org/
10
10
  specs:
11
- rake (10.1.0)
11
+ rake (10.2.2)
12
12
  rubyzip (0.9.9)
13
- sass (3.3.3)
13
+ sass (3.3.4)
14
14
 
15
15
  PLATFORMS
16
+ java
16
17
  ruby
17
18
 
18
19
  DEPENDENCIES
data/Rakefile CHANGED
@@ -1,16 +1,90 @@
1
1
  require 'bundler'
2
+ require 'bundler/setup'
2
3
  Bundler::GemHelper.install_tasks
3
4
 
4
5
  require 'rake/testtask'
5
6
 
6
- Rake::TestTask.new(:test) do |t|
7
+ def with_env(env)
8
+ old_env = ENV.dup
9
+ ENV.update(env)
10
+ yield
11
+ ensure
12
+ ENV.replace(old_env)
13
+ end
14
+
15
+ def execute_or_fail(command, message = "Execution")
16
+ #puts "Executing: #{command}"
17
+ system command
18
+ raise "#{message} failed." unless $?.exitstatus == 0
19
+ end
20
+
21
+ task :test => [:java_test, :mri_test]
22
+
23
+ directory "test/fixtures/tmpjava"
24
+ directory "test/fixtures/tmpjava/org/sass/archive_importer"
25
+
26
+ file "test/fixtures/tmpjava/specifications/sass-3.2.19.gemspec" => "test/fixtures/tmpjava" do
27
+ cwd = Dir.getwd
28
+ Dir.chdir ".." do
29
+ # this is done withing a chdir because the Gemfile in this folder was causing issues
30
+ execute_or_fail("gem install sass-archive-importer/test/fixtures/sass-3.2.19.gem -i #{cwd}/test/fixtures/tmpjava --no-rdoc --no-ri",
31
+ "Sass 3.2 Install")
32
+ end
33
+ end
34
+
35
+ file "test/fixtures/tmpjava/org/sass/archive_importer/ClassLoaderImporter.rb" =>
36
+ %w(test/fixtures/tmpjava/org/sass/archive_importer
37
+ lib/org/sass/archive_importer/ClassLoaderImporter.rb) do
38
+ FileUtils.cp "lib/org/sass/archive_importer/ClassLoaderImporter.rb",
39
+ "test/fixtures/tmpjava/org/sass/archive_importer"
40
+ end
41
+
42
+
43
+ desc "Compile the Ruby class to Java using JRuby"
44
+ file "test/fixtures/tmpjava/org/sass/archive_importer/ClassLoaderImporter.class" =>
45
+ %w(test/fixtures/tmpjava
46
+ test/fixtures/tmpjava/org/sass/archive_importer) +
47
+ FileList["test/fixtures/tmpjava/org/sass/archive_importer/ClassLoaderImporter.rb"] do
48
+ Dir.chdir("test/fixtures/tmpjava") do
49
+ # I don't know how to make jruby compile correctly to a target folder correctly.
50
+ execute_or_fail("jrubyc --javac org/sass/archive_importer/ClassLoaderImporter.rb",
51
+ "JRuby compilation")
52
+ end
53
+ end
54
+
55
+ desc "Copy sass artifacts to the jar directory"
56
+ task :copy_sass_artifacts do
57
+ FileUtils.cp_r Dir.glob("test/fixtures/zipped_files/*"), "test/fixtures/tmpjava"
58
+ FileUtils.cp_r "test/fixtures/zipped_files", "test/fixtures/tmpjava/sass_files"
59
+ end
60
+
61
+ desc "Build the java test jar"
62
+ file "test/fixtures/class_loader_importer_test.jar" =>
63
+ %w(test/fixtures/tmpjava/org/sass/archive_importer/ClassLoaderImporter.rb
64
+ test/fixtures/tmpjava/specifications/sass-3.2.19.gemspec) +
65
+ FileList["test/fixtures/zipped_files/**/*"] +
66
+ FileList["test/class_loader_importer_test.java"] +
67
+ [:copy_sass_artifacts] do
68
+
69
+ execute_or_fail("javac -Xlint:deprecation -cp test/fixtures/tmpjava:test/fixtures/jruby-complete-1.6.5.jar test/class_loader_importer_test.java -d test/fixtures/tmpjava",
70
+ "Java compilation")
71
+ execute_or_fail("jar -cf test/fixtures/class_loader_importer_test.jar -C test/fixtures/tmpjava .",
72
+ "Jar creation")
73
+ end
74
+
75
+ desc "Run java tests"
76
+ task :java_test => "test/fixtures/class_loader_importer_test.jar" do
77
+ execute_or_fail("java -cp test/fixtures/jruby-complete-1.6.5.jar:test/fixtures/class_loader_importer_test.jar ClassLoaderImporterTest",
78
+ "Java test")
79
+ end
80
+
81
+ Rake::TestTask.new(:mri_test) do |t|
7
82
  t.libs << 'lib'
8
83
  t.libs << 'test'
9
- t.pattern = 'test/**/*_test.rb'
84
+ t.pattern = 'test/*_test.rb'
10
85
  t.verbose = false
11
86
  end
12
-
13
- task :test => ["test/fixtures/zipped_files.zip", "test/fixtures/jarred_files.jar"]
87
+ task :mri_test => ["test/fixtures/zipped_files.zip", "test/fixtures/jarred_files.jar"]
14
88
 
15
89
  desc "Build the zip file fixture."
16
90
  file "test/fixtures/zipped_files.zip" => FileList["test/fixtures/zipped_files/**/*"] do
@@ -27,3 +101,12 @@ file "test/fixtures/jarred_files.jar" => FileList["test/fixtures/zipped_files/**
27
101
  `jar -cf test/fixtures/jarred_files.jar -C test/fixtures/zipped_files .`
28
102
  raise "failed to create test/fixtures/zipped_files.zip" unless $? == 0
29
103
  end
104
+
105
+ desc "Remove files generated during build or testing"
106
+ task :clean do
107
+ FileUtils.rm_f "test/fixtures/jarred_files.jar"
108
+ FileUtils.rm_f "test/fixtures/zipped_files.zip"
109
+ FileUtils.rm_f "test/fixtures/class_loader_importer_test.jar"
110
+ FileUtils.rm_rf "test/fixtures/tmpjava"
111
+ end
112
+
@@ -0,0 +1,158 @@
1
+ # Copyright 2013 LinkedIn Corp. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'rubygems'
16
+ require 'sass'
17
+ require 'sass/engine'
18
+ require 'sass/importers'
19
+ require 'java'
20
+
21
+ java_package "org.sass.archive_importer"
22
+
23
+ class ClassLoaderImporter < Sass::Importers::Base
24
+ include Java
25
+
26
+ attr_reader :sub_folder
27
+
28
+ def extensions
29
+ {
30
+ ".scss" => :scss,
31
+ ".css" => :scss,
32
+ ".sass" => :sass
33
+ }
34
+ end
35
+
36
+ class Entry < Struct.new(:name, :stream)
37
+ def read
38
+ return @result if @result
39
+ reader = java.io.BufferedReader.new(java.io.InputStreamReader.new(stream, "utf8"));
40
+ @result = ""
41
+ while (line = reader.read_line)
42
+ @result << line
43
+ @result << "\n"
44
+ end
45
+ @result
46
+ end
47
+ end
48
+
49
+ def initialize(sub_folder = nil)
50
+ require 'pathname'
51
+ @sub_folder = sub_folder
52
+ end
53
+
54
+ # Enable watching of css files in Sass 3.3+
55
+ def watched_directories
56
+ []
57
+ end
58
+
59
+ # Enable watching of css files in Sass 3.3+
60
+ java_signature 'boolean isWatchedFile(String)'
61
+ def watched_file?(file)
62
+ false
63
+ end
64
+
65
+ def find_relative(name, base, options)
66
+ base = base.split("<ClassLoaderImporter>#{'/' if sub_folder}#{sub_folder}", 2).last
67
+ if entry = entry_for(name, base)
68
+ engine(entry, options)
69
+ end
70
+ end
71
+
72
+
73
+ def find(name, options)
74
+ if entry = entry_for(name)
75
+ engine(entry, options)
76
+ end
77
+ end
78
+
79
+ def engine(entry, options)
80
+ options[:syntax] = extensions.fetch(File.extname(entry.name), :scss)
81
+ options[:filename] = full_filename(entry)
82
+ options[:importer] = self
83
+ content = entry.read
84
+ Sass::Engine.new(content, options)
85
+ end
86
+
87
+
88
+ def mtime(name, options)
89
+ if entry = entry_for(name)
90
+ entry.time
91
+ end
92
+ nil
93
+ end
94
+
95
+ def key(name, options)
96
+ name.split("!", 2)
97
+ end
98
+
99
+ java_signature 'boolean isEql(IRubyObject)'
100
+ def eql?(other)
101
+ other.class == self.class &&
102
+ other.sub_folder == self.sub_folder
103
+ end
104
+
105
+ def to_s
106
+ "<ClassLoaderImporter#{'/' if sub_folder}#{sub_folder}>"
107
+ end
108
+
109
+ protected
110
+
111
+ def full_filename(entry)
112
+ "<ClassLoaderImporter>/#{entry.name}"
113
+ end
114
+
115
+ def entry_for(name, base = nil)
116
+ possible_names(name, base).each do |n|
117
+ n = "#{sub_folder}/#{n}" if sub_folder
118
+ if entry = find_entry(n)
119
+ return entry
120
+ end
121
+ end
122
+ nil
123
+ end
124
+
125
+ def find_entry(name)
126
+ stream = self.to_java.java_class.getResourceAsStream("/"+name)
127
+ return unless stream
128
+ Entry.new(name, stream)
129
+ end
130
+
131
+ def possible_names(name, base = nil)
132
+ if base
133
+ absolute_root = Pathname.new("/")
134
+ base_path = Pathname.new(base)
135
+ path = Pathname.new(name)
136
+ begin
137
+ name = absolute_root.join(base_path).dirname.join(path).relative_path_from(absolute_root).to_s
138
+ rescue
139
+ # couldn't create a relative path, so we'll just assume it's absolute or for a different importer.
140
+ return []
141
+ end
142
+ end
143
+ d, b = File.split(name)
144
+ names = if b.start_with?("_")
145
+ [name]
146
+ else
147
+ [name, d == "." ? "_#{b}" : "#{d}/_#{b}"]
148
+ end
149
+
150
+ names.map do |n|
151
+ if (ext = File.extname(n)).size > 0 && extensions.keys.include?(ext)
152
+ n
153
+ else
154
+ extensions.keys.map{|k| "#{n}#{k}" }
155
+ end
156
+ end.flatten
157
+ end
158
+ end
@@ -12,4 +12,4 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require 'sass/archive_importer'
15
+ require 'sass_archive_importer'
@@ -12,7 +12,9 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- class Sass::ArchiveImporter::Importer < Sass::Importers::Base
15
+ require 'sass'
16
+
17
+ class SassArchiveImporter::Importer < Sass::Importers::Base
16
18
 
17
19
  attr_reader :archive_file
18
20
  attr_reader :sub_folder
@@ -80,7 +82,9 @@ class Sass::ArchiveImporter::Importer < Sass::Importers::Base
80
82
  end
81
83
 
82
84
  def eql?(other)
83
- other.class == self.class && other.archive_file == self.archive_file
85
+ other.class == self.class &&
86
+ other.archive_file == self.archive_file
87
+ other.sub_folder == self.sub_folder
84
88
  end
85
89
 
86
90
  protected
@@ -21,7 +21,7 @@ class Sass::Engine
21
21
  if options[:load_paths]
22
22
  options[:load_paths].map! do |load_path|
23
23
  next load_path unless load_path.is_a?(::String) && load_path =~ /^(.*\.(?:zip|jar))(?:!(.+))?$/
24
- Sass::ArchiveImporter::Importer.new($1, $2)
24
+ SassArchiveImporter::Importer.new($1, $2)
25
25
  end
26
26
  end
27
27
 
@@ -12,8 +12,6 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- module Sass
16
- module ArchiveImporter
17
- VERSION = "1.0.0.beta.2"
18
- end
15
+ module SassArchiveImporter
16
+ VERSION = "1.0.0.beta.3"
19
17
  end
@@ -0,0 +1,19 @@
1
+ # Copyright 2013 LinkedIn Corp. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module SassArchiveImporter
16
+ end
17
+
18
+ require 'sass_archive_importer/importer'
19
+ require 'sass_archive_importer/monkey_patches'
@@ -1,10 +1,10 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $:.push File.expand_path("lib", File.dirname(__FILE__))
3
- require "sass/archive_importer/version"
3
+ require "sass_archive_importer/version"
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "sass-archive-importer"
7
- s.version = Sass::ArchiveImporter::VERSION
7
+ s.version = SassArchiveImporter::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Chris Eppstein"]
10
10
  s.email = ["chris@eppsteins.net"]
@@ -12,13 +12,14 @@ Gem::Specification.new do |s|
12
12
  s.summary = "Allows sass, scss, and css files within zip and jar files to be found " +
13
13
  "using Sass @import directives."
14
14
  s.description = "Allows sass, scss, and css files within zip and jar files to be found " +
15
- "using Sass @import directives."
15
+ "using Sass @import directives. Also supports loading sass files in " +
16
+ "JRuby from the java class loader."
16
17
  s.license = 'Apache 2.0'
17
18
 
18
19
  s.files = `git ls-files`.split("\n")
19
20
  s.test_files = `git ls-files -- test/*`.split("\n")
20
21
  s.require_paths = ["lib"]
21
22
 
22
- s.add_runtime_dependency 'sass', '>= 3.1'
23
+ s.add_runtime_dependency 'sass', '>= 3.1', '< 3.4'
23
24
  s.add_runtime_dependency 'rubyzip', '~> 0.9.9'
24
25
  end
@@ -0,0 +1,166 @@
1
+ //import org.sass.archive_importer.ClassLoaderImporter;
2
+ import org.jruby.Ruby;
3
+
4
+ class ClassLoaderImporterTest {
5
+ //public void testJavaInstantiation() {
6
+ //ClassLoaderImporter importer = new ClassLoaderImporter(null);
7
+ //}
8
+
9
+ public void testClassLoaderImporter() {
10
+ final Ruby runtime = Ruby.newInstance();
11
+ String script =
12
+ "# The next three lines make sure no system gems are loaded.\n" +
13
+ "$:.reject!{|f| !f.start_with?('file:') }\n" +
14
+ "ENV['GEM_HOME'] = nil\n" +
15
+ "ENV['GEM_PATH'] = nil\n" +
16
+ "require 'rubygems'\n" +
17
+ "require 'sass'\n" +
18
+ "require 'java'\n" +
19
+ "require 'org/sass/archive_importer/ClassLoaderImporter'\n" +
20
+ "class_path_importer = ClassLoaderImporter.new\n" +
21
+ "sass_file_contents = %Q{\n" +
22
+ "@import \"css_partial\";\n" +
23
+ "@import \"sass_partial\";\n" +
24
+ "@import \"scss_partial\";\n" +
25
+ "@import \"a_css_file\";\n" +
26
+ "@import \"a_sass_file\";\n" +
27
+ "@import \"a_scss_file\";\n" +
28
+ "@import \"nested/nested\";\n" +
29
+ "}\n" +
30
+ "engine = Sass::Engine.new(sass_file_contents,\n" +
31
+ " :syntax => :scss,\n" +
32
+ " :filename => 'class_loader_import_test_script.java',\n" +
33
+ " :cache => false,\n" +
34
+ " :read_cache => false,\n" +
35
+ " :load_paths => [class_path_importer])\n" +
36
+ "result = engine.render\n" +
37
+ "fail %Q{Unexpected output: #{result}} unless result == <<CSS\n" +
38
+ ".css-partial {\n" +
39
+ " color: black; }\n" +
40
+ "\n" +
41
+ ".sass-partial {\n" +
42
+ " partial: yep; }\n" +
43
+ "\n" +
44
+ ".scss-partial {\n" +
45
+ " partial: yes; }\n" +
46
+ "\n" +
47
+ ".css-file {\n" +
48
+ " css: boring; }\n" +
49
+ "\n" +
50
+ ".sass-file {\n" +
51
+ " indented: yes; }\n" +
52
+ "\n" +
53
+ ".scss-file {\n" +
54
+ " curly-braces: omg; }\n" +
55
+ "\n" +
56
+ ".deeply-nested {\n" +
57
+ " deeply: nested; }\n" +
58
+ "\n" +
59
+ ".nested-class {\n" +
60
+ " nested: yep; }\n" +
61
+ "CSS\n"+
62
+ "\n";
63
+ runtime.evalScriptlet(script);
64
+ }
65
+
66
+ public void testClassLoaderImporterNestedContext() {
67
+ final Ruby runtime = Ruby.newInstance();
68
+ String script =
69
+ "# The next three lines make sure no system gems are loaded.\n" +
70
+ "$:.reject!{|f| !f.start_with?('file:') }\n" +
71
+ "ENV['GEM_HOME'] = nil\n" +
72
+ "ENV['GEM_PATH'] = nil\n" +
73
+ "require 'rubygems'\n" +
74
+ "require 'sass'\n" +
75
+ "require 'java'\n" +
76
+ "require 'org/sass/archive_importer/ClassLoaderImporter'\n" +
77
+ "class_path_importer = ClassLoaderImporter.new('sass_files')\n" +
78
+ "sass_file_contents = %Q{\n" +
79
+ "@import \"css_partial\";\n" +
80
+ "@import \"sass_partial\";\n" +
81
+ "@import \"scss_partial\";\n" +
82
+ "@import \"a_css_file\";\n" +
83
+ "@import \"a_sass_file\";\n" +
84
+ "@import \"a_scss_file\";\n" +
85
+ "@import \"nested/nested\";\n" +
86
+ "}\n" +
87
+ "engine = Sass::Engine.new(sass_file_contents,\n" +
88
+ " :syntax => :scss,\n" +
89
+ " :filename => 'class_loader_import_test_script.java',\n" +
90
+ " :cache => false,\n" +
91
+ " :read_cache => false,\n" +
92
+ " :load_paths => [class_path_importer])\n" +
93
+ "result = engine.render\n" +
94
+ "fail %Q{Unexpected output: #{result}} unless result == <<CSS\n" +
95
+ ".css-partial {\n" +
96
+ " color: black; }\n" +
97
+ "\n" +
98
+ ".sass-partial {\n" +
99
+ " partial: yep; }\n" +
100
+ "\n" +
101
+ ".scss-partial {\n" +
102
+ " partial: yes; }\n" +
103
+ "\n" +
104
+ ".css-file {\n" +
105
+ " css: boring; }\n" +
106
+ "\n" +
107
+ ".sass-file {\n" +
108
+ " indented: yes; }\n" +
109
+ "\n" +
110
+ ".scss-file {\n" +
111
+ " curly-braces: omg; }\n" +
112
+ "\n" +
113
+ ".deeply-nested {\n" +
114
+ " deeply: nested; }\n" +
115
+ "\n" +
116
+ ".nested-class {\n" +
117
+ " nested: yep; }\n" +
118
+ "CSS\n"+
119
+ "\n";
120
+ runtime.evalScriptlet(script);
121
+ }
122
+
123
+ public void testClassLoaderImporterMissingImport() {
124
+ final Ruby runtime = Ruby.newInstance();
125
+ String script =
126
+ "# The next three lines make sure no system gems are loaded.\n" +
127
+ "$:.reject!{|f| !f.start_with?('file:') }\n" +
128
+ "ENV['GEM_HOME'] = nil\n" +
129
+ "ENV['GEM_PATH'] = nil\n" +
130
+ "require 'rubygems'\n" +
131
+ "require 'sass'\n" +
132
+ "require 'java'\n" +
133
+ "require 'org/sass/archive_importer/ClassLoaderImporter'\n" +
134
+ "class_path_importer = ClassLoaderImporter.new\n" +
135
+ "sass_file_contents = %Q{\n" +
136
+ "@import \"has_missing_import\";\n" +
137
+ "}\n" +
138
+ "engine = Sass::Engine.new(sass_file_contents,\n" +
139
+ " :syntax => :scss,\n" +
140
+ " :filename => 'class_loader_import_test_script.java',\n" +
141
+ " :cache => false,\n" +
142
+ " :read_cache => false,\n" +
143
+ " :load_paths => [class_path_importer])\n" +
144
+ "begin\n" +
145
+ " engine.render\n" +
146
+ " fail 'Exception expected'\n" +
147
+ "rescue => e\n" +
148
+ " fail 'Expected a Sass::SyntaxError' unless e.is_a?(Sass::SyntaxError)\n" +
149
+ " fail %Q{expected message but got: #{e.message}} unless e.message == <<MSG.strip\n" +
150
+ "File to import not found or unreadable: this_does_not_exist.\n" +
151
+ "Load path: <ClassLoaderImporter>\n" +
152
+ "MSG\n" +
153
+ "end\n" +
154
+ "\n";
155
+ runtime.evalScriptlet(script);
156
+ }
157
+
158
+ public static void main(String [] args) {
159
+ ClassLoaderImporterTest test = new ClassLoaderImporterTest();
160
+ //test.testJavaInstantiation();
161
+ test.testClassLoaderImporter();
162
+ test.testClassLoaderImporterNestedContext();
163
+ test.testClassLoaderImporterMissingImport();
164
+ System.out.println("ALL Java Tests Passed");
165
+ }
166
+ }
@@ -0,0 +1 @@
1
+ @import "this_does_not_exist";
@@ -24,10 +24,11 @@ require 'sass'
24
24
  require 'sass-archive-importer'
25
25
 
26
26
  class SassArchiveImporterTest < Test::Unit::TestCase
27
+ FIXTURES_DIR = File.expand_path(File.join(File.dirname(__FILE__), "fixtures"))
27
28
  # These fixtures are created and kept up to date by the rakefile
28
29
  # Run `rake test` to re-create them
29
- ZIP_FIXTURE = File.expand_path(File.join(File.dirname(__FILE__), "fixtures", "zipped_files.zip"))
30
- JAR_FIXTURE = File.expand_path(File.join(File.dirname(__FILE__), "fixtures", "jarred_files.jar"))
30
+ ZIP_FIXTURE = File.join(FIXTURES_DIR, "zipped_files.zip")
31
+ JAR_FIXTURE = File.join(FIXTURES_DIR, "jarred_files.jar")
31
32
 
32
33
  def test_can_import_files_from_zip
33
34
  css = render_file_from_zip("imports_from_zip.scss")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sass-archive-importer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta.2
4
+ version: 1.0.0.beta.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Eppstein
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-25 00:00:00.000000000 Z
11
+ date: 2014-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sass
@@ -17,6 +17,9 @@ dependencies:
17
17
  - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3.1'
20
+ - - <
21
+ - !ruby/object:Gem::Version
22
+ version: '3.4'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -24,6 +27,9 @@ dependencies:
24
27
  - - '>='
25
28
  - !ruby/object:Gem::Version
26
29
  version: '3.1'
30
+ - - <
31
+ - !ruby/object:Gem::Version
32
+ version: '3.4'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rubyzip
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +45,8 @@ dependencies:
39
45
  - !ruby/object:Gem::Version
40
46
  version: 0.9.9
41
47
  description: Allows sass, scss, and css files within zip and jar files to be found
42
- using Sass @import directives.
48
+ using Sass @import directives. Also supports loading sass files in JRuby from the
49
+ java class loader.
43
50
  email:
44
51
  - chris@eppsteins.net
45
52
  executables: []
@@ -53,21 +60,26 @@ files:
53
60
  - LICENSE.txt
54
61
  - README.markdown
55
62
  - Rakefile
63
+ - lib/org/sass/archive_importer/ClassLoaderImporter.rb
56
64
  - lib/sass-archive-importer.rb
57
65
  - lib/sass/archive_importer.rb
58
- - lib/sass/archive_importer/importer.rb
59
- - lib/sass/archive_importer/monkey_patches.rb
60
- - lib/sass/archive_importer/version.rb
66
+ - lib/sass_archive_importer.rb
67
+ - lib/sass_archive_importer/importer.rb
68
+ - lib/sass_archive_importer/monkey_patches.rb
69
+ - lib/sass_archive_importer/version.rb
61
70
  - sass-archive-importer.gemspec
71
+ - test/class_loader_importer_test.java
62
72
  - test/fixtures/.gitignore
63
73
  - test/fixtures/imports_from_zip.scss
64
74
  - test/fixtures/imports_from_zip_subfolder.scss
75
+ - test/fixtures/jruby-complete-1.6.5.jar
65
76
  - test/fixtures/zipped_files/_css_partial.css
66
77
  - test/fixtures/zipped_files/_sass_partial.sass
67
78
  - test/fixtures/zipped_files/_scss_partial.scss
68
79
  - test/fixtures/zipped_files/a_css_file.css
69
80
  - test/fixtures/zipped_files/a_sass_file.sass
70
81
  - test/fixtures/zipped_files/a_scss_file.scss
82
+ - test/fixtures/zipped_files/has_missing_import.scss
71
83
  - test/fixtures/zipped_files/nested/_nested.scss
72
84
  - test/fixtures/zipped_files/nested/deeply_nested/_deeply.scss
73
85
  - test/sass_archive_importer_test.rb
@@ -97,15 +109,18 @@ specification_version: 4
97
109
  summary: Allows sass, scss, and css files within zip and jar files to be found using
98
110
  Sass @import directives.
99
111
  test_files:
112
+ - test/class_loader_importer_test.java
100
113
  - test/fixtures/.gitignore
101
114
  - test/fixtures/imports_from_zip.scss
102
115
  - test/fixtures/imports_from_zip_subfolder.scss
116
+ - test/fixtures/jruby-complete-1.6.5.jar
103
117
  - test/fixtures/zipped_files/_css_partial.css
104
118
  - test/fixtures/zipped_files/_sass_partial.sass
105
119
  - test/fixtures/zipped_files/_scss_partial.scss
106
120
  - test/fixtures/zipped_files/a_css_file.css
107
121
  - test/fixtures/zipped_files/a_sass_file.sass
108
122
  - test/fixtures/zipped_files/a_scss_file.scss
123
+ - test/fixtures/zipped_files/has_missing_import.scss
109
124
  - test/fixtures/zipped_files/nested/_nested.scss
110
125
  - test/fixtures/zipped_files/nested/deeply_nested/_deeply.scss
111
126
  - test/sass_archive_importer_test.rb