inch 0.3.3 → 0.3.4.rc1

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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9821378d8179a5f3f9c73af1f27d542930d80b34
4
- data.tar.gz: 0600851646f8c4138f249f2155f9669b8655bff9
3
+ metadata.gz: bee5d78b05fdeb0f445662eb4249e8faaa17111e
4
+ data.tar.gz: 3b2fc21a47176e5dcf8585bd535586d16f6df72f
5
5
  SHA512:
6
- metadata.gz: 5059edf002b331f60b680c1ce019b984cf468be470a5f58f01310701bd96e54ceadb19a15f45f51251f44bc37605d08b8d9b56e6087b8cea388fda34e0c541b0
7
- data.tar.gz: 5325f36677ca63f9ad69046eb1308388639282162baae7b16abcf78082e22cf116aa92f59703cf5a2302443629fbdef494c0a7b754db5b5e3b4c639708c8b7c1
6
+ metadata.gz: 04a14a7a0cae1fc250381a3da92626e0149f32dd1ab2f614db0ac522f0e1b4a26ac39af5bbb3acb403c29f7b90c95a6941f3bee8a517d97e0b5ab69ee754c142
7
+ data.tar.gz: 6a8a0ec1621b7ea8ec9543514520ab8dabfae9ded1c483aa845a13aa78224c3ba4edebf266ec442075b721a629dfb421ced96169a580ecfbde8698ba47983455
data/.gitignore CHANGED
@@ -2,6 +2,7 @@
2
2
  *.rbc
3
3
  .bundle
4
4
  .config
5
+ .inch
5
6
  .yardoc
6
7
  Gemfile.lock
7
8
  InstalledFiles
data/CHANGELOG.md ADDED
@@ -0,0 +1,109 @@
1
+ # Changelog
2
+
3
+ ## 0.3.3
4
+
5
+ - Fix rake task
6
+ - Remove unused constant
7
+ - Add support for overload tag
8
+ - Add failing test re: method overloading
9
+ - Update README with configuration instructions
10
+
11
+
12
+ ## 0.3.2
13
+
14
+ - Fix bug when parsing .inch.yml
15
+ - Separate test suite in unit and integration tests
16
+ - Support regexes in .inch.yml
17
+ - Add some basic ideas for .inch.yml support
18
+ - Speed up tests by caching code objects
19
+
20
+
21
+ ## 0.3.1
22
+
23
+ - Fix error with empty docstring
24
+ - Do not count @raise tag if it is auto-assigned via YARD
25
+ - Add a role to encapsulate notations of private tags
26
+ - Update Docstring to detect internal apis
27
+ - Fix output of priority arrows in Suggest command
28
+ - Use original docstring to determine if an object is undocumented?
29
+ - Fix things complained about in last commit
30
+ - Exclude failing test
31
+ - Don't apply transitive :since tag to children's evaluation
32
+ - Fix bug in YARD method object proxy
33
+ - Fix wrong detection of splat and block parameters
34
+ - Fix 1.9.3 compatibility of Inch::Utils::UI
35
+ - Fix #depth method
36
+ - Add Inch::Utils::UI utility class
37
+ - Cache some repeatedly calculated values
38
+
39
+
40
+ ## 0.3.0
41
+
42
+ - Add proxy for RootObject to YARD object provider
43
+ - Ignore some YARD code objects by type
44
+ - Remove YARD from core_ext
45
+ - Fix bug showing wrong paths instead of files in Suggest
46
+ - Ensure output if Suggest has nothing to suggest
47
+ - Merge pull request #5 from splattael/perf
48
+ - Upgrade to Ruby 2.1 as default
49
+ - Prefer `Module#const_get(class_name)` over `eval(class_name)`
50
+ - Prefer `public_send(name)` over `method(name).call`
51
+ - Perf: Index codeobjects objects by fullname
52
+ - Merge pull request #4 from jimjeffers/master
53
+ - Fixed minor typo in CLI for suggest command.
54
+ - Require 'forwardable' at the very top
55
+ - Add fix for failing test
56
+ - Add failing test fixture
57
+ - Refactor Evaluation namespace
58
+ - Add doc to ObjectsFilter
59
+ - Add CodeObject::Provider modules
60
+ - Rewrite Evaluation Role model
61
+ - Add some more docs
62
+ - Extract shared specs into own file
63
+ - Depend on minitest ~> 5.2
64
+ - Merge pull request #3 from splattael/simplecov
65
+ - Add docs to ReadWriteMethods
66
+ - Move simplecov's configuration into own file
67
+ - Add tests for new API classes
68
+ - Rename Evaluation::WeightedList -> Utils::WeightedList
69
+ - Fix description of stats command
70
+ - Add PriorityRange
71
+ - Refactor inspect/show output
72
+ - Introduce API namespace
73
+ - Fix wrong command registration in Command::Inspect
74
+ - Add Codebase::ObjectsFilter
75
+ - Update commands to use Codebase
76
+ - Introduce Codebase namespace
77
+ - Remove unused method alias
78
+ - Fix bug in Docstring
79
+
80
+
81
+ ## 0.2.3
82
+
83
+ - Bump version
84
+ - Rescue error raised by YARD
85
+ - Let Command classes register themselves in CommandParser
86
+ - Fix failing tests (typo)
87
+ - Refactor some more methods
88
+ - Refactor complex methods
89
+ - Add Getter and Setter roles
90
+ - Refactor ScoreRanges into GradeLists
91
+ - Add Inch::Config
92
+ - Rename Evaluation::Criteria -> ObjectSchema
93
+ - Add weighted_list for suggest output
94
+ - Make CodeObject::Proxy#object an attr_reader
95
+
96
+
97
+ ## 0.2.2
98
+
99
+ - Fix bug related to private @api tags (again)
100
+
101
+
102
+ ## 0.2.1
103
+
104
+ - Fix bug related to private @api tags
105
+
106
+
107
+ ## 0.2.0
108
+
109
+ - First public release
data/inch.gemspec CHANGED
@@ -13,12 +13,7 @@ Gem::Specification.new do |spec|
13
13
  spec.homepage = "http://trivelop.de/inch/"
