guard-spring 0.0.1

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 ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ lib/bundler/man
9
+ pkg
10
+ rdoc
11
+ spec/reports
12
+ test/tmp
13
+ test/version_tmp
14
+ tmp
15
+
16
+ # YARD artifacts
17
+ .yardoc
18
+ _yardoc
19
+ doc/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in guard-spring.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Michał Knapik
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,40 @@
1
+ # Guard::Spring
2
+
3
+ Guard::Spring automatically runs RSpec with [Spring](https://github.com/jonleighton/spring).
4
+
5
+ Read more about [Spring](https://github.com/jonleighton/spring) - Rails application preloader.
6
+
7
+ Learn how to monitor file system changes with [Guard](https://github.com/guard/guard).
8
+
9
+
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ gem 'guard-spring', :git => 'git://github.com/mknapik/guard-spring.git'
15
+
16
+ And then execute:
17
+
18
+ $ bundle
19
+
20
+ ## Usage
21
+
22
+ Add rules to Guardfile:
23
+
24
+ $ guard init spring
25
+
26
+ Run guard. Press Enter to run all specs.
27
+
28
+ $ guard
29
+
30
+ After any modification of project file or spec should run RSpec with Spring.
31
+
32
+ You can modify the Guardfile to create your own rules and dependencies to run specs.
33
+
34
+ ## Contributing
35
+
36
+ 1. Fork it
37
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
38
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
39
+ 4. Push to the branch (`git push origin my-new-feature`)
40
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'guard/spring/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "guard-spring"
8
+ gem.version = Guard::SpringVersion::VERSION
9
+ gem.platform = Gem::Platform::RUBY
10
+ gem.authors = ["Michał Knapik"]
11
+ gem.email = ["mknapik@student.agh.edu.pl"]
12
+ gem.description = %q{Guard::Spring automatically runs tests with spring}
13
+ gem.summary = %q{Pushes watched files to spring}
14
+ gem.homepage = 'https://github.com/mknapik/guard-spring'
15
+
16
+ gem.files = `git ls-files`.split($/)
17
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
18
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
+ gem.require_paths = ["lib"]
20
+
21
+ gem.add_dependency 'guard'
22
+ gem.add_dependency 'spring'
23
+ end
@@ -0,0 +1,60 @@
1
+ require 'guard'
2
+ require 'guard/guard'
3
+ require 'spring/commands'
4
+
5
+ module Guard
6
+ class Spring < Guard
7
+ autoload :Runner, 'guard/spring/runner'
8
+ attr_accessor :runner
9
+
10
+ # Initialize a Guard.
11
+ # @param [Array<Guard::Watcher>] watchers the Guard file watchers
12
+ # @param [Hash] options the custom Guard options
13
+ def initialize(watchers = [], options = {})
14
+ super
15
+ @runner = Runner.new(options)
16
+ end
17
+
18
+ # Call once when Guard starts. Please override initialize method to init stuff.
19
+ # @raise [:task_has_failed] when start has failed
20
+ def start
21
+ runner.kill_spring
22
+ runner.launch_spring('Start')
23
+ end
24
+
25
+ # Called when `stop|quit|exit|s|q|e + enter` is pressed (when Guard quits).
26
+ # @raise [:task_has_failed] when stop has failed
27
+ def stop
28
+ runner.kill_spring
29
+ end
30
+
31
+ # Called when `reload|r|z + enter` is pressed.
32
+ # This method should be mainly used for "reload" (really!) actions like reloading passenger/spork/bundler/...
33
+ # @raise [:task_has_failed] when reload has failed
34
+ def reload
35
+ runner.kill_spring
36
+ runner.launch_spring('Reload')
37
+ end
38
+
39
+ # Called when just `enter` is pressed
40
+ # This method should be principally used for long action like running all specs/tests/...
41
+ # @raise [:task_has_failed] when run_all has failed
42
+ def run_all
43
+ runner.run_all
44
+ end
45
+
46
+ # Called on file(s) modifications that the Guard watches.
47
+ # @param [Array<String>] paths the changes files or paths
48
+ # @raise [:task_has_failed] when run_on_change has failed
49
+ def run_on_changes(paths)
50
+ runner.run(paths)
51
+ end
52
+
53
+ # Called on file(s) deletions that the Guard watches.
54
+ # @param [Array<String>] paths the deleted files or paths
55
+ # @raise [:task_has_failed] when run_on_change has failed
56
+ def run_on_removals(paths)
57
+ runner.run_all
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,82 @@
1
+ require 'spring/commands'
2
+
3
+ module Guard
4
+ class Spring
5
+ class Runner
6
+ attr_reader :options
7
+
8
+ def initialize(options = {})
9
+ @options = options
10
+ UI.info 'Guard::Spring Initialized'
11
+ end
12
+
13
+ def launch_spring(action)
14
+ UI.info "#{action}ing Spring", :reset => true
15
+ start_spring
16
+ end
17
+
18
+ def kill_spring
19
+ stop_spring
20
+ end
21
+
22
+ def run(paths)
23
+ existing_paths = paths.uniq.select { |path| File.exist? "#{Dir.pwd}/#{path}" }
24
+ rspec_paths = existing_paths.select { |path| path =~ /spec(\/\w+)*(\/\w+_spec\.rb)?/ }
25
+ run_command 'spring rspec', existing_paths.join(' ') unless rspec_paths.empty?
26
+
27
+ # TBD: # testunit_paths = existing_paths.select { |path| path =~ /test(.*\.rb)?/ }
28
+ # TBD: # run_command 'spring testunit', existing_paths.join(' ') unless testunit_paths.empty?
29
+ end
30
+
31
+ def run_all
32
+ if rspec?
33
+ run(%w(spec))
34
+ elsif test_unit?
35
+ run(Dir['test/**/*_test.rb']+Dir['test/**/test_*.rb'])
36
+ end
37
+ end
38
+
39
+ private
40
+
41
+ def run_command(cmd, options = '')
42
+ UI.debug "Command execution: #{cmd} #{options}"
43
+ system "#{cmd} #{options}"
44
+ end
45
+
46
+ def fork_exec(cmd, options = '')
47
+ fork do
48
+ UI.debug "(Fork) Command execution: #{cmd} #{options}"
49
+ exec "#{cmd} #{options}"
50
+ end
51
+ end
52
+
53
+ def start_spring
54
+ fork_exec('spring start > /dev/null')
55
+ end
56
+
57
+ def stop_spring
58
+ run_command('spring stop')
59
+ UI.info 'Stopping Spring ', :reset => true
60
+ end
61
+
62
+ def push_command(paths)
63
+ cmd_parts = []
64
+ cmd_parts << 'spring rspec'
65
+ cmd_parts << paths.join(' ')
66
+ cmd_parts.join(' ')
67
+ end
68
+
69
+ def bundler?
70
+ @bundler ||= options[:bundler] != false && File.exist?("#{Dir.pwd}/Gemfile")
71
+ end
72
+
73
+ def test_unit?
74
+ @test_unit ||= options[:test_unit] != false && File.exist?("#{Dir.pwd}/test/test_helper.rb")
75
+ end
76
+
77
+ def rspec?
78
+ @rspec ||= options[:rspec] != false && File.exist?("#{Dir.pwd}/spec")
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,9 @@
1
+ guard 'spring' do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^spec/spec_helper\.rb$}) { |m| 'spec' }
4
+ watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
5
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
6
+ watch(%r{^app/controllers/(.+)_(controller)\.rb$}) do |m|
7
+ %W(spec/routing/#{m[1]}_routing_spec.rb spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb spec/requests/#{m[1]}_spec.rb)
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ module Guard
2
+ module SpringVersion
3
+ VERSION = '0.0.1'
4
+ end
5
+ end
6
+
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: guard-spring
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Michał Knapik
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-23 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: guard
16
+ requirement: !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: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: spring
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: Guard::Spring automatically runs tests with spring
47
+ email:
48
+ - mknapik@student.agh.edu.pl
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - .gitignore
54
+ - Gemfile
55
+ - LICENSE.txt
56
+ - README.md
57
+ - Rakefile
58
+ - guard-spring.gemspec
59
+ - lib/guard/spring.rb
60
+ - lib/guard/spring/runner.rb
61
+ - lib/guard/spring/templates/Guardfile
62
+ - lib/guard/spring/version.rb
63
+ homepage: https://github.com/mknapik/guard-spring
64
+ licenses: []
65
+ post_install_message:
66
+ rdoc_options: []
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ! '>='
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubyforge_project:
83
+ rubygems_version: 1.8.25
84
+ signing_key:
85
+ specification_version: 3
86
+ summary: Pushes watched files to spring
87
+ test_files: []