slather 0.0.31 → 0.0.231

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 CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NjczM2RkMDA4MTllMjlkNjJmZTkwOTQyOGZiMTkzMjY4ZTUwZDhiNg==
5
- data.tar.gz: !binary |-
6
- MWIwNjIxZGNiNDYxNjM0ZjU0NmNjYmY4MGRiMjZiNjQ0YjkxZGI4Yg==
2
+ SHA1:
3
+ metadata.gz: e9eccd3caedb1595ff247cc1bd137f175111b210
4
+ data.tar.gz: e73ae6a6144454ba82578f8f67280e456748c936
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- OWQ0NzczYjMzMTI3NTNlMjcwMWI5NTJiNTg2MDAxMWNjMWM3ODM5ZjUzZjAz
10
- YjRmMDBhNmVjMzNhOTc4MzQwY2Q4ZTVmZTdmOGNhMTA4ZWVlNTQ1ODZiODEw
11
- YjEzY2M0Y2FhOGY0NjRiNGMyZTFkNDBkYmIyMjFmNmQxOGY1MTg=
12
- data.tar.gz: !binary |-
13
- MzhiZWI2ZDVlYmUwM2JiMGRiNjhlMmEzYTljNjZiNTMyZDIxOGMxMzVkODgz
14
- MzVhMzVlNjkxMzcwYzVlNThmNjMzZjRhYzIwNjdkOTNjYWM5M2E2ZWJhYjMx
15
- ZmQyYTJmOWNkZjE3ZmFlZGUwODE0NGNiMTEyODhhZWI4OWNiMWE=
6
+ metadata.gz: 63b47495e539eff10410c48bd3a1d16a3bf7110c5c873778c9d931821d84b3ee45d52fa9f06eeb6b71ff13a7f5ab23fe434bd3f46c7024afb1b504916b12ba5c
7
+ data.tar.gz: ca0da25a7195c2a412d56bde2aa3902950bf860b8774c7785c11cbc2257f54d728c0033d414a915d7ec5e2aa1023e83f916a5e132d7e2ec64b441ccc470445c2
data/.gitignore CHANGED
@@ -21,22 +21,4 @@ tmp
21
21
  *.a
22
22
  mkmf.log
23
23
 
24
- # Xcode
25
- #
26
- build/
27
- *.pbxuser
28
- !default.pbxuser
29
- *.mode1v3
30
- !default.mode1v3
31
- *.mode2v3
32
- !default.mode2v3
33
- *.perspectivev3
34
- !default.perspectivev3
35
- xcuserdata
36
- *.xccheckout
37
- *.moved-aside
38
- DerivedData
39
- *.hmap
40
- *.ipa
41
- *.xcuserstate
42
24
  *.DS_Store
data/README.md CHANGED
@@ -1,9 +1,6 @@
1
1
  # Slather
2
2
 