14
14
  spec.license = "MIT"
15
15
 
16
- all_files = `git ls-files -z`.split("\x0")
17
- files_without_dev_commands = all_files.select do |f|
18
- f !~ /cli\/command\/.*(console|inspect)/
19
- end
20
-
21
- spec.files = files_without_dev_commands
16
+ spec.files = `git ls-files -z`.split("\x0")
22
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
23
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
24
19
  spec.require_paths = ["lib"]
data/lib/inch/cli.rb CHANGED
@@ -26,9 +26,3 @@ require_relative 'cli/trace_helper'
26
26
  require_relative 'cli/yardopts_helper'
27
27
 
28
28
  require_relative 'cli/command'
29
-
30
- console_rb = File.join(File.dirname(__FILE__), 'cli', 'command', 'console.rb')
31
- if File.exists?(console_rb)
32
- require_relative 'cli/command/console'
33
- require_relative 'cli/command/inspect'
34
- end
@@ -14,3 +14,5 @@ require_relative 'command/list'
14
14
  require_relative 'command/show'
15
15
  require_relative 'command/stats'
16
16
  require_relative 'command/suggest'
17
+ require_relative 'command/console'
18
+ require_relative 'command/inspect'
@@ -0,0 +1,26 @@
1
+ require 'pry'
2
+ require_relative 'options/console'
3
+ require_relative 'output/console'
4
+
5
+ module Inch
6
+ module CLI
7
+ module Command
8
+ class Console < BaseObject
9
+ register_command_as :console
10
+
11
+ def description
12
+ 'Shows a console'
13
+ end
14
+
15
+ def usage
16
+ 'Usage: inch console [paths] [OBJECT_NAME] [options]'
17
+ end
18
+
19
+ def run(*args)
20
+ prepare_objects(*args)
21
+ Output::Console.new(@options, @object, @objects, codebase)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,25 @@
1
+ require_relative 'options/inspect'
2
+ require_relative 'output/inspect'
3
+
4
+ module Inch
5
+ module CLI
6
+ module Command
7
+ class Inspect < BaseObject
8
+ register_command_as :inspect
9
+
10
+ def description
11
+ 'Inspects an object'
12
+ end
13
+
14
+ def usage
15
+ 'Usage: inch inspect [paths] OBJECT_NAME [[OBJECT_NAME2] ...] [options]'
16
+ end
17
+
18
+ def run(*args)
19
+ prepare_objects(*args)
20
+ Output::Inspect.new(@options, objects)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,26 @@
1
+ module Inch
2
+ module CLI
3
+ module Command
4
+ module Options
5
+ class Console < BaseObject
6
+ def descriptions
7
+ [
8
+ "",
9
+ "Provides a PRY based REPL to inspect objects.",
10
+ "",
11
+ "Example: " + "$ inch console lib/**/*.rb Foo::Bar#initialize".cyan,
12
+ "",
13
+ "Shortcut commands on the prompt are:",
14
+ "",
15
+ "all".ljust(5) + " returns all code objects",
16
+ "f".ljust(5) + " finds an object by its path",
17
+ "ff".ljust(5) + " finds all objects given a partial path",
18
+ "o".ljust(5) + " returns the code object for OBJECT_NAME (if present)",
19
+ ]
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,25 @@
1
+ module Inch
2
+ module CLI
3
+ module Command
4
+ module Options
5
+ class Inspect < BaseObject
6
+
7
+ def descriptions
8
+ [
9
+ "",
10
+ "Example: " + "$ inch inspect lib/**/*.rb Foo::Bar#initialize".cyan,
11
+ "",
12
+ "Shows one or more objects in detail."
13
+ ]
14
+ end
15
+
16
+ def verify
17
+ if object_names.empty?
18
+ kill # "Provide a name to an object to show it's evaluation."
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,61 @@
1
+ module Inch
2
+ module CLI
3
+ module Command
4
+ module Output
5
+ class Console < Base
6
+ extend Forwardable
7
+
8
+ attr_reader :object, :objects, :codebase
9
+
10
+ COLOR = :color198 # magenta-ish
11
+ BG_COLOR = :color207 # magenta-ish
12
+
13
+ # @param options [Options::Console]
14
+ # @param object [CodeObject::Proxy::Base]
15
+ # @param objects [Array<CodeObject::Proxy::Base>]
16
+ # @param codebase [Codebase::Proxy]
17
+ def initialize(options, object, objects, codebase)
18
+ @options = options
19
+ @object = object
20
+ @objects = objects
21
+ @codebase = codebase
22
+
23
+ run
24
+ end
25
+
26
+ def all_objects
27
+ @codebase.objects.all
28
+ end
29
+
30
+ def find_objects(fullname)
31
+ @codebase.objects.starting_with(fullname)
32
+ end
33
+
34
+ def find_object(fullname)
35
+ @codebase.objects.find(fullname)
36
+ end
37
+
38
+ alias :all :all_objects
39
+ alias :ff :find_objects
40
+ alias :f :find_object
41
+ alias :o :object
42
+
43
+
44
+ def run
45
+ ui.trace
46
+ ui.header("Welcome to Inch's console", COLOR, BG_COLOR)
47
+ ui.sub @options.usage
48
+ @options.descriptions.each do |line|
49
+ ui.sub line
50
+ end
51
+ run_pry
52
+ end
53
+
54
+ def run_pry
55
+ binding.pry
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,186 @@
1
+ module Inch
2
+ module CLI
3
+ module Command
4
+ module Output
5
+ class Inspect < Base
6
+ attr_reader :objects
7
+
8
+ COLOR = :color198 # magenta-ish
9
+ BG_COLOR = :color207 # magenta-ish
10
+ LJUST = 20
11
+
12
+ def initialize(options, objects)
13
+ @options = options
14
+ @objects = objects
15
+
16
+ display_objects
17
+ end
18
+
19
+ private
20
+
21
+ def display_objects
22
+ objects.each do |o|
23
+ print_object(o)
24
+ end
25
+ end
26
+
27
+ def print_object(o)
28
+ ui.trace
29
+ ui.header(o.fullname, COLOR, BG_COLOR)
30
+
31
+ print_file_info(o, COLOR)
32
+ print_code_info(o)
33
+ print_namespace_info(o)
34
+ print_roles_info(o)
35
+
36
+ print_score_summary(o)
37
+ end
38
+
39
+ def print_score_summary(o)
40
+ min = o.evaluation.min_score
41
+ max = o.evaluation.max_score
42
+ echo "Score (min: #{min}, max: #{max})".ljust(40) +
43
+ "#{o.score.to_i}".rjust(5) + "#{o.priority.to_i}".rjust(4)
44
+ echo
45
+ end
46
+
47
+ def print_code_info(o)
48
+ if o.method?
49
+ CommentAndAbbrevSource.new(o).lines.each do |line|
50
+ echo line.gsub(/\n$/m, '').dark
51
+ end
52
+ echo separator
53
+ end
54
+ end
55
+
56
+ def print_roles_info(o)
57
+ if o.roles.empty?
58
+ echo "No roles assigned.".dark
59
+ else
60
+ o.roles.each do |role|
61
+ print_role_info(role)
62
+ end
63
+ end
64
+ echo separator
65
+ end
66
+
67
+ def print_role_info(role)
68
+ name = role.class.to_s.split('::Role::').last
69
+ score = colored_role_score(role)
70
+
71
+ priority = role.priority.to_s.rjust(4)
72
+ if role.priority == 0
73
+ priority = priority.dark
74
+ end
75
+
76
+ echo name.ljust(40) + score + priority
77
+ print_min_max_score(role)
78
+ end
79
+
80
+ def print_min_max_score(role)
81
+ if role.max_score
82
+ echo " (set max score to #{role.max_score})"
83
+ elsif role.min_score
84
+ echo " (set min score to #{role.min_score})"
85
+ end
86
+ end
87
+
88
+ def print_namespace_info(o)
89
+ if o.namespace?
90
+ echo "Children:"
91
+ o.children.each do |child|
92
+ echo "+ " + child.fullname.color(COLOR)
93
+ end
94
+ echo separator
95
+ end
96
+ end
97
+
98
+ def colored_role_score(role)
99
+ if role.potential_score
100
+ "(#{role.potential_score.to_i})".rjust(5).yellow.dark
101
+ else
102
+ value = role.score.to_i
103
+ colored_score value, value.abs.to_s.rjust(4)
104
+ end
105
+ end
106
+
107
+ def colored_score(value, score)
108
+ if value < 0
109
+ ("-" + score).red
110
+ elsif value > 0
111
+ ("+" + score).green
112
+ else
113
+ " " + score
114
+ end
115
+ end
116
+
117
+ def echo(msg = "")
118
+ ui.edged(COLOR, msg)
119
+ end
120
+
121
+ def separator
122
+ "-".color(COLOR) * (CLI::COLUMNS - 2)
123
+ end
124
+
125
+ class CommentAndAbbrevSource < Struct.new(:code_object)
126
+ extend Forwardable
127
+
128
+ def_delegators :code_object, :source, :files
129
+
130
+ def lines
131
+ to_s.lines
132
+ end
133
+
134
+ def to_s
135
+ comments.join('') + abbrev_source
136
+ end
137
+
138
+ private
139
+
140
+ def abbrev_source
141
+ lines = code_object.source.to_s.lines.to_a
142
+ if lines.size >= 5
143
+ indent = lines[1].scan(/^(\s+)/).flatten.join('')
144
+ lines = lines[0..1] +
145
+ ["#{indent}# ... snip ...\n"] +
146
+ lines[-2..-1]
147
+ end
148
+ lines.join('')
149
+ end
150
+
151
+ def comments
152
+ @comments ||= code_object.files.map do |declaration|
153
+ get_lines_up_while(declaration.filename, declaration.line_no - 1) do |line|
154
+ line =~ /^\s*#/
155
+ end.flatten.join('')
156
+ end
157
+ end
158
+
159
+ def get_lines_up_while(filename, line_no, &block)
160
+ lines = []
161
+ line = get_line_no(filename, line_no)
162
+ if yield(line) && line_no > 0
163
+ lines << line.gsub(/^(\s+)/, '')
164
+ lines << get_lines_up_while(filename, line_no - 1, &block)
165
+ end
166
+ lines.reverse
167
+ end
168
+
169
+ # Returns a +line_number+ from a file
170
+ #
171
+ # @param filename [String]
172
+ # @param line_number [Fixnum]
173
+ # @return [String]
174
+ def get_line_no(filename, line_number)
175
+ f = File.open(filename)
176
+ line_number.times{f.gets}
177
+ result = $_
178
+ f.close
179
+ result
180
+ end
181
+ end
182
+ end
183
+ end
184
+ end
185
+ end
186
+ end
@@ -16,6 +16,8 @@ module Inch
16
16
  parent_fullname
