Module: StartingBlocks::Watcher

Defined in:
lib/starting_blocks/watcher.rb

Class Method Summary collapse

Class Method Details

.add_it(file_that_changed) ⇒ Object



50
51
52
53
54
# File 'lib/starting_blocks/watcher.rb', line 50

def add_it(file_that_changed)
  return if not_concerned_about? file_that_changed
  StartingBlocks.display "Adding: #{file_that_changed}"
  @all_files << file_that_changed
end

.delete_it(file_that_changed) ⇒ Object



65
66
67
68
69
# File 'lib/starting_blocks/watcher.rb', line 65

def delete_it(file_that_changed)
  return if not_concerned_about? file_that_changed
  StartingBlocks.display "Deleting: #{file_that_changed}"
  @all_files.delete(file_that_changed)
end

.filter_files_according_to_the_contract(files, contract) ⇒ Object



8
9
10
11
12
13
14
15
# File 'lib/starting_blocks/watcher.rb', line 8

def self.filter_files_according_to_the_contract files, contract
  extensions = contract.extensions.map { |x| x.gsub('.', '').downcase }
  files.select do |file|
    splits = file.split('/')[-1].split('.')
    (splits.count == 1 && extensions.include?('')) ||
    (extensions.include?(splits[-1].downcase))
  end
end

.filter_files_by_file_clues(files, clues) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/starting_blocks/watcher.rb', line 17

def self.filter_files_by_file_clues files, clues
  files.select do |file|
    file_without_path = file.split('/')[-1]
    matches = clues.select { |clue| file_without_path.include? clue }
    matches.count > 0
  end
end

.run_it(file_that_changed) ⇒ Object



56
57
58
59
60
61
62
63
# File 'lib/starting_blocks/watcher.rb', line 56

def run_it(file_that_changed)
  @running = true
  specs = get_the_specs_to_run file_that_changed
  StartingBlocks.display "Matches: #{specs.inspect}"
  results = @runner.run_files specs
  store_the_specs_if_they_failed results, specs
  @running = false
end

.start_watching(dir, options) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/starting_blocks/watcher.rb', line 26

def start_watching(dir, options)
  StartingBlocks.display("Start watching #{dir.getwd} with #{options.inspect}")
  set_up_the_runner options
  set_up_the_contract options

  location = dir.getwd
  @all_files = Dir['**/*']

  puts "Listening to: #{location}"

  callback = Proc.new do |modified, added, removed|
               StartingBlocks.display("File counts: #{[modified.count, added.count, removed.count].inspect}")
               StartingBlocks::Watcher.add_it(added[0])      if added.count > 0
               StartingBlocks::Watcher.delete_it(removed[0]) if removed.count > 0
               next if @running

               modified = StartingBlocks::Watcher.filter_files_according_to_the_contract modified, @contract

               StartingBlocks::Watcher.run_it(modified[0])   if modified.count > 0
             end

  ::Listen::Listener.new location, &callback
end