miss_cleo 0.4.5 → 0.4.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/miss_cleo +18 -4
- data/lib/miss_cleo.rb +5 -1
- data/lib/miss_cleo/coverage_filter.rb +7 -5
- data/lib/miss_cleo/coverage_map.rb +17 -0
- data/lib/miss_cleo/coverage_map_utilities/save_zip.rb +13 -0
- data/lib/miss_cleo/diff_detector.rb +35 -0
- data/lib/miss_cleo/test_configurations/cucumber_config.rb +15 -17
- data/lib/miss_cleo/test_configurations/rspec_config.rb +15 -21
- data/lib/miss_cleo/test_runner.rb +38 -0
- data/lib/miss_cleo/test_selector.rb +14 -0
- data/lib/miss_cleo/tests_to_files_map_logger.rb +30 -0
- data/lib/miss_cleo/version.rb +1 -1
- data/miss_cleo.gemspec +3 -1
- metadata +27 -9
- data/lib/miss_cleo/coverage_map_helper.rb +0 -73
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff4da2d11102916af50405184a3d1ee99179c42a
|
4
|
+
data.tar.gz: 678874911854e9a25391e862bf25fc0b421a487e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3f4c17cc829f5f124a563f06afcef8e85e962dd57e00edab71371afc2c8368f844ff6df4c1b831f3b400758b493a42a0b19098c8d2eafecc69be00c5774de8c7
|
7
|
+
data.tar.gz: 6248365c072bfeef740ad36401decad5942a9474909bbd7a8d37e624407da27b74060c801b7037e5a46f6df5e34a0ac31daf9e4af14594f54920e45e20da4dad
|
data/bin/miss_cleo
CHANGED
@@ -1,18 +1,32 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require "miss_cleo"
|
4
|
-
include ::MissCleo::CoverageMapHelper
|
5
4
|
|
6
5
|
case ARGV.first
|
7
6
|
when "build_deck"
|
8
|
-
|
7
|
+
files = ARGV[1..-1]
|
8
|
+
puts "Building your deck with #{files}"
|
9
|
+
coverage_map = ::MissCleo::CoverageMap.build(files)
|
10
|
+
puts "Saving map as zip file"
|
11
|
+
::MissCleo::CoverageMapUtilities::SaveZip.zip(coverage_map)
|
9
12
|
when "predict"
|
10
13
|
unless ARGV[1]
|
11
14
|
puts "Specify a coverage map."
|
12
15
|
puts "e.g. 'miss_cleo predict map.json.gz"
|
13
16
|
else
|
14
|
-
|
15
|
-
|
17
|
+
raw_map = File.open(ARGV[1]).read.gunzip
|
18
|
+
map = ::MissCleo::CoverageMap.new(JSON.parse(raw_map))
|
19
|
+
lines_changed = ::MissCleo::DiffDetector.lines_changed
|
20
|
+
tests_to_run = ::MissCleo::TestSelector.predict(map, lines_changed)
|
21
|
+
if lines_changed.empty?
|
22
|
+
puts "No line changes detected."
|
23
|
+
elsif tests_to_run.empty?
|
24
|
+
puts "No tests found. May be due to blind spot, new tests you've just written, or the changes may be untested."
|
25
|
+
else
|
26
|
+
puts "Run these tests:"
|
27
|
+
puts tests_to_run.sort.reverse
|
28
|
+
::MissCleo::TestRunner.new(tests_to_run, lines_changed).run_tests
|
29
|
+
end
|
16
30
|
end
|
17
31
|
else
|
18
32
|
puts "Please run miss_cleo with 'build_deck' or 'predict'."
|
data/lib/miss_cleo.rb
CHANGED
@@ -11,9 +11,13 @@ require 'miss_cleo/coverage_filter'
|
|
11
11
|
require 'miss_cleo/coverage_map'
|
12
12
|
require 'miss_cleo/test_configurations/cucumber_config'
|
13
13
|
require 'miss_cleo/test_configurations/rspec_config'
|
14
|
-
require 'miss_cleo/coverage_map_helper.rb'
|
15
14
|
require 'miss_cleo/test_configurations/rails_action_view_config'
|
16
15
|
require 'miss_cleo/template_tracker'
|
16
|
+
require 'miss_cleo/tests_to_files_map_logger'
|
17
|
+
require 'miss_cleo/coverage_map_utilities/save_zip'
|
18
|
+
require 'miss_cleo/test_selector'
|
19
|
+
require 'miss_cleo/diff_detector'
|
20
|
+
require 'miss_cleo/test_runner'
|
17
21
|
|
18
22
|
module MissCleo
|
19
23
|
end
|
@@ -1,17 +1,17 @@
|
|
1
1
|
module MissCleo
|
2
|
-
|
2
|
+
module CoverageFilter
|
3
|
+
module_function
|
3
4
|
GEM_PATHS = ENV["GEM_PATH"].split(":")
|
4
5
|
RUBY_PATH = `which ruby`.chomp.gsub("/bin/ruby","")
|
5
6
|
|
6
|
-
def
|
7
|
-
|
7
|
+
def filter_core(result_hash)
|
8
8
|
# Don't include gems in coverage map
|
9
9
|
result_hash.reject do |file, line|
|
10
10
|
([RUBY_PATH] + GEM_PATHS).any? { |path| file.include?(path) }
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
14
|
+
def normalize_paths(result_hash)
|
15
15
|
normalized_hash = Hash.new
|
16
16
|
result_hash.each do |key, value|
|
17
17
|
trimmed_key = key.gsub(/#{Regexp.quote(`pwd`.chomp)}\//, "")
|
@@ -21,11 +21,13 @@ module MissCleo
|
|
21
21
|
normalized_hash
|
22
22
|
end
|
23
23
|
|
24
|
-
def
|
24
|
+
def filter_and_trim(result_hash)
|
25
25
|
filtered = filter_core(result_hash)
|
26
26
|
normalize_paths(filtered)
|
27
27
|
end
|
28
28
|
|
29
|
+
private_class_method :filter_core
|
30
|
+
private_class_method :normalize_paths
|
29
31
|
end
|
30
32
|
|
31
33
|
end
|
@@ -1,6 +1,23 @@
|
|
1
1
|
module MissCleo
|
2
2
|
class CoverageMap
|
3
3
|
|
4
|
+
def self.build(file_names)
|
5
|
+
cov_map = self.new
|
6
|
+
file_names.each do |file_name|
|
7
|
+
File.open(file_name, "r") do |f|
|
8
|
+
f.read
|
9
|
+
end.tap do |contents|
|
10
|
+
begin
|
11
|
+
cov_map.add_to_coverage_map(JSON.parse(contents))
|
12
|
+
rescue
|
13
|
+
puts "#{file_name} is malformed, this may affect test predictons"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
cov_map
|
19
|
+
end
|
20
|
+
|
4
21
|
attr_reader :map
|
5
22
|
|
6
23
|
def initialize(map = nil)
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module MissCleo
|
2
|
+
module DiffDetector
|
3
|
+
module_function
|
4
|
+
def lines_changed
|
5
|
+
Set.new.tap do |changed_lines|
|
6
|
+
repo = Rugged::Repository.new '.'
|
7
|
+
repo.index.diff.each_patch do |patch|
|
8
|
+
file = patch.delta.old_file[:path]
|
9
|
+
|
10
|
+
patch.each_hunk do |hunk|
|
11
|
+
hunk.each_line do |line|
|
12
|
+
case line.line_origin
|
13
|
+
when :addition
|
14
|
+
changed_lines << [file, line.new_lineno] unless exclude_from_map?(file)
|
15
|
+
when :deletion
|
16
|
+
changed_lines << [file, line.old_lineno] unless exclude_from_map?(file)
|
17
|
+
when :context
|
18
|
+
# do nothing
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
def exclude_from_map?(file_name)
|
29
|
+
# Let's add a configuration for ignored files
|
30
|
+
file_name == "db/structure.sql"
|
31
|
+
end
|
32
|
+
|
33
|
+
private_class_method :exclude_from_map?
|
34
|
+
end
|
35
|
+
end
|
@@ -2,27 +2,25 @@ module MissCleo
|
|
2
2
|
module TestConfigurations
|
3
3
|
class CucumberConfig
|
4
4
|
CUCUMBER_MAP = "cucumber_map.json"
|
5
|
-
LOGS = []
|
6
5
|
|
7
6
|
def self.setup_hooks(context)
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
7
|
+
map_logger = MissCleo::TestsToFilesMapLogger.new(CUCUMBER_MAP)
|
8
|
+
MissCleo::TemplateTracker.initialize_tracker
|
9
|
+
ActionView::Template.prepend MissCleo::TestConfigurations::ActionViewConfig if defined? ActionView::Template
|
10
|
+
Coverage.start
|
11
|
+
context.Around do |scenario, execute|
|
12
|
+
MissCleo::TemplateTracker.clear_templates
|
13
|
+
before = Coverage.peek_result
|
14
|
+
execute.call
|
15
|
+
after = Coverage.peek_result
|
16
|
+
templates = MissCleo::TemplateTracker.templates.uniq
|
17
|
+
if file_and_line = scenario.try(:file_colon_line)
|
18
|
+
map_logger.add_to_log(file_and_line, before, after, templates)
|
21
19
|
end
|
20
|
+
end
|
22
21
|
|
23
|
-
|
24
|
-
|
25
|
-
end
|
22
|
+
at_exit do
|
23
|
+
map_logger.export_logs
|
26
24
|
end
|
27
25
|
end
|
28
26
|
end
|
@@ -2,29 +2,23 @@ module MissCleo
|
|
2
2
|
module TestConfigurations
|
3
3
|
class RspecConfig
|
4
4
|
RSPEC_MAP = "rspec_map.json"
|
5
|
-
LOGS = []
|
6
5
|
|
7
|
-
def self.setup_hooks
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
6
|
+
def self.setup_hooks
|
7
|
+
logger = MissCleo::TestsToFilesMapLogger.new(RSPEC_MAP)
|
8
|
+
MissCleo::TemplateTracker.initialize_tracker
|
9
|
+
ActionView::Template.prepend MissCleo::TestConfigurations::ActionViewConfig if defined? ActionView::Template
|
10
|
+
Coverage.start
|
11
|
+
RSpec.configuration.after(:suite) do
|
12
|
+
logger.export_logs
|
13
|
+
end
|
15
14
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
before: CoverageFilter.filter_and_trim(before),
|
24
|
-
after: CoverageFilter.filter_and_trim(after),
|
25
|
-
templates: templates
|
26
|
-
} ]
|
27
|
-
end
|
15
|
+
RSpec.configuration.around(:example) do |example|
|
16
|
+
MissCleo::TemplateTracker.clear_templates
|
17
|
+
before = Coverage.peek_result
|
18
|
+
example.call
|
19
|
+
after = Coverage.peek_result
|
20
|
+
templates = MissCleo::TemplateTracker.templates.uniq
|
21
|
+
logger.add_to_log(example.location, before, after, templates)
|
28
22
|
end
|
29
23
|
end
|
30
24
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module MissCleo
|
2
|
+
class TestRunner
|
3
|
+
def initialize(tests_to_run, lines_changed)
|
4
|
+
@tests_to_run = tests_to_run
|
5
|
+
@lines_changed = lines_changed
|
6
|
+
end
|
7
|
+
|
8
|
+
def run_tests
|
9
|
+
# come up with a better way to register tests and test execution
|
10
|
+
exec_command = "bundle exec"
|
11
|
+
cukes = tests_to_run.select { |test| test.match(/^feature/) }
|
12
|
+
specs = tests_to_run.select { |test| test.match(/^\.\/spec/) }
|
13
|
+
run_cukes = cukes.empty? ? "" : "#{exec_command} cucumber #{cukes.join(" ")}"
|
14
|
+
run_specs = specs.empty? ? "" : "#{exec_command} rspec #{specs.join(" ")}"
|
15
|
+
spec_line = specs.empty? ? nil : "(s)pecs"
|
16
|
+
cuke_line = cukes.empty? ? nil : "(c)ukes"
|
17
|
+
both_line = specs.empty? || cukes.empty? ? nil : "(B)oth cukes and specs"
|
18
|
+
puts "Run: " + [spec_line, cuke_line, both_line].compact.join(", ") + " or (n)othing:"
|
19
|
+
response = STDIN.gets.chomp
|
20
|
+
case response
|
21
|
+
when "s"
|
22
|
+
puts "Running only specs..."
|
23
|
+
exec run_specs
|
24
|
+
when "c"
|
25
|
+
puts "Running only cukes..."
|
26
|
+
exec run_cukes
|
27
|
+
when "n"
|
28
|
+
else
|
29
|
+
puts "Running both specs and cukes..."
|
30
|
+
exec [run_cukes, run_specs].join("; ")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
attr_reader :tests_to_run, :lines_changed
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module MissCleo
|
2
|
+
module TestSelector
|
3
|
+
module_function
|
4
|
+
|
5
|
+
def predict(coverage_map, lines_changed)
|
6
|
+
tests_to_run = []
|
7
|
+
lines_changed.each do |file, line|
|
8
|
+
tests_to_run |= coverage_map.tests_for_lines(file, line)
|
9
|
+
end
|
10
|
+
|
11
|
+
tests_to_run.sort.reverse
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module MissCleo
|
2
|
+
class TestsToFilesMapLogger
|
3
|
+
|
4
|
+
def initialize(file_name)
|
5
|
+
@logs = []
|
6
|
+
@file_name = file_name
|
7
|
+
end
|
8
|
+
|
9
|
+
def add_to_log(test_file_and_line, lines_run_before, lines_run_after, templates)
|
10
|
+
logs << [ test_file_and_line, {
|
11
|
+
before: filter(lines_run_before),
|
12
|
+
after: filter(lines_run_after),
|
13
|
+
templates: templates
|
14
|
+
}]
|
15
|
+
end
|
16
|
+
|
17
|
+
def export_logs
|
18
|
+
File.open(file_name, 'w') { |f| f.write JSON.dump logs }
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
attr_accessor :logs
|
24
|
+
attr_reader :file_name
|
25
|
+
|
26
|
+
def filter(lines_run)
|
27
|
+
MissCleo::CoverageFilter.filter_and_trim(lines_run)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/miss_cleo/version.rb
CHANGED
data/miss_cleo.gemspec
CHANGED
@@ -17,10 +17,12 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
18
|
spec.executables = ["miss_cleo"]
|
19
19
|
spec.require_paths = ["lib"]
|
20
|
+
spec.required_ruby_version = '>= 2.3.0'
|
20
21
|
|
21
|
-
spec.add_development_dependency "bundler"
|
22
|
+
spec.add_development_dependency "bundler"
|
22
23
|
spec.add_development_dependency "rake", "~> 10.5.0"
|
23
24
|
spec.add_development_dependency "pry", "~> 0.9.12"
|
25
|
+
spec.add_development_dependency "rspec"
|
24
26
|
spec.add_runtime_dependency "rugged", "~> 0.23.3"
|
25
27
|
spec.add_runtime_dependency "gzip", "~> 1.0"
|
26
28
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: miss_cleo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dean Hu
|
@@ -10,22 +10,22 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-04-
|
13
|
+
date: 2016-04-22 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- - "
|
19
|
+
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- - "
|
26
|
+
- - ">="
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version:
|
28
|
+
version: '0'
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: rake
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -54,6 +54,20 @@ dependencies:
|
|
54
54
|
- - "~>"
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: 0.9.12
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: rspec
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
type: :development
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
57
71
|
- !ruby/object:Gem::Dependency
|
58
72
|
name: rugged
|
59
73
|
requirement: !ruby/object:Gem::Requirement
|
@@ -105,11 +119,15 @@ files:
|
|
105
119
|
- lib/miss_cleo.rb
|
106
120
|
- lib/miss_cleo/coverage_filter.rb
|
107
121
|
- lib/miss_cleo/coverage_map.rb
|
108
|
-
- lib/miss_cleo/
|
122
|
+
- lib/miss_cleo/coverage_map_utilities/save_zip.rb
|
123
|
+
- lib/miss_cleo/diff_detector.rb
|
109
124
|
- lib/miss_cleo/template_tracker.rb
|
110
125
|
- lib/miss_cleo/test_configurations/cucumber_config.rb
|
111
126
|
- lib/miss_cleo/test_configurations/rails_action_view_config.rb
|
112
127
|
- lib/miss_cleo/test_configurations/rspec_config.rb
|
128
|
+
- lib/miss_cleo/test_runner.rb
|
129
|
+
- lib/miss_cleo/test_selector.rb
|
130
|
+
- lib/miss_cleo/tests_to_files_map_logger.rb
|
113
131
|
- lib/miss_cleo/version.rb
|
114
132
|
- miss_cleo.gemspec
|
115
133
|
homepage: http://github.com/gust/miss_cleo
|
@@ -124,7 +142,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
124
142
|
requirements:
|
125
143
|
- - ">="
|
126
144
|
- !ruby/object:Gem::Version
|
127
|
-
version:
|
145
|
+
version: 2.3.0
|
128
146
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
147
|
requirements:
|
130
148
|
- - ">="
|
@@ -132,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
150
|
version: '0'
|
133
151
|
requirements: []
|
134
152
|
rubyforge_project:
|
135
|
-
rubygems_version: 2.
|
153
|
+
rubygems_version: 2.5.1
|
136
154
|
signing_key:
|
137
155
|
specification_version: 4
|
138
156
|
summary: Regression Test Selection
|
@@ -1,73 +0,0 @@
|
|
1
|
-
module MissCleo
|
2
|
-
module CoverageMapHelper
|
3
|
-
|
4
|
-
def build_deck(file_names)
|
5
|
-
cov_map = ::MissCleo::CoverageMap.new
|
6
|
-
file_names.each do |file_name|
|
7
|
-
File.open(file_name, "r") do |f|
|
8
|
-
f.read
|
9
|
-
end.tap do |contents|
|
10
|
-
begin
|
11
|
-
cov_map.add_to_coverage_map(JSON.parse(contents))
|
12
|
-
rescue
|
13
|
-
puts "#{file_name} is malformed, this may affect test predictons"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
File.open("total_coverage_map.json.gz", "w") do |f|
|
19
|
-
f.write(JSON.dump(cov_map.map).gzip)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def predict(unzipped_file)
|
24
|
-
coverage_map = ::MissCleo::CoverageMap.new(JSON.parse(unzipped_file))
|
25
|
-
tests_to_run = []
|
26
|
-
lines_changed.each do |file, line|
|
27
|
-
tests_to_run |= coverage_map.tests_for_lines(file, line)
|
28
|
-
end
|
29
|
-
if lines_changed.empty?
|
30
|
-
puts "No line changes detected."
|
31
|
-
elsif tests_to_run.empty?
|
32
|
-
puts "No tests found. May be due to blind spot, new tests you've just written, or the changes may be untested."
|
33
|
-
else
|
34
|
-
puts "Run these tests:"
|
35
|
-
puts tests_to_run.sort.reverse
|
36
|
-
end
|
37
|
-
|
38
|
-
tests_to_run
|
39
|
-
end
|
40
|
-
|
41
|
-
|
42
|
-
private
|
43
|
-
|
44
|
-
def exclude_from_map?(file_name)
|
45
|
-
# Let's add a configuration for ignored files
|
46
|
-
file_name == "db/structure.sql"
|
47
|
-
end
|
48
|
-
|
49
|
-
|
50
|
-
def lines_changed
|
51
|
-
@_lines_changed ||= Set.new.tap do |changed_lines|
|
52
|
-
repo = Rugged::Repository.new '.'
|
53
|
-
repo.index.diff.each_patch do |patch|
|
54
|
-
file = patch.delta.old_file[:path]
|
55
|
-
|
56
|
-
patch.each_hunk do |hunk|
|
57
|
-
hunk.each_line do |line|
|
58
|
-
case line.line_origin
|
59
|
-
when :addition
|
60
|
-
changed_lines << [file, line.new_lineno] unless exclude_from_map?(file)
|
61
|
-
when :deletion
|
62
|
-
changed_lines << [file, line.old_lineno] unless exclude_from_map?(file)
|
63
|
-
when :context
|
64
|
-
# do nothing
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|