Module: StartingBlocks::Watcher

Defined in:
lib/starting_blocks/watcher.rb

Class Method Summary collapse

Class Method Details

.add_it(file_that_changed) ⇒ Object



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

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



71
72
73
74
75
# File 'lib/starting_blocks/watcher.rb', line 71

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 { |c| the_clue_and_the_file_match c, file }
    matches.count > 0
  end
end

.run_it(file_that_changed) ⇒ Object



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

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



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/starting_blocks/watcher.rb', line 32

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

.the_clue_and_the_file_match(clue, file) ⇒ Object



27
28
29
30
# File 'lib/starting_blocks/watcher.rb', line 27

def the_clue_and_the_file_match clue, file
  file_without_extension = file.split('.')[0]
  file_without_extension.end_with?(clue) || file_without_extension.start_with?(clue)
end