17
17
 
18
18
  api_tag?
19
+ aliased_object_fullname
20
+ aliases_fullnames
19
21
  attributes
20
22
  bang_name?
21
23
  constant?
@@ -23,7 +25,6 @@ module Inch
23
25
  depth
24
26
  docstring
25
27
  getter?
26
- has_alias?
27
28
  has_children?
28
29
  has_code_example?
29
30
  has_doc?
@@ -6,6 +6,10 @@ module Inch
6
6
  #
7
7
  module Object
8
8
  class << self
9
+ def clear_cache
10
+ @cache = {}
11
+ end
12
+
9
13
  # Returns a Proxy object for the given +yard_object+
10
14
  #
11
15
  # @param yard_object [YARD::CodeObject]
@@ -30,6 +30,16 @@ module Inch
30
30
  @__private_tag = __private_tag
31
31
  end
32
32
 
33
+ # Returns the fullname of the object that the current object
34
+ # is an alias for
35
+ attr_accessor :aliased_object_fullname
36
+
37
+ # Returns the fullnames of the objects that are aliases
38
+ # for the current object
39
+ def aliases_fullnames
40
+ []
41
+ end
42
+
33
43
  def api_tag?
34
44
  !api_tag.nil?
35
45
  end
@@ -104,10 +114,6 @@ module Inch
104
114
  @name ||= object.name
