forked from oliamb/guard-compass
-
Notifications
You must be signed in to change notification settings - Fork 11
/
compass.rb
106 lines (92 loc) · 2.97 KB
/
compass.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
require 'guard'
require 'guard/guard'
require 'guard/watcher'
require 'guard/reporter'
require 'compass'
require 'compass/commands'
require 'compass/logger'
module Guard
class Compass < Guard
attr_reader :updater, :options
attr_accessor :reporter
VERSION = '0.0.6'
def initialize(watchers = [], options = {})
super
@reporter = Reporter.new
@options[:working_directory] ||= File.expand_path(File.dirname("."))
end
# Guard Interface Implementation
# Compile all the sass|scss stylesheets
def start
UI.info "Guard::Compass is watching at your stylesheets."
load_compass_configuration
create_updater
true
end
def stop
@updater = nil
true
end
# Reload the configuration
def reload
load_compass_configuration
create_updater
true
end
# Compile all the sass|scss stylesheets
def run_all
perform
end
# Compile the changed stylesheets
def run_on_change(paths)
perform
end
private
def perform
if valid_sass_path?
@updater.execute
true
else
false
end
end
def create_updater
@updater = ::Compass::Commands::UpdateProject.new(@options[:working_directory] , @options)
valid_sass_path?
end
def load_compass_configuration
::Compass.default_configuration
config_file = (options[:configuration_file] || ::Compass.detect_configuration_file(options[:working_directory]))
unless(config_file.nil?)
filepath = Pathname.new(config_file)
if(filepath.relative?)
filepath = Pathname.new([options[:working_directory], config_file].join("/"))
end
if(filepath.exist?)
::Compass.add_configuration filepath
options[:configuration_file] = filepath.to_s
src_path = Pathname.new( File.expand_path(::Compass.configuration.sass_dir, options[:working_directory]) ).relative_path_from(Pathname.pwd)
watchers.clear
watchers.push Watcher.new("^#{src_path}/.*")
watchers.push Watcher.new("^#{filepath.relative_path_from(Pathname.pwd)}$")
else
reporter.failure "Compass configuration file not found: #{filepath}\nPlease check Guard configuration."
end
else
reporter.failure "Cannot find a Compass configuration file, please add information to your Guardfile guard 'compass' declaration."
end
end
def valid_sass_path?
path = Pathname.new(::Compass.configuration.sass_dir)
if(path.relative?)
path = Pathname.new(@options[:working_directory]) + path
end
unless path.exist?
reporter.failure("Sass files src directory not found: #{::Compass.configuration.sass_path}\nPlease check your Compass configuration.")
false
else
true
end
end
end
end