spectator 1.2.6 → 1.2.8
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.
- checksums.yaml +7 -0
- data/README.md +2 -0
- data/lib/spectator.rb +42 -32
- data/lib/spectator/control.rb +57 -16
- data/lib/spectator/specs.rb +1 -1
- data/lib/spectator/version.rb +1 -1
- data/spectator.gemspec +5 -4
- metadata +43 -31
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: 5c72941ed2f2136eca2366723b7942f51ceb7f8b
         | 
| 4 | 
            +
              data.tar.gz: 5807a32aeb0a36890c8329376d08d8c1305bc94b
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: a6309a9b3167ccc4b92b280c6637beaa3e4b07a3ffc29bfc98af9df82980644056bd0df2893807a701e8dfc7d1fbb66b0052a48cb271df9a88b52226d1a0a903
         | 
| 7 | 
            +
              data.tar.gz: 4bdae2d7f3005dbcfa613f1cd33662855291e957dfc6969fb4ce78d4d3a83d26a88fcd140aec19c51c4a18c456cba29bc433c69a0ab82e0a9297066f8083473b
         | 
    
        data/README.md
    CHANGED
    
    
    
        data/lib/spectator.rb
    CHANGED
    
    | @@ -17,29 +17,35 @@ module Spectator | |
| 17 17 | 
             
                include CommandLine
         | 
| 18 18 | 
             
                include Specs
         | 
| 19 19 | 
             
                include Control
         | 
| 20 | 
            -
             | 
| 20 | 
            +
             | 
| 21 21 | 
             
                def matchers
         | 
| 22 22 | 
             
                  @matchers ||= []
         | 
| 23 23 | 
             
                end
         | 
| 24 | 
            -
             | 
| 24 | 
            +
             | 
| 25 25 | 
             
                def queue
         | 
| 26 26 | 
             
                  @queue ||= Queue.new
         | 
| 27 27 | 
             
                end
         | 
| 28 | 
            -
             | 
| 28 | 
            +
             | 
| 29 29 | 
             
                def watch_paths!
         | 
| 30 | 
            -
                  listener | 
| 31 | 
            -
                  listener.filter %r{^(app|spec|lib|script)/}
         | 
| 32 | 
            -
                  listener.change do  |modified, added, removed|
         | 
| 33 | 
            -
                    [modified, added].flatten.each { |relative| queue.push relative }
         | 
| 34 | 
            -
                  end
         | 
| 35 | 
            -
                  listener.start(false)
         | 
| 30 | 
            +
                  listener.start
         | 
| 36 31 | 
             
                  sleep
         | 
| 37 32 | 
             
                end
         | 
| 38 | 
            -
             | 
| 33 | 
            +
             | 
| 34 | 
            +
                def listener
         | 
| 35 | 
            +
                  @listener ||= begin
         | 
| 36 | 
            +
                    listener = Listen.to(Dir.pwd, :relative_paths => true)
         | 
| 37 | 
            +
                    listener = listener.filter %r{^(app|spec|lib|script)/}
         | 
| 38 | 
            +
                    listener = listener.change do  |modified, added, removed|
         | 
| 39 | 
            +
                      [modified, added].flatten.each { |relative| queue.push relative }
         | 
| 40 | 
            +
                    end
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
             | 
| 39 45 | 
             
                def puts *args
         | 
| 40 46 | 
             
                  print args.join("\n")+"\n"
         | 
| 41 47 | 
             
                end
         | 
| 42 | 
            -
             | 
| 48 | 
            +
             | 
| 43 49 | 
             
                def run_specs specs
         | 
| 44 50 | 
             
                  rules.each do |(regexp, action)|
         | 
| 45 51 | 
             
                    regexp = Regexp.new(regexp)
         | 
| @@ -49,37 +55,41 @@ module Spectator | |
| 49 55 | 
             
                    end
         | 
| 50 56 | 
             
                  end
         | 
| 51 57 | 
             
                end
         | 
| 52 | 
            -
             | 
| 58 | 
            +
             | 
| 53 59 | 
             
                def wait_for_changes
         | 
| 54 60 | 
             
                  puts '--- Waiting for changes...'.cyan
         | 
| 55 | 
            -
             | 
| 61 | 
            +
             | 
| 56 62 | 
             
                  loop do
         | 
| 57 | 
            -
                    sleep 0.1 while queue.empty?
         | 
| 58 | 
            -
             | 
| 63 | 
            +
                    sleep 0.1 while queue.empty? or interrupted?
         | 
| 64 | 
            +
             | 
| 59 65 | 
             
                    files = []
         | 
| 60 66 | 
             
                    queue.size.times do
         | 
| 61 67 | 
             
                      files << queue.pop
         | 
| 62 68 | 
             
                    end
         | 
| 63 | 
            -
             | 
| 69 | 
            +
             | 