105
115
  end
106
116
 
107
- def has_alias?
108
- false
109
- end
110
-
111
117
  def has_children?
112
118
  !children.empty?
113
119
  end
@@ -5,15 +5,18 @@ module Inch
5
5
  module Object
6
6
  # Proxy class for methods
7
7
  class MethodObject < Base
8
-
9
- def constructor?
10
- name == :initialize
8
+ def aliases_fullnames
9
+ object.aliases.map(&:path)
11
10
  end
12
11
 
13
12
  def bang_name?
14
13
  name =~ /\!$/
15
14
  end
16
15
 
16
+ def constructor?
17
+ name == :initialize
18
+ end
19
+
17
20
  def getter?
18
21
  attr_info = object.attr_info || {}
19
22
  read_info = attr_info[:read]
@@ -28,10 +31,6 @@ module Inch
28
31
  super && !implicit_docstring?
29
32
  end
30
33
 
31
- def has_alias?
32
- !object.aliases.empty?
33
- end
34
-
35
34
  def method?
36
35
  true
37
36
  end
@@ -37,6 +37,7 @@ module Inch
37
37
  private
38
38
 
39
39
  def parse_yard_objects(paths, excluded)
40
+ YARD::Object.clear_cache
40
41
  ::YARD::Registry.clear
