forked from pelle/guard-jammit
-
Notifications
You must be signed in to change notification settings - Fork 6
/
jammit.rb
99 lines (83 loc) · 2.98 KB
/
jammit.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
require 'guard'
require 'guard/guard'
require 'jammit'
module Guard
# The Jammit Guard that gets notifications about the following
# Guard events: `start`, `stop`, `reload`, `run_all` and `run_on_change`.
#
class Jammit < Guard
DEFAULT_OPTIONS = {
:config_path => ::Jammit::DEFAULT_CONFIG_PATH,
:output_folder => nil,
:base_url => nil,
:public_root => nil,
:force => false,
:package_names => nil,
:package_on_start => true,
:notification => true,
:hide_success => false
}
# Initialize Guard::Jammit.
#
# @param [Array<Guard::Watcher>] watchers the watchers in the Guard block
# @param [Hash] options the options for the Guard
# @option options [String] :output_folder the output folder
# @option options [String] :base_url the base URL for the MHTML stylesheet
# @option options [String] :public_root the public root folder
# @option options [Boolean] :force force packaging
# @option options [Array<String>] package_names the package names to package
# @option options [Boolean] :package_on_start package when Guard starts
# @option options [Boolean] :notification show notifications
# @option options [Boolean] :hide_success hide success message notification
#
def initialize(watchers = [], options = {})
options = DEFAULT_OPTIONS.merge(options)
super(watchers, options)
end
# Gets called once when Guard starts.
#
# @raise [:task_has_failed] when run_on_change has failed
#
def start
ensure_rails_env!
::Guard::UI.info "Using Jammit version #{::Jammit::VERSION}"
jammit if @options[:package_on_start]
end
# Gets called when all files should be packaged.
#
# @raise [:task_has_failed] when run_on_change has failed
#
def run_all
jammit
end
# Gets called when watched paths and files have changes.
#
# @param [Array<String>] paths the changed paths and files
# @raise [:task_has_failed] when run_on_change has failed
#
def run_on_changes(paths)
jammit
end
# Runs Jammit to package the assets
#
def jammit
begin
Thread.current[:jammit_packager] = nil
::Jammit.package! @options
::Guard::UI.info 'Jammit successfully packaged the assets.'
::Guard::Notifier.notify('Jammit successfully packaged the assets.', :title => 'Jammit') if @options[:notification] && !@options[:hide_success]
rescue Exception => e
::Guard::UI.error("Jammit failed to package the assets: #{e.message}")
::Guard::Notifier.notify('Jammit failed to package the assets.', :title => 'Jammit', :image => :failed) if @options[:notification]
end
end
private
# Ensures that Rails env is available when Rails is only partially loaded
#
def ensure_rails_env!
if defined?(::Rails) && !::Rails.respond_to?(:env)
require 'rails'
end
end
end
end