codetree 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4d91d00d736664c8259bcf21a68fc5e50393bdfb
4
+ data.tar.gz: 9ad1aff5a42d9061015a8cf6fa952df6a804e6ef
5
+ SHA512:
6
+ metadata.gz: 52ac70fe88fbb3e7cf6ba3eb10c02ab0f9d27c018201980dc28c598d6e27e8831108f7e259a5af4292e80e510409686725f4b68f92db2130332cb4cd2ca21d6f
7
+ data.tar.gz: a6fc3bd8b44e2eb0e591862be65c4398945e73f833f4ba8c5224a3133933bfd6fc85cef7cb50cd5d0a6ff7c72908fcff420feba5144482de0eac7427df6f7f7e
data/.gitignore ADDED
@@ -0,0 +1,17 @@
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
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in codetree.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,23 @@
1
+ codetree Copyright (c) 2012-2013 Ultragreen Software, Romain GEORGES
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions
6
+ are met:
7
+ 1. Redistributions of source code must retain the above copyright
8
+ notice, this list of conditions and the following disclaimer.
9
+ 2. Redistributions in binary form must reproduce the above copyright
10
+ notice, this list of conditions and the following disclaimer in the
11
+ documentation and/or other materials provided with the distribution.
12
+
13
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23
+ SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # Codetree
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'codetree'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install codetree
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
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 new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,61 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rubygems'
3
+ require 'rspec'
4
+ require 'rake'
5
+ require "rake/clean"
6
+ require "rubygems/package_task"
7
+ require "rdoc/task"
8
+ require 'code_statistics'
9
+ require 'rspec/core/rake_task'
10
+ require 'yard'
11
+ require 'yard/rake/yardoc_task.rb'
12
+ require "rake/tasklib"
13
+ require "roodi"
14
+ require "roodi_task"
15
+
16
+
17
+ RoodiTask.new() do | t |
18
+ t.patterns = %w(lib/**/*.rb)
19
+ t.config = "ultragreen_roodi_coding_convention.yml"
20
+ end
21
+
22
+
23
+ CLEAN.include('*.tmp','*.old')
24
+ CLOBBER.include('*.tmp', 'build/*','#*#')
25
+
26
+
27
+ content = File::readlines(File.join(File.dirname(__FILE__), 'codetree.gemspec')).join
28
+ spec = eval(content)
29
+
30
+ RSpec::Core::RakeTask.new('spec')
31
+
32
+ YARD::Rake::YardocTask.new do |t|
33
+ t.files = [ 'lib/**/*.rb', '-', 'doc/**/*','spec/**/*_spec.rb']
34
+ t.options += ['--title', "Gem Documentation"]
35
+ t.options += ['-o', "yardoc"]
36
+ t.options += ['-r', "doc/manual.rdoc"]
37
+ end
38
+ YARD::Config.load_plugin('yard-rspec')
39
+
40
+ namespace :yardoc do
41
+ task :clobber do
42
+ rm_r "yardoc" rescue nil
43
+ rm_r ".yardoc" rescue nil
44
+ end
45
+ end
46
+ task :clobber => "yardoc:clobber"
47
+
48
+
49
+ Gem::PackageTask.new(spec) do |pkg|
50
+ pkg.need_tar = true
51
+ pkg.need_zip = true
52
+ end
53
+
54
+ Rake::RDocTask.new('rdoc') do |d|
55
+ d.rdoc_files.include('doc/**/*','bin/*')
56
+ d.main = 'doc/manual.rdoc'
57
+ d.title = 'Dorsal : Yard'
58
+ d.options << '--line-numbers' << '--diagram' << '-SHN'
59
+ end
60
+
61
+ task :default => [:gem]
data/bin/#codetree# ADDED
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+ require 'codetree'
3
+ require 'optparse'
4
+
5
+ OptionParser.new do |opts|
6
+ opts.banner = "Usage: codetree [options]"
7
+
8
+ opts.on("-f", "--[no-]flat", "display flat list/tree") do |v|
9
+ $flat = v || false
10
+ end
11
+ opts.on("-d", "--detail", "Specify a detail value [:none,:light,:medium,:full]") do |v|
12
+ $detail = v || :medium
13
+ end
14
+
15
+ end.parse!
16
+
17
+
18
+ p $detail
19
+ p $flat
20
+
21
+
22
+ codetree = Codetree::ParseTree.new(Dir['lib/*/*/*/*.rb'] + Dir['lib/*/*/*.rb'] + Dir['lib/*/*.rb'] + Dir['lib/*.rb'])
23
+ codetree.print_tree detail: $detail, flat: $flat
data/bin/codetree ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ require 'codetree'
3
+ require 'optparse'
4
+
5
+ $detail = :medium
6
+ $flat = false
7
+ $quiet = false
8
+
9
+ OptionParser.new do |opts|
10
+ opts.banner = "Usage: codetree [options]"
11
+
12
+ opts.on("-f", "--[no-]flat", "display flat list/tree") do |v|
13
+ $flat = v
14
+ end
15
+ opts.on("-d", "--detail DETAIL", [:none, :light, :medium , :full],"Specify a detail value ( none, light, medium, full]") do |v|
16
+ $detail = v.to_sym
17
+ end
18
+ opts.on("-q", "--[no-]quiet","Remove node symbols ('*') from output tree/list view") do |v|
19
+ $quiet = v
20
+ end
21
+
22
+ end.parse!
23
+
24
+
25
+
26
+
27
+
28
+ codetree = Codetree::ParseTree.new(Dir['lib/*/*/*/*.rb'] + Dir['lib/*/*/*.rb'] + Dir['lib/*/*.rb'] + Dir['lib/*.rb'])
29
+ codetree.print_tree detail: $detail, flat: $flat, quiet: $quiet
data/codetree.gemspec ADDED
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'codetree/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "codetree"
8
+ spec.version = Codetree::VERSION
9
+ spec.authors = ["Romain GEORGES"]
10
+ spec.email = ["romain@ultragreen.net"]
11
+ spec.description = %q{Scan code to map methods/ classes/ modules and build tree of modules namespaces}
12
+ spec.summary = %q{Usefull tools for code audit commands}
13
+ spec.homepage = "http://www.ultragreen.net"
14
+ spec.license = "BSD"
15
+ spec.require_paths << 'bin'
16
+ spec.bindir = 'bin'
17
+ spec.executables = Dir["bin/*"].map!{|item| item.gsub("bin/","")}
18
+ spec.files = `git ls-files`.split($/)
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
+ spec.require_paths = ["lib"]
22
+ spec.add_dependency "ruby_parser"
23
+ spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "rake"
25
+ spec.add_development_dependency('rspec')
26
+ spec.add_development_dependency('yard')
27
+ spec.add_development_dependency('rdoc')
28
+ spec.add_development_dependency('roodi')
29
+ spec.add_development_dependency('code_statistics')
30
+ spec.add_development_dependency('yard-rspec')
31
+
32
+ end
data/lib/codetree.rb ADDED
@@ -0,0 +1,200 @@
1
+ #require "codetree/version"
2
+ require 'rubygems'
3
+ require 'ruby_parser'
4
+ require 'pp'
5
+
6
+
7
+ module Codetree
8
+
9
+
10
+ class Operator
11
+ attr_reader :type
12
+ attr_reader :ancestors
13
+ attr_accessor :scope
14
+ attr_reader :line
15
+ attr_reader :name
16
+
17
+ def initialize(type: :defn, ancestors: [], scope: :none, name: "", line: 0 )
18
+ @type = type
19
+ @ancestors = ancestors
20
+ @scope = scope
21
+ @name = name
22
+ @line = line
23
+ end
24
+
25
+ def ancestor
26
+ return @ancestors.last
27
+ end
28
+
29
+ def render
30
+ return name.to_s if self.ancestors == []
31
+ case type
32
+ when :defn then return "##{name.to_s}"
33
+ when :defs then return ".#{name.to_s}"
34
+ when :class then return "::#{name.to_s}"
35
+ when :module then return "::#{name.to_s}"
36
+ end
37
+ end
38
+
39
+
40
+ end
41
+
42
+
43
+ class ParseTree
44
+ attr_reader :operators
45
+ attr_reader :ast
46
+ attr_reader :lines
47
+
48
+ def initialize(files)
49
+ @lines = Array::new
50
+ files.each do |file|
51
+ require "./#{file}"
52
+ @lines << File::readlines(file)
53
+ end
54
+
55
+ @lines.flatten!
56
+ @lines = @lines.collect(&:strip!)
57
+ @lines.delete_if {|line| line =~ /^\s*#/}
58
+ @code = @lines.join("\n")
59
+ @ast = RubyParser.new.process @code, "code"
60
+ @operators = {} # positions of interest
61
+ @operators_index = Hash::new
62
+ @curr_position = []
63
+ map_operators!
64
+ generate_tree!
65
+ end
66
+
67
+
68
+
69
+ def format_operator(name, detail: :full)
70
+ res = ""
71
+ scope = {
72
+ :private => { :full => "Private ", :medium => '-', :light => ''},
73
+ :public => { :full => "Public ", :medium => "+", :light => ''},
74
+ :protected => { :full => "Protected ", :medium => "#", :light => ''},
75
+ :none => { :full => "", :medium => " ", :light => ''} }
76
+ type = {
77
+ :defn => { :full => "Instance method ", :medium => '(m):', :light => ''},
78
+ :defs => { :full => "Class method ", :medium => "(m) ", :light => ''},
79
+ :class => { :full => "Class ", :medium => "(C) ", :light => ''},
80
+ :module => { :full => "Module ", :medium => "(M) ", :light => ''} }
81
+ if @operators.include?(name) then
82
+ operator = @operators[name]
83
+ operator.ancestors.each do |ancestor|
84
+ res += @operators[ancestor].render
85
+ end
86
+ res = scope[operator.scope][detail] + type[operator.type][detail] + res + operator.render
87
+ end
88
+ return res
89
+ end
90
+
91
+
92
+ def print_tree(detail: :medium, flat: false, quiet: false)
93
+ print_subtree(@root,0, detail: detail, flat: flat, quiet: quiet )
94
+ end
95
+
96
+
97
+ private
98
+
99
+ def map_operators!
100
+ process_ast_level @ast
101
+ define_scopes!
102
+ end
103
+
104
+ def generate_tree!
105
+ @root = {:name => '', :ancestor => nil}
106
+ @tree = {}
107
+ @operators.values.each do |operator|
108
+ ancestor = operator.ancestor
109
+ if ancestor == nil || !@operators.has_key?(ancestor)
110
+ (@tree[@root] ||= []) << operator
111
+ else
112
+ (@tree[@operators[ancestor]] ||= []) << operator
113
+ end
114
+ end
115
+ end
116
+
117
+
118
+ def register_operator(nodetype, name, linenr, ancestors)
119
+ @operators[name] = Codetree::Operator::new(type: nodetype, name: name, line: linenr, ancestors: ancestors )
120
+ @operators_index[@curr_position.to_s] = [nodetype, name]
121
+ end
122
+
123
+ def define_scopes!
124
+ @operators.each do |name,item|
125
+ unless item.ancestor.nil? then
126
+ klass = eval "#{format_operator item.ancestor, detail: :light}"
127
+ if item.type == :defn then
128
+ item.scope = :private if klass.private_method_defined? name
129
+ item.scope = :protected if klass.protected_method_defined? name
130
+ item.scope = :public if klass.public_method_defined? name
131
+ elsif item.type == :defs and @operators[item.ancestor].type == :class then
132
+ item.scope = :private if klass.private_method_defined? name
133
+ item.scope = :protected if klass.protected_method_defined? name
134
+ item.scope = :public if klass.public_method_defined? name
135
+ end
136
+ end
137
+ end
138
+
139
+ end
140
+
141
+
142
+
143
+ def process_ast_level sub_astree
144
+ return if sub_astree.empty?
145
+ case sub_astree[0]
146
+ when :module, :class, :defn, :private
147
+ register_operator sub_astree[0], sub_astree[1], sub_astree.line, find_where_nested(@curr_position.clone)
148
+ when :defs
149
+ register_operator sub_astree[0], sub_astree[2], sub_astree.line, find_where_nested(@curr_position.clone)
150
+ end
151
+ sub_astree.each_with_index do |sae, i|
152
+ @curr_position.push i
153
+ process_ast_level(sae) if sae.is_a?(Sexp)
154
+ ex_i = @curr_position.pop
155
+ end
156
+ end
157
+
158
+
159
+
160
+ def print_subtree(item, level, detail: :full, flat: false, quiet: false)
161
+ items = @tree[item]
162
+ unless items == nil
163
+ indent = (flat)? '': level > 0 ? sprintf("%#{level * 2}s", " ") : ""
164
+ node = (quiet)? "":"* "
165
+ items.each do |operator|
166
+ if detail == :none then
167
+ puts "#{indent}#{node}#{operator.name}"
168
+ else
169
+ puts "#{indent}#{node}#{format_operator operator.name, detail: detail}"
170
+ end
171
+ print_subtree(operator, level + 1, detail: detail, flat: flat, quiet: quiet)
172
+ end
173
+ end
174
+ end
175
+
176
+
177
+ NESTING_NODES = [:module, :class ] unless const_defined? :NESTING_NODES
178
+ def find_where_nested(position)
179
+ result = []
180
+ for ep in 0..position.size-2 do
181
+ chunk = position[0..ep]
182
+ el = @operators_index[chunk.to_s]
183
+ if el
184
+ eltype, elname = el
185
+ result << elname if NESTING_NODES.include?(eltype)
186
+ end
187
+ end
188
+ result
189
+ end
190
+
191
+
192
+
193
+
194
+ end
195
+
196
+
197
+
198
+
199
+ end
200
+
@@ -0,0 +1,3 @@
1
+ module Codetree
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,25 @@
1
+ AssignmentInConditionalCheck:
2
+ CaseMissingElseCheck:
3
+ ClassLineCountCheck:
4
+ line_count: 300
5
+ ClassNameCheck:
6
+ pattern: !ruby/regexp /^[A-Z][a-zA-Z0-9]*$/
7
+ #ClassVariableCheck:
8
+ CyclomaticComplexityBlockCheck:
9
+ complexity: 5
10
+ CyclomaticComplexityMethodCheck:
11
+ complexity: 10
12
+ EmptyRescueBodyCheck:
13
+ ForLoopCheck:
14
+ MethodLineCountCheck:
15
+ line_count: 30
16
+ MethodNameCheck:
17
+ pattern: !ruby/regexp /^[_a-z<>=\[|+-\/\*`]+[_a-z0-9_<>=~@\[\]]*[=!\?]?$/
18
+ # MissingForeignKeyIndexCheck:
19
+ ModuleLineCountCheck:
20
+ line_count: 500
21
+ ModuleNameCheck:
22
+ pattern: !ruby/regexp /^[A-Z][a-zA-Z0-9]*$/
23
+ ParameterNumberCheck:
24
+ parameter_count: 5
25
+
metadata ADDED
@@ -0,0 +1,184 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: codetree
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Romain GEORGES
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-10-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ruby_parser
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: yard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rdoc
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: roodi
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: code_statistics
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: yard-rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: Scan code to map methods/ classes/ modules and build tree of modules
140
+ namespaces
141
+ email:
142
+ - romain@ultragreen.net
143
+ executables:
144
+ - codetree
145
+ - '#codetree#'
146
+ extensions: []
147
+ extra_rdoc_files: []
148
+ files:
149
+ - .gitignore
150
+ - Gemfile
151
+ - LICENSE.txt
152
+ - README.md
153
+ - Rakefile
154
+ - bin/codetree
155
+ - codetree.gemspec
156
+ - lib/codetree.rb
157
+ - lib/codetree/version.rb
158
+ - ultragreen_roodi_coding_convention.yml
159
+ - bin/#codetree#
160
+ homepage: http://www.ultragreen.net
161
+ licenses:
162
+ - BSD
163
+ metadata: {}
164
+ post_install_message:
165
+ rdoc_options: []
166
+ require_paths:
167
+ - lib
168
+ required_ruby_version: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - '>='
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ required_rubygems_version: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - '>='
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ requirements: []
179
+ rubyforge_project:
180
+ rubygems_version: 2.0.7
181
+ signing_key:
182
+ specification_version: 4
183
+ summary: Usefull tools for code audit commands
184
+ test_files: []