3
- Generate test coverage reports for Xcode projects. Apply tests liberally.
4
-
5
- | [Parsimmon](https://github.com/ayanonagon/Parsimmon) | [![Parsimmon Coverage](https://coveralls.io/repos/ayanonagon/Parsimmon/badge.png?branch=master)](https://coveralls.io/r/ayanonagon/Parsimmon?branch=master) |
6
- |------------------------------------------------------------|:----------------------------------------------------:|
3
+ TODO: Write a gem description
7
4
 
8
5
  ## Installation
9
6
 
@@ -15,54 +12,18 @@ And then execute:
15
12
 
16
13
  $ bundle
17
14
 
18
- ## Usage
19
-
20
- Setup your project for test coverage:
21
-
22
- $ slather setup path/to/project.xcodeproj
23
-
24
- This will enable the `Generate Test Coverage` and `Instrument Program Flow` flags for your project.
25
-
26
-
27
- To test if you're ready to generate test coverage, run your test suite on your project, and then run:
28
-
29
- $ slather coverage -s path/to/project.xcodeproj
30
-
31
- ### Coveralls
32
-
33
- Login to https://coveralls.io/ and enable your repository. Right now, `slather` only supports coveralls via Travis CI.
15
+ Or install it yourself as:
34
16
 
35
- Make a `.slather.yml` file:
17
+ $ gem install slather
36
18
 
37
- ```yml
38
- # .slather.yml
39
-
40
- coverage_service: coveralls
41
- xcodeproj: path/to/project.xcodeproj
42
- ignore:
43
- - ExamplePodCode/*
44
- - ProjectTestsGroup/*
45
- ```
46
-
47
- And then in your `.travis.yml`, call `slather` after a successful_build
48
-
49
- ```yml
50
- # .travis.yml
51
-
52
- after_success: slather
53
- ```
54
-
55
- ### Custom Build Directory
19
+ ## Usage
56
20
 
57
- Slather will look for the test coverage files in `DerivedData` by default. If you send build output to a custom location, like [this](https://github.com/erikdoe/ocmock/blob/master/Tools/travis.sh#L12), then you should also set the `build_directory` property in `.slather.yml`
21
+ TODO: Write usage instructions here
58
22
 
59
23
  ## Contributing
60
24
 
61
- We'd love to see your ideas for improving this library! The best way to contribute is by submitting a pull request. We'll do our best to respond to your patch as soon as possible. You can also submit a [new Github issue](https://github.com/venmo/slather/issues/new) if you find bugs or have questions. :octocat:
62
-
63
- Please make sure to follow our general coding style and add test coverage for new features!
64
-
65
- ## Contributors
66
-
67
- * [@tpoulos](https://github.com/tpoulos), the perfect logo.
68
- * [@ayanonagon](https://github.com/ayanonagon) and [@kylef](https://github.com/benzguo), feedback and testing.
25
+ 1. Fork it ( https://github.com/[my-github-username]/slather/fork )
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create a new Pull Request
data/bin/slather CHANGED
@@ -1,85 +1,19 @@
1
1
  #!/usr/bin/env ruby
2
+
2
3
  require 'clamp'
3
- require 'yaml'
4
- require File.join(File.dirname(__FILE__), '../lib/slather')
4
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'slather')
5
5
 
6
6
  Clamp do
7
7
 
8
- self.default_subcommand = "coverage"
9
-
10
- subcommand "coverage", "Computes coverage for the supplised project" do
11
-
12
- parameter "[xcodeproj]", "Path to the xcodeproj", :attribute_name => :xcodeproj_path
13
-
14
- option ["--travis", "-t"], :flag, "Indicate that the builds are running on Travis CI"
15
-
16
- option ["--coveralls", "-c"], :flag, "Post coverage results to coveralls"
17
- option ["--simple-output", "-s"], :flag, "Post coverage results to coveralls"
18
-
19
- option ["--build-directory", "-b"], "BUILD_DIRECTORY", "The directory where gcno files will be written to. Defaults to derived data."
20
- option ["--ignore", "-i"], "IGNORE", "ignore files conforming to a path", :multivalued => true
21
-
22
- def execute
23
- puts "Slathering..."
24
-
25
- setup_service_name
26
- setup_ignore_list
27
- setup_build_directory
28
- setup_coverage_service
29
-
30
- post
31
-
32
- puts "Slathered"
33
- end
34
-
35
- def setup_build_directory
36
- project.build_directory = build_directory if build_directory
37
- end
38
-
39
- def setup_ignore_list
40
- project.ignore_list = ignore_list if !ignore_list.empty?
41
- end
42
-
43
- def setup_service_name
44
- if travis?
45
- project.ci_service = :travis_ci
46
- end
47
- end
48
-
49
- def post
50
- project.post
51
- end
52
-
53
- def project
54
- @project ||= begin
55
- xcodeproj_path_to_open = xcodeproj_path || Slather::Project.yml["xcodeproj"]
56
- if xcodeproj_path_to_open
57
- project = Slather::Project.open(xcodeproj_path_to_open)
58
- else
59
- raise StandardError, "Must provide an xcodeproj through .slather.yml"
60
- end
61
- end
62
- end
63
-
64
- def setup_coverage_service
65
- if coveralls?
66
- project.coverage_service = :coveralls
67
- elsif simple_output?
68
- project.coverage_service = :terminal
69
- end
70
- end
8
+ parameter "xcodeproj", "Path to the xcodeproj", :attribute_name => :xcodeproj_path
9
+ option ["--build-directory", "-b"], "BUILD_DIRECTORY", "The directory where gcno files will be written to. Defaults to derived data."
71
10
 
11
+ def execute
12
+ puts "Slathering..."
13
+ project = Slather::Project.open(xcodeproj_path)
14
+ project.build_directory = build_directory
15
+ project.post_to_coveralls
16
+ puts "Done slathering!"
72
17
  end
73
18
 
74
- subcommand "setup", "Configures an xcodeproj for test coverage generation" do
75
-
76
- parameter "[xcodeproj]", "Path to the xcodeproj", :attribute_name => :xcodeproj_path
77
-
78
- def execute
79
- project = Slather::Project.open(xcodeproj_path)
80
- project.setup_for_coverage
81
- project.save
82
- end
83
-
84
- end
85
19
  end
data/lib/slather.rb CHANGED
@@ -2,11 +2,9 @@ require 'slather/version'
2
2
  require 'slather/project'
3
3
  require 'slather/coverage_file'
4
4
  require 'slather/coveralls_coverage_file'
5
- require 'slather/coverage_service/coveralls'
6
- require 'slather/coverage_service/simple_output'
7
5
 
8
6
  module Slather
9
7
 
10
- Encoding.default_external = "utf-8"
8
+ Encoding.default_internal = Encoding::UTF_8
11
9
 
12
10
  end
@@ -3,17 +3,16 @@ module Slather
3
3
 
4
4
  attr_accessor :project, :gcno_file_pathname
5
5
 
6
- def initialize(project, gcno_file_pathname)
7
- self.project = project
8
- self.gcno_file_pathname = Pathname(gcno_file_pathname)
6
+ def initialize(gcno_file_pathname)
7
+ @gcno_file_pathname = Pathname(gcno_file_pathname)
9
8
  end
10
9
 
11
10
  def source_file_pathname
12
11
  @source_file_pathname ||= begin
13
12
  base_filename = gcno_file_pathname.basename.sub_ext("")
14
13
  # TODO: Handle Swift
15
- pbx_file = project.files.detect { |pbx_file| pbx_file.real_path.basename.to_s == "#{base_filename}.m" }
16
- pbx_file && pbx_file.real_path
14
+ path = Dir["#{project.main_group.real_path}/*/#{base_filename}.m"].first
15
+ path && Pathname(path)
17
16
  end
18
17
  end
19
18
 
@@ -25,8 +24,8 @@ module Slather
25
24
  source_file.read
26
25
  end
27
26
 
28
- def source_file_pathname_relative_to_repo_root
29
- source_file_pathname.relative_path_from(Pathname("./").realpath)
27
+ def source_file_pathname_relative_to_project_root
28
+ source_file_pathname.relative_path_from(project.main_group.real_path)
30
29
  end
31
30
 
32
31
  def gcov_data
@@ -58,11 +57,5 @@ module Slather
58
57
  end
59
58
  end
60
59
 
61
- def ignored?
62
- project.ignore_list.any? do |ignore|
63
- File.fnmatch(ignore, source_file_pathname_relative_to_repo_root)
64
- end
65
- end
66
-
67
60
  end
68
61
  end
@@ -11,7 +11,7 @@ module Slather
11
11
 
12
12
  def as_json
13
13
  {
14
- :name => source_file_pathname_relative_to_repo_root.to_s,
14
+ :name => source_file_pathname_relative_to_project_root.to_s,
15
15
  :source => source_data,
16
16
  :coverage => coverage_data
17
17
  }
@@ -1,18 +1,11 @@
1
1
  require 'fileutils'
2
2
  require 'xcodeproj'
3
3
  require 'json'
4
- require 'yaml'
5
4
 
6
5
  module Slather
7
6
  class Project < Xcodeproj::Project
8
7
 
9
- attr_accessor :build_directory, :ignore_list, :ci_service, :coverage_service
10
-
11
- def self.open(xcodeproj)
12
- proj = super
13
- proj.configure_from_yml
14
- proj
15
- end
8
+ attr_accessor :build_directory
16
9
 
17
10
  def derived_data_dir
18
11
  File.expand_path('~') + "/Library/Developer/Xcode/DerivedData/"
@@ -22,74 +15,40 @@ module Slather
22
15
  def build_directory
23
16
  @build_directory || derived_data_dir
24
17
  end
18
+ private :build_directory
25
19
 
26
20
  def coverage_files
27
- coverage_files = Dir["#{build_directory}/**/*.gcno"].map do |file|
28
- coverage_file = coverage_file_class.new(self, file)
29
- # If there's no source file for this gcno, it probably belongs to another project.
30
- coverage_file.source_file_pathname && !coverage_file.ignored? ? coverage_file : nil
21
+ Dir["#{build_directory}/**/*.gcno"].map do |file|
22
+ coverage_file = Slather::CoverallsCoverageFile.new(file)
23
+ coverage_file.project = self
24
+ # If there's no source file for this gcno, or the gcno is old, it probably belongs to another project.
25
+ if coverage_file.source_file_pathname
26
+ stale_seconds_limit = 60
27
+ if (Time.now - File.mtime(file) < stale_seconds_limit)
28
+ next coverage_file
29
+ else
30
+ puts "Skipping #{file} -- older than #{stale_seconds_limit} seconds ago."
31
+ end
32
+ end
33
+ next nil
31
34
  end.compact
32
-
33
- if coverage_files.empty?
34
- raise StandardError, "No coverage files found. Are you sure your project is setup for generating coverage files? Try `slather setup your/project.pbxproj`"
35
- else
36
- coverage_files
37
- end
38
35
  end
39
36
  private :coverage_files
40
37
 
41
- def self.yml_filename
42
- '.slather.yml'
43
- end
44
-
45
- def self.yml
46
- @yml ||= File.exist?(yml_filename) ? YAML.load_file(yml_filename) : {}
47
- end
48
-
49
- def configure_from_yml
50
- configure_build_directory_from_yml
51
- configure_ignore_list_from_yml
52
- configure_ci_service_from_yml
53
- configure_coverage_service_from_yml
54
- end
55
-
56
- def configure_build_directory_from_yml
57
- self.build_directory = self.class.yml["build_directory"] if self.class.yml["build_directory"] && !@build_directory
58
- end
59
-
60
- def configure_ignore_list_from_yml
61
- self.ignore_list = [(self.class.yml["ignore"] || [])].flatten unless self.ignore_list
62
- end
63
-
64
- def configure_ci_service_from_yml
65
- self.ci_service = (self.class.yml["ci_service"] || :travis_ci) unless self.ci_service
66
- end
67
-
68
- def ci_service=(service)
69
- @ci_service = service && service.to_sym
70
- end
71
-
72
- def configure_coverage_service_from_yml
73
- self.coverage_service = (self.class.yml["coverage_service"] || :terminal) unless coverage_service
74
- end
75
-
76
- def coverage_service=(service)
77
- service = service && service.to_sym
78
- if service == :coveralls
79
- extend(Slather::CoverageService::Coveralls)
80
- elsif service == :terminal
81
- extend(Slather::CoverageService::SimpleOutput)
82
- else
83
- raise ArgumentError, "`#{coverage_service}` is not a valid coverage service. Try `terminal` or `coveralls`"
84
- end
85
- @coverage_service = service
38
+ def coveralls_coverage_data
39
+ {
40
+ :service_job_id => ENV['TRAVIS_JOB_ID'],
41
+ :service_name => "travis-ci",
42
+ :source_files => coverage_files.map(&:as_json)
43
+ }.to_json
86
44
  end
45
+ private :coveralls_coverage_data
87
46
 
88
- def setup_for_coverage
89
- build_configurations.each do |build_configuration|
90
- build_configuration.build_settings["GCC_INSTRUMENT_PROGRAM_FLOW_ARCS"] = "YES"
91
- build_configuration.build_settings["GCC_GENERATE_TEST_COVERAGE_FILES"] = "YES"
92
- end
47
+ def post_to_coveralls
48
+ f = File.open('coveralls_json_file', 'w+')
49
+ f.write(coveralls_coverage_data)
50
+ `curl -s --form json_file=@#{f.path} https://coveralls.io/api/v1/jobs`
51
+ FileUtils.rm(f)
93
52
  end
94
53
 
95
54
  end
@@ -1,3 +1,3 @@
1
1
  module Slather
2
- VERSION = "0.0.31"
2
+ VERSION = "0.0.231"
3
3
  end
metadata CHANGED
@@ -1,97 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slather
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.31
4
+ version: 0.0.231
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Larsen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-25 00:00:00.000000000 Z
11
+ date: 2014-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.6'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.3'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.3'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '2.14'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.14'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: pry
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0.9'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.9'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: clamp
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0.6'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.6'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: xcodeproj
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ~>
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0.17'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0.17'
97
97
  description:
@@ -102,7 +102,7 @@ executables:
102
102
  extensions: []
103
103
  extra_rdoc_files: []
104
104
  files:
105
- - .gitignore
105
+ - ".gitignore"
106
106
  - Gemfile
107
107
  - LICENSE.txt
108
108
  - README.md
@@ -110,29 +110,10 @@ files:
110
110
  - bin/slather
111
111
  - lib/slather.rb
112
112
  - lib/slather/coverage_file.rb
113
- - lib/slather/coverage_service/coveralls.rb
114
- - lib/slather/coverage_service/simple_output.rb
115
113
  - lib/slather/coveralls_coverage_file.rb
116
114
  - lib/slather/project.rb
117
115
  - lib/slather/version.rb
118
116
  - slather.gemspec
119
- - spec/fixtures/fixtures.xcodeproj/project.pbxproj
120
- - spec/fixtures/fixtures.xcodeproj/project.xcworkspace/contents.xcworkspacedata
121
- - spec/fixtures/fixtures/Supporting Files/fixtures-Prefix.pch
122
- - spec/fixtures/fixtures/fixtures.h
123
- - spec/fixtures/fixtures/fixtures.m
124
- - spec/fixtures/fixtures/more_files/peekaview.h
125
- - spec/fixtures/fixtures/more_files/peekaview.m
126
- - spec/fixtures/fixturesTests/Supporting Files/en.lproj/InfoPlist.strings
127
- - spec/fixtures/fixturesTests/Supporting Files/fixturesTests-Info.plist
128
- - spec/fixtures/fixturesTests/fixturesTests.m
129
- - spec/fixtures/fixturesTests/peekaviewTests.m
130
- - spec/slather/coverage_file_spec.rb
131
- - spec/slather/coverage_service/coveralls_spec.rb
132
- - spec/slather/coverage_service/simple_output_spec.rb
133
- - spec/slather/fixtures.gcno
134
- - spec/slather/project_spec.rb
135
- - spec/spec_helper.rb
136
117
  homepage: https://github.com/marklarr/slather
137
118
  licenses:
138
119
  - MIT
@@ -143,12 +124,12 @@ require_paths:
143
124
  - lib
144
125
  required_ruby_version: !ruby/object:Gem::Requirement
145
126
  requirements:
146
- - - ! '>='
127
+ - - ">="
147
128
  - !ruby/object:Gem::Version
148
129
  version: '0'
149
130
  required_rubygems_version: !ruby/object:Gem::Requirement
150
131
  requirements:
151
- - - ! '>='
132
+ - - ">="
152
133
  - !ruby/object:Gem::Version
153
134
  version: '0'
154
135
  requirements: []
@@ -157,22 +138,4 @@ rubygems_version: 2.2.2
157
138
  signing_key:
158
139
  specification_version: 4
159
140
  summary: Test coverage reports for Xcode projects
160
- test_files:
161
- - spec/fixtures/fixtures.xcodeproj/project.pbxproj
162
- - spec/fixtures/fixtures.xcodeproj/project.xcworkspace/contents.xcworkspacedata
163
- - spec/fixtures/fixtures/Supporting Files/fixtures-Prefix.pch
164
- - spec/fixtures/fixtures/fixtures.h
165
- - spec/fixtures/fixtures/fixtures.m
166
- - spec/fixtures/fixtures/more_files/peekaview.h
167
- - spec/fixtures/fixtures/more_files/peekaview.m
168
- - spec/fixtures/fixturesTests/Supporting Files/en.lproj/InfoPlist.strings
169
- - spec/fixtures/fixturesTests/Supporting Files/fixturesTests-Info.plist
170
- - spec/fixtures/fixturesTests/fixturesTests.m
171
- - spec/fixtures/fixturesTests/peekaviewTests.m
172
- - spec/slather/coverage_file_spec.rb
173
- - spec/slather/coverage_service/coveralls_spec.rb
174
- - spec/slather/coverage_service/simple_output_spec.rb
175
- - spec/slather/fixtures.gcno
176
- - spec/slather/project_spec.rb
177
- - spec/spec_helper.rb
178
- has_rdoc:
141
+ test_files: []