| 64 70 | 
             
                    files.compact!
         | 
| 65 71 | 
             
                    redo if files.empty?
         | 
| 66 | 
            -
             | 
| 67 | 
            -
                    
         | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
                     | 
| 72 | 
            +
             | 
| 73 | 
            +
                    rspec_files(*specs_for(files))
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
                end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                def specs_for files
         | 
| 78 | 
            +
                  specs = Set.new
         | 
| 79 | 
            +
                  files = [files] unless files.respond_to? :each
         | 
| 80 | 
            +
                  files.each do |file|
         | 
| 81 | 
            +
                    matched = matchers.map do |matcher|
         | 
| 82 | 
            +
                      file.scan(matcher).flatten.first.to_s.gsub(/\.rb$/,'')
         | 
| 83 | 
            +
                    end.flatten.reject(&:empty?)
         | 
| 84 | 
            +
                    specs += matched.uniq.map { |m| specs_for_file(m) }.flatten
         | 
| 76 85 | 
             
                  end
         | 
| 86 | 
            +
                  specs.to_a
         | 
| 77 87 | 
             
                end
         | 
| 78 | 
            -
             | 
| 88 | 
            +
             | 
| 79 89 | 
             
                def initialize &block
         | 
| 80 90 | 
             
                  yield self if block_given?
         | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 91 | 
            +
             | 
| 92 | 
            +
             | 
| 83 93 | 
             
                  matchers << %r{^spec/(.*)_spec\.rb$}
         | 
| 84 94 | 
             
                  matchers << %r{^(?:app|lib|script)/(.*)(?:\.rb|\.\w+|)$}
         | 
| 85 95 |  | 
| @@ -89,9 +99,9 @@ module Spectator | |
| 89 99 | 
             
                  watch_paths!
         | 
| 90 100 | 
             
                end
         | 
| 91 101 | 
             
              end
         | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 102 | 
            +
             | 
| 103 | 
            +
             | 
| 104 | 
            +
             | 
| 95 105 | 
             
              def self.run
         | 
| 96 106 | 
             
                Runner.new
         | 
| 97 107 | 
             
              end
         | 
    
        data/lib/spectator/control.rb
    CHANGED
    
    | @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            require 'thread'
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            module Spectator
         | 
| 2 4 | 
             
              module Control
         | 
| 3 5 | 
             
                def exit
         | 
| @@ -13,28 +15,67 @@ module Spectator | |
| 13 15 |  | 
| 14 16 | 
             
                def trap_int!
         | 
| 15 17 | 
             
                  # Ctrl-C
         | 
| 16 | 
            -
             | 
| 17 18 | 
             
                  @interrupted ||= false
         | 
| 19 | 
            +
                  @signal_queue = []
         | 
| 20 | 
            +
                  @signals_handler = Thread.new do
         | 
| 21 | 
            +
                    loop do
         | 
| 22 | 
            +
                      sleep(0.3)
         | 
| 23 | 
            +
                      if signal_queue.any?
         | 
| 24 | 
            +
                        listener.pause
         | 
| 25 | 
            +
                        ask_what_to_do!
         | 
| 26 | 
            +
                        listener.unpause
         | 
| 27 | 
            +
                        Thread.pass
         | 
| 28 | 
            +
                        signal_queue.shift
         | 
| 29 | 
            +
                      end
         | 
| 30 | 
            +
                    end
         | 
| 31 | 
            +
                  end
         | 
| 18 32 |  | 
| 19 33 | 
             
                  Signal.trap('INT') do
         | 
| 34 | 
            +
                    abort!     if exiting?
         | 
| 35 | 
            +
                    start_exit if interrupted?
         | 
| 36 | 
            +
                    signal_queue << :int
         | 
| 20 37 | 
             
                    puts ' (Interrupted with CTRL+C)'.red
         | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                attr_reader :signal_queue
         | 
| 42 | 
            +
             | 
| 43 | 
            +
             | 
| 44 | 
            +
                private
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                def interrupted?
         | 
| 47 | 
            +
                  signal_queue.any?
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                def ask_what_to_do!
         | 
| 51 | 
            +
                  if @exiting
         | 
| 52 | 
            +
                    abort!
         | 
| 53 | 
            +
                  else
         | 
| 54 | 
            +
                    answer = ask('--- What to do now? (q=quit, a=all-specs): ')
         | 
| 55 | 
            +
                    case answer
         | 
| 56 | 
            +
                    when 'q' then start_exit
         | 
| 57 | 
            +
                    when 'a' then rspec_all
         | 
| 58 | 
            +
                    else puts '--- Bad input, ignored.'.yellow
         | 
| 35 59 | 
             
                    end
         | 
| 60 | 
            +
                    puts '--- Waiting for changes...'.cyan
         | 
| 36 61 | 
             
                  end
         | 
