compass 1.0.0.alpha.21 → 1.0.0.rc.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +11 -5
- data/features/command_line.feature +5 -25
- data/features/step_definitions/command_line_steps.rb +3 -3
- data/lib/compass.rb +2 -2
- data/lib/compass/actions.rb +4 -3
- data/lib/compass/commands/update_project.rb +50 -45
- data/lib/compass/commands/watch_project.rb +62 -13
- data/lib/compass/compiler.rb +2 -0
- data/lib/compass/configuration/adapters.rb +21 -0
- data/lib/compass/configuration/helpers.rb +8 -0
- data/lib/compass/deprecation.rb +19 -0
- data/lib/compass/exec/global_options_parser.rb +0 -4
- data/lib/compass/generated_version.rb +4 -0
- data/lib/compass/logger.rb +31 -18
- data/lib/compass/sass_compiler.rb +134 -0
- data/lib/compass/sass_extensions/functions/sprites.rb +3 -3
- data/lib/compass/sprite_importer.rb +1 -1
- data/lib/compass/version.rb +29 -31
- data/test/fixtures/stylesheets/compass/css/background-clip.css +2 -0
- data/test/fixtures/stylesheets/compass/css/background-origin.css +2 -0
- data/test/fixtures/stylesheets/compass/css/background-size.css +3 -0
- data/test/fixtures/stylesheets/compass/css/browser-support.css +22 -11
- data/test/fixtures/stylesheets/compass/css/filters.css +6 -6
- data/test/fixtures/stylesheets/compass/css/grid_background.css +4 -0
- data/test/fixtures/stylesheets/compass/css/support.css +6 -6
- data/test/fixtures/stylesheets/compass/css/transition.css +19 -0
- data/test/fixtures/stylesheets/compass/css/vertical_rhythm_with_ems.css +1 -0
- data/test/fixtures/stylesheets/compass/css/vertical_rhythm_with_px.css +1 -0
- data/test/fixtures/stylesheets/compass/css/vertical_rhythm_with_rems.css +1 -0
- data/test/fixtures/stylesheets/sourcemaps/css/another_simple.css +1 -0
- data/test/fixtures/stylesheets/sourcemaps/css/another_simple.css.map +2 -1
- data/test/fixtures/stylesheets/sourcemaps/css/simple.css +1 -0
- data/test/fixtures/stylesheets/sourcemaps/css/simple.css.map +2 -1
- data/test/fixtures/stylesheets/sourcemaps/css/with_libraries.css +1 -0
- data/test/fixtures/stylesheets/sourcemaps/css/with_libraries.css.map +2 -1
- data/test/integrations/compass_test.rb +5 -4
- data/test/units/caniuse_test.rb +8 -2
- data/test/units/command_line_test.rb +3 -3
- data/test/units/compiler_test.rb +7 -2
- data/test/units/configuration_test.rb +1 -1
- metadata +9 -22
- data/RELEASE_VERSION +0 -1
- data/VERSION +0 -1
- data/lib/compass/watcher.rb +0 -11
- data/lib/compass/watcher/compiler.rb +0 -60
- data/lib/compass/watcher/project_watcher.rb +0 -179
- data/lib/compass/watcher/watch.rb +0 -51
- data/test/fixtures/stylesheets/valid/css/another_simple.css +0 -4
- data/test/fixtures/stylesheets/valid/css/simple.css +0 -4
- data/test/units/watcher/compiler_test.rb +0 -39
- data/test/units/watcher/project_watcher_test.rb +0 -85
- data/test/units/watcher/watch_test.rb +0 -42
data/RELEASE_VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1.0.0.alpha.21
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1.0.0.alpha.20
|
data/lib/compass/watcher.rb
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
require 'compass/watcher/watch'
|
2
|
-
require 'compass/watcher/compiler'
|
3
|
-
require 'compass/watcher/project_watcher'
|
4
|
-
|
5
|
-
module Compass
|
6
|
-
module Watcher
|
7
|
-
class WatcherException < Compass::Error; end
|
8
|
-
class NoCallbackError < WatcherException; end
|
9
|
-
class AbsolutePathError < WatcherException; end
|
10
|
-
end
|
11
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
module Compass
|
2
|
-
module Watcher
|
3
|
-
class Compiler
|
4
|
-
include Compass::Actions
|
5
|
-
attr_reader :working_path, :memory_store, :backing_store, :cache_store, :compiler_options, :compiler
|
6
|
-
|
7
|
-
def initialize(working_path, additional_options={})
|
8
|
-
@working_path = working_path
|
9
|
-
@compiler_options = create_compiler_options(additional_options)
|
10
|
-
@memory_store ||= Sass::CacheStores::Memory.new
|
11
|
-
@backing_store ||= compiler_options[:cache_store]
|
12
|
-
@backing_store ||= Sass::CacheStores::Filesystem.new(determine_cache_location)
|
13
|
-
@cache_store ||= Sass::CacheStores::Chain.new(@memory_store, @backing_store)
|
14
|
-
@compiler ||= create_compiler
|
15
|
-
end
|
16
|
-
|
17
|
-
def compile
|
18
|
-
@memory_cache.reset! if @memory_cache
|
19
|
-
compiler.reset!
|
20
|
-
if file = compiler.out_of_date?
|
21
|
-
begin
|
22
|
-
time = Time.now.strftime("%T")
|
23
|
-
log_action(:info, "Change detected at #{time} to: #{compiler.relative_stylesheet_name(file)}", compiler_options)
|
24
|
-
compiler.run
|
25
|
-
GC.start
|
26
|
-
rescue StandardError => e
|
27
|
-
::Compass::Exec::Helpers.report_error(e, compiler_options)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
private #=========================================================================================>
|
33
|
-
|
34
|
-
def create_compiler_options(additional_options)
|
35
|
-
compiler_opts = {:sass => Compass.sass_engine_options, :cache_store => @cache_store, :quiet => true, :loud => [:identical, :overwrite, :create]}.merge(additional_options)
|
36
|
-
compiler_opts[:cache_location] ||= determine_cache_location
|
37
|
-
compiler_opts[:sourcemap] = Compass.configuration.sourcemap if compiler_opts[:sourcemap].nil?
|
38
|
-
if compiler_opts.include?(:debug_info)
|
39
|
-
compiler_opts[:sass][:debug_info] = compiler_opts.delete(:debug_info)
|
40
|
-
end
|
41
|
-
|
42
|
-
compiler_opts
|
43
|
-
end
|
44
|
-
|
45
|
-
def create_compiler
|
46
|
-
@memory_store.reset!
|
47
|
-
Compass::Compiler.new(
|
48
|
-
working_path,
|
49
|
-
Compass.configuration.sass_path,
|
50
|
-
Compass.configuration.css_path,
|
51
|
-
compiler_options.dup
|
52
|
-
)
|
53
|
-
end
|
54
|
-
|
55
|
-
def determine_cache_location
|
56
|
-
Compass.configuration.cache_path || Sass::Plugin.options[:cache_location] || File.join(working_path, ".sass-cache")
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
@@ -1,179 +0,0 @@
|
|
1
|
-
require 'forwardable'
|
2
|
-
module Compass
|
3
|
-
module Watcher
|
4
|
-
class ProjectWatcher
|
5
|
-
include Compass::Actions
|
6
|
-
SASS_FILTER = '*.s[ac]ss'
|
7
|
-
ALL_CHILDREN_SASS_FILTER = File.join('**', SASS_FILTER)
|
8
|
-
POLLING_MESSAGE = 'Compass is polling for changes'
|
9
|
-
|
10
|
-
attr_reader :options, :project_path, :watcher_compiler, :listener, :poll, :css_dir, :watchers
|
11
|
-
|
12
|
-
alias :working_path :project_path
|
13
|
-
|
14
|
-
extend Forwardable
|
15
|
-
|
16
|
-
def_delegators :@watcher_compiler, :compiler, :compiler
|
17
|
-
def_delegators :@watcher_compiler, :compile, :compile
|
18
|
-
|
19
|
-
def initialize(project_path, watches=[], options={}, poll=false)
|
20
|
-
@poll = poll
|
21
|
-
@options = options
|
22
|
-
@project_path = project_path
|
23
|
-
@css_dir = Compass.configuration.css_dir
|
24
|
-
@watchers = [SassWatch.new(&method(:sass_callback))] + watches
|
25
|
-
@watcher_compiler = Compass::Watcher::Compiler.new(project_path, options)
|
26
|
-
setup_listener
|
27
|
-
end
|
28
|
-
|
29
|
-
def watch!
|
30
|
-
if Sass::Util.listen_geq_2?
|
31
|
-
@listeners.each {|l| l.start}
|
32
|
-
sleep
|
33
|
-
else
|
34
|
-
listener.start!
|
35
|
-
end
|
36
|
-
rescue Interrupt
|
37
|
-
if Sass::Util.listen_geq_2?
|
38
|
-
Listen.stop
|
39
|
-
else
|
40
|
-
listener.stop
|
41
|
-
end
|
42
|
-
logger.log "\nHappy Styling!"
|
43
|
-
end
|
44
|
-
|
45
|
-
def listeners
|
46
|
-
@listeners || [@listener]
|
47
|
-
end
|
48
|
-
|
49
|
-
private #============================================================================>
|
50
|
-
|
51
|
-
def setup_listener
|
52
|
-
Sass::Util.load_listen!
|
53
|
-
listen_opts = {:relative_paths => false}
|
54
|
-
|
55
|
-
if Sass::Util.listen_geq_2?
|
56
|
-
listen_opts.update(:force_polling => true) if poll
|
57
|
-
listen_opts.update(:polling_fallback_message => POLLING_MESSAGE,
|
58
|
-
:ignore => /\.css$/)
|
59
|
-
@listeners = []
|
60
|
-
directories_to_watch.each do |dir|
|
61
|
-
# work around https://github.com/guard/listen/issues/243
|
62
|
-
@listeners << Listen.to(dir, listen_opts, &method(:listen_callback))
|
63
|
-
end
|
64
|
-
else
|
65
|
-
args = directories_to_watch + [listen_opts]
|
66
|
-
@listener = Listen::Listener.new(*args, &method(:listen_callback))
|
67
|
-
@listener = listener.force_polling(true) if poll
|
68
|
-
@listener = listener.polling_fallback_message(POLLING_MESSAGE)
|
69
|
-
@listener.ignore(/\.css$/)
|
70
|
-
end
|
71
|
-
|
72
|
-
@listener
|
73
|
-
end
|
74
|
-
|
75
|
-
def directories_to_watch
|
76
|
-
@directories_to_watch ||= begin
|
77
|
-
dirs = [Compass.configuration.sass_path] +
|
78
|
-
Compass.configuration.sass_load_paths.map{|p| p.directories_to_watch}
|
79
|
-
dirs.flatten!
|
80
|
-
dirs.compact!
|
81
|
-
dirs.select {|d| File.writable?(d) }
|
82
|
-
dirs.uniq!
|
83
|
-
dirs
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def listen_callback(modified_files, added_files, removed_files)
|
88
|
-
# log_action(:info, ">>> Listen Callback fired added: #{added_files}, mod: #{modified_files}, rem: #{removed_files}", {})
|
89
|
-
files = {:modified => modified_files,
|
90
|
-
:added => added_files,
|
91
|
-
:removed => removed_files}
|
92
|
-
|
93
|
-
run_once, run_each = watchers.partition {|w| w.run_once_per_changeset?}
|
94
|
-
|
95
|
-
run_once.each do |watcher|
|
96
|
-
if file = files.values.flatten.detect{|f| watcher.match?(f) }
|
97
|
-
action = files.keys.detect{|k| files[k].include?(file) }
|
98
|
-
watcher.run_callback(project_path, relative_to(file, project_path), action)
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
run_each.each do |watcher|
|
103
|
-
files.each do |action, list|
|
104
|
-
list.each do |file|
|
105
|
-
if watcher.match?(file)
|
106
|
-
watcher.run_callback(project_path, relative_to(file, project_path), action)
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
def sass_callback(base, file, action)
|
114
|
-
#log_action(:info, ">>> Sass Callback fired #{action}, #{file}", {})
|
115
|
-
full_filename = File.expand_path(File.join(base,file))
|
116
|
-
case action
|
117
|
-
when :modified
|
118
|
-
sass_modified(full_filename)
|
119
|
-
when :added
|
120
|
-
sass_added(full_filename)
|
121
|
-
when :removed
|
122
|
-
sass_removed(full_filename)
|
123
|
-
else
|
124
|
-
raise ArgumentError, "Illegal Action: #{action.inspect}"
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
def sass_modified(file)
|
129
|
-
log_action(:info, "#{filename_for_display(file)} was modified", options)
|
130
|
-
compile
|
131
|
-
end
|
132
|
-
|
133
|
-
def sass_added(file)
|
134
|
-
log_action(:info, "#{filename_for_display(file)} was added", options)
|
135
|
-
compile
|
136
|
-
end
|
137
|
-
|
138
|
-
def sass_removed(file)
|
139
|
-
log_action(:info, "#{filename_for_display(file)} was removed", options)
|
140
|
-
css_file = compiler.corresponding_css_file(file)
|
141
|
-
sourcemap_file = compiler.corresponding_sourcemap_file(file)
|
142
|
-
compile
|
143
|
-
remove(css_file) if File.exists?(css_file)
|
144
|
-
remove(sourcemap_file) if File.exists?(sourcemap_file)
|
145
|
-
end
|
146
|
-
|
147
|
-
def local_development_locations
|
148
|
-
@local_development_locations ||= begin
|
149
|
-
r = [Compass.configuration.sass_path] + Array(Compass.configuration.additional_import_paths)
|
150
|
-
r.map!{|l| File.expand_path(l) }
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
def filename_for_display(f)
|
155
|
-
if framework = Frameworks::ALL.detect {|fmwk| in_directory?(fmwk.stylesheets_directory, f) }
|
156
|
-
"(#{framework.name}) #{relative_to(f, framework.stylesheets_directory)}"
|
157
|
-
elsif directories_to_watch.detect{|d| in_directory?(d, f) }
|
158
|
-
relative_to_working_directory(f)
|
159
|
-
else
|
160
|
-
f
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
def in_directory?(dir, f)
|
165
|
-
dir && (f[0...(dir.size)] == dir)
|
166
|
-
end
|
167
|
-
|
168
|
-
def relative_to_working_directory(f)
|
169
|
-
relative_to(f, Dir.pwd)
|
170
|
-
end
|
171
|
-
|
172
|
-
def relative_to(f, dir)
|
173
|
-
Pathname.new(f).relative_path_from(Pathname.new(dir))
|
174
|
-
rescue ArgumentError # does not share a common path.
|
175
|
-
f
|
176
|
-
end
|
177
|
-
end
|
178
|
-
end
|
179
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
module Compass
|
2
|
-
module Watcher
|
3
|
-
class BasicWatch
|
4
|
-
attr_reader :callback
|
5
|
-
|
6
|
-
def initialize(&block)
|
7
|
-
unless block
|
8
|
-
raise NoCallbackError, "A Block must be supplied in order to be watched"
|
9
|
-
end
|
10
|
-
@callback = block
|
11
|
-
end
|
12
|
-
|
13
|
-
def run_callback(base, relative, action)
|
14
|
-
callback.call(base, relative, action)
|
15
|
-
end
|
16
|
-
|
17
|
-
def run_once_per_changeset?
|
18
|
-
false
|
19
|
-
end
|
20
|
-
|
21
|
-
def match?(path)
|
22
|
-
Sass::Util.abstract(self)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
class Watch < BasicWatch
|
27
|
-
attr_reader :glob
|
28
|
-
|
29
|
-
def initialize(glob, &block)
|
30
|
-
super(&block)
|
31
|
-
unless glob
|
32
|
-
raise WatcherException, "A glob must be supplied in order to be watched"
|
33
|
-
end
|
34
|
-
@glob = glob
|
35
|
-
end
|
36
|
-
|
37
|
-
def match?(changed_path)
|
38
|
-
File.fnmatch(glob, changed_path)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
class SassWatch < BasicWatch
|
43
|
-
def match?(path)
|
44
|
-
path =~ /s[ac]ss$/
|
45
|
-
end
|
46
|
-
def run_once_per_changeset?
|
47
|
-
true
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'compass'
|
3
|
-
|
4
|
-
class WatcherCompilerTest < Test::Unit::TestCase
|
5
|
-
|
6
|
-
def setup
|
7
|
-
@working_path = File.join(fixture_path, 'stylesheets', 'valid')
|
8
|
-
@to = File.join(@working_path, 'css')
|
9
|
-
remove_to
|
10
|
-
Compass.add_configuration({:sass_path => File.join(@working_path, 'sass'), :css_path => @to }, 'test')
|
11
|
-
end
|
12
|
-
|
13
|
-
test "it sould create a new instance of a compass compiler" do
|
14
|
-
watch_compiler = Compass::Watcher::Compiler.new(@working_path, {})
|
15
|
-
assert watch_compiler.compiler.is_a?(Compass::Compiler)
|
16
|
-
end
|
17
|
-
|
18
|
-
test "debug info gets passed into sass options" do
|
19
|
-
watch_compiler = Compass::Watcher::Compiler.new(@working_path, {:debug_info => true})
|
20
|
-
assert watch_compiler.compiler_options[:sass][:debug_info]
|
21
|
-
end
|
22
|
-
|
23
|
-
test "should run compiler" do
|
24
|
-
watch_compiler = Compass::Watcher::Compiler.new(@working_path, {})
|
25
|
-
watch_compiler.compiler.expects(:reset_staleness_checker!).once
|
26
|
-
watch_compiler.compiler.expects(:run).once
|
27
|
-
watch_compiler.expects(:log_action).once
|
28
|
-
watch_compiler.compile
|
29
|
-
end
|
30
|
-
|
31
|
-
def remove_to
|
32
|
-
::FileUtils.rm_r @to if File.exists?(@to)
|
33
|
-
end
|
34
|
-
|
35
|
-
def teardown
|
36
|
-
remove_to
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
@@ -1,85 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'compass'
|
3
|
-
|
4
|
-
class ProjectWatcherTest < Test::Unit::TestCase
|
5
|
-
|
6
|
-
def setup
|
7
|
-
@working_path = File.join(fixture_path, 'stylesheets', 'valid')
|
8
|
-
@to = File.join(@working_path, 'css')
|
9
|
-
remove_to
|
10
|
-
Compass.add_configuration({:sass_path => File.join(@working_path, 'sass'), :css_path => @to }, 'test')
|
11
|
-
@project_watcher = Compass::Watcher::ProjectWatcher.new(@working_path)
|
12
|
-
end
|
13
|
-
|
14
|
-
def fullpath(basename)
|
15
|
-
File.join(@working_path, basename)
|
16
|
-
end
|
17
|
-
|
18
|
-
def foo_basename
|
19
|
-
"foo.scss"
|
20
|
-
end
|
21
|
-
|
22
|
-
def sample_basename
|
23
|
-
File.join('sass', 'sample.scss')
|
24
|
-
end
|
25
|
-
|
26
|
-
test "should initalize correctly" do
|
27
|
-
if Sass::Util.listen_geq_2?
|
28
|
-
assert @project_watcher.listeners.is_a?(Array) && @project_watcher.listeners.size > 0
|
29
|
-
else
|
30
|
-
assert @project_watcher.listener.is_a?(Listen::Listener)
|
31
|
-
end
|
32
|
-
assert_equal 1, @project_watcher.watchers.size
|
33
|
-
end
|
34
|
-
|
35
|
-
test "should have 3 watchers" do
|
36
|
-
Dir.chdir File.join(@working_path, 'sass') do
|
37
|
-
@project_watcher = Compass::Watcher::ProjectWatcher.new(Dir.pwd)
|
38
|
-
assert_equal 1, @project_watcher.watchers.size
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
test "compiler" do
|
43
|
-
assert @project_watcher.compiler.is_a?(Compass::Compiler)
|
44
|
-
end
|
45
|
-
|
46
|
-
test "sass callback add" do
|
47
|
-
@project_watcher.expects(:sass_added).with(fullpath(foo_basename)).once
|
48
|
-
@project_watcher.send(:sass_callback, @working_path, foo_basename, :added)
|
49
|
-
end
|
50
|
-
|
51
|
-
test "sass callback modified" do
|
52
|
-
@project_watcher.expects(:sass_modified).with(fullpath(foo_basename)).once
|
53
|
-
@project_watcher.send(:sass_callback, @working_path, foo_basename, :modified)
|
54
|
-
end
|
55
|
-
|
56
|
-
test "sass callback removed" do
|
57
|
-
@project_watcher.expects(:sass_removed).with(fullpath(foo_basename)).once
|
58
|
-
@project_watcher.send(:sass_callback, @working_path, foo_basename, :removed)
|
59
|
-
end
|
60
|
-
|
61
|
-
test "listen callback modified" do
|
62
|
-
@project_watcher.expects(:sass_modified).with(fullpath(sample_basename)).once
|
63
|
-
@project_watcher.send(:listen_callback, sample_basename, [], [])
|
64
|
-
end
|
65
|
-
|
66
|
-
test "listen callback added" do
|
67
|
-
@project_watcher.expects(:sass_added).with(fullpath(sample_basename)).once
|
68
|
-
@project_watcher.send(:listen_callback, [], sample_basename, [])
|
69
|
-
end
|
70
|
-
|
71
|
-
test "listen callback removed" do
|
72
|
-
@project_watcher.expects(:sass_removed).with(fullpath(sample_basename)).once
|
73
|
-
@project_watcher.send(:listen_callback, [], [], sample_basename)
|
74
|
-
end
|
75
|
-
|
76
|
-
def remove_to
|
77
|
-
::FileUtils.rm_r @to if File.exists?(@to)
|
78
|
-
end
|
79
|
-
|
80
|
-
def teardown
|
81
|
-
remove_to
|
82
|
-
end
|
83
|
-
|
84
|
-
|
85
|
-
end
|