guard-rails-assets 0.0.6 → 0.0.7
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.
- data/.gitignore +1 -0
- data/Gemfile +1 -1
- data/README.md +8 -24
- data/guard-rails-assets.gemspec +1 -0
- data/lib/guard/rails-assets/cli_runner.rb +3 -2
- data/lib/guard/rails-assets/rails_runner.rb +38 -44
- data/lib/guard/version.rb +1 -1
- data/spec/guard/rails-assets/cli_runner_spec.rb +10 -3
- data/spec/guard/rails-assets/rails_runner_spec.rb +2 -65
- metadata +25 -9
- data/Gemfile.lock +0 -31
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# Guard::RailsAssets
|
2
2
|
|
3
3
|
|
4
|
-
Guard::RailsAssets compiles the assets
|
4
|
+
Guard::RailsAssets compiles the assets within Rails 3.1 application whenever those change.
|
5
5
|
|
6
|
-
Tested on MRI
|
6
|
+
Tested on MRI 1.9.2 (please report if it works on your platform).
|
7
7
|
|
8
8
|
If you have any questions please contact me [@dnagir](http://www.ApproachE.com).
|
9
9
|
|
@@ -11,8 +11,6 @@ If you have any questions please contact me [@dnagir](http://www.ApproachE.com).
|
|
11
11
|
|
12
12
|
Please be sure to have [Guard](https://github.com/guard/guard) installed.
|
13
13
|
|
14
|
-
Install the gem:
|
15
|
-
|
16
14
|
Add it to your `Gemfile`, preferably inside the test and development group:
|
17
15
|
|
18
16
|
```ruby
|
@@ -22,27 +20,12 @@ gem 'guard-rails-assets'
|
|
22
20
|
Add guard definition to your `Guardfile` by running:
|
23
21
|
|
24
22
|
```bash
|
25
|
-
$ guard init rails-assets
|
23
|
+
$ bundle exec guard init rails-assets
|
26
24
|
```
|
27
25
|
|
28
|
-
##
|
29
|
-
|
30
|
-
The Rails 3.1 is a mandatory requirement, but is not enforeced via dependencies for now.
|
31
|
-
The reason is that the assets can currently be compiled using following "runners":
|
32
|
-
|
33
|
-
1. rake command (CLI);
|
34
|
-
2. loading the actual Rails environment.
|
35
|
-
|
36
|
-
In the 1st case - this Guard is not actually using Rails directly while in the 2nd - it loads it explicitly.
|
37
|
-
|
38
|
-
Good thing about the 1st approach is that assets will always be same as produced by Rails.
|
39
|
-
Bad thing is that it is pretty slow (~10 seconds) because it starts Rails from ground zero.
|
40
|
-
|
41
|
-
The 2nd approach is good because it is much faster, but does not reload Rails environment (so you have to restart guard).
|
42
|
-
|
43
|
-
## Guardfile and Options
|
26
|
+
## Options
|
44
27
|
|
45
|
-
In addition to the
|
28
|
+
In addition to the guard configuration, `guard-rails-assets` has options to specify when exacly to precompile assets.
|
46
29
|
|
47
30
|
- `:start` - compile assets when the guard starts (enabled by default)
|
48
31
|
- `:change` - compile assets when watched files change (enabled by default)
|
@@ -52,8 +35,9 @@ In addition to the standard configuration, this Guard has options to specify whe
|
|
52
35
|
Also you can set the `:runner` option:
|
53
36
|
|
54
37
|
- `:cli` - compile assets using the rake task - the most correct method, but slow.
|
55
|
-
- `:rails` - compile assets by loading rails environment (default) - fast, but does not pick up changes.
|
38
|
+
- `:rails` - compile assets by loading rails environment (default) - fast, but does not pick up changes. Additionally it relies on a single instance of your app to be loaded, so you can't have multiple guards with different rails configurations.
|
56
39
|
|
40
|
+
`:rails_env` option is available that allows you to specify the Rails environment to use (defaults to 'test').
|
57
41
|
|
58
42
|
|
59
43
|
For example:
|
@@ -61,7 +45,7 @@ For example:
|
|
61
45
|
|
62
46
|
```ruby
|
63
47
|
# This is the default behaviour
|
64
|
-
guard 'rails-assets', :run_on => [:start, :change], :runner => :rails do
|
48
|
+
guard 'rails-assets', :run_on => [:start, :change], :runner => :rails, :rails_env => 'test' do
|
65
49
|
watch(%r{^app/assets/.+$})
|
66
50
|
end
|
67
51
|
|
data/guard-rails-assets.gemspec
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
module Guard
|
2
2
|
class RailsAssets::CliRunner
|
3
|
-
def initialize(options)
|
3
|
+
def initialize(options={})
|
4
|
+
@rails_env = (options[:rails_env] || 'test').to_s
|
4
5
|
end
|
5
6
|
|
6
7
|
def compile_assets
|
7
|
-
system "bundle exec rake assets:clean assets:precompile"
|
8
|
+
system "RAILS_ENV=#{@rails_env} bundle exec rake assets:clean assets:precompile"
|
8
9
|
end
|
9
10
|
end
|
10
11
|
end
|
@@ -2,63 +2,57 @@ require 'rake/dsl_definition'
|
|
2
2
|
module Guard
|
3
3
|
|
4
4
|
class RailsAssets::RailsRunner
|
5
|
+
@@rails_booted = false # Only one rails app is allowed, so make it a class var
|
6
|
+
@@rails_env = nil
|
5
7
|
|
6
|
-
def initialize(options)
|
7
|
-
|
8
|
+
def initialize(options={})
|
9
|
+
@@rails_env = (options[:rails_env] || 'test').to_s unless @@rails_booted
|
8
10
|
end
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
def precompile
|
23
|
-
Sprockets::Helpers::RailsHelper
|
24
|
-
|
25
|
-
assets = Rails.application.config.assets.precompile
|
26
|
-
# Always perform caching so that asset_path appends the timestamps to file references.
|
27
|
-
Rails.application.config.action_controller.perform_caching = true
|
28
|
-
Rails.application.assets.precompile(*assets)
|
12
|
+
def self.apply_hacks
|
13
|
+
# TODO: Hack due to Rails 3.1 issue: https://github.com/rails/rails/issues/2663#issuecomment-1990121
|
14
|
+
ENV["RAILS_GROUPS"] ||= "assets"
|
15
|
+
ENV["RAILS_ENV"] ||= @@rails_env
|
16
|
+
|
17
|
+
# TODO: Now another hack: Rails replaces Rails.application.assets with Rails.applciation.assets.index
|
18
|
+
# (this happens when config.action_controller.perform_caching is true)
|
19
|
+
# It caches all the assets, so that the Rakse task can't be reused
|
20
|
+
require 'sprockets/environment'
|
21
|
+
Sprockets::Environment.class_eval do
|
22
|
+
def index; self; end # instead of Index.new(self)
|
29
23
|
end
|
30
24
|
end
|
31
25
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
26
|
+
# Methods to run the asset pipeline
|
27
|
+
# See as a reference https://github.com/rails/rails/blob/master/actionpack/lib/sprockets/assets.rake
|
28
|
+
def self.boot_rails
|
29
|
+
return if @@rails_booted
|
30
|
+
puts "Booting Rails for #{@@rails_env} environment."
|
31
|
+
apply_hacks
|
32
|
+
require 'rake'
|
33
|
+
require "#{Dir.pwd}/config/environment.rb"
|
34
|
+
app = ::Rails.application
|
35
|
+
|
36
|
+
app.assets.cache = nil # don't touch my FS pls. (can we use `app.config.assets.cache_store = false` instead)?
|
37
|
+
app.load_tasks
|
38
|
+
@@rails_booted = true
|
37
39
|
end
|
38
40
|
|
39
|
-
def run_compiler
|
40
|
-
begin
|
41
|
-
@failed = false
|
42
|
-
AssetPipeline.clean
|
43
|
-
AssetPipeline.precompile
|
44
|
-
rescue => e
|
45
|
-
puts "An error occurred compiling assets: #{e}"
|
46
|
-
@failed = true
|
47
|
-
end
|
48
|
-
end
|
49
41
|
|
50
42
|
# Runs the asset pipeline compiler.
|
51
43
|
#
|
52
44
|
# @return [ Boolean ] Whether the compilation was successful or not
|
53
45
|
def compile_assets
|
54
|
-
boot_rails
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
46
|
+
self.class.boot_rails
|
47
|
+
return false unless @@rails_booted
|
48
|
+
begin
|
49
|
+
Rake::Task['assets:clean'].execute
|
50
|
+
Rake::Task['assets:precompile'].execute
|
51
|
+
true
|
52
|
+
rescue => e
|
53
|
+
puts "An error occurred compiling assets: #{e}"
|
54
|
+
false
|
55
|
+
end
|
62
56
|
end
|
63
57
|
end
|
64
58
|
end
|
data/lib/guard/version.rb
CHANGED
@@ -2,11 +2,18 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Guard::RailsAssets::CliRunner do
|
4
4
|
|
5
|
-
subject { Guard::RailsAssets::CliRunner.new({}) }
|
6
|
-
|
7
5
|
it 'should run the command' do
|
8
6
|
subject.stub(:system)
|
9
|
-
subject.should_receive(:system).with("bundle exec rake assets:clean assets:precompile")
|
7
|
+
subject.should_receive(:system).with("RAILS_ENV=test bundle exec rake assets:clean assets:precompile")
|
10
8
|
subject.compile_assets
|
11
9
|
end
|
10
|
+
|
11
|
+
context 'with production environment' do
|
12
|
+
subject { Guard::RailsAssets::CliRunner.new(:rails_env => :production) }
|
13
|
+
it 'should run the command' do
|
14
|
+
subject.stub(:system)
|
15
|
+
subject.should_receive(:system).with("RAILS_ENV=production bundle exec rake assets:clean assets:precompile")
|
16
|
+
subject.compile_assets
|
17
|
+
end
|
18
|
+
end
|
12
19
|
end
|
@@ -2,70 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Guard::RailsAssets::RailsRunner do
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
describe ".compile_assets" do
|
8
|
-
|
9
|
-
let(:asset_pipeline) { Guard::RailsAssets::RailsRunner::AssetPipeline }
|
10
|
-
|
11
|
-
before do
|
12
|
-
described_class.class_eval do
|
13
|
-
def boot_rails
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
context "successful compile" do
|
19
|
-
before do
|
20
|
-
asset_pipeline.stub(:clean)
|
21
|
-
asset_pipeline.stub(:precompile)
|
22
|
-
end
|
23
|
-
|
24
|
-
it "cleans the assets" do
|
25
|
-
asset_pipeline.should_receive(:clean)
|
26
|
-
subject.compile_assets
|
27
|
-
end
|
28
|
-
|
29
|
-
it "runs the compiler" do
|
30
|
-
asset_pipeline.should_receive(:precompile)
|
31
|
-
subject.compile_assets
|
32
|
-
end
|
33
|
-
|
34
|
-
it "returns true" do
|
35
|
-
subject.compile_assets.should be_true
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
context "with a compilation error" do
|
40
|
-
|
41
|
-
before do
|
42
|
-
asset_pipeline.stub(:clean)
|
43
|
-
asset_pipeline.should_receive(:precompile).and_raise(StandardError)
|
44
|
-
@output = capture(:stdout) do
|
45
|
-
@result = subject.compile_assets
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
it "outputs the error" do
|
50
|
-
@output.should include("An error occurred")
|
51
|
-
end
|
52
|
-
|
53
|
-
it "returns false" do
|
54
|
-
@result.should be_false
|
55
|
-
end
|
56
|
-
|
57
|
-
context "on next successful compile" do
|
58
|
-
|
59
|
-
it "works" do
|
60
|
-
asset_pipeline.should_receive(:clean)
|
61
|
-
asset_pipeline.should_receive(:precompile)
|
62
|
-
subject.compile_assets.should be_true
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
66
|
-
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
5
|
+
it 'should be tested properly as a Rails engine'
|
70
6
|
|
7
|
+
it { should respond_to :compile_assets }
|
71
8
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: guard-rails-assets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,12 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-09-04 00:00:00.000000000 +10:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: guard
|
17
|
-
requirement: &
|
17
|
+
requirement: &23672500 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *23672500
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: rake
|
28
|
-
requirement: &
|
28
|
+
requirement: &23663340 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,21 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *23663340
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: rails
|
39
|
+
requirement: &23662760 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 3.1.0
|
45
|
+
type: :runtime
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *23662760
|
37
48
|
- !ruby/object:Gem::Dependency
|
38
49
|
name: rspec
|
39
|
-
requirement: &
|
50
|
+
requirement: &23661860 !ruby/object:Gem::Requirement
|
40
51
|
none: false
|
41
52
|
requirements:
|
42
53
|
- - ! '>='
|
@@ -44,7 +55,7 @@ dependencies:
|
|
44
55
|
version: '0'
|
45
56
|
type: :development
|
46
57
|
prerelease: false
|
47
|
-
version_requirements: *
|
58
|
+
version_requirements: *23661860
|
48
59
|
description: guard-rails-assets automatically generates JavaScript, CSS, Image files
|
49
60
|
using Rails assets pipelie
|
50
61
|
email:
|
@@ -55,7 +66,6 @@ extra_rdoc_files: []
|
|
55
66
|
files:
|
56
67
|
- .gitignore
|
57
68
|
- Gemfile
|
58
|
-
- Gemfile.lock
|
59
69
|
- README.md
|
60
70
|
- Rakefile
|
61
71
|
- guard-rails-assets.gemspec
|
@@ -83,12 +93,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
83
93
|
- - ! '>='
|
84
94
|
- !ruby/object:Gem::Version
|
85
95
|
version: '0'
|
96
|
+
segments:
|
97
|
+
- 0
|
98
|
+
hash: 4449380752411900683
|
86
99
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
100
|
none: false
|
88
101
|
requirements:
|
89
102
|
- - ! '>='
|
90
103
|
- !ruby/object:Gem::Version
|
91
104
|
version: '0'
|
105
|
+
segments:
|
106
|
+
- 0
|
107
|
+
hash: 4449380752411900683
|
92
108
|
requirements: []
|
93
109
|
rubyforge_project: guard-rails-assets
|
94
110
|
rubygems_version: 1.6.2
|
data/Gemfile.lock
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
guard-rails-assets (0.0.5)
|
5
|
-
guard
|
6
|
-
rake
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: http://rubygems.org/
|
10
|
-
specs:
|
11
|
-
diff-lcs (1.1.2)
|
12
|
-
guard (0.5.1)
|
13
|
-
thor (~> 0.14.6)
|
14
|
-
rake (0.9.2)
|
15
|
-
rspec (2.6.0)
|
16
|
-
rspec-core (~> 2.6.0)
|
17
|
-
rspec-expectations (~> 2.6.0)
|
18
|
-
rspec-mocks (~> 2.6.0)
|
19
|
-
rspec-core (2.6.4)
|
20
|
-
rspec-expectations (2.6.0)
|
21
|
-
diff-lcs (~> 1.1.2)
|
22
|
-
rspec-mocks (2.6.0)
|
23
|
-
thor (0.14.6)
|
24
|
-
|
25
|
-
PLATFORMS
|
26
|
-
ruby
|
27
|
-
|
28
|
-
DEPENDENCIES
|
29
|
-
guard-rails-assets!
|
30
|
-
rake
|
31
|
-
rspec
|