guard-rails-assets 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ pkg/*
2
+ *.gem
3
+ *.rbc
4
+ *.swp
5
+ .bundle
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ gem 'rake'
@@ -0,0 +1,30 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ guard-rails-assets (0.0.1)
5
+ guard
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ diff-lcs (1.1.2)
11
+ guard (0.4.2)
12
+ thor (~> 0.14.6)
13
+ rake (0.9.2)
14
+ rspec (2.6.0)
15
+ rspec-core (~> 2.6.0)
16
+ rspec-expectations (~> 2.6.0)
17
+ rspec-mocks (~> 2.6.0)
18
+ rspec-core (2.6.4)
19
+ rspec-expectations (2.6.0)
20
+ diff-lcs (~> 1.1.2)
21
+ rspec-mocks (2.6.0)
22
+ thor (0.14.6)
23
+
24
+ PLATFORMS
25
+ ruby
26
+
27
+ DEPENDENCIES
28
+ guard-rails-assets!
29
+ rake
30
+ rspec
@@ -0,0 +1,108 @@
1
+ # Guard::RailsAssets
2
+
3
+
4
+ Guard::RailsAssets compiles all the assets in Rails 3.1 application automatically when files are modified.
5
+
6
+ Tested on MRI Ruby 1.9.2 (please report if it works on your platform).
7
+ Currently only POSIX system is supported. Sorry Windows guys :(
8
+
9
+ If you have any questions please contact me [@dnagir](http://www.ApproachE.com).
10
+
11
+ ## Install
12
+
13
+ Please be sure to have [Guard](https://github.com/guard/guard) installed.
14
+
15
+ Install the gem:
16
+
17
+ Add it to your `Gemfile`, preferably inside the test and development group:
18
+
19
+ ```ruby
20
+ gem 'guard-rails-assets'
21
+ ```
22
+
23
+ Add guard definition to your `Guardfile` by running:
24
+
25
+ ```bash
26
+ $ guard init rails-assets
27
+ ```
28
+
29
+ ## Rails 3.1
30
+
31
+ The Rails 3.1 is a mandatory requirement, but is not enforeced via dependencies for now.
32
+ The reason is that the assets are currently compiled via command line and thus this guard does not
33
+ explicitly depend on Rails.
34
+
35
+ Good thing about it is that assets will always be same as produced by Rails.
36
+ Bad thing is that it is pretty slow (~10 seconds) because it starts Rails from ground zero.
37
+
38
+ ## Rails Assets Pipeline
39
+
40
+ The convention used in this guard are:
41
+
42
+ - assets prefix is set to 'assets' meaning that all assets are compiled in to `public/assets` folder;
43
+ - the assets folder is disposable and can be cleared out.
44
+
45
+ If the conventions above are not valid for you then perhaps you'd better submit a patch.
46
+
47
+ ## Guardfile and Options
48
+
49
+ In addition to the standard configuration, this Guard has options to specify when exacly to precompile assets.
50
+
51
+ - `:start` - compile assets when the guard starts (default)
52
+ - `:reload` - compile assets when the guard quites (Ctrl-C) (not enabled)
53
+ - `:all` - compile assets when running all the guard (Ctrl-/) (default)
54
+ - `:change` - compile assets when watched files change (default)
55
+
56
+ For example:
57
+
58
+
59
+ ```ruby
60
+ # compile ONLY when something changes
61
+ guard 'rails-assets', :run_on => :change do
62
+ watch(%r{^app/assets/.+$})
63
+ end
64
+
65
+ # compile when something changes and when starting
66
+ guard 'rails-assets', :run_on => [:start, :change] do
67
+ watch(%r{^app/assets/.+$})
68
+ end
69
+
70
+ # This is the default behaviour
71
+ guard 'rails-assets', :run_on => [:start, :change, :all] do
72
+ watch(%r{^app/assets/.+$})
73
+ end
74
+ ```
75
+
76
+ ## Development
77
+
78
+ - Source hosted at [GitHub](https://github.com/dnagir/guard-rails-assets)
79
+ - Report issues and feature requests to [GitHub Issues](https://github.com/dnagir/guard-rails-assets/issues)
80
+
81
+
82
+ Pull requests are very welcome!
83
+
84
+ ## License
85
+
86
+ (The MIT License)
87
+
88
+ Copyright (c) 2010 - 2011 Michael Kessler
89
+
90
+ Permission is hereby granted, free of charge, to any person obtaining
91
+ a copy of this software and associated documentation files (the
92
+ 'Software'), to deal in the Software without restriction, including
93
+ without limitation the rights to use, copy, modify, merge, publish,
94
+ distribute, sublicense, and/or sell copies of the Software, and to
95
+ permit persons to whom the Software is furnished to do so, subject to
96
+ the following conditions:
97
+
98
+ The above copyright notice and this permission notice shall be
99
+ included in all copies or substantial portions of the Software.
100
+
101
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
102
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
103
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
104
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
105
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
106
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
107
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
108
+
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "guard/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "guard-rails-assets"
7
+ s.version = Guard::RailsAssetsVersion::VERSION
8
+ s.authors = ["Dmytrii Nagirniak"]
9
+ s.email = ["dnagir@gmail.com"]
10
+ s.homepage = "http://github.com/dnagir/guard-rails-assets"
11
+ s.summary = %q{Guard for compiling Rails assets}
12
+ s.description = %q{guard-rails-assets automatically generates JavaScript, CSS, Image files using Rails assets pipelie}
13
+
14
+ s.rubyforge_project = "guard-rails-assets"
15
+
16
+ s.add_dependency 'guard'
17
+ s.add_development_dependency 'rspec'
18
+
19
+ s.files = `git ls-files`.split("\n")
20
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
22
+ s.require_paths = ["lib"]
23
+ end
@@ -0,0 +1,49 @@
1
+ require 'guard'
2
+ require 'guard/guard'
3
+
4
+ module Guard
5
+ class RailsAssets < Guard
6
+ def initialize(watchers=[], options={})
7
+ super
8
+ @options = options || {}
9
+ end
10
+
11
+ def start
12
+ compile_assets if run_for? :start
13
+ end
14
+
15
+ def reload
16
+ compile_assets if run_for? :reload
17
+ end
18
+
19
+ def run_all
20
+ compile_assets if run_for? :all
21
+ end
22
+
23
+ def run_on_change(paths=[])
24
+ compile_assets if run_for? :change
25
+ end
26
+
27
+ def compile_assets
28
+ puts 'Compiling rails assets'
29
+ result = system "rm -rf public/assets && bundle exec rake assets:precompile"
30
+ if result
31
+ tree = `tree public/assets`
32
+ puts tree
33
+ summary = tree.split("\n").last
34
+ Notifier::notify summary, :title => 'Assets compiled'
35
+ else
36
+ Notifier::notify 'see the details in the terminal', :title => "Can't compile assets", :image => :failed
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ def run_for? command
43
+ run_on = @options[:run_on]
44
+ run_on = [:start, :all, :change] if not run_on or run_on.empty?
45
+ run_on = [run_on] unless run_on.respond_to?(:include?)
46
+ run_on.include?(command)
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,8 @@
1
+
2
+ # Make sure this guard is ABOVE any guards using assets such as jasmine-headless-webkit
3
+ # It is recommended to make explicit list of assets in `config/application.rb`
4
+ # config.assets.precompile = ['application.js', 'application.css', 'all-ie.css']
5
+ guard 'rails-assets' do
6
+ watch(%r{^app/assets/.+$})
7
+ watch('config/application.rb')
8
+ end
@@ -0,0 +1,5 @@
1
+ module Guard
2
+ module RailsAssetsVersion
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+ require 'guard/rails-assets'
3
+
4
+ describe Guard::RailsAssets do
5
+ let(:options) { {} }
6
+ subject { Guard::RailsAssets.new(['watchers'], options) }
7
+
8
+ it 'should be able to create guard' do
9
+ ::Guard::RailsAssets.new(['watchers'], {:options=>:here}).should_not be_nil
10
+ end
11
+
12
+ describe '#start' do
13
+ it_behaves_like 'guard command', :command => :start, :run => true
14
+ end
15
+
16
+ describe '#reload' do
17
+ it_behaves_like 'guard command', :command => :reload, :run => false
18
+ end
19
+
20
+ describe '#run_all' do
21
+ it_behaves_like 'guard command', :command => :run_all, :run => true
22
+ end
23
+
24
+ describe '#run_on_change' do
25
+ it_behaves_like 'guard command', :command => :run_on_change, :run => true
26
+ end
27
+
28
+
29
+ describe 'asset compilation using CLI' do
30
+ def stub_system_with result
31
+ subject.should_receive(:system).with("rm -rf public/assets && bundle exec rake assets:precompile").and_return result
32
+ end
33
+
34
+ it 'should notify on success' do
35
+ stub_system_with true
36
+ subject.should_receive(:`).with('tree public/assets').and_return "a\nb\n1 directory, 2 files"
37
+ Guard::Notifier.should_receive(:notify).with('1 directory, 2 files', :title => 'Assets compiled')
38
+ subject.compile_assets
39
+ end
40
+ it 'should notify on failure' do
41
+ stub_system_with false
42
+ Kernel.should_not_receive(:`)
43
+ Guard::Notifier.should_receive(:notify).with('see the details in the terminal', :title => "Can't compile assets", :image => :failed)
44
+ subject.compile_assets
45
+ end
46
+ end
47
+
48
+ describe 'custom assets prefix' do
49
+ it 'should use given prefix'
50
+ end
51
+ end
@@ -0,0 +1,19 @@
1
+ require 'rspec'
2
+ require 'guard/rails-assets'
3
+ require 'support/shared_examples'
4
+
5
+ RSpec.configure do |config|
6
+ config.color_enabled = true
7
+ config.filter_run :focus => true
8
+ config.run_all_when_everything_filtered = true
9
+
10
+ config.before(:each) do
11
+ ENV["GUARD_ENV"] = 'test'
12
+ @project_path = Pathname.new(File.expand_path('../../', __FILE__))
13
+ end
14
+
15
+ config.after(:each) do
16
+ ENV["GUARD_ENV"] = nil
17
+ end
18
+
19
+ end
@@ -0,0 +1,31 @@
1
+ shared_examples_for "guard command" do |info|
2
+
3
+ def set_run_on_option info
4
+ # run_on_change -> change
5
+ # run_all -> all
6
+ run_option = info[:command].to_s.match(/(.*_)?(\w+)/)[2].to_sym
7
+ options[:run_on] = [run_option]
8
+ end
9
+
10
+ it "should execute #{info[:command]} when said so" do
11
+ set_run_on_option info
12
+ subject.should_receive(:compile_assets)
13
+ subject.send(info[:command])
14
+ end
15
+ it "should not execute #{info[:command]} when disabled" do
16
+ options[:run_on] = [:something_other]
17
+ subject.should_not_receive(:compile_assets)
18
+ subject.send(info[:command])
19
+ end
20
+
21
+ it "should #{info[:run] ? '' : 'not '}execute #{info[:command]} by default" do
22
+ options[:run_on] = nil
23
+ if info[:run]
24
+ subject.should_receive(:compile_assets)
25
+ else
26
+ subject.should_not_receive(:compile_assets)
27
+ end
28
+ subject.send(info[:command])
29
+ end
30
+
31
+ end
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: guard-rails-assets
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Dmytrii Nagirniak
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-06-17 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: guard
16
+ requirement: &15869340 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *15869340
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &15825660 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *15825660
36
+ description: guard-rails-assets automatically generates JavaScript, CSS, Image files
37
+ using Rails assets pipelie
38
+ email:
39
+ - dnagir@gmail.com
40
+ executables: []
41
+ extensions: []
42
+ extra_rdoc_files: []
43
+ files:
44
+ - .gitignore
45
+ - Gemfile
46
+ - Gemfile.lock
47
+ - README.md
48
+ - Rakefile
49
+ - guard-rails-assets.gemspec
50
+ - lib/guard/rails-assets.rb
51
+ - lib/guard/rails-assets/templates/Guardfile
52
+ - lib/guard/version.rb
53
+ - spec/guard/rails-assets_spec.rb
54
+ - spec/spec_helper.rb
55
+ - spec/support/shared_examples.rb
56
+ homepage: http://github.com/dnagir/guard-rails-assets
57
+ licenses: []
58
+ post_install_message:
59
+ rdoc_options: []
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ segments:
69
+ - 0
70
+ hash: -3097363919137116973
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ segments:
78
+ - 0
79
+ hash: -3097363919137116973
80
+ requirements: []
81
+ rubyforge_project: guard-rails-assets
82
+ rubygems_version: 1.8.5
83
+ signing_key:
84
+ specification_version: 3
85
+ summary: Guard for compiling Rails assets
86
+ test_files: []