yard-appendix 0.1.6 → 0.1.8

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.
@@ -23,19 +23,22 @@
23
23
  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)))
24
24
 
25
25
  require 'yard'
26
- require 'yard-appendix/version'
27
- require 'yard-appendix/namespace_resolver'
28
- require 'yard-appendix/code_objects/appendix_object'
29
- require 'yard-appendix/tags/appendix_directive'
30
- require 'yard-appendix/handlers/appendix_handler'
31
- require 'yard-appendix/templates/helpers/html_helper'
32
26
 
33
27
  module YARD
34
28
  module AppendixPlugin
35
29
  ROOT = File.dirname(__FILE__)
36
30
  TEMPLATE_PATH = File.join(%W[#{ROOT} .. templates])
31
+ RUBY_19 = RUBY_VERSION >= '1.9.'
37
32
  end
38
33
 
34
+ require 'yard-appendix/version'
35
+ require 'yard-appendix/namespace_resolver'
36
+ require 'yard-appendix/code_objects/appendix_object'
37
+ require 'yard-appendix/tags/appendix_directive'
38
+ require 'yard-appendix/handlers/ruby/appendix_handler' if RUBY19
39
+ require 'yard-appendix/handlers/ruby/legacy/appendix_handler' unless RUBY19
40
+ require 'yard-appendix/templates/helpers/html_helper'
41
+
39
42
  module Templates
40
43
  Engine.register_template_path YARD::AppendixPlugin::TEMPLATE_PATH
41
44
  end
@@ -43,4 +46,4 @@ module YARD
43
46
  module Tags
44
47
  Library.define_directive(:appendix, :with_title_and_text, AppendixDirective)
45
48
  end
46
- end
49
+ end
@@ -20,7 +20,7 @@
20
20
  # SOFTWARE.
21
21
  #
22
22
 
23
- require 'yard/handlers/ruby/comment_handler'
23
+ require 'yard/handlers/ruby/base'
24
24
 
25
25
  module YARD
26
26
  module Handlers
@@ -29,7 +29,7 @@ module YARD
29
29
  # it with the NamespaceResolver.
30
30
  #
31
31
  # @see YARD::AppendixPlugin::NamespaceResolver
32
- class AppendixHandler < CommentHandler
32
+ class AppendixHandler < BaseHandler
33
33
  handles :class, :module
34
34
 
35
35
  def initialize(*args)
@@ -43,7 +43,6 @@ module YARD
43
43
  end
44
44
  end # AppendixHandler
45
45
 
46
- CommentHandler.inherited(AppendixHandler)
47
46
  end # Ruby
48
47
  end # Handlers
49
48
  end # YARD
@@ -0,0 +1,49 @@
1
+ #
2
+ # Copyright (c) 2013 Instructure, Inc.
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a
5
+ # copy of this software and associated documentation files (the "Software"),
6
+ # to deal in the Software without restriction, including without limitation
7
+ # the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
+ # and/or sell copies of the Software, and to permit persons to whom the
9
+ # Software is furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17
+ # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ # SOFTWARE.
21
+ #
22
+
23
+ require 'yard/handlers/ruby/comment_handler'
24
+
25
+ module YARD
26
+ module Handlers
27
+ module Ruby
28
+ # Tracks every namespace defining statement and registers
29
+ # it with the NamespaceResolver.
30
+ #
31
+ # @see YARD::AppendixPlugin::NamespaceResolver
32
+ class AppendixHandler < CommentHandler
33
+ handles :class, :module
34
+
35
+ def initialize(*args)
36
+ super(*args)
37
+
38
+ globals.resolver ||= YARD::AppendixPlugin::NamespaceResolver.new
39
+ end
40
+
41
+ def process
42
+ globals.resolver.register_namespace(statement, namespace)
43
+ end
44
+ end # AppendixHandler
45
+
46
+ CommentHandler.inherited(AppendixHandler)
47
+ end # Ruby
48
+ end # Handlers
49
+ end # YARD
@@ -0,0 +1,26 @@
1
+ require 'yard/handlers/ruby/legacy/base'
2
+
3
+
4
+ module YARD
5
+ module Handlers
6
+ module Ruby
7
+ module Legacy
8
+ class AppendixHandler < Base
9
+ MATCH = /\A(class|module)\s+([\w|_])+\s*[<|;|\n]?/
10
+ handles MATCH
11
+
12
+ def initialize(*args)
13
+ super(*args)
14
+
15
+ globals.resolver ||= YARD::AppendixPlugin::NamespaceResolver.new
16
+ end
17
+
18
+ def process
19
+ ns = statement.tokens.to_s.split(/\s+/).last
20
+ globals.resolver.register_namespace(ns, namespace)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -118,7 +118,7 @@ module YARD
118
118
  lines_to_namespaces.each_pair { |line, ast|
119
119
  distance = statement.line - line
120
120
  if closest.empty? || distance < closest[:distance]
121
- closest = { node: ast, distance: distance }
121
+ closest = { :node => ast, :distance => distance }
122
122
  end
123
123
  }
124
124
 
@@ -134,16 +134,43 @@ module YARD
134
134
  end
135
135
  end
136
136
 
137
- path += case node.type
138
- when :class; node.class_name.path.first
139
- when :module; node.module_name.path.first
137
+
138
+ if node.is_a?(YARD::Parser::Ruby::AstNode)
139
+ path += case node.type
140
+ when :class; node.class_name.path.first
141
+ when :module; node.module_name.path.first
142
+ end
143
+ else
144
+ path += node.to_s
140
145
  end
146
+
147
+ path
141
148
  end
142
149
 
143
150
  def path_to(ast, ns)
144
151
  (ast && @namespaces[path_from_ast(ast, ns)]) || ns.to_s
145
152
  end
146
153
 
154
+ # Legacy YARD handler compatibility
155
+ module LegacyResolver
156
+ def self.included(b)
157
+ log.debug "yard-appendix: namespace resolver running in legacy mode"
158
+
159
+ b.instance_eval {
160
+ remove_method(:locate_enclosing_ns)
161
+ include InstanceMethods
162
+ }
163
+ end
164
+
165
+ module InstanceMethods
166
+ def locate_enclosing_ns(__comment, outer_ns)
167
+ outer_ns.to_s
168
+ end
169
+ end
170
+ end
171
+
172
+ include(LegacyResolver) unless RUBY19
147
173
  end
174
+
148
175
  end
149
176
  end
@@ -22,6 +22,6 @@
22
22
 
23
23
  module YARD
24
24
  module AppendixPlugin
25
- VERSION = "0.1.6"
25
+ VERSION = "0.1.8"
26
26
  end
27
27
  end
@@ -20,6 +20,8 @@
20
20
  # SOFTWARE.
21
21
  #
22
22
 
23
+ unless RUBY_VERSION < '1.9.'
24
+
23
25
  include Handlers::Ruby
24
26
 
25
27
  describe YARD::Handlers::Ruby::AppendixHandler do
@@ -34,14 +36,14 @@ describe YARD::Handlers::Ruby::AppendixHandler do
34
36
  def process; @@resolver ||= globals.resolver end
35
37
 
36
38
  # have to do this manually as to not clutter up the other specs
37
- AppendixHandler.clear_subclasses
39
+ # AppendixHandler.clear_subclasses
38
40
  end
39
41
 
40
- AppendixHandler.inherited(StubHandler)
42
+ # AppendixHandler.inherited(StubHandler)
41
43
  }
42
44
 
43
45
  after {
44
- AppendixHandler.clear_subclasses
46
+ # AppendixHandler.clear_subclasses
45
47
  }
46
48
 
47
49
  it "should track a namespace statement" do
@@ -114,4 +116,5 @@ describe YARD::Handlers::Ruby::AppendixHandler do
114
116
 
115
117
  end
116
118
 
119
+ end
117
120
  end
@@ -0,0 +1,120 @@
1
+ #
2
+ # Copyright (c) 2013 Instructure, Inc.
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a
5
+ # copy of this software and associated documentation files (the "Software"),
6
+ # to deal in the Software without restriction, including without limitation
7
+ # the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
+ # and/or sell copies of the Software, and to permit persons to whom the
9
+ # Software is furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17
+ # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ # SOFTWARE.
21
+ #
22
+
23
+ unless RUBY19
24
+
25
+ include Handlers::Ruby::Legacy
26
+
27
+ describe YARD::Handlers::Ruby::Legacy::AppendixHandler do
28
+
29
+ before {
30
+ Registry.clear
31
+
32
+ class StubHandler < AppendixHandler
33
+ handles AppendixHandler::MATCH
34
+
35
+ def self.resolver; @@resolver end
36
+ def process; @@resolver ||= globals.resolver end
37
+ end
38
+ }
39
+
40
+ it "should track a namespace statement" do
41
+ YARD.parse_string <<-'eof'
42
+ module SomeModule
43
+ class SomeClass
44
+ # comment in SomeClass
45
+ end
46
+
47
+ # comment in SomeModule
48
+ end
49
+ eof
50
+
51
+ StubHandler.resolver.namespaces.size.should == 2
52
+ StubHandler.resolver.namespaces["SomeModule"].should == "SomeModule"
53
+ StubHandler.resolver.namespaces["SomeClass"].should == "SomeModule::SomeClass"
54
+ end
55
+
56
+ it "should locate an enclosing ns for a comment" do
57
+ class StubCommentHandler < Handlers::Ruby::Legacy::Base
58
+ handles TkCOMMENT
59
+ namespace_only
60
+
61
+ class << self
62
+ def comments; @@comments end
63
+ end
64
+
65
+ def process
66
+ @@comments ||= []
67
+ @@comments << [ statement.tokens.to_s, namespace ]
68
+ end
69
+ end
70
+
71
+
72
+ YARD.parse_string <<-'eof'
73
+ module SomeModule
74
+ class SomeClass
75
+ def f() end
76
+ # comment in SomeClass
77
+
78
+ # another comment in SomeClass
79
+ end
80
+
81
+ # comment in SomeModule
82
+ end # should be ignored
83
+
84
+ # comment in :root
85
+ eof
86
+
87
+ comments = StubCommentHandler.comments
88
+ comments.size.should == 4
89
+
90
+ resolver = StubHandler.resolver
91
+ resolver.namespaces.size.should == 2
92
+
93
+ resolver.
94
+ namespace_for(
95
+ comments[0][0],
96
+ comments[0][1]).
97
+ should == Registry.at('SomeModule::SomeClass')
98
+
99
+ resolver.
100
+ namespace_for(
101
+ comments[1][0],
102
+ comments[1][1]).
103
+ should == Registry.at('SomeModule::SomeClass')
104
+
105
+ resolver.
106
+ namespace_for(
107
+ comments[2][0],
108
+ comments[2][1]).
109
+ should == Registry.at('SomeModule')
110
+
111
+ resolver.
112
+ namespace_for(
113
+ comments[3][0],
114
+ comments[3][1]).
115
+ should == Registry.root
116
+
117
+ end
118
+
119
+ end
120
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yard-appendix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-05 00:00:00.000000000 Z
12
+ date: 2013-02-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: yard
@@ -56,11 +56,14 @@ files:
56
56
  - lib/yard-appendix/code_objects/appendix_object.rb
57
57
  - lib/yard-appendix/version.rb
58
58
  - lib/yard-appendix/handlers/appendix_handler.rb
59
+ - lib/yard-appendix/handlers/ruby/appendix_handler.rb
60
+ - lib/yard-appendix/handlers/ruby/legacy/appendix_handler.rb
59
61
  - lib/yard-appendix/namespace_resolver.rb
60
62
  - lib/yard-appendix/tags/appendix_directive.rb
61
63
  - lib/yard-appendix/templates/helpers/html_helper.rb
62
64
  - lib/yard-appendix.rb
63
65
  - spec/code_objects/appendix_object_spec.rb
66
+ - spec/handlers/appendix_legacy_handler_spec.rb
64
67
  - spec/handlers/appendix_handler_spec.rb
65
68
  - spec/spec_helper.rb
66
69
  - spec/tags/appendix_directive_spec.rb