41
42
  ::YARD.parse(paths, excluded)
42
43
  end
@@ -44,6 +45,11 @@ module Inch
44
45
  def inject_base_dir(dir)
45
46
  objects.each do |object|
46
47
  object.base_dir = dir
48
+
49
+ object.aliases_fullnames.each do |fullname|
50
+ _alias = objects.detect { |o| o.fullname == fullname }
51
+ _alias.aliased_object_fullname = object.fullname
52
+ end
47
53
  end
48
54
  end
49
55
 
@@ -10,14 +10,8 @@ module Inch
10
10
  # @param code_object [YARD::Object::Base]
11
11
  # @return [CodeObject::Proxy::Base]
12
12
  def for(code_object)
13
- @cache ||= {}
14
- if proxy_object = @cache[cache_key(code_object)]
15
- proxy_object
16
- else
17
- attributes = Converter.to_hash(code_object)
18
- proxy_object = class_for(code_object).new(attributes)
19
- @cache[cache_key(code_object)] = proxy_object
20
- end
13
+ attributes = Converter.to_hash(code_object)
14
+ proxy_object = class_for(code_object).new(attributes)
21
15
  end
22
16
 
23
17
  private
@@ -30,13 +24,6 @@ module Inch
30
24
  class_name = code_object.class.to_s.split('::').last
31
25
  const_get(class_name)
32
26
  end
33
-
34
- # Returns a cache key for the given +code_object+
35
- #
36
- # @return [String]
37
- def cache_key(code_object)
38
- code_object.fullname
39
- end
40
27
  end
41
28
  end
42
29
  end
@@ -3,11 +3,15 @@ require 'forwardable'
3
3
  module Inch
4
4
  module CodeObject
5
5
  module Proxy
6
+ # This is the base class for code object proxies.
7
+ # Code object proxies are via an attributes Hash and provide all methods
8
+ # necessary for the evaluation of its documentation.
9
+ #
6
10
  # @abstract
7
11
  class Base
8
12
  extend Forwardable
9
13
 
