dependy 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7b4acecc9e415eba14a8d7121602594c4dac663e
4
+ data.tar.gz: 38092ec7142d20edb7c692ce32287ec09e390d09
5
+ SHA512:
6
+ metadata.gz: 13db82cec156decb88936c0bb66c5cc3888ce3a731ca1f3d1f082e1152bec4c40dcdd79d6ad8941b0a6bcc9b825c52c4341ae549d960c6d07d271a9fb91e2aba
7
+ data.tar.gz: 0e8609c51091d5d082fe6446a78b6e43c654a65df4cc1db847f3817b7b438ef85b664def18ee3ced9fb3ffa7489a74ce7bba36bd57ee98e6f61108b5dbbadcef
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .ruby-version
19
+ .ruby-gemset
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ addons:
2
+ code_climate:
3
+ repo_token:
4
+ secure: 932d6a9695c9d94394b22f7de7e6f9f6261cc11c28f23718316396ea017a92db
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'travis', '~> 1.6.11'
4
+ gem 'thor', '~> 0.19'
5
+
6
+ gemspec
7
+
8
+ group :development, :test do
9
+ gem 'codeclimate-test-reporter', '~> 0.3.0', require: false
10
+ gem 'rspec', '~> 2.14.1'
11
+ gem 'rake', '~> 10.1.0'
12
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Slavko Krucaj
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # dependy [![Build Status](https://travis-ci.org/SlavkoKrucaj/dependy.svg?branch=master)](https://travis-ci.org/SlavkoKrucaj/dependy) [![Code Climate](https://codeclimate.com/github/SlavkoKrucaj/dependy/badges/gpa.svg)](https://codeclimate.com/github/SlavkoKrucaj/dependy) [![Test Coverage](https://codeclimate.com/github/SlavkoKrucaj/dependy/badges/coverage.svg)](https://codeclimate.com/github/SlavkoKrucaj/dependy)
2
+
3
+ A gem command line tool which helps you maintain dependencies for `Objective-C` projects
4
+
5
+ ## License
6
+
7
+ MIT license. See the LICENSE file for more info.
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env rake
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
5
+
6
+ Bundler::GemHelper.install_tasks(name: 'dependy')
7
+
8
+ RSpec::Core::RakeTask.new do |t|
9
+ t.pattern = 'spec/**/*_spec.rb'
10
+ end
11
+
12
+ desc 'run specs'
13
+ task default: :spec
data/bin/dependy ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative '../lib/dependy/cli'
3
+
4
+ Dependy::Cli.start
data/dependy.gemspec ADDED
@@ -0,0 +1,14 @@
1
+ # coding: utf-8
2
+ Gem::Specification.new do |gem|
3
+ gem.name = 'dependy'
4
+ gem.version = '0.1.0'
5
+ gem.authors = ['Slavko Krucaj']
6
+ gem.email = ['slavko.krucaj@gmail.com']
7
+ gem.description = %q{Analyzing class dependency graphs}
8
+ gem.summary = %q{Tool for inspecting class dependency graphs}
9
+ gem.license = 'MIT'
10
+
11
+ gem.files = `git ls-files`.split($/)
12
+ gem.executables = gem.files.grep(%r{^bin/}) { |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^spec/})
14
+ end
data/lib/dependy.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'dependy/graph/graph_reader'
2
+ require 'dependy/operations/cycle_finder'
3
+ require 'dependy/operations/unused_nodes_finder'
4
+ require 'dependy/operations/extractor'
5
+ require 'dependy/operations/folder_extractor'
6
+
@@ -0,0 +1,65 @@
1
+ require 'thor'
2
+ require 'dependy'
3
+
4
+ module Dependy
5
+ class Cli < Thor
6
+ class_option :root_folder, type: :string, aliases: '-r', required: true, desc: 'Folder containing classes'
7
+ class_option :ignore_folders, type: :string, aliases: '-i', required: true, desc: 'Ignored folders'
8
+ class_option :pattern, type: :string, aliases: '-p', required: true, desc: 'Pattern you are looking for in the files, i.e. {h,m}'
9
+
10
+ desc 'cycle', 'Scans the folder, and looks for cycles in dependencies'
11
+ def cycle
12
+ cycle_finder.cycles.each { |cycle| p cycle }
13
+ end
14
+
15
+ desc 'unused', 'Scans the folder, and looks for unused files'
16
+ def unused
17
+ unused_nodes_finder.unused_nodes.each { |unused_node| p unused_node }
18
+ end
19
+
20
+ desc 'extract', 'Example of what you get if you try to extract file "ApiCall"'
21
+ method_option :file, type: :string, aliases: '-f', required: true, desc: 'File to extract'
22
+ def extract
23
+ puts extractor.extract([options[:file]])
24
+ end
25
+
26
+ desc 'folder', 'Example of what you get if you try to extract folder "ApiLayer"'
27
+ method_option :folder, type: :string, aliases: '-f', required: true, desc: 'Folder to extract from'
28
+ def folder
29
+ puts folder_extractor.extract(options[:folder], ['Helpers', 'Translator'])
30
+ end
31
+
32
+ private
33
+ def cycle_finder
34
+ Operations::CycleFinder.new(graph)
35
+ end
36
+
37
+ def unused_nodes_finder
38
+ Operations::UnusedNodesFinder.new(graph)
39
+ end
40
+
41
+ def extractor
42
+ Operations::Extractor.new(graph)
43
+ end
44
+
45
+ def folder_extractor
46
+ Operations::FolderExtractor.new(graph)
47
+ end
48
+
49
+ def graph
50
+ graph_reader.read
51
+ end
52
+
53
+ def graph_reader
54
+ Dependy::Graph::GraphReader.new(root_folder, [ignore_folder], '{h,m}')
55
+ end
56
+
57
+ def root_folder
58
+ options[:root_folder]
59
+ end
60
+
61
+ def ignore_folder
62
+ options[:ignore_folders].split(' ')
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,31 @@
1
+ module Dependy
2
+ module Graph
3
+ class Graph < Hash
4
+ def initialize(parent_child_list = [])
5
+ parent_child_list.each do |parent, child|
6
+ add_node_to_graph(parent)
7
+ add_node_to_graph(child)
8
+ add_relationship_between(parent, child)
9
+ end
10
+ end
11
+
12
+ def parents_for(node_name)
13
+ self[node_name][:parents]
14
+ end
15
+
16
+ def children_for(node_name)
17
+ self[node_name][:children]
18
+ end
19
+
20
+ private
21
+ def add_node_to_graph(node_name)
22
+ self[node_name] = {parents: [], children: []} unless has_key?(node_name)
23
+ end
24
+
25
+ def add_relationship_between(parent, child)
26
+ self[parent][:children] << child
27
+ self[child][:parents] << parent
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,53 @@
1
+ require 'dependy/graph/graph'
2
+
3
+ module Dependy
4
+ module Graph
5
+ class GraphReader
6
+ def initialize(root_folder, excluded_folders = [], pattern = '*')
7
+ @root_folder = root_folder
8
+ @excluded_folders = excluded_folders
9
+ @pattern = pattern
10
+ end
11
+
12
+ def read
13
+ Graph.new(objects_to_scan)
14
+ end
15
+
16
+ private
17
+ attr_reader :root_folder, :excluded_folders, :pattern
18
+
19
+ def objects_to_scan
20
+ Dir.glob(lookup_pattern(root_folder)).inject([]) do |result, file|
21
+ scan_file(file).map do |import|
22
+ result.push([filename(file), import]) unless import.empty?
23
+ end
24
+ result
25
+ end
26
+ end
27
+
28
+ def scan_file(file)
29
+ all_imports_in_file(file) - [filename(file)] - objects_to_exclude
30
+ end
31
+
32
+ def filename(file)
33
+ File.basename(file, '.*')
34
+ end
35
+
36
+ def objects_to_exclude
37
+ @objects_to_exclude ||= excluded_folders.map do |excluded_folder|
38
+ Dir.glob(lookup_pattern(excluded_folder)).map do |file|
39
+ File.basename(file, '.*')
40
+ end
41
+ end.flatten.uniq
42
+ end
43
+
44
+ def lookup_pattern(folder)
45
+ "#{folder}/**/*.#{pattern}"
46
+ end
47
+
48
+ def all_imports_in_file(file)
49
+ File.read(file).scan(/^#import "(.*)\.h"$/).flatten
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,27 @@
1
+ require 'tsort'
2
+
3
+ module Dependy
4
+ module Operations
5
+ class CycleFinder
6
+ def initialize(graph = {})
7
+ @graph = graph
8
+ end
9
+
10
+ def cycles
11
+ strongly_connected_components.select { |scc| scc.count > 1 }
12
+ end
13
+
14
+ private
15
+ include TSort
16
+ attr_reader :graph
17
+
18
+ def tsort_each_node(&block)
19
+ graph.each_key(&block)
20
+ end
21
+
22
+ def tsort_each_child(node_name, &block)
23
+ graph.children_for(node_name).each(&block)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,32 @@
1
+ require 'dependy/graph/graph'
2
+
3
+ module Dependy
4
+ module Operations
5
+ class Extractor
6
+ def initialize(graph = {})
7
+ @graph = graph
8
+ end
9
+
10
+ def extract(nodes = [], ignore_nodes = [])
11
+ nodes_to_extract(nodes) - ignore_nodes
12
+ end
13
+
14
+ private
15
+ attr_reader :graph
16
+
17
+ def nodes_to_extract(nodes)
18
+ nodes.map do |node_name|
19
+ extract_node(node_name)
20
+ end.flatten.uniq
21
+ end
22
+
23
+ def extract_node(node_name, current_result = [])
24
+ current_result << node_name
25
+ graph.children_for(node_name).each do |child_name|
26
+ extract_node(child_name, current_result) unless current_result.include?(child_name)
27
+ end
28
+ current_result
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,30 @@
1
+ module Dependy
2
+ module Operations
3
+ class FolderExtractor
4
+
5
+ def initialize(graph)
6
+ @graph = graph
7
+ @extractor = Extractor.new(graph)
8
+ end
9
+
10
+ def extract(folders = [], ignore_nodes = [])
11
+ extractor.extract(all_nodes_in_folders(folders), ignore_nodes)
12
+ end
13
+
14
+ private
15
+ attr_reader :graph, :extractor
16
+
17
+ def all_nodes_in_folders(folders = [])
18
+ folders.map { |folder| scan_folder(folder) }.flatten.uniq
19
+ end
20
+
21
+ def scan_folder(folder)
22
+ Dir.glob(lookup_pattern(folder)).map { |file| File.basename(file, '.*') }
23
+ end
24
+
25
+ def lookup_pattern(folder)
26
+ "#{folder}/**/*{h,m}"
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,18 @@
1
+ require 'dependy/graph/graph'
2
+
3
+ module Dependy
4
+ module Operations
5
+ class UnusedNodesFinder
6
+ def initialize(graph = {})
7
+ @graph = graph
8
+ end
9
+
10
+ def unused_nodes
11
+ graph.select { |node_name| graph.parents_for(node_name).count == 0 }.keys
12
+ end
13
+
14
+ private
15
+ attr_reader :graph
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,41 @@
1
+ require 'dependy/graph/graph_reader'
2
+
3
+ describe Dependy::Graph::GraphReader do
4
+ context 'when given all the info' do
5
+ subject(:graph) {
6
+ root_folder = 'spec/fixtures/root_folder'
7
+ ignore_folder = 'spec/fixtures/ignore_folder'
8
+ pattern = '{h,m}'
9
+ described_class.new(root_folder, [ignore_folder], pattern)
10
+ }
11
+
12
+ it 'reads the graph' do
13
+ expected = {
14
+ 'File1' => {parents: [], children: ['File2', 'File4', 'File3']},
15
+ 'File2' => {parents: ['File1'], children: ['File3']},
16
+ 'File4' => {parents: ['File1'], children: []},
17
+ 'File3' => {parents: ['File2', 'File1'], :children => []}
18
+ }
19
+ expect(subject.read).to eql(expected)
20
+ end
21
+ end
22
+
23
+ context 'when given only root folder' do
24
+ subject(:graph) {
25
+ root_folder = 'spec/fixtures/root_folder'
26
+ pattern = '{h,m}'
27
+ described_class.new(root_folder, [], pattern)
28
+ }
29
+
30
+ it 'reads the graph' do
31
+ expected = {
32
+ 'File1' => {parents: [], children: ['File2', 'File4', 'File5', 'File3']},
33
+ 'File2' => {parents: ['File1'], children: ['File3']},
34
+ 'File4' => {parents: ['File1'], children: []},
35
+ 'File5' => {parents: ['File1'], children: []},
36
+ 'File3' => {parents: ['File2', 'File1'], :children => []}
37
+ }
38
+ expect(subject.read).to eql(expected)
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,46 @@
1
+ require 'dependy/graph/graph'
2
+
3
+ describe Dependy::Graph::Graph do
4
+ subject(:graph) { described_class.new([%w(parent child)]) }
5
+
6
+ context 'when creating graph' do
7
+ before do
8
+ @expected_graph = {
9
+ 'parent' => {parents: [], children: ['child']},
10
+ 'child' => {parents: ['parent'], children: []}
11
+ }
12
+ end
13
+
14
+ it 'should properly setup relationships' do
15
+ expect(graph).to eql(@expected_graph)
16
+ end
17
+ end
18
+
19
+ describe '#parents_for' do
20
+ context 'when node contains parents' do
21
+ it 'returns an array of parents' do
22
+ expect(graph.parents_for('parent')).to eql([])
23
+ end
24
+ end
25
+
26
+ context 'when node does NOT contain parents' do
27
+ it 'returns an empty array' do
28
+ expect(graph.parents_for('child')).to eql(['parent'])
29
+ end
30
+ end
31
+ end
32
+
33
+ describe '#children_for' do
34
+ context 'when node contains children' do
35
+ it 'returns an array of children' do
36
+ expect(graph.children_for('parent')).to eql(['child'])
37
+ end
38
+ end
39
+
40
+ context 'when node does NOT contain children' do
41
+ it 'returns an empty array' do
42
+ expect(graph.children_for('child')).to eql([])
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,20 @@
1
+ require 'dependy/operations/cycle_finder'
2
+ require_relative '../../spec_helper'
3
+
4
+ describe Dependy::Operations::CycleFinder do
5
+ context 'when graph contains cycles' do
6
+ subject(:cycle_finder) { described_class.new(GraphFactory.graph_with_cycles) }
7
+
8
+ it 'returns an array of found cycles' do
9
+ expect(subject.cycles).to eql([['2', '3'], ['1', '4']])
10
+ end
11
+ end
12
+
13
+ context 'when graph does NOT contain cycles' do
14
+ subject(:cycle_finder) { described_class.new(GraphFactory.graph_without_cycles) }
15
+
16
+ it 'returns an empty array' do
17
+ expect(subject.cycles).to eql([])
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,14 @@
1
+ require 'dependy/operations/extractor'
2
+ require_relative '../../spec_helper'
3
+
4
+ describe Dependy::Operations::Extractor do
5
+ subject(:extractor) { described_class.new(GraphFactory.graph_with_cycles) }
6
+
7
+ it 'extracts node and all of its parents' do
8
+ expect(subject.extract(['3'])).to eql(['3', '2'])
9
+ end
10
+
11
+ it 'should NOT extract ignored nodes' do
12
+ expect(subject.extract(['3'], ['2'])).to eql(['3'])
13
+ end
14
+ end
@@ -0,0 +1,20 @@
1
+ require 'dependy/operations/unused_nodes_finder'
2
+ require_relative '../../spec_helper'
3
+
4
+ describe Dependy::Operations::UnusedNodesFinder do
5
+ context 'when node with no parents exist' do
6
+ subject(:unused_node_finder) { described_class.new(GraphFactory.graph_without_cycles) }
7
+
8
+ it 'returns unused nodes' do
9
+ expect(subject.unused_nodes).to eql(['1'])
10
+ end
11
+ end
12
+
13
+ context 'when all the nodes are used' do
14
+ subject(:unused_node_finder) { described_class.new(GraphFactory.graph_with_cycles) }
15
+
16
+ it 'returns empty array' do
17
+ expect(subject.unused_nodes).to eql([])
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,11 @@
1
+ require 'dependy/graph/graph'
2
+
3
+ class GraphFactory
4
+ def self.graph_with_cycles
5
+ Dependy::Graph::Graph.new([['1', '2'], ['1', '4'], ['2', '3'], ['3', '2'], ['4', '1']])
6
+ end
7
+
8
+ def self.graph_without_cycles
9
+ Dependy::Graph::Graph.new([['1', '2'], ['2', '3'], ['2', '4']])
10
+ end
11
+ end
File without changes
@@ -0,0 +1 @@
1
+ #import "File5.h"
@@ -0,0 +1 @@
1
+ #import "File5.h"
@@ -0,0 +1 @@
1
+ #import "File6.h"
@@ -0,0 +1,3 @@
1
+ #import "File2.h"
2
+ #import "File4.h"
3
+ #import "File5.h"
@@ -0,0 +1,2 @@
1
+ #import "File1.h"
2
+ #import "File3.h"
@@ -0,0 +1 @@
1
+ #import "File3.h"
@@ -0,0 +1 @@
1
+ #import "File2.h"
@@ -0,0 +1 @@
1
+ import "File1.h"
@@ -0,0 +1 @@
1
+ import "File3.h"
File without changes
@@ -0,0 +1 @@
1
+ #import "File4.h"
@@ -0,0 +1,4 @@
1
+ require 'fixtures/graph_factory'
2
+ require 'codeclimate-test-reporter'
3
+
4
+ CodeClimate::TestReporter.start
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dependy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Slavko Krucaj
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-15 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Analyzing class dependency graphs
14
+ email:
15
+ - slavko.krucaj@gmail.com
16
+ executables:
17
+ - dependy
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - .travis.yml
23
+ - Gemfile
24
+ - LICENSE.txt
25
+ - README.md
26
+ - Rakefile
27
+ - bin/dependy
28
+ - dependy.gemspec
29
+ - lib/dependy.rb
30
+ - lib/dependy/cli.rb
31
+ - lib/dependy/graph/graph.rb
32
+ - lib/dependy/graph/graph_reader.rb
33
+ - lib/dependy/operations/cycle_finder.rb
34
+ - lib/dependy/operations/extractor.rb
35
+ - lib/dependy/operations/folder_extractor.rb
36
+ - lib/dependy/operations/unused_nodes_finder.rb
37
+ - spec/dependy/graph/graph_reader_spec.rb
38
+ - spec/dependy/graph/graph_spec.rb
39
+ - spec/dependy/operations/cycle_finder_spec.rb
40
+ - spec/dependy/operations/extractor_spec.rb
41
+ - spec/dependy/operations/unused_node_finder_spec.rb
42
+ - spec/fixtures/graph_factory.rb
43
+ - spec/fixtures/ignore_folder/File5.h
44
+ - spec/fixtures/ignore_folder/File5.m
45
+ - spec/fixtures/ignore_folder/File6.h
46
+ - spec/fixtures/ignore_folder/File6.m
47
+ - spec/fixtures/root_folder/File1.h
48
+ - spec/fixtures/root_folder/File1.m
49
+ - spec/fixtures/root_folder/File2.h
50
+ - spec/fixtures/root_folder/File2.m
51
+ - spec/fixtures/root_folder/File3.h
52
+ - spec/fixtures/root_folder/File3.m
53
+ - spec/fixtures/root_folder/File4.h
54
+ - spec/fixtures/root_folder/File4.m
55
+ - spec/spec_helper.rb
56
+ homepage:
57
+ licenses:
58
+ - MIT
59
+ metadata: {}
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubyforge_project:
76
+ rubygems_version: 2.4.1
77
+ signing_key:
78
+ specification_version: 4
79
+ summary: Tool for inspecting class dependency graphs
80
+ test_files:
81
+ - spec/dependy/graph/graph_reader_spec.rb
82
+ - spec/dependy/graph/graph_spec.rb
83
+ - spec/dependy/operations/cycle_finder_spec.rb
84
+ - spec/dependy/operations/extractor_spec.rb
85
+ - spec/dependy/operations/unused_node_finder_spec.rb
86
+ - spec/fixtures/graph_factory.rb
87
+ - spec/fixtures/ignore_folder/File5.h
88
+ - spec/fixtures/ignore_folder/File5.m
89
+ - spec/fixtures/ignore_folder/File6.h
90
+ - spec/fixtures/ignore_folder/File6.m
91
+ - spec/fixtures/root_folder/File1.h
92
+ - spec/fixtures/root_folder/File1.m
93
+ - spec/fixtures/root_folder/File2.h
94
+ - spec/fixtures/root_folder/File2.m
95
+ - spec/fixtures/root_folder/File3.h
96
+ - spec/fixtures/root_folder/File3.m
97
+ - spec/fixtures/root_folder/File4.h
98
+ - spec/fixtures/root_folder/File4.m
99
+ - spec/spec_helper.rb