| 37 62 | 
             
                end
         | 
| 38 | 
            -
             | 
| 63 | 
            +
             | 
| 64 | 
            +
                def start_exit
         | 
| 65 | 
            +
                  return if exiting?
         | 
| 66 | 
            +
                  @exiting = true
         | 
| 67 | 
            +
                  exit
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                def exiting?
         | 
| 71 | 
            +
                  @exiting
         | 
| 72 | 
            +
                end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                def ask question
         | 
| 75 | 
            +
                  print question.yellow
         | 
| 76 | 
            +
                  $stdout.flush
         | 
| 77 | 
            +
                  STDIN.gets.chomp.strip.downcase
         | 
| 78 | 
            +
                end
         | 
| 79 | 
            +
             | 
| 39 80 | 
             
              end
         | 
| 40 81 | 
             
            end
         | 
    
        data/lib/spectator/specs.rb
    CHANGED
    
    | @@ -32,7 +32,7 @@ module Spectator | |
| 32 32 | 
             
                  rspec files.join(' ')
         | 
| 33 33 | 
             
                end
         | 
| 34 34 |  | 
| 35 | 
            -
                def  | 
| 35 | 
            +
                def specs_for_file(path)
         | 
| 36 36 | 
             
                  print "--- Searching specs for #{path.inspect}...".yellow
         | 
| 37 37 | 
             
                  specs = match_specs path, Dir['spec/**/*_spec.rb']
         | 
| 38 38 | 
             
                  puts specs.empty? ? ' nothing found.'.red : " #{specs.size} matched.".green
         | 
    
        data/lib/spectator/version.rb
    CHANGED
    
    
    
        data/spectator.gemspec
    CHANGED
    
    | @@ -19,10 +19,11 @@ Gem::Specification.new do |s| | |
| 19 19 | 
             
              s.test_files    = `git ls-files -- {test,spec,features}/*`.split("\n")
         | 
| 20 20 | 
             
              s.executables   = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
         | 
| 21 21 | 
             
              s.require_paths = %w[lib]
         | 
| 22 | 
            -
             | 
| 23 | 
            -
              s.add_dependency 'listen'
         | 
| 24 | 
            -
              s.add_dependency 'term-ansicolor'
         | 
| 25 | 
            -
              s.add_dependency 'notify'
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              s.add_dependency 'listen',          '~> 1.3.0'
         | 
| 24 | 
            +
              s.add_dependency 'term-ansicolor',  '~> 1.2.2'
         | 
| 25 | 
            +
              s.add_dependency 'notify',          '~> 0.5.2'
         | 
| 26 | 
            +
             | 
| 26 27 | 
             
              s.add_development_dependency 'rake',    '~> 0.9'
         | 
| 27 28 | 
             
              s.add_development_dependency 'bundler', '~> 1.0'
         | 
| 28 29 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,8 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: spectator
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.2. | 
| 5 | 
            -
              prerelease: 
         | 
| 4 | 
            +
              version: 1.2.8
         | 
| 6 5 | 
             
            platform: ruby
         | 
| 7 6 | 
             
            authors:
         | 
| 8 7 | 
             
            - Elia
         | 
| @@ -10,63 +9,78 @@ authors: | |
| 10 9 | 
             
            autorequire: 
         | 
| 11 10 | 
             
            bindir: bin
         | 
| 12 11 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date:  | 
| 12 | 
            +
            date: 2013-08-27 00:00:00.000000000 Z
         | 
| 14 13 | 
             
            dependencies:
         | 
| 15 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 15 | 
             
              name: listen
         | 
| 17 | 
            -
              requirement:  | 
| 18 | 
            -
                none: false
         | 
| 16 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 19 17 | 
             
                requirements:
         | 
| 20 | 
            -
                - -  | 
| 18 | 
            +
                - - ~>
         | 
| 21 19 | 
             
                  - !ruby/object:Gem::Version
         | 
| 22 | 
            -
                    version:  | 
| 20 | 
            +
                    version: 1.3.0
         | 
| 23 21 | 
             
              type: :runtime
         | 
| 24 22 | 
             
              prerelease: false
         | 
| 25 | 
            -
              version_requirements:  | 
| 23 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 24 | 
            +
                requirements:
         | 
| 25 | 
            +
                - - ~>
         | 
| 26 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 27 | 
            +
                    version: 1.3.0
         | 
| 26 28 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 27 29 | 
             
              name: term-ansicolor
         | 
| 28 | 
            -
              requirement:  | 
| 29 | 
            -
                none: false
         | 
| 30 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 31 | 
             
                requirements:
         | 
| 31 | 
            -
                - -  | 
| 32 | 
            +
                - - ~>
         | 
| 32 33 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version:  | 
| 34 | 
            +
                    version: 1.2.2
         | 
| 34 35 | 
             
              type: :runtime
         | 