10
- # @return [Symbol]
14
+ # @return [Grade]
11
15
  # when objects are assigned to GradeLists, this grade is set to
12
16
  # enable easier querying for objects of a certain grade
13
17
  attr_writer :grade
@@ -43,6 +47,16 @@ module Inch
43
47
  }.grade
44
48
  end
45
49
 
50
+ # @return [Boolean] if the current object is an alias for something else
51
+ def alias?
52
+ !aliased_object.nil?
53
+ end
54
+
55
+ # @return [CodeObject::Proxy::Base] the object the current object is an alias of
56
+ def aliased_object
57
+ object_lookup.find( self[:aliased_object_fullname] )
58
+ end
59
+
46
60
  # @return [Boolean] +true+ if the object has an @api tag
47
61
  def api_tag?
48
62
  self[:api_tag?]
@@ -61,7 +75,7 @@ module Inch
61
75
  end
62
76
 
63
77
  def core?
64
- self[:api_tag?]
78
+ self[:core?]
65
79
  end
66
80
 
67
81
  # The depth of the following is 4:
@@ -110,7 +124,7 @@ module Inch
110
124
  end
111
125
 
112
126
  def has_alias?
113
- self[:has_alias?]
127
+ !self[:aliases_fullnames].empty?
114
128
  end
115
129
 
116
130
  def has_children?
@@ -152,7 +166,7 @@ module Inch
152
166
  self[:nodoc?]
153
167
  end
154
168
 
155
- # @return [Array,nil] the parent of the current object or +nil+
169
+ # @return [CodeObject::Proxy::Base,nil] the parent of the current object or +nil+
156
170
  def parent
157
171
  object_lookup.find( self[:parent_fullname] )
158
172
  end
@@ -1,5 +1,7 @@
1
1
  module Inch
2
2
  module Evaluation
3
+ # Grades are human-friendly representations of scores.
4
+ #
3
5
  class Grade
4
6
  extend Utils::ReadWriteMethods
5
7
 
@@ -9,14 +11,20 @@ module Inch
9
11
  @symbol = symbol
10
12
  end
11
13
 
14
+ # Updates the grade's configuration with the given block
15
+ #
16
+ # @param block [Proc]
17
+ # @return [void]
12
18
  def update(&block)
13
19
  instance_eval(&block)
14
20
  end
15
21
 
22
+ # @return [Symbol] the grade as a symbol (e.g. +:A+)
16
23
  def to_sym
17
24
  @symbol
18
25
  end
19
26
 
27
+ # @return [String] the grade as a string (e.g. "A")
20
28
  def to_s
21
29
  @symbol.to_s
22
30
  end
@@ -11,8 +11,6 @@ module Inch
11
11
  # @return [CodeObject::Proxy::Base]
12
12
  attr_accessor :object
13
13
 
14
- attr_reader :min_score, :max_score
15
-
16
14
  class << self
17
15
  attr_reader :criteria_map
18
16
 
@@ -103,6 +101,7 @@ module Inch
103
101
  Role::Object::TaggedAsAPI => nil,
104
102
  Role::Object::TaggedAsInternalAPI => nil,
105
103
  Role::Object::TaggedAsPrivate => nil,
104
+ Role::Object::Alias => object.alias? ? object.aliased_object.score : nil,
106
105
  }
107
106
  end
108
107
 
@@ -3,6 +3,18 @@ module Inch
3
3
  module Role
4
4
  # Roles assigned to all objects
5
5
  module Object
6
+ # Role assigned to objects that are aliases.
7
+ #
8
+ class Alias < Base
9
+ applicable_if :alias?
10
+
11
+ def priority
12
+ # not sure about this yet,
13
+ # but aliases should not show up high in the reports
14
+ -7
15
+ end
16
+ end
17
+
6
18
  # Role assigned to objects with a describing comment (docstring)
7
19
  class WithDoc < Base
8
20
  applicable_if :has_doc?
data/lib/inch/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Inch
2
- VERSION = "0.3.3"
2
+ VERSION = "0.3.4.rc1"
3
3
  end
@@ -95,7 +95,6 @@ module InchTest
95
95
  def public_method
96
96
  end
97
97
 
98
-
99
98
  def protected_method
100
99
  end
101
100
  protected :protected_method
@@ -119,4 +118,10 @@ module InchTest
119
118
  # Private: Normalize the filename.
120
119
  def private_method_with_tomdoc
121
120
  end
