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 +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +23 -0
- data/README.md +29 -0
- data/Rakefile +61 -0
- data/bin/#codetree# +23 -0
- data/bin/codetree +29 -0
- data/codetree.gemspec +32 -0
- data/lib/codetree.rb +200 -0
- data/lib/codetree/version.rb +3 -0
- data/ultragreen_roodi_coding_convention.yml +25 -0
- metadata +184 -0
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
data/Gemfile
ADDED
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,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: []
|