| 35 36 | 
             
              prerelease: false
         | 
| 36 | 
            -
              version_requirements:  | 
| 37 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 38 | 
            +
                requirements:
         | 
| 39 | 
            +
                - - ~>
         | 
| 40 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 41 | 
            +
                    version: 1.2.2
         | 
| 37 42 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 38 43 | 
             
              name: notify
         | 
| 39 | 
            -
              requirement:  | 
| 40 | 
            -
                none: false
         | 
| 44 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 41 45 | 
             
                requirements:
         | 
| 42 | 
            -
                - -  | 
| 46 | 
            +
                - - ~>
         | 
| 43 47 | 
             
                  - !ruby/object:Gem::Version
         | 
| 44 | 
            -
                    version:  | 
| 48 | 
            +
                    version: 0.5.2
         | 
| 45 49 | 
             
              type: :runtime
         | 
| 46 50 | 
             
              prerelease: false
         | 
| 47 | 
            -
              version_requirements:  | 
| 51 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 52 | 
            +
                requirements:
         | 
| 53 | 
            +
                - - ~>
         | 
| 54 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 55 | 
            +
                    version: 0.5.2
         | 
| 48 56 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 49 57 | 
             
              name: rake
         | 
| 50 | 
            -
              requirement:  | 
| 51 | 
            -
                none: false
         | 
| 58 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 52 59 | 
             
                requirements:
         | 
| 53 60 | 
             
                - - ~>
         | 
| 54 61 | 
             
                  - !ruby/object:Gem::Version
         | 
| 55 62 | 
             
                    version: '0.9'
         | 
| 56 63 | 
             
              type: :development
         | 
| 57 64 | 
             
              prerelease: false
         | 
| 58 | 
            -
              version_requirements:  | 
| 65 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 66 | 
            +
                requirements:
         | 
| 67 | 
            +
                - - ~>
         | 
| 68 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 69 | 
            +
                    version: '0.9'
         | 
| 59 70 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 60 71 | 
             
              name: bundler
         | 
| 61 | 
            -
              requirement:  | 
| 62 | 
            -
                none: false
         | 
| 72 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 63 73 | 
             
                requirements:
         | 
| 64 74 | 
             
                - - ~>
         | 
| 65 75 | 
             
                  - !ruby/object:Gem::Version
         | 
| 66 76 | 
             
                    version: '1.0'
         | 
| 67 77 | 
             
              type: :development
         | 
| 68 78 | 
             
              prerelease: false
         | 
| 69 | 
            -
              version_requirements:  | 
| 79 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 80 | 
            +
                requirements:
         | 
| 81 | 
            +
                - - ~>
         | 
| 82 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 83 | 
            +
                    version: '1.0'
         | 
| 70 84 | 
             
            description: Watches specs for a Ruby (1.8 or 1.9) or Rails (2 or 3) project
         | 
| 71 85 | 
             
            email:
         | 
| 72 86 | 
             
            - elia@schito.me
         | 
| @@ -90,27 +104,25 @@ files: | |
| 90 104 | 
             
            homepage: ''
         | 
| 91 105 | 
             
            licenses:
         | 
| 92 106 | 
             
            - MIT
         | 
| 107 | 
            +
            metadata: {}
         | 
| 93 108 | 
             
            post_install_message: 
         | 
| 94 109 | 
             
            rdoc_options: []
         | 
| 95 110 | 
             
            require_paths:
         | 
| 96 111 | 
             
            - lib
         | 
| 97 112 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 98 | 
            -
              none: false
         | 
| 99 113 | 
             
              requirements:
         | 
| 100 | 
            -
              - -  | 
| 114 | 
            +
              - - '>='
         | 
| 101 115 | 
             
                - !ruby/object:Gem::Version
         | 
| 102 116 | 
             
                  version: '0'
         | 
| 103 117 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 104 | 
            -
              none: false
         | 
| 105 118 | 
             
              requirements:
         | 
| 106 | 
            -
              - -  | 
| 119 | 
            +
              - - '>='
         | 
| 107 120 | 
             
                - !ruby/object:Gem::Version
         | 
| 108 121 | 
             
                  version: '0'
         | 
| 109 122 | 
             
            requirements: []
         | 
| 110 123 | 
             
            rubyforge_project: rspec-rails-watchr
         | 
| 111 | 
            -
            rubygems_version:  | 
| 124 | 
            +
            rubygems_version: 2.0.3
         | 
| 112 125 | 
             
            signing_key: 
         | 
| 113 | 
            -
            specification_version:  | 
| 126 | 
            +
            specification_version: 4
         | 
| 114 127 | 
             
            summary: Watches specs for a Ruby or Rails project
         | 
| 115 128 | 
             
            test_files: []
         | 
| 116 | 
            -
            has_rdoc: 
         |