121
+
122
+ # @return [Boolean] something funny
123
+ def _aliased_method
124
+ end
125
+ alias _alias_method _aliased_method
126
+
122
127
  end
@@ -0,0 +1,59 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../test_helper')
2
+
3
+ class Inch::CLI::Command::Output::Console
4
+ def run_pry
5
+ nil # instead of binding.pry
6
+ end
7
+ end
8
+
9
+ describe ::Inch::CLI::Command::Console do
10
+ before do
11
+ Dir.chdir fixture_path(:simple)
12
+ @command = ::Inch::CLI::Command::Console
13
+ end
14
+
15
+ it "should output info when run with --help" do
16
+ out, err = capture_io do
17
+ assert_raises(SystemExit) { @command.run("--help") }
18
+ end
19
+ refute out.empty?, "there should be some output"
20
+ assert_match /\bUsage\b.+console/, out
21
+ assert err.empty?, "there should be no errors"
22
+ end
23
+
24
+ it "should run without args" do
25
+ out, err = capture_io do
26
+ @prompt = @command.new.run()
27
+ end
28
+ assert @prompt.respond_to?(:all)
29
+ assert @prompt.respond_to?(:ff)
30
+ assert @prompt.respond_to?(:f)
31
+ assert @prompt.respond_to?(:o)
32
+ assert @prompt.o.nil?
33
+ assert @prompt.objects.empty?
34
+ end
35
+
36
+ it "should run with a definitive object name" do
37
+ out, err = capture_io do
38
+ @prompt = @command.new.run("Foo::Bar#method_with_full_doc")
39
+ end
40
+ assert !@prompt.all.empty?
41
+ assert !@prompt.ff("Foo::Bar#").empty?
42
+ assert !@prompt.f("Foo::Bar").nil?
43
+ assert !@prompt.o.nil?
44
+ refute @prompt.o.nil?
45
+ assert_equal 1, @prompt.objects.size
46
+ end
47
+
48
+ it "should run with a partial name" do
49
+ out, err = capture_io do
50
+ @prompt = @command.new.run("Foo::Bar#")
51
+ end
52
+ assert @prompt.respond_to?(:all)
53
+ assert @prompt.respond_to?(:ff)
54
+ assert @prompt.respond_to?(:f)
55
+ assert @prompt.respond_to?(:o)
56
+ refute @prompt.o.nil?
57
+ assert @prompt.objects.size > 1
58
+ end
59
+ end
@@ -0,0 +1,68 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../test_helper')
2
+
3
+ describe ::Inch::CLI::Command::Inspect do
4
+ before do
5
+ Dir.chdir fixture_path(:simple)
6
+ @command = ::Inch::CLI::Command::Inspect
7
+ end
8
+
9
+ it "should warn and exit when run without args" do
10
+ out, err = capture_io do
11
+ assert_raises(SystemExit) { @command.run() }
12
+ end
13
+ assert out.empty?, "there should be no output"
14
+ refute err.empty?, "there should be some error message"
15
+ end
16
+
17
+ it "should output info when run with --help" do
18
+ out, err = capture_io do
19
+ assert_raises(SystemExit) { @command.run("--help") }
20
+ end
21
+ refute out.empty?, "there should be some output"
22
+ assert_match /\bUsage\b.+inspect/, out
23
+ assert err.empty?, "there should be no errors"
24
+ end
25
+
26
+ it "should output some info when run with a definitive object name" do
27
+ out, err = capture_io do
28
+ @command.run("Foo::Bar#method_with_full_doc", "--no-color")
29
+ end
30
+ refute out.empty?, "there should be some output"
31
+ assert_match /\bFoo::Bar#method_with_full_doc\b/, out
32
+ refute_match(/\b Foo::Bar#method_without_doc\b/, out)
33
+ assert err.empty?, "there should be no errors"
34
+ end
35
+
36
+
37
+ it "should output some info when run with a definitive object name" do
38
+ out, err = capture_io do
39
+ @command.run("Foo::Qux")
40
+ end
41
+ refute out.empty?, "there should be some output"
42
+ assert err.empty?, "there should be no errors"
43
+ end
44
+
45
+ it "should output all children info when run with a partial name" do
46
+ out, err = capture_io do
47
+ @command.run("Foo::Bar#", "--no-color")
48
+ end
49
+ refute out.empty?, "there should be some output"
50
+ assert_match /\bFoo::Bar#method_without_doc\b/, out
51
+ assert_match /\bFoo::Bar#method_with_full_doc\b/, out
52
+ assert err.empty?, "there should be no errors"
53
+ end
54
+
55
+ it "should output colored information" do
56
+ out, err = capture_io do
57
+ @command.run("Foo::Bar#")
58
+ end
59
+ refute_equal out.uncolor, out, "should be colored"
60
+ end
61
+
62
+ it "should output uncolored information when asked" do
63
+ out, err = capture_io do
64
+ @command.run("Foo::Bar#", "--no-color")
65
+ end
66
+ assert_equal out.uncolor, out, "should not be colored"
67
+ end
68
+ end
@@ -264,6 +264,12 @@ describe ::Inch::CodeObject::Proxy::MethodObject do
264
264
  assert_equal m1.score, m2.score
265
265
  end
266
266
 
267
+ def test_alias_method
268
+ m1 = @objects.find("InchTest#_aliased_method")
269
+ m2 = @objects.find("InchTest#_alias_method")
270
+ assert_equal m1.score, m2.score
271
+ end
272
+
267
273
  def test_overloading1
268
274
  list = []
269
275
  list << @objects.find("Overloading#rgb")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - René Föhring
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-17 00:00:00.000000000 Z
11
+ date: 2014-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -121,6 +121,7 @@ files:
121
121
  - ".ruby-version"
122
122
  - ".simplecov"
123
123
  - ".travis.yml"
124
+ - CHANGELOG.md
124
125
  - Gemfile
125
126
  - LICENSE
126
127
  - README.md
@@ -146,15 +147,21 @@ files:
146
147
  - lib/inch/cli/command/base.rb
147
148
  - lib/inch/cli/command/base_list.rb
148
149
  - lib/inch/cli/command/base_object.rb
150
+ - lib/inch/cli/command/console.rb
151
+ - lib/inch/cli/command/inspect.rb
149
152
  - lib/inch/cli/command/list.rb
150
153
  - lib/inch/cli/command/options/base.rb
151
154
  - lib/inch/cli/command/options/base_list.rb
152
155
  - lib/inch/cli/command/options/base_object.rb
156
+ - lib/inch/cli/command/options/console.rb
157
+ - lib/inch/cli/command/options/inspect.rb
153
158
  - lib/inch/cli/command/options/list.rb
154
159
  - lib/inch/cli/command/options/show.rb
155
160
  - lib/inch/cli/command/options/stats.rb
156
161
  - lib/inch/cli/command/options/suggest.rb
157
162
  - lib/inch/cli/command/output/base.rb
163
+ - lib/inch/cli/command/output/console.rb
164
+ - lib/inch/cli/command/output/inspect.rb
158
165
  - lib/inch/cli/command/output/list.rb
159
166
  - lib/inch/cli/command/output/show.rb
160
167
  - lib/inch/cli/command/output/stats.rb
@@ -242,6 +249,8 @@ files:
242
249
  - test/fixtures/visibility/lib/foo.rb
243
250
  - test/fixtures/yardopts/.yardopts
244
251
  - test/fixtures/yardopts/foo/bar.rb
252
+ - test/integration/cli/command/console_test.rb
253
+ - test/integration/cli/command/inspect_test.rb
245
254
  - test/integration/cli/command/list_test.rb
246
255
  - test/integration/cli/command/show_test.rb
247
256
  - test/integration/cli/command/stats_test.rb
@@ -292,9 +301,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
292
301
  version: '0'
293
302
  required_rubygems_version: !ruby/object:Gem::Requirement
294
303
  requirements:
295
- - - ">="
304
+ - - ">"
296
305
  - !ruby/object:Gem::Version
297
- version: '0'
306
+ version: 1.3.1
298
307
  requirements: []
299
308
  rubyforge_project:
300
309
  rubygems_version: 2.2.2
@@ -319,6 +328,8 @@ test_files:
319
328
  - test/fixtures/visibility/lib/foo.rb
320
329
  - test/fixtures/yardopts/.yardopts
321
330
  - test/fixtures/yardopts/foo/bar.rb
331
+ - test/integration/cli/command/console_test.rb
332
+ - test/integration/cli/command/inspect_test.rb
322
333
  - test/integration/cli/command/list_test.rb
323
334
  - test/integration/cli/command/show_test.rb
324
335
  - test/integration/cli/command/stats_test.rb