yard 0.9.23 → 0.9.27

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of yard might be problematic. Click here for more details.

Files changed (257) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +0 -0
  3. data/.gitattributes +4 -0
  4. data/.github/FUNDING.yml +3 -0
  5. data/.github/ISSUE_TEMPLATE.md +6 -6
  6. data/.github/PULL_REQUEST_TEMPLATE.md +5 -5
  7. data/.github/workflows/ci.yml +30 -0
  8. data/.github/workflows/gem.yml +19 -0
  9. data/.gitignore +0 -0
  10. data/.rspec +0 -0
  11. data/.rubocop.yml +37 -24
  12. data/.yardopts +0 -0
  13. data/.yardopts_guide +0 -0
  14. data/.yardopts_i18n +0 -0
  15. data/CHANGELOG.md +50 -4
  16. data/CONTRIBUTING.md +2 -2
  17. data/Gemfile +5 -3
  18. data/README.md +97 -102
  19. data/Rakefile +2 -3
  20. data/lib/yard/cli/diff.rb +4 -1
  21. data/lib/yard/cli/server.rb +22 -13
  22. data/lib/yard/cli/stats.rb +2 -0
  23. data/lib/yard/cli/yardoc.rb +2 -1
  24. data/lib/yard/code_objects/method_object.rb +1 -1
  25. data/lib/yard/code_objects/namespace_mapper.rb +30 -3
  26. data/lib/yard/code_objects/proxy.rb +2 -1
  27. data/lib/yard/globals.rb +1 -1
  28. data/lib/yard/handlers/c/base.rb +35 -0
  29. data/lib/yard/handlers/ruby/method_handler.rb +1 -1
  30. data/lib/yard/handlers/ruby/mixin_handler.rb +7 -2
  31. data/lib/yard/handlers/ruby/module_function_handler.rb +15 -3
  32. data/lib/yard/parser/ruby/ast_node.rb +2 -2
  33. data/lib/yard/parser/ruby/ruby_parser.rb +7 -5
  34. data/lib/yard/parser/ruby/token_resolver.rb +3 -1
  35. data/lib/yard/parser/source_parser.rb +1 -1
  36. data/lib/yard/registry_resolver.rb +10 -24
  37. data/lib/yard/registry_store.rb +1 -1
  38. data/lib/yard/serializers/yardoc_serializer.rb +1 -1
  39. data/lib/yard/server/commands/base.rb +2 -2
  40. data/lib/yard/server/commands/library_command.rb +1 -1
  41. data/lib/yard/tags/directives.rb +10 -1
  42. data/lib/yard/templates/helpers/html_helper.rb +15 -5
  43. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +5 -4
  44. data/lib/yard/templates/helpers/markup_helper.rb +2 -1
  45. data/lib/yard/templates/section.rb +1 -3
  46. data/lib/yard/version.rb +1 -1
  47. data/lib/yard.rb +3 -0
  48. data/samus.json +15 -46
  49. data/tasks/prepare_tag.rake +45 -0
  50. data/tasks/update_error_map.rake +53 -0
  51. data/templates/default/fulldoc/html/css/style.css +1 -0
  52. data/yard.gemspec +3 -2
  53. metadata +23 -207
  54. data/.travis.yml +0 -52
  55. data/spec/cli/command_parser_spec.rb +0 -43
  56. data/spec/cli/command_spec.rb +0 -36
  57. data/spec/cli/config_spec.rb +0 -148
  58. data/spec/cli/diff_spec.rb +0 -254
  59. data/spec/cli/display_spec.rb +0 -30
  60. data/spec/cli/gems_spec.rb +0 -81
  61. data/spec/cli/graph_spec.rb +0 -18
  62. data/spec/cli/help_spec.rb +0 -22
  63. data/spec/cli/i18n_spec.rb +0 -107
  64. data/spec/cli/list_spec.rb +0 -8
  65. data/spec/cli/markup_types_spec.rb +0 -22
  66. data/spec/cli/server_spec.rb +0 -324
  67. data/spec/cli/stats_spec.rb +0 -96
  68. data/spec/cli/yard_on_yard_spec.rb +0 -38
  69. data/spec/cli/yardoc_spec.rb +0 -896
  70. data/spec/cli/yri_spec.rb +0 -101
  71. data/spec/code_objects/base_spec.rb +0 -485
  72. data/spec/code_objects/class_object_spec.rb +0 -226
  73. data/spec/code_objects/code_object_list_spec.rb +0 -36
  74. data/spec/code_objects/constants_spec.rb +0 -116
  75. data/spec/code_objects/extra_file_object_spec.rb +0 -161
  76. data/spec/code_objects/macro_object_spec.rb +0 -150
  77. data/spec/code_objects/method_object_spec.rb +0 -184
  78. data/spec/code_objects/module_object_spec.rb +0 -142
  79. data/spec/code_objects/namespace_object_spec.rb +0 -171
  80. data/spec/code_objects/proxy_spec.rb +0 -147
  81. data/spec/code_objects/spec_helper.rb +0 -3
  82. data/spec/config_spec.rb +0 -171
  83. data/spec/core_ext/array_spec.rb +0 -13
  84. data/spec/core_ext/file_spec.rb +0 -72
  85. data/spec/core_ext/hash_spec.rb +0 -14
  86. data/spec/core_ext/insertion_spec.rb +0 -37
  87. data/spec/core_ext/module_spec.rb +0 -9
  88. data/spec/core_ext/string_spec.rb +0 -42
  89. data/spec/core_ext/symbol_hash_spec.rb +0 -89
  90. data/spec/docstring_parser_spec.rb +0 -280
  91. data/spec/docstring_spec.rb +0 -373
  92. data/spec/handlers/alias_handler_spec.rb +0 -82
  93. data/spec/handlers/attribute_handler_spec.rb +0 -96
  94. data/spec/handlers/base_spec.rb +0 -216
  95. data/spec/handlers/c/alias_handler_spec.rb +0 -34
  96. data/spec/handlers/c/attribute_handler_spec.rb +0 -41
  97. data/spec/handlers/c/class_handler_spec.rb +0 -78
  98. data/spec/handlers/c/constant_handler_spec.rb +0 -71
  99. data/spec/handlers/c/init_handler_spec.rb +0 -48
  100. data/spec/handlers/c/method_handler_spec.rb +0 -327
  101. data/spec/handlers/c/mixin_handler_spec.rb +0 -44
  102. data/spec/handlers/c/module_handler_spec.rb +0 -71
  103. data/spec/handlers/c/override_comment_handler_spec.rb +0 -47
  104. data/spec/handlers/c/path_handler_spec.rb +0 -36
  105. data/spec/handlers/c/spec_helper.rb +0 -23
  106. data/spec/handlers/c/struct_handler_spec.rb +0 -16
  107. data/spec/handlers/class_condition_handler_spec.rb +0 -87
  108. data/spec/handlers/class_handler_spec.rb +0 -247
  109. data/spec/handlers/class_method_handler_shared_examples.rb +0 -133
  110. data/spec/handlers/class_variable_handler_spec.rb +0 -12
  111. data/spec/handlers/constant_handler_spec.rb +0 -112
  112. data/spec/handlers/decorator_handler_methods_spec.rb +0 -393
  113. data/spec/handlers/dsl_handler_spec.rb +0 -226
  114. data/spec/handlers/examples/alias_handler_001.rb.txt +0 -46
  115. data/spec/handlers/examples/attribute_handler_001.rb.txt +0 -32
  116. data/spec/handlers/examples/class_condition_handler_001.rb.txt +0 -69
  117. data/spec/handlers/examples/class_handler_001.rb.txt +0 -120
  118. data/spec/handlers/examples/class_variable_handler_001.rb.txt +0 -10
  119. data/spec/handlers/examples/constant_handler_001.rb.txt +0 -35
  120. data/spec/handlers/examples/dsl_handler_001.rb.txt +0 -156
  121. data/spec/handlers/examples/exception_handler_001.rb.txt +0 -59
  122. data/spec/handlers/examples/extend_handler_001.rb.txt +0 -19
  123. data/spec/handlers/examples/method_condition_handler_001.rb.txt +0 -10
  124. data/spec/handlers/examples/method_handler_001.rb.txt +0 -128
  125. data/spec/handlers/examples/mixin_handler_001.rb.txt +0 -40
  126. data/spec/handlers/examples/module_handler_001.rb.txt +0 -29
  127. data/spec/handlers/examples/private_constant_handler_001.rb.txt +0 -8
  128. data/spec/handlers/examples/process_handler_001.rb.txt +0 -11
  129. data/spec/handlers/examples/visibility_handler_001.rb.txt +0 -36
  130. data/spec/handlers/examples/yield_handler_001.rb.txt +0 -54
  131. data/spec/handlers/exception_handler_spec.rb +0 -49
  132. data/spec/handlers/extend_handler_spec.rb +0 -28
  133. data/spec/handlers/legacy_base_spec.rb +0 -128
  134. data/spec/handlers/method_condition_handler_spec.rb +0 -15
  135. data/spec/handlers/method_handler_spec.rb +0 -214
  136. data/spec/handlers/mixin_handler_spec.rb +0 -60
  137. data/spec/handlers/module_function_handler_spec.rb +0 -106
  138. data/spec/handlers/module_handler_spec.rb +0 -35
  139. data/spec/handlers/private_class_method_handler_spec.rb +0 -11
  140. data/spec/handlers/private_constant_handler_spec.rb +0 -25
  141. data/spec/handlers/processor_spec.rb +0 -35
  142. data/spec/handlers/public_class_method_handler_spec.rb +0 -11
  143. data/spec/handlers/ruby/base_spec.rb +0 -95
  144. data/spec/handlers/ruby/legacy/base_spec.rb +0 -84
  145. data/spec/handlers/spec_helper.rb +0 -33
  146. data/spec/handlers/visibility_handler_spec.rb +0 -44
  147. data/spec/handlers/yield_handler_spec.rb +0 -52
  148. data/spec/i18n/locale_spec.rb +0 -81
  149. data/spec/i18n/message_spec.rb +0 -52
  150. data/spec/i18n/messages_spec.rb +0 -67
  151. data/spec/i18n/pot_generator_spec.rb +0 -295
  152. data/spec/i18n/text_spec.rb +0 -184
  153. data/spec/logging_spec.rb +0 -44
  154. data/spec/options_spec.rb +0 -171
  155. data/spec/parser/base_spec.rb +0 -24
  156. data/spec/parser/c_parser_spec.rb +0 -236
  157. data/spec/parser/examples/array.c.txt +0 -6267
  158. data/spec/parser/examples/example1.rb.txt +0 -8
  159. data/spec/parser/examples/extrafile.c.txt +0 -8
  160. data/spec/parser/examples/file.c.txt +0 -28
  161. data/spec/parser/examples/multifile.c.txt +0 -22
  162. data/spec/parser/examples/namespace.cpp.txt +0 -68
  163. data/spec/parser/examples/override.c.txt +0 -424
  164. data/spec/parser/examples/parse_in_order_001.rb.txt +0 -2
  165. data/spec/parser/examples/parse_in_order_002.rb.txt +0 -2
  166. data/spec/parser/examples/tag_handler_001.rb.txt +0 -8
  167. data/spec/parser/ruby/ast_node_spec.rb +0 -33
  168. data/spec/parser/ruby/legacy/statement_list_spec.rb +0 -299
  169. data/spec/parser/ruby/legacy/token_list_spec.rb +0 -79
  170. data/spec/parser/ruby/ruby_parser_spec.rb +0 -508
  171. data/spec/parser/ruby/token_resolver_spec.rb +0 -165
  172. data/spec/parser/source_parser_spec.rb +0 -727
  173. data/spec/parser/tag_parsing_spec.rb +0 -17
  174. data/spec/rake/yardoc_task_spec.rb +0 -118
  175. data/spec/registry_spec.rb +0 -463
  176. data/spec/registry_store_spec.rb +0 -327
  177. data/spec/rubygems/doc_manager_spec.rb +0 -112
  178. data/spec/serializers/data/serialized_yardoc/checksums +0 -1
  179. data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
  180. data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
  181. data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
  182. data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
  183. data/spec/serializers/data/serialized_yardoc/proxy_types +0 -2
  184. data/spec/serializers/file_system_serializer_spec.rb +0 -145
  185. data/spec/serializers/spec_helper.rb +0 -2
  186. data/spec/serializers/yardoc_serializer_spec.rb +0 -78
  187. data/spec/server/adapter_spec.rb +0 -39
  188. data/spec/server/commands/base_spec.rb +0 -91
  189. data/spec/server/commands/library_command_spec.rb +0 -39
  190. data/spec/server/doc_server_helper_spec.rb +0 -72
  191. data/spec/server/doc_server_serializer_spec.rb +0 -60
  192. data/spec/server/rack_adapter_spec.rb +0 -21
  193. data/spec/server/router_spec.rb +0 -123
  194. data/spec/server/spec_helper.rb +0 -22
  195. data/spec/server/static_caching_spec.rb +0 -47
  196. data/spec/server/webrick_servlet_spec.rb +0 -20
  197. data/spec/server_spec.rb +0 -19
  198. data/spec/spec_helper.rb +0 -212
  199. data/spec/tags/default_factory_spec.rb +0 -168
  200. data/spec/tags/default_tag_spec.rb +0 -11
  201. data/spec/tags/directives_spec.rb +0 -463
  202. data/spec/tags/library_spec.rb +0 -48
  203. data/spec/tags/overload_tag_spec.rb +0 -53
  204. data/spec/tags/ref_tag_list_spec.rb +0 -53
  205. data/spec/tags/types_explainer_spec.rb +0 -203
  206. data/spec/templates/class_spec.rb +0 -45
  207. data/spec/templates/constant_spec.rb +0 -41
  208. data/spec/templates/engine_spec.rb +0 -131
  209. data/spec/templates/examples/class001.html +0 -308
  210. data/spec/templates/examples/class001.txt +0 -36
  211. data/spec/templates/examples/class002.html +0 -39
  212. data/spec/templates/examples/constant001.txt +0 -25
  213. data/spec/templates/examples/constant002.txt +0 -7
  214. data/spec/templates/examples/constant003.txt +0 -11
  215. data/spec/templates/examples/method001.html +0 -137
  216. data/spec/templates/examples/method001.txt +0 -35
  217. data/spec/templates/examples/method002.html +0 -91
  218. data/spec/templates/examples/method002.txt +0 -20
  219. data/spec/templates/examples/method003.html +0 -165
  220. data/spec/templates/examples/method003.txt +0 -45
  221. data/spec/templates/examples/method004.html +0 -48
  222. data/spec/templates/examples/method004.txt +0 -10
  223. data/spec/templates/examples/method005.html +0 -105
  224. data/spec/templates/examples/method005.txt +0 -33
  225. data/spec/templates/examples/method006.html +0 -108
  226. data/spec/templates/examples/method006.txt +0 -20
  227. data/spec/templates/examples/module001.dot +0 -33
  228. data/spec/templates/examples/module001.html +0 -833
  229. data/spec/templates/examples/module001.txt +0 -33
  230. data/spec/templates/examples/module002.html +0 -341
  231. data/spec/templates/examples/module003.html +0 -202
  232. data/spec/templates/examples/module004.html +0 -394
  233. data/spec/templates/examples/module005.html +0 -82
  234. data/spec/templates/examples/tag001.txt +0 -82
  235. data/spec/templates/helpers/base_helper_spec.rb +0 -171
  236. data/spec/templates/helpers/html_helper_spec.rb +0 -687
  237. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +0 -65
  238. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +0 -84
  239. data/spec/templates/helpers/markup_helper_spec.rb +0 -136
  240. data/spec/templates/helpers/method_helper_spec.rb +0 -107
  241. data/spec/templates/helpers/module_helper_spec.rb +0 -35
  242. data/spec/templates/helpers/shared_signature_examples.rb +0 -126
  243. data/spec/templates/helpers/text_helper_spec.rb +0 -65
  244. data/spec/templates/markup_processor_integrations/asciidoctor_spec.rb +0 -60
  245. data/spec/templates/markup_processor_integrations/integration_spec_helper.rb +0 -46
  246. data/spec/templates/markup_processor_integrations/rdoc_markdown_spec.rb +0 -59
  247. data/spec/templates/markup_processor_integrations/rdoc_spec.rb +0 -39
  248. data/spec/templates/markup_processor_integrations/redcarpet_spec.rb +0 -59
  249. data/spec/templates/markup_processor_integrations/redcloth_spec.rb +0 -48
  250. data/spec/templates/method_spec.rb +0 -118
  251. data/spec/templates/module_spec.rb +0 -203
  252. data/spec/templates/onefile_spec.rb +0 -66
  253. data/spec/templates/section_spec.rb +0 -144
  254. data/spec/templates/spec_helper.rb +0 -76
  255. data/spec/templates/tag_spec.rb +0 -52
  256. data/spec/templates/template_spec.rb +0 -410
  257. data/spec/verifier_spec.rb +0 -106
@@ -1,327 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe YARD::RegistryStore do
4
- before do
5
- FileUtils.rm_rf("foo")
6
- @store = RegistryStore.new
7
- @serializer = Serializers::YardocSerializer.new('foo')
8
- @foo = CodeObjects::MethodObject.new(nil, :foo)
9
- @bar = CodeObjects::ClassObject.new(nil, :Bar)
10
- allow(Serializers::YardocSerializer).to receive(:new).and_return(@serializer)
11
- end
12
-
13
- describe "#load" do
14
- it "loads root.dat as full object list if it is a Hash" do
15
- expect(File).to receive(:directory?).with('foo').and_return(true)
16
- expect(File).to receive(:file?).with('foo/checksums').and_return(false)
17
- expect(File).to receive(:file?).with('foo/proxy_types').and_return(false)
18
- expect(File).to receive(:file?).with('foo/object_types').and_return(false)
19
- expect(@serializer).to receive(:deserialize).with('root').and_return(:root => @foo, :A => @bar)
20
- expect(@store.load('foo')).to be true
21
- expect(@store.root).to eq @foo
22
- expect(@store.get('A')).to eq @bar
23
- end
24
-
25
- it "loads old yardoc format if .yardoc is a file" do
26
- expect(File).to receive(:directory?).with('foo').and_return(false)
27
- expect(File).to receive(:file?).with('foo').and_return(true)
28
- expect(File).to receive(:read_binary).with('foo').and_return('FOO')
29
- expect(Marshal).to receive(:load).with('FOO')
30
-
31
- @store.load('foo')
32
- end
33
-
34
- it "loads new yardoc format if .yardoc is a directory" do
35
- expect(File).to receive(:directory?).with('foo').and_return(true)
36
- expect(File).to receive(:file?).with('foo/checksums').and_return(false)
37
- expect(File).to receive(:file?).with('foo/proxy_types').and_return(false)
38
- expect(File).to receive(:file?).with('foo/object_types').and_return(false)
39
- expect(File).to receive(:file?).with('foo/objects/root.dat').and_return(false)
40
-
41
- expect(@store.load('foo')).to be true
42
- end
43
-
44
- it "returns true if .yardoc is loaded (file)" do
45
- expect(File).to receive(:directory?).with('myyardoc').and_return(false)
46
- expect(File).to receive(:file?).with('myyardoc').and_return(true)
47
- expect(File).to receive(:read_binary).with('myyardoc').and_return(Marshal.dump(''))
48
- expect(@store.load('myyardoc')).to be true
49
- end
50
-
51
- it "returns true if .yardoc is loaded (directory)" do
52
- expect(File).to receive(:directory?).with('foo').and_return(true)
53
- expect(File).to receive(:file?).with('foo/checksums').and_return(false)
54
- expect(File).to receive(:file?).with('foo/proxy_types').and_return(false)
55
- expect(File).to receive(:file?).with('foo/object_types').and_return(false)
56
- expect(File).to receive(:file?).with('foo/objects/root.dat').and_return(false)
57
- expect(@store.load('foo')).to be true
58
- end
59
-
60
- it "returns false if .yardoc does not exist" do
61
- expect(@store.load('NONEXIST')).to be false
62
- end
63
-
64
- it "returns false if there is no file to load" do
65
- expect(@store.load(nil)).to be false
66
- end
67
-
68
- it "loads checksums if they exist" do
69
- expect(File).to receive(:directory?).with('foo').and_return(true)
70
- expect(File).to receive(:file?).with('foo/checksums').and_return(true)
71
- expect(File).to receive(:file?).with('foo/proxy_types').and_return(false)
72
- expect(File).to receive(:file?).with('foo/objects/root.dat').and_return(false)
73
- expect(File).to receive(:file?).with('foo/object_types').and_return(false)
74
- expect(File).to receive(:readlines).with('foo/checksums').and_return([
75
- 'file1 CHECKSUM1', ' file2 CHECKSUM2 '
76
- ])
77
- expect(@store.load('foo')).to be true
78
- expect(@store.checksums).to eq('file1' => 'CHECKSUM1', 'file2' => 'CHECKSUM2')
79
- end
80
-
81
- it "loads proxy_types if they exist" do
82
- expect(File).to receive(:directory?).with('foo').and_return(true)
83
- expect(File).to receive(:file?).with('foo/checksums').and_return(false)
84
- expect(File).to receive(:file?).with('foo/proxy_types').and_return(true)
85
- expect(File).to receive(:file?).with('foo/object_types').and_return(false)
86
- expect(File).to receive(:file?).with('foo/objects/root.dat').and_return(false)
87
- expect(File).to receive(:read_binary).with('foo/proxy_types').and_return(Marshal.dump('a' => 'b'))
88
- expect(@store.load('foo')).to be true
89
- expect(@store.proxy_types).to eq('a' => 'b')
90
- end
91
-
92
- it "loads root object if it exists" do
93
- expect(File).to receive(:directory?).with('foo').and_return(true)
94
- expect(File).to receive(:file?).with('foo/checksums').and_return(false)
95
- expect(File).to receive(:file?).with('foo/proxy_types').and_return(false)
96
- expect(File).to receive(:file?).with('foo/object_types').and_return(false)
97
- expect(File).to receive(:file?).with('foo/objects/root.dat').and_return(true)
98
- expect(File).to receive(:read_binary).with('foo/objects/root.dat').and_return(Marshal.dump(@foo))
99
- expect(@store.load('foo')).to be true
100
- expect(@store.root).to eq @foo
101
- end
102
- end
103
-
104
- describe "#save" do
105
- before do
106
- allow(@store).to receive(:write_proxy_types)
107
- allow(@store).to receive(:write_checksums)
108
- allow(@store).to receive(:destroy)
109
- end
110
-
111
- after do
112
- Registry.single_object_db = nil
113
- end
114
-
115
- def saves_to_singledb
116
- expect(@serializer).to receive(:serialize).once.with(instance_of(Hash))
117
- @store.save(true, 'foo')
118
- end
119
-
120
- def add_items(n)
121
- n.times {|i| @store[i.to_s] = @foo }
122
- end
123
-
124
- def saves_to_multidb
125
- times = @store.keys.size
126
- expect(@serializer).to receive(:serialize).exactly(times).times
127
- @store.save(true, 'foo')
128
- @last = times
129
- end
130
-
131
- it "saves as single object db if single_object_db is nil and there are less than 3000 objects" do
132
- Registry.single_object_db = nil
133
- add_items(100)
134
- saves_to_singledb
135
- expect(@serializer.complete?).to eq true
136
- end
137
-
138
- it "saves as single object db if single_object_db is nil and there are more than 3000 objects" do
139
- Registry.single_object_db = nil
140
- add_items(5000)
141
- saves_to_singledb
142
- end
143
-
144
- it "saves as single object db if single_object_db is true (and any amount of objects)" do
145
- Registry.single_object_db = true
146
- add_items(100)
147
- saves_to_singledb
148
- add_items(5000)
149
- saves_to_singledb
150
- end
151
-
152
- it "never saves as single object db if single_object_db is false" do
153
- Registry.single_object_db = false
154
- add_items(100)
155
- saves_to_multidb
156
- add_items(5000)
157
- saves_to_multidb
158
- end
159
- end
160
-
161
- describe "#put" do
162
- it "assigns values" do
163
- @store.put(:YARD, @foo)
164
- expect(@store.get(:YARD)).to eq @foo
165
- end
166
-
167
- it "treats '' as root" do
168
- @store.put('', @foo)
169
- expect(@store.get(:root)).to eq @foo
170
- end
171
- end
172
-
173
- describe "#get" do
174
- it "hits cache if object exists" do
175
- @store.put(:YARD, @foo)
176
- expect(@store.get(:YARD)).to eq @foo
177
- end
178
-
179
- it "hits backstore on cache miss and cache is not fully loaded" do
180
- serializer = double(:serializer)
181
- expect(serializer).to receive(:deserialize).once.with(:YARD).and_return(@foo)
182
- @store.load('foo')
183
- @store.instance_variable_set("@loaded_objects", 0)
184
- @store.instance_variable_set("@available_objects", 100)
185
- @store.instance_variable_set("@serializer", serializer)
186
- expect(@store.get(:YARD)).to eq @foo
187
- expect(@store.get(:YARD)).to eq @foo
188
- expect(@store.instance_variable_get("@loaded_objects")).to eq 1
189
- end
190
- end
191
-
192
- [:keys, :values].each do |item|
193
- describe "##{item}" do
194
- it "loads entire database if reload=true" do
195
- expect(File).to receive(:directory?).with('foo').and_return(true)
196
- @store.load('foo')
197
- expect(@store).to receive(:load_all)
198
- @store.send(item, true)
199
- end
200
-
201
- it "does not load entire database if reload=false" do
202
- expect(File).to receive(:directory?).with('foo').and_return(true)
203
- @store.load('foo')
204
- expect(@store).not_to receive(:load_all)
205
- @store.send(item, false)
206
- end
207
- end
208
- end
209
-
210
- describe "#paths_for_type" do
211
- after { Registry.clear }
212
-
213
- it "sets all object types if not set by object_types" do
214
- expect(File).to receive(:directory?).with('foo').and_return(true)
215
- expect(File).to receive(:file?).with('foo/checksums').and_return(false)
216
- expect(File).to receive(:file?).with('foo/proxy_types').and_return(false)
217
- expect(File).to receive(:file?).with('foo/object_types').and_return(false)
218
- expect(@serializer).to receive(:deserialize).with('root').and_return(:'A#foo' => @foo, :A => @bar)
219
- @store.load('foo')
220
- expect(@store.paths_for_type(:method)).to eq ['#foo']
221
- expect(@store.paths_for_type(:class)).to eq ['Bar']
222
- end
223
-
224
- it "keeps track of types when assigning values" do
225
- @store.put(:abc, @foo)
226
- expect(@store.paths_for_type(@foo.type)).to eq ['abc']
227
- end
228
-
229
- it "reassigns path if type changes" do
230
- foo = CodeObjects::ClassObject.new(:root, :Foo)
231
- @store.put('Foo', foo)
232
- expect(@store.get('Foo').type).to eq :class
233
- expect(@store.paths_for_type(:class)).to eq ["Foo"]
234
- foo = CodeObjects::ModuleObject.new(:root, :Foo)
235
- @store.put('Foo', foo)
236
- expect(@store.get('Foo').type).to eq :module
237
- expect(@store.paths_for_type(:class)).to eq []
238
- expect(@store.paths_for_type(:module)).to eq ["Foo"]
239
- end
240
- end
241
-
242
- describe "#values_for_type" do
243
- it "returns all objects with type" do
244
- @store.put(:abc, @foo)
245
- expect(@store.values_for_type(@foo.type)).to eq [@foo]
246
- end
247
- end
248
-
249
- describe "#load_all" do
250
- it "loads the entire database" do
251
- foomock = double(:Foo)
252
- barmock = double(:Bar)
253
- allow(foomock).to receive(:type).and_return(:class)
254
- allow(barmock).to receive(:type).and_return(:class)
255
- expect(foomock).to receive(:path).and_return('Foo')
256
- expect(barmock).to receive(:path).and_return('Bar')
257
- expect(File).to receive(:directory?).with('foo').and_return(true)
258
- expect(File).to receive(:file?).with('foo/proxy_types').and_return(false)
259
- expect(File).to receive(:file?).with('foo/object_types').and_return(false)
260
- expect(File).to receive(:file?).with('foo/checksums').and_return(false)
261
- expect(File).to receive(:file?).with('foo/objects/root.dat').and_return(false)
262
- expect(@store).to receive(:all_disk_objects).at_least(1).times.and_return(['foo/objects/foo', 'foo/objects/bar'])
263
- @store.load('foo')
264
- serializer = @store.instance_variable_get("@serializer")
265
- expect(serializer).to receive(:deserialize).with('foo/objects/foo', true).and_return(foomock)
266
- expect(serializer).to receive(:deserialize).with('foo/objects/bar', true).and_return(barmock)
267
- @store.send(:load_all)
268
- expect(@store.instance_variable_get("@available_objects")).to eq 2
269
- expect(@store.instance_variable_get("@loaded_objects")).to eq 2
270
- expect(@store[:Foo]).to eq foomock
271
- expect(@store[:Bar]).to eq barmock
272
- end
273
- end
274
-
275
- describe "#destroy" do
276
- it "destroys file ending in .yardoc when force=false" do
277
- expect(File).to receive(:file?).with('foo.yardoc').and_return(true)
278
- expect(File).to receive(:unlink).with('foo.yardoc')
279
- @store.instance_variable_set("@file", 'foo.yardoc')
280
- expect(@store.destroy).to be true
281
- end
282
-
283
- it "destroys dir ending in .yardoc when force=false" do
284
- expect(File).to receive(:directory?).with('foo.yardoc').and_return(true)
285
- expect(FileUtils).to receive(:rm_rf).with('foo.yardoc')
286
- @store.instance_variable_set("@file", 'foo.yardoc')
287
- expect(@store.destroy).to be true
288
- end
289
-
290
- it "does not destroy file/dir not ending in .yardoc when force=false" do
291
- expect(File).not_to receive(:file?).with('foo')
292
- expect(File).not_to receive(:directory?).with('foo')
293
- expect(File).not_to receive(:unlink).with('foo')
294
- expect(FileUtils).not_to receive(:rm_rf).with('foo')
295
- @store.instance_variable_set("@file", 'foo')
296
- expect(@store.destroy).to be false
297
- end
298
-
299
- it "destroys any file/dir when force=true" do
300
- expect(File).to receive(:file?).with('foo').and_return(true)
301
- expect(File).to receive(:unlink).with('foo')
302
- @store.instance_variable_set("@file", 'foo')
303
- expect(@store.destroy(true)).to be true
304
- end
305
- end
306
-
307
- describe "#delete" do
308
- it "deletes the given object from store" do
309
- @store.put(:YARD, @foo)
310
- expect(@store.get(:YARD)).to be @foo
311
- expect(@store.paths_for_type(:method)).to eq ["YARD"]
312
- @store.delete(:YARD)
313
- expect(@store.get(:YARD)).to be nil
314
- expect(@store.paths_for_type(:method)).to eq []
315
- end
316
- end
317
-
318
- describe "#locale" do
319
- it "loads ./po/LOCALE_NAME.po" do
320
- fr_locale = I18n::Locale.new("fr")
321
- expect(I18n::Locale).to receive(:new).with("fr").and_return(fr_locale)
322
- expect(Registry).to receive(:po_dir).and_return("po")
323
- expect(fr_locale).to receive(:load).with("po")
324
- expect(@store.locale("fr")).to eq fr_locale
325
- end
326
- end
327
- end
@@ -1,112 +0,0 @@
1
- # frozen_string_literal: true
2
- require File.join(YARD::ROOT, 'rubygems_plugin')
3
- require 'fileutils'
4
-
5
- RSpec.describe Gem::DocManager do
6
- before do
7
- # Ensure filesystem integrity
8
- allow(FileUtils).to receive(:mkdir_p)
9
- allow(FileUtils).to receive(:rm_rf)
10
- allow(Dir).to receive(:chdir)
11
-
12
- allow(YARD::CLI::Yardoc).to receive(:run)
13
-
14
- @spec_file = File.join(YARD::ROOT, '..', 'yard.gemspec')
15
- @spec = Gem::SourceIndex.load_specification(@spec_file)
16
- @spec.has_yardoc = false # no yardoc docs for now
17
- @yardopts = File.join(@spec.full_gem_path, '.yardopts')
18
- @doc = Gem::DocManager.new(@spec)
19
- allow(@doc).to receive(:install_ri_yard_orig)
20
- allow(@doc).to receive(:install_rdoc_yard_orig)
21
- end
22
-
23
- def runs; expect(YARD::CLI::Yardoc).to receive(:run) end
24
-
25
- describe ".load_yardoc" do
26
- it "properly loads YARD" do
27
- expect(Gem::DocManager).to receive(:require) do |path|
28
- expect(File.expand_path(path)).to eq YARD::ROOT + '/yard'
29
- end
30
- Gem::DocManager.load_yardoc
31
- end
32
- end
33
-
34
- describe "#install_ri_yard" do
35
- def install
36
- msg = "Building YARD (yri) index for #{@spec.full_name}..."
37
- expect(@doc).to receive(:say).with(msg)
38
- @doc.install_ri_yard
39
- end
40
-
41
- it "passes --quiet to all documentation" do
42
- runs.with('-c', '-n', '--quiet', 'lib')
43
- install
44
- end
45
-
46
- it "passes extra_rdoc_files to documentation" do
47
- @spec.extra_rdoc_files = %w(README LICENSE)
48
- runs.with('-c', '-n', '--quiet', 'lib', '-', 'README', 'LICENSE')
49
- install
50
- end
51
-
52
- it "adds --backtrace if Gem.configuration.backtrace" do
53
- Gem.configuration.backtrace = true
54
- runs.with('-c', '-n', '--quiet', '--backtrace', 'lib')
55
- install
56
- Gem.configuration.backtrace = false
57
- end
58
-
59
- it "adds require_paths if there is no .yardopts" do
60
- expect(File).to receive(:file?).with(@yardopts).and_return(true)
61
- runs.with('-c', '-n', '--quiet')
62
- install
63
- end
64
-
65
- it "adds extra_rdoc_files if there is no .yardopts" do
66
- @spec.extra_rdoc_files = %w(README LICENSE)
67
- expect(File).to receive(:file?).with(@yardopts).and_return(true)
68
- runs.with('-c', '-n', '--quiet')
69
- install
70
- end
71
-
72
- it "switches to directory before running command" do
73
- old = Dir.pwd
74
- expect(Dir).to receive(:chdir).with(@spec.full_gem_path)
75
- expect(Dir).to receive(:chdir).with(old)
76
- install
77
- end
78
-
79
- it "ensures that directory is switched back at end of command in failure" do
80
- old = Dir.pwd
81
- expect(Dir).to receive(:chdir).with(@spec.full_gem_path)
82
- expect(Dir).to receive(:chdir).with(old)
83
- expect(@doc.ui.errs).to receive(:puts).with(/ERROR:\s*While generating documentation/)
84
- expect(@doc.ui.errs).to receive(:puts).with(/MESSAGE:\s*foo/)
85
- expect(@doc.ui.errs).to receive(:puts).with(/YARDOC args:\s*-c -n --quiet lib/)
86
- expect(@doc.ui.errs).to receive(:puts).with("(continuing with the rest of the installation)")
87
- expect(YARD::CLI::Yardoc).to receive(:run).and_raise(RuntimeError.new("foo"))
88
- install
89
- end
90
-
91
- it "handles permission errors" do
92
- expect(YARD::CLI::Yardoc).to receive(:run).and_raise(Errno::EACCES.new("- dir"))
93
- expect { install }.to raise_error(Gem::FilePermissionError)
94
- end
95
- end
96
-
97
- describe "#install_rdoc_yard" do
98
- def install
99
- msg = "Installing YARD documentation for #{@spec.full_name}..."
100
- expect(@doc).to receive(:say).with(msg)
101
- @doc.install_rdoc_yard
102
- end
103
-
104
- it "adds -o outdir when generating docs" do
105
- expect(File).to receive(:file?).with(@yardopts).and_return(true)
106
- @spec.has_yardoc = true
107
- doc_dir = File.join(@doc.instance_variable_get("@doc_dir"), 'rdoc')
108
- runs.with('-o', doc_dir, '--quiet')
109
- install
110
- end
111
- end
112
- end if Gem::VERSION < '2.0.0'
@@ -1 +0,0 @@
1
- test.rb 80e5834ff1e98223761615c0917ff9b77b7ae057
@@ -1,2 +0,0 @@
1
- {I" Object:EF:
2
- class
@@ -1,145 +0,0 @@
1
- # frozen_string_literal: true
2
- require File.join(File.dirname(__FILE__), "spec_helper")
3
-
4
- require 'stringio'
5
-
6
- RSpec.describe YARD::Serializers::FileSystemSerializer do
7
- before do
8
- allow(FileUtils).to receive(:mkdir_p)
9
- allow(File).to receive(:open)
10
- end
11
-
12
- describe "#basepath" do
13
- it "defaults the base path to the 'doc/'" do
14
- obj = Serializers::FileSystemSerializer.new
15
- expect(obj.basepath).to eq 'doc'
16
- end
17
- end
18
-
19
- describe "#extension" do
20
- it "defaults the file extension to .html" do
21
- obj = Serializers::FileSystemSerializer.new
22
- expect(obj.extension).to eq "html"
23
- end
24
- end
25
-
26
- describe "#serialized_path" do
27
- it "allows no extension to be used" do
28
- obj = Serializers::FileSystemSerializer.new :extension => nil
29
- yard = CodeObjects::ClassObject.new(nil, :FooBar)
30
- expect(obj.serialized_path(yard)).to eq 'FooBar'
31
- end
32
-
33
- it "serializes to top-level-namespace for root" do
34
- obj = Serializers::FileSystemSerializer.new :extension => nil
35
- expect(obj.serialized_path(Registry.root)).to eq "top-level-namespace"
36
- end
37
-
38
- it "returns serialized_path for a String" do
39
- s = Serializers::FileSystemSerializer.new(:basepath => 'foo', :extension => 'txt')
40
- expect(s.serialized_path('test.txt')).to eq 'test.txt'
41
- end
42
-
43
- it "removes special chars from path" do
44
- m = CodeObjects::MethodObject.new(nil, 'a')
45
- s = Serializers::FileSystemSerializer.new
46
-
47
- {:gsub! => 'gsub_21_i.html',
48
- :ask? => 'ask_3F_i.html',
49
- :=== => '_3D_3D_3D_i.html',
50
- :+ => '_2B_i.html',
51
- :- => '-_i.html',
52
- :[]= => '_5B_5D_3D_i.html',
53
- :<< => '_3C_3C_i.html',
54
- :>= => '_3E_3D_i.html',
55
- :` => '_60_i.html',
56
- :& => '_26_i.html',
57
- :* => '_2A_i.html',
58
- :| => '_7C_i.html',
59
- :/ => '_2F_i.html',
60
- :=~ => '_3D_7E_i.html'}.each do |meth, value|
61
- allow(m).to receive(:name).and_return(meth)
62
- expect(s.serialized_path(m)).to eq value
63
- end
64
- end
65
-
66
- it "handles ExtraFileObject's" do
67
- s = Serializers::FileSystemSerializer.new
68
- e = CodeObjects::ExtraFileObject.new('filename.txt', '')
69
- expect(s.serialized_path(e)).to eq 'file.filename.html'
70
- end
71
-
72
- it "differentiates instance and class methods from serialized path" do
73
- s = Serializers::FileSystemSerializer.new
74
- m1 = CodeObjects::MethodObject.new(nil, 'meth')
75
- m2 = CodeObjects::MethodObject.new(nil, 'meth', :class)
76
- expect(s.serialized_path(m1)).not_to eq s.serialized_path(m2)
77
- end
78
-
79
- it "serializes path from overload tag" do
80
- YARD.parse_string <<-'eof'
81
- class Foo
82
- # @overload bar
83
- def bar; end
84
- end
85
- eof
86
-
87
- serializer = Serializers::FileSystemSerializer.new
88
- object = Registry.at('Foo#bar').tag(:overload)
89
- expect(serializer.serialized_path(object)).to eq "Foo/bar_i.html"
90
- end
91
-
92
- it "maps matching case sensitive object names to different files on disk" do
93
- Registry.clear
94
- o1 = CodeObjects::ClassObject.new(:root, "AB")
95
- o2 = CodeObjects::ClassObject.new(:root, "Ab")
96
- s = Serializers::FileSystemSerializer.new
97
- expect([["AB_.html", "Ab.html"], ["AB.html", "Ab_.html"]]).to include(
98
- [s.serialized_path(o1), s.serialized_path(o2)]
99
- )
100
- end
101
-
102
- it "handles case sensitivity of nested paths for objects with matching names" do
103
- Registry.clear
104
- YARD.parse_string <<-eof
105
- class Abc; class D; end end
106
- class ABC; class D; end end
107
- eof
108
-
109
- s = Serializers::FileSystemSerializer.new
110
- expect(s.serialized_path(Registry.at('ABC::D'))).to eq "ABC/D.html"
111
- expect(s.serialized_path(Registry.at('Abc::D'))).to eq "Abc/D.html"
112
- end
113
- end
114
-
115
- describe "#serialize" do
116
- it "serializes to the correct path" do
117
- yard = CodeObjects::ClassObject.new(nil, :FooBar)
118
- meth = CodeObjects::MethodObject.new(yard, :baz, :class)
119
- meth2 = CodeObjects::MethodObject.new(yard, :baz)
120
-
121
- {'foo/FooBar/baz_c.txt' => meth,
122
- 'foo/FooBar/baz_i.txt' => meth2,
123
- 'foo/FooBar.txt' => yard}.each do |path, obj|
124
- io = StringIO.new
125
- expect(File).to receive(:open).with(path, 'wb').and_yield(io)
126
- expect(io).to receive(:write).with("data")
127
-
128
- s = Serializers::FileSystemSerializer.new(:basepath => 'foo', :extension => 'txt')
129
- s.serialize(obj, "data")
130
- end
131
- end
132
-
133
- it "guarantees the directory exists" do
134
- o1 = CodeObjects::ClassObject.new(nil, :Really)
135
- o2 = CodeObjects::ClassObject.new(o1, :Long)
136
- o3 = CodeObjects::ClassObject.new(o2, :PathName)
137
- obj = CodeObjects::MethodObject.new(o3, :foo)
138
-
139
- expect(FileUtils).to receive(:mkdir_p).once.with('doc/Really/Long/PathName')
140
-
141
- s = Serializers::FileSystemSerializer.new
142
- s.serialize(obj, "data")
143
- end
144
- end
145
- end
@@ -1,2 +0,0 @@
1
- # frozen_string_literal: true
2
- include YARD
@@ -1,78 +0,0 @@
1
- # frozen_string_literal: true
2
- require File.dirname(__FILE__) + "/spec_helper"
3
-
4
- instance_eval do
5
- class YARD::Serializers::YardocSerializer
6
- public :dump
7
- public :internal_dump
8
- end
9
- end
10
-
11
- RSpec.describe YARD::Serializers::YardocSerializer do
12
- before do
13
- @serializer = YARD::Serializers::YardocSerializer.new('.yardoc')
14
-
15
- Registry.clear
16
- @foo = CodeObjects::ClassObject.new(:root, :Foo)
17
- @bar = CodeObjects::MethodObject.new(@foo, :bar)
18
- end
19
-
20
- describe "#dump" do
21
- it "maintains object equality when loading a dumped object" do
22
- newfoo = @serializer.internal_dump(@foo)
23
- expect(newfoo).to equal(@foo)
24
- expect(newfoo).to eq @foo
25
- expect(@foo).to equal(newfoo)
26
- expect(@foo).to eq newfoo
27
- expect(newfoo.hash).to eq @foo.hash
28
- end
29
-
30
- it "maintains hash key equality when loading a dumped object" do
31
- newfoo = @serializer.internal_dump(@foo)
32
- expect(@foo => 1).to have_key(newfoo)
33
- expect(newfoo => 1).to have_key(@foo)
34
- end
35
- end
36
-
37
- describe "#serialize" do
38
- it "accepts a hash of codeobjects (and write to root)" do
39
- data = {:root => Registry.root}
40
- marshaldata = Marshal.dump(data)
41
- filemock = double(:file)
42
- expect(filemock).to receive(:write).with(marshaldata)
43
- expect(File).to receive(:open!).with('.yardoc/objects/root.dat', 'wb').and_yield(filemock)
44
- @serializer.serialize(data)
45
- end
46
- end
47
-
48
- describe "#lock_for_writing" do
49
- it "creates a lock file during writing and cleans up" do
50
- expect(File).to receive(:open!).with(@serializer.processing_path, 'w')
51
- expect(File).to receive(:exist?).with(@serializer.processing_path).exactly(2).times.and_return(true)
52
- expect(File).to receive(:unlink).with(@serializer.processing_path)
53
- @serializer.lock_for_writing do
54
- expect(@serializer.locked_for_writing?).to eq true
55
- end
56
- end
57
- end
58
-
59
- describe "#complete?" do
60
- it "returns false if complete file does not exist" do
61
- allow(File).to receive(:exist?).with(@serializer.complete_lock_path).and_return(false)
62
- allow(File).to receive(:exist?).with(@serializer.processing_path).and_return(false)
63
- expect(@serializer.complete?).to eq false
64
- end
65
-
66
- it "returns false if processing file exists" do
67
- allow(File).to receive(:exist?).with(@serializer.complete_lock_path).and_return(true)
68
- allow(File).to receive(:exist?).with(@serializer.processing_path).and_return(true)
69
- expect(@serializer.complete?).to eq false
70
- end
71
-
72
- it "returns true if complete file exists with no processing file" do
73
- allow(File).to receive(:exist?).with(@serializer.complete_lock_path).and_return(true)
74
- allow(File).to receive(:exist?).with(@serializer.processing_path).and_return(false)
75
- expect(@serializer.complete?).to eq true
76
- end
77
- end
78
- end