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

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