docks_app 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.
Files changed (313) hide show
  1. data/.editorconfig +8 -0
  2. data/.gitignore +22 -0
  3. data/.rubocop.yml +20 -0
  4. data/.travis.yml +10 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +35 -0
  8. data/Rakefile +3 -0
  9. data/bin/docks +5 -0
  10. data/config/json/docks_config.json +71 -0
  11. data/config/ruby/docks_config.rb +127 -0
  12. data/config/yaml/docks_config.yml +70 -0
  13. data/docks.gemspec +38 -0
  14. data/lib/docks/build.rb +300 -0
  15. data/lib/docks/cache.rb +143 -0
  16. data/lib/docks/command_line.rb +65 -0
  17. data/lib/docks/configuration.rb +217 -0
  18. data/lib/docks/containers/base_container.rb +103 -0
  19. data/lib/docks/containers/class_container.rb +39 -0
  20. data/lib/docks/containers/component_container.rb +92 -0
  21. data/lib/docks/containers/demo_container.rb +105 -0
  22. data/lib/docks/containers/factory_container.rb +12 -0
  23. data/lib/docks/containers/function_container.rb +46 -0
  24. data/lib/docks/containers/mixin_container.rb +19 -0
  25. data/lib/docks/containers/pattern_container.rb +168 -0
  26. data/lib/docks/containers/pattern_library_container.rb +77 -0
  27. data/lib/docks/containers/state_container.rb +9 -0
  28. data/lib/docks/containers/symbol_container.rb +77 -0
  29. data/lib/docks/containers/variable_container.rb +47 -0
  30. data/lib/docks/containers/variant_container.rb +9 -0
  31. data/lib/docks/containers/variation_container.rb +38 -0
  32. data/lib/docks/containers.rb +25 -0
  33. data/lib/docks/descriptor.rb +60 -0
  34. data/lib/docks/errors.rb +5 -0
  35. data/lib/docks/group.rb +66 -0
  36. data/lib/docks/helpers/github_helper.rb +29 -0
  37. data/lib/docks/helpers/path_helper.rb +94 -0
  38. data/lib/docks/helpers/render_helper.rb +87 -0
  39. data/lib/docks/helpers.rb +19 -0
  40. data/lib/docks/languages/base_language.rb +17 -0
  41. data/lib/docks/languages/coffeescript_language.rb +30 -0
  42. data/lib/docks/languages/common_types/markup_language.rb +71 -0
  43. data/lib/docks/languages/css_language.rb +13 -0
  44. data/lib/docks/languages/erb_language.rb +21 -0
  45. data/lib/docks/languages/haml_language.rb +21 -0
  46. data/lib/docks/languages/html_language.rb +10 -0
  47. data/lib/docks/languages/javascript_language.rb +42 -0
  48. data/lib/docks/languages/json_language.rb +18 -0
  49. data/lib/docks/languages/less_language.rb +33 -0
  50. data/lib/docks/languages/markdown_language.rb +10 -0
  51. data/lib/docks/languages/sass_language.rb +36 -0
  52. data/lib/docks/languages/slim_language.rb +21 -0
  53. data/lib/docks/languages/stylus_language.rb +26 -0
  54. data/lib/docks/languages/yaml_language.rb +18 -0
  55. data/lib/docks/languages.rb +103 -0
  56. data/lib/docks/markdown.rb +18 -0
  57. data/lib/docks/messenger.rb +69 -0
  58. data/lib/docks/naming_conventions/base_naming_convention.rb +9 -0
  59. data/lib/docks/naming_conventions/bem_naming_convention.rb +45 -0
  60. data/lib/docks/naming_conventions/suit_naming_convention.rb +45 -0
  61. data/lib/docks/naming_conventions.rb +21 -0
  62. data/lib/docks/ostruct.rb +17 -0
  63. data/lib/docks/parser.rb +86 -0
  64. data/lib/docks/parsers/base_parser.rb +128 -0
  65. data/lib/docks/parsers/coffeescript_parser.rb +30 -0
  66. data/lib/docks/parsers/css_parser.rb +27 -0
  67. data/lib/docks/parsers/javascript_parser.rb +30 -0
  68. data/lib/docks/parsers/less_parser.rb +22 -0
  69. data/lib/docks/parsers/sass_parser.rb +31 -0
  70. data/lib/docks/parsers/stylus_parser.rb +28 -0
  71. data/lib/docks/process.rb +60 -0
  72. data/lib/docks/processors.rb +416 -0
  73. data/lib/docks/renderers/base_renderer.rb +64 -0
  74. data/lib/docks/renderers/common_features/capturable.rb +69 -0
  75. data/lib/docks/renderers/common_features/helperable.rb +23 -0
  76. data/lib/docks/renderers/erb_renderer.rb +68 -0
  77. data/lib/docks/renderers/haml_renderer.rb +37 -0
  78. data/lib/docks/renderers/slim_renderer.rb +33 -0
  79. data/lib/docks/symbol_sources/base_symbol_source.rb +12 -0
  80. data/lib/docks/symbol_sources/jquery_symbol_source.rb +17 -0
  81. data/lib/docks/symbol_sources/mdn_symbol_source.rb +35 -0
  82. data/lib/docks/symbol_sources/sass_symbol_source.rb +27 -0
  83. data/lib/docks/symbol_sources.rb +28 -0
  84. data/lib/docks/tags/access_tag.rb +27 -0
  85. data/lib/docks/tags/activate_with_tag.rb +17 -0
  86. data/lib/docks/tags/active_tag.rb +14 -0
  87. data/lib/docks/tags/alias_tag.rb +17 -0
  88. data/lib/docks/tags/author_tag.rb +19 -0
  89. data/lib/docks/tags/base_tag.rb +52 -0
  90. data/lib/docks/tags/beta_tag.rb +26 -0
  91. data/lib/docks/tags/class_tag.rb +16 -0
  92. data/lib/docks/tags/compatibility_tag.rb +19 -0
  93. data/lib/docks/tags/demo_type_tag.rb +14 -0
  94. data/lib/docks/tags/deprecated_tag.rb +26 -0
  95. data/lib/docks/tags/description_tag.rb +99 -0
  96. data/lib/docks/tags/example_tag.rb +20 -0
  97. data/lib/docks/tags/factory_tag.rb +16 -0
  98. data/lib/docks/tags/for_tag.rb +23 -0
  99. data/lib/docks/tags/group_tag.rb +10 -0
  100. data/lib/docks/tags/helper_tag.rb +13 -0
  101. data/lib/docks/tags/include_with_tag.rb +57 -0
  102. data/lib/docks/tags/javascript_action_tag.rb +10 -0
  103. data/lib/docks/tags/link_tag.rb +18 -0
  104. data/lib/docks/tags/markup_tag.rb +106 -0
  105. data/lib/docks/tags/member_tag.rb +37 -0
  106. data/lib/docks/tags/method_tag.rb +18 -0
  107. data/lib/docks/tags/name_tag.rb +10 -0
  108. data/lib/docks/tags/object_tag.rb +15 -0
  109. data/lib/docks/tags/param_tag.rb +94 -0
  110. data/lib/docks/tags/pattern_tag.rb +21 -0
  111. data/lib/docks/tags/preclude_tag.rb +17 -0
  112. data/lib/docks/tags/private_tag.rb +15 -0
  113. data/lib/docks/tags/property_tag.rb +18 -0
  114. data/lib/docks/tags/public_tag.rb +15 -0
  115. data/lib/docks/tags/require_tag.rb +47 -0
  116. data/lib/docks/tags/returns_tag.rb +31 -0
  117. data/lib/docks/tags/set_by_tag.rb +18 -0
  118. data/lib/docks/tags/signature_tag.rb +35 -0
  119. data/lib/docks/tags/since_tag.rb +26 -0
  120. data/lib/docks/tags/source_tag.rb +12 -0
  121. data/lib/docks/tags/state_tag.rb +21 -0
  122. data/lib/docks/tags/static_tag.rb +14 -0
  123. data/lib/docks/tags/subcomponent_tag.rb +68 -0
  124. data/lib/docks/tags/subtitle_tag.rb +11 -0
  125. data/lib/docks/tags/symbol_type_tag.rb +10 -0
  126. data/lib/docks/tags/throws_tag.rb +30 -0
  127. data/lib/docks/tags/title_tag.rb +10 -0
  128. data/lib/docks/tags/type_tag.rb +10 -0
  129. data/lib/docks/tags/value_tag.rb +10 -0
  130. data/lib/docks/tags/variant_tag.rb +21 -0
  131. data/lib/docks/tags/variation_tag.rb +136 -0
  132. data/lib/docks/tags.rb +103 -0
  133. data/lib/docks/templates.rb +122 -0
  134. data/lib/docks/themes.rb +19 -0
  135. data/lib/docks/types.rb +26 -0
  136. data/lib/docks/version.rb +3 -0
  137. data/lib/docks.rb +37 -0
  138. data/spec/fixtures/build/scripts/bar/bar_2.js +1 -0
  139. data/spec/fixtures/build/scripts/bar.js +1 -0
  140. data/spec/fixtures/build/styles/foo/foo-2.css +1 -0
  141. data/spec/fixtures/build/styles/foo.css +1 -0
  142. data/spec/fixtures/build/templates/baz/baz_2.erb +1 -0
  143. data/spec/fixtures/build/templates/baz.erb +1 -0
  144. data/spec/fixtures/grouper/components/button/button.coffee +0 -0
  145. data/spec/fixtures/grouper/components/button/button.haml +0 -0
  146. data/spec/fixtures/grouper/components/button/button.scss +0 -0
  147. data/spec/fixtures/grouper/components/checkbox/_checkbox.haml +0 -0
  148. data/spec/fixtures/grouper/components/checkbox/_checkbox.scss +0 -0
  149. data/spec/fixtures/grouper/components/checkbox/checkbox.coffee +0 -0
  150. data/spec/fixtures/grouper/components/form/form.coffee +0 -0
  151. data/spec/fixtures/grouper/components/form/form.m +0 -0
  152. data/spec/fixtures/grouper/components/form/form.scss +0 -0
  153. data/spec/fixtures/grouper/components/next-expanding-textarea/_next-expanding-textarea.scss +0 -0
  154. data/spec/fixtures/grouper/components/next-expanding-textarea/_next_expanding_textarea.coffee +0 -0
  155. data/spec/fixtures/grouper/components/next-expanding-textarea/next-expanding-textarea.haml +0 -0
  156. data/spec/fixtures/grouper/components/next-tab/next-tab.coffee +0 -0
  157. data/spec/fixtures/grouper/components/next-tab/next-tab.haml +0 -0
  158. data/spec/fixtures/grouper/components/next-tab/next-tab.scss +0 -0
  159. data/spec/fixtures/grouper/components/segmented control/segmented control.coffee +0 -0
  160. data/spec/fixtures/grouper/components/segmented control/segmented control.haml +0 -0
  161. data/spec/fixtures/grouper/components/segmented control/segmented control.min.html +0 -0
  162. data/spec/fixtures/grouper/components/segmented control/segmented control.scss +0 -0
  163. data/spec/fixtures/grouper/markup/list-view.haml +0 -0
  164. data/spec/fixtures/grouper/markup/resizable/resizable.haml +0 -0
  165. data/spec/fixtures/grouper/markup/toggle.haml +0 -0
  166. data/spec/fixtures/grouper/scripts/resizable/resizable.coffee +0 -0
  167. data/spec/fixtures/grouper/scripts/toggle.coffee +0 -0
  168. data/spec/fixtures/grouper/style/_list-view.scss +0 -0
  169. data/spec/fixtures/grouper/style/_toggle.scss +0 -0
  170. data/spec/fixtures/languages/stub.json +3 -0
  171. data/spec/fixtures/languages/stub.yml +2 -0
  172. data/spec/fixtures/parsers/coffeescript_parser_fixture_basic.coffee +20 -0
  173. data/spec/fixtures/parsers/coffeescript_parser_fixture_complex.coffee +80 -0
  174. data/spec/fixtures/parsers/css_parser_fixture_basic.css +44 -0
  175. data/spec/fixtures/parsers/css_parser_fixture_complex.css +120 -0
  176. data/spec/fixtures/parsers/javascript_parser_fixture_basic.js +27 -0
  177. data/spec/fixtures/parsers/javascript_parser_fixture_complex.js +85 -0
  178. data/spec/fixtures/parsers/sass_parser_fixture_basic.scss +39 -0
  179. data/spec/fixtures/parsers/sass_parser_fixture_complex.scss +149 -0
  180. data/spec/fixtures/parsers/stylus_parser_fixture_basic.styl +34 -0
  181. data/spec/fixtures/parsers/stylus_parser_fixture_complex.styl +113 -0
  182. data/spec/fixtures/processors/join_with_smart_line_breaks/code_blocks.txt +10 -0
  183. data/spec/fixtures/processors/join_with_smart_line_breaks/headings.txt +15 -0
  184. data/spec/fixtures/processors/join_with_smart_line_breaks/lists.txt +21 -0
  185. data/spec/fixtures/processors/join_with_smart_line_breaks/lists_with_nesting.txt +13 -0
  186. data/spec/fixtures/processors/join_with_smart_line_breaks/multiple_paragraphs.txt +11 -0
  187. data/spec/fixtures/renderers/helpers.rb +37 -0
  188. data/spec/fixtures/renderers/html_output.html +7 -0
  189. data/spec/fixtures/renderers/templates/layouts/application.html.erb +0 -0
  190. data/spec/fixtures/renderers/templates/layouts/more/subdirectory.html.erb +0 -0
  191. data/spec/fixtures/renderers/templates/partials/_leading_underscore.html.erb +1 -0
  192. data/spec/fixtures/renderers/templates/partials/more/_subdirectory.html.erb +1 -0
  193. data/spec/fixtures/renderers/templates/partials/partial.html.erb +0 -0
  194. data/spec/fixtures/renderers/templates/partials/template.html.erb +1 -0
  195. data/spec/fixtures/renderers/templates/template.html.erb +1 -0
  196. data/spec/fixtures/tags/description/button.md +24 -0
  197. data/spec/fixtures/tags/description/class.md +27 -0
  198. data/spec/fixtures/tags/description/component.md +23 -0
  199. data/spec/fixtures/tags/description/function.md +30 -0
  200. data/spec/lib/build_spec.rb +467 -0
  201. data/spec/lib/cache_spec.rb +175 -0
  202. data/spec/lib/command_line_spec.rb +77 -0
  203. data/spec/lib/configuration_spec.rb +180 -0
  204. data/spec/lib/containers/base_container_spec.rb +214 -0
  205. data/spec/lib/containers/class_container_spec.rb +209 -0
  206. data/spec/lib/containers/component_container_spec.rb +158 -0
  207. data/spec/lib/containers/demo_container_spec.rb +113 -0
  208. data/spec/lib/containers/function_container_spec.rb +116 -0
  209. data/spec/lib/containers/mixin_container_spec.rb +4 -0
  210. data/spec/lib/containers/pattern_container_spec.rb +291 -0
  211. data/spec/lib/containers/pattern_library_container_spec.rb +130 -0
  212. data/spec/lib/containers/symbol_container_spec.rb +216 -0
  213. data/spec/lib/containers/variable_container_spec.rb +116 -0
  214. data/spec/lib/containers/variation_container_spec.rb +52 -0
  215. data/spec/lib/containers_spec.rb +22 -0
  216. data/spec/lib/descriptor_spec.rb +73 -0
  217. data/spec/lib/group_spec.rb +151 -0
  218. data/spec/lib/helpers/path_helper_spec.rb +202 -0
  219. data/spec/lib/helpers/render_helper_spec.rb +159 -0
  220. data/spec/lib/helpers_spec.rb +35 -0
  221. data/spec/lib/languages/base_language_spec.rb +32 -0
  222. data/spec/lib/languages/coffeescript_language_spec.rb +52 -0
  223. data/spec/lib/languages/css_language_spec.rb +13 -0
  224. data/spec/lib/languages/erb_language_spec.rb +33 -0
  225. data/spec/lib/languages/haml_language_spec.rb +32 -0
  226. data/spec/lib/languages/javascript_language_spec.rb +54 -0
  227. data/spec/lib/languages/json_language_spec.rb +24 -0
  228. data/spec/lib/languages/less_language_spec.rb +39 -0
  229. data/spec/lib/languages/markup_language_spec.rb +95 -0
  230. data/spec/lib/languages/sass_language_spec.rb +53 -0
  231. data/spec/lib/languages/slim_language_spec.rb +32 -0
  232. data/spec/lib/languages/stylus_language_spec.rb +34 -0
  233. data/spec/lib/languages/yaml_language_spec.rb +24 -0
  234. data/spec/lib/languages_spec.rb +127 -0
  235. data/spec/lib/markdown_spec.rb +63 -0
  236. data/spec/lib/messenger_spec.rb +1 -0
  237. data/spec/lib/naming_conventions/bem_naming_convention_spec.rb +112 -0
  238. data/spec/lib/naming_conventions/suit_naming_convention_spec.rb +107 -0
  239. data/spec/lib/naming_conventions_spec.rb +28 -0
  240. data/spec/lib/ostruct_spec.rb +15 -0
  241. data/spec/lib/parser_spec.rb +93 -0
  242. data/spec/lib/parsers/base_parser_spec.rb +128 -0
  243. data/spec/lib/parsers/coffeescript_parser_spec.rb +184 -0
  244. data/spec/lib/parsers/css_parser_spec.rb +136 -0
  245. data/spec/lib/parsers/javascript_parser_spec.rb +216 -0
  246. data/spec/lib/parsers/less_parser_spec.rb +111 -0
  247. data/spec/lib/parsers/sass_parser_spec.rb +233 -0
  248. data/spec/lib/parsers/stylus_parser_spec.rb +212 -0
  249. data/spec/lib/process_spec.rb +96 -0
  250. data/spec/lib/processors_spec.rb +555 -0
  251. data/spec/lib/renderers/base_renderer_spec.rb +122 -0
  252. data/spec/lib/renderers/common_features/helperable_spec.rb +30 -0
  253. data/spec/lib/renderers/erb_renderer_spec.rb +119 -0
  254. data/spec/lib/renderers/haml_renderer_spec.rb +103 -0
  255. data/spec/lib/renderers/slim_renderer_spec.rb +103 -0
  256. data/spec/lib/symbol_sources/jquery_symbol_source_spec.rb +25 -0
  257. data/spec/lib/symbol_sources/mdn_symbol_source_spec.rb +40 -0
  258. data/spec/lib/symbol_sources/sass_symbol_source_spec.rb +39 -0
  259. data/spec/lib/symbol_sources_spec.rb +19 -0
  260. data/spec/lib/tags/access_tag_spec.rb +32 -0
  261. data/spec/lib/tags/activate_with_tag_spec.rb +31 -0
  262. data/spec/lib/tags/active_tag_spec.rb +24 -0
  263. data/spec/lib/tags/alias_tag_spec.rb +31 -0
  264. data/spec/lib/tags/author_tag_spec.rb +172 -0
  265. data/spec/lib/tags/base_tag_spec.rb +21 -0
  266. data/spec/lib/tags/beta_tag_spec.rb +52 -0
  267. data/spec/lib/tags/class_tag_spec.rb +29 -0
  268. data/spec/lib/tags/compatibility_tag_spec.rb +159 -0
  269. data/spec/lib/tags/demo_type_tag_spec.rb +24 -0
  270. data/spec/lib/tags/deprecated_tag_spec.rb +50 -0
  271. data/spec/lib/tags/description_tag_spec.rb +242 -0
  272. data/spec/lib/tags/example_tag_spec.rb +37 -0
  273. data/spec/lib/tags/factory_tag_spec.rb +29 -0
  274. data/spec/lib/tags/for_tag_spec.rb +45 -0
  275. data/spec/lib/tags/group_tag_spec.rb +20 -0
  276. data/spec/lib/tags/helper_tag_spec.rb +22 -0
  277. data/spec/lib/tags/include_with_tag_spec.rb +74 -0
  278. data/spec/lib/tags/javascript_action_tag_spec.rb +20 -0
  279. data/spec/lib/tags/link_tag_spec.rb +49 -0
  280. data/spec/lib/tags/markup_tag_spec.rb +255 -0
  281. data/spec/lib/tags/member_tag_spec.rb +167 -0
  282. data/spec/lib/tags/method_tag_spec.rb +27 -0
  283. data/spec/lib/tags/name_tag_spec.rb +20 -0
  284. data/spec/lib/tags/object_tag_spec.rb +24 -0
  285. data/spec/lib/tags/param_tag_spec.rb +261 -0
  286. data/spec/lib/tags/pattern_tag_spec.rb +49 -0
  287. data/spec/lib/tags/preclude_tag_spec.rb +31 -0
  288. data/spec/lib/tags/private_tag_spec.rb +31 -0
  289. data/spec/lib/tags/property_tag_spec.rb +27 -0
  290. data/spec/lib/tags/public_tag_spec.rb +29 -0
  291. data/spec/lib/tags/require_tag_spec.rb +133 -0
  292. data/spec/lib/tags/returns_tag_spec.rb +85 -0
  293. data/spec/lib/tags/set_by_tag_spec.rb +92 -0
  294. data/spec/lib/tags/signature_tag_spec.rb +125 -0
  295. data/spec/lib/tags/since_tag_spec.rb +48 -0
  296. data/spec/lib/tags/state_tag_spec.rb +199 -0
  297. data/spec/lib/tags/static_tag_spec.rb +27 -0
  298. data/spec/lib/tags/subcomponent_tag_spec.rb +78 -0
  299. data/spec/lib/tags/subtitle_tag_spec.rb +13 -0
  300. data/spec/lib/tags/symbol_type_tag_spec.rb +20 -0
  301. data/spec/lib/tags/throws_tag_spec.rb +49 -0
  302. data/spec/lib/tags/title_tag_spec.rb +20 -0
  303. data/spec/lib/tags/type_tag_spec.rb +20 -0
  304. data/spec/lib/tags/value_tag_spec.rb +20 -0
  305. data/spec/lib/tags/variant_tag_spec.rb +13 -0
  306. data/spec/lib/tags/variation_tag_spec.rb +154 -0
  307. data/spec/lib/tags_spec.rb +264 -0
  308. data/spec/lib/templates_spec.rb +185 -0
  309. data/spec/lib/themes_spec.rb +32 -0
  310. data/spec/spec_helper.rb +34 -0
  311. data/tasks/rspec.rake +7 -0
  312. data/tasks/rubocop.rake +8 -0
  313. metadata +740 -0
@@ -0,0 +1,172 @@
1
+ require "spec_helper"
2
+
3
+ describe Docks::Tags::Author do
4
+ subject { Docks::Tags::Author.instance }
5
+
6
+ it "does not allow multiline content" do
7
+ expect(subject.multiline?).to be false
8
+ end
9
+
10
+ it "allows multiple tags per block" do
11
+ expect(subject.multiple_allowed?).to be true
12
+ end
13
+
14
+ describe "#process" do
15
+ let(:symbol) { Docks::Containers::Symbol.new }
16
+ let(:simple_content) { "Chris Sauve" }
17
+ let(:email) { "chrismsauve@gmail.com" }
18
+ let(:github) { "lemonmade" }
19
+ let(:complex_content) { "#{simple_content} (#{email}, github: #{github})" }
20
+
21
+ it "creates an array of authors even when only one is provided" do
22
+ expect(process_author_with(simple_content)).to be_an(Array)
23
+ end
24
+
25
+ it "creates a :name when there are no other details" do
26
+ result = process_author_with(simple_content).first
27
+ expect(result.name).to eq simple_content
28
+ end
29
+
30
+ it "creates a :name when there are other details" do
31
+ result = process_author_with(complex_content).first
32
+ expect(result.name).to eq simple_content
33
+ end
34
+
35
+ it "does not create an :email when no parentheses are provided" do
36
+ result = process_author_with(simple_content).first
37
+ expect(result.email).to be nil
38
+ end
39
+
40
+ it "creates details when one is provided without a key" do
41
+ result = process_author_with(complex_content).first
42
+ expect(result.email).to eq email
43
+ expect(result.github).to eq github
44
+ end
45
+
46
+ it "creates details when keys are provided for all values" do
47
+ complex_content.sub!("(", "(email: ")
48
+ result = process_author_with(complex_content).first
49
+ expect(result.email).to eq email
50
+ expect(result.github).to eq github
51
+ end
52
+
53
+ it "creates an author for each name separated by commas" do
54
+ input = "#{simple_content}, #{simple_content} ,#{simple_content}"
55
+ result = process_author_with(input)
56
+ expect(result.length).to be 3
57
+
58
+ result.each do |author|
59
+ expect(author.name).to eq simple_content
60
+ end
61
+ end
62
+
63
+ it "creates an author for each name separated by pipes" do
64
+ input = "#{simple_content}| #{simple_content} |#{simple_content}"
65
+ result = process_author_with(input)
66
+ expect(result.length).to be 3
67
+
68
+ result.each do |author|
69
+ expect(author.name).to eq simple_content
70
+ end
71
+ end
72
+
73
+ it "creates an author for a complex author after a simple author name, separated by commas" do
74
+ input = "#{simple_content}, #{complex_content}"
75
+ result = process_author_with(input)
76
+ expect(result.length).to be 2
77
+
78
+ expect(result.first.name).to eq simple_content
79
+ expect(result[1].name).to eq simple_content
80
+ expect(result[1].email).to eq email
81
+ expect(result[1].github).to eq github
82
+ end
83
+
84
+ it "creates an author for a complex author after a simple author name, separated by pipes" do
85
+ input = "#{simple_content} |#{complex_content}"
86
+ result = process_author_with(input)
87
+ expect(result.length).to be 2
88
+
89
+ expect(result.first.name).to eq simple_content
90
+ expect(result[1].name).to eq simple_content
91
+ expect(result[1].email).to eq email
92
+ expect(result[1].github).to eq github
93
+ end
94
+
95
+ it "creates an author for a simple author after a complex author name, separated by spaces" do
96
+ input = "#{complex_content} #{simple_content}"
97
+ result = process_author_with(input)
98
+ expect(result.length).to be 2
99
+
100
+ expect(result.first.name).to eq simple_content
101
+ expect(result.first.email).to eq email
102
+ expect(result.first.github).to eq github
103
+ expect(result[1].name).to eq simple_content
104
+ end
105
+
106
+ it "creates an author for a simple author after a complex author name, separated by commas" do
107
+ input = "#{complex_content}, #{simple_content}"
108
+ result = process_author_with(input)
109
+ expect(result.length).to be 2
110
+
111
+ expect(result.first.name).to eq simple_content
112
+ expect(result.first.email).to eq email
113
+ expect(result.first.github).to eq github
114
+ expect(result[1].name).to eq simple_content
115
+ end
116
+
117
+ it "creates an author for a simple author after a complex author name, separated by pipes" do
118
+ input = "#{complex_content} || #{simple_content}"
119
+ result = process_author_with(input)
120
+ expect(result.length).to be 2
121
+
122
+ expect(result.first.name).to eq simple_content
123
+ expect(result.first.email).to eq email
124
+ expect(result.first.github).to eq github
125
+ expect(result[1].name).to eq simple_content
126
+ end
127
+
128
+ it "creates an author with details for each author/ parentheses pair separated by spaces" do
129
+ input = "#{complex_content} #{complex_content}"
130
+ result = process_author_with(input)
131
+ expect(result.length).to be 2
132
+
133
+ result.each do |author|
134
+ expect(author.name).to eq simple_content
135
+ expect(author.email).to eq email
136
+ expect(author.github).to eq github
137
+ end
138
+ end
139
+
140
+ it "creates an author with details for each author/ parentheses pair separated by pipes" do
141
+ input = "#{complex_content} |#{complex_content}"
142
+ result = process_author_with(input)
143
+ expect(result.length).to be 2
144
+
145
+ result.each do |author|
146
+ expect(author.name).to eq simple_content
147
+ expect(author.email).to eq email
148
+ expect(author.github).to eq github
149
+ end
150
+ end
151
+
152
+ it "creates an author with details for each author/ parentheses pair separated by commas" do
153
+ input = "#{complex_content}, #{complex_content}"
154
+ result = process_author_with(input)
155
+ expect(result.length).to be 2
156
+
157
+ result.each do |author|
158
+ expect(author.name).to eq simple_content
159
+ expect(author.email).to eq email
160
+ expect(author.github).to eq github
161
+ end
162
+ end
163
+
164
+ private
165
+
166
+ def process_author_with(content)
167
+ symbol[subject.name] = content
168
+ subject.process(symbol)
169
+ symbol[subject.name]
170
+ end
171
+ end
172
+ end
@@ -0,0 +1,21 @@
1
+ require "spec_helper"
2
+
3
+ describe Docks::Tags::Base do
4
+ subject { Docks::Tags::Base.instance }
5
+
6
+ it "has no synonyms by default" do
7
+ expect(subject.synonyms).to eq []
8
+ end
9
+
10
+ it "is multiline by default" do
11
+ expect(subject.multiline?).to be true
12
+ end
13
+
14
+ it "allows only one tag per block by default" do
15
+ expect(subject.multiple_allowed?).to be false
16
+ end
17
+
18
+ it "can be included in parse results" do
19
+ expect(subject.parseable?).to be true
20
+ end
21
+ end
@@ -0,0 +1,52 @@
1
+ require "spec_helper"
2
+
3
+ describe Docks::Tags::Beta do
4
+ subject { Docks::Tags::Beta.instance }
5
+
6
+ it "allows multiline content" do
7
+ expect(subject.multiline?).to be true
8
+ end
9
+
10
+ it "allows only one tag per block" do
11
+ expect(subject.multiple_allowed?).to be false
12
+ end
13
+
14
+ describe "#process" do
15
+ let(:symbol) { Docks::Containers::Symbol.new }
16
+ let(:simple_version) { "v2.0" }
17
+ let(:complex_version) { "Version 2.0.32-b2034" }
18
+ let(:description) { "This is the description" }
19
+
20
+ it "returns just the version when no description is provided" do
21
+ expect(process_beta_with([simple_version]).version).to eq simple_version
22
+ end
23
+
24
+ it "gets a simple version when a description is provided" do
25
+ expect(process_beta_with(["#{simple_version} - #{description}"]).version).to eq simple_version
26
+ expect(process_beta_with(["#{simple_version} - #{description}"]).version).to eq simple_version
27
+ end
28
+
29
+ it "gets a complex version when a description is provided" do
30
+ expect(process_beta_with(["#{complex_version} - #{description}"]).version).to eq complex_version
31
+ expect(process_beta_with(["#{complex_version} - #{description}"]).version).to eq complex_version
32
+ end
33
+
34
+ it "returns a nil description when no description is provided" do
35
+ expect(process_beta_with([complex_version]).description).to be nil
36
+ end
37
+
38
+ it "assigns a description when one is provided" do
39
+ target_description = Docks::Processors.join_with_smart_line_breaks(description)
40
+ expect(process_beta_with(["#{complex_version} - #{description}"]).description).to eq target_description
41
+ expect(process_beta_with(["#{complex_version} - #{description}"]).description).to eq target_description
42
+ end
43
+
44
+ private
45
+
46
+ def process_beta_with(content)
47
+ symbol[subject.name] = content
48
+ subject.process(symbol)
49
+ symbol[subject.name]
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ describe Docks::Tags::Klass do
4
+ subject { Docks::Tags::Klass.instance }
5
+
6
+ it "does not allow multiline content" do
7
+ expect(subject.multiline?).to be false
8
+ end
9
+
10
+ it "only allows one tag per block" do
11
+ expect(subject.multiple_allowed?).to be false
12
+ end
13
+
14
+ describe "#process" do
15
+ it "marks the attribute as true" do
16
+ symbol = Docks::Containers::Symbol.new(name: "foo", class: "")
17
+ Docks::Process.process(symbol)
18
+ expect(symbol[subject.name]).to be true
19
+ end
20
+
21
+ it "converts the symbol to be a class container" do
22
+ symbol = Docks::Containers::Function.new(class: "", name: "foo")
23
+ symbol = Docks::Process.process(symbol)
24
+
25
+ expect(symbol).to be_a Docks::Containers::Klass
26
+ expect(symbol.symbol_type).to eq Docks::Types::Symbol::CLASS
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,159 @@
1
+ require "spec_helper"
2
+
3
+ describe Docks::Tags::Compatibility do
4
+ subject { Docks::Tags::Compatibility.instance }
5
+
6
+ it "does not allow multiline content" do
7
+ expect(subject.multiline?).to be false
8
+ end
9
+
10
+ it "allows multiple tags per block" do
11
+ expect(subject.multiple_allowed?).to be true
12
+ end
13
+
14
+ describe "#process" do
15
+ let(:symbol) { Docks::Containers::Symbol.new }
16
+ let(:simple_content) { "Chrome" }
17
+ let(:version) { "latest" }
18
+ let(:complex_content) { "#{simple_content} (#{version})" }
19
+
20
+ it "creates an array of compatibilities even when only one is provided" do
21
+ expect(process_compatibility_with(simple_content)).to be_an(Array)
22
+ end
23
+
24
+ it "correctly creates a :browser when there are no other details" do
25
+ result = process_compatibility_with(simple_content).first
26
+ expect(result.browser).to eq simple_content
27
+ end
28
+
29
+ it "correctly creates a :browser when there are other details" do
30
+ result = process_compatibility_with(complex_content).first
31
+ expect(result.browser).to eq simple_content
32
+ end
33
+
34
+ it "does not create a :version when no parentheses are provided" do
35
+ result = process_compatibility_with(simple_content).first
36
+ expect(result.version).to be nil
37
+ end
38
+
39
+ it "correctly creates a :version when it is provided without a key" do
40
+ result = process_compatibility_with(complex_content).first
41
+ expect(result.version).to eq version
42
+ end
43
+
44
+ it "correctly creates a :version when provided with a key" do
45
+ complex_content.sub!("(", "(version: ")
46
+ result = process_compatibility_with(complex_content).first
47
+ expect(result.version).to eq version
48
+ end
49
+
50
+ it "creates an entry for each browser separated by commas" do
51
+ input = "#{simple_content}, #{simple_content} ,#{simple_content}"
52
+ result = process_compatibility_with(input)
53
+ expect(result.length).to be 3
54
+
55
+ result.each do |compatibility|
56
+ expect(compatibility.browser).to eq simple_content
57
+ end
58
+ end
59
+
60
+ it "creates an entry for each browser separated by pipes" do
61
+ input = "#{simple_content}| #{simple_content} |#{simple_content}"
62
+ result = process_compatibility_with(input)
63
+ expect(result.length).to be 3
64
+
65
+ result.each do |compatibility|
66
+ expect(compatibility.browser).to eq simple_content
67
+ end
68
+ end
69
+
70
+ it "creates an entry for a complex compatibility detail after a simple browser name, separated by commas" do
71
+ input = "#{simple_content}, #{complex_content}"
72
+ result = process_compatibility_with(input)
73
+ expect(result.length).to be 2
74
+
75
+ expect(result.first.browser).to eq simple_content
76
+ expect(result[1].browser).to eq simple_content
77
+ expect(result[1].version).to eq version
78
+ end
79
+
80
+ it "creates an entry for a complex compatibility detail after a simple browser name, separated by pipes" do
81
+ input = "#{simple_content} |#{complex_content}"
82
+ result = process_compatibility_with(input)
83
+ expect(result.length).to be 2
84
+
85
+ expect(result.first.browser).to eq simple_content
86
+ expect(result[1].browser).to eq simple_content
87
+ expect(result[1].version).to eq version
88
+ end
89
+
90
+ it "creates an entry for a browser name after a complex compatibility detail, separated by spaces" do
91
+ input = "#{complex_content} #{simple_content}"
92
+ result = process_compatibility_with(input)
93
+ expect(result.length).to be 2
94
+
95
+ expect(result.first.browser).to eq simple_content
96
+ expect(result.first.version).to eq version
97
+ expect(result[1].browser).to eq simple_content
98
+ end
99
+
100
+ it "creates an entry for a browser name after a complex compatibility detail, separated by commas" do
101
+ input = "#{complex_content}, #{simple_content}"
102
+ result = process_compatibility_with(input)
103
+ expect(result.length).to be 2
104
+
105
+ expect(result.first.browser).to eq simple_content
106
+ expect(result.first.version).to eq version
107
+ expect(result[1].browser).to eq simple_content
108
+ end
109
+
110
+ it "creates an entry for a browser name after a complex compatibility detail, separated by pipes" do
111
+ input = "#{complex_content} || #{simple_content}"
112
+ result = process_compatibility_with(input)
113
+ expect(result.length).to be 2
114
+
115
+ expect(result.first.browser).to eq simple_content
116
+ expect(result.first.version).to eq version
117
+ expect(result[1].browser).to eq simple_content
118
+ end
119
+
120
+ it "creates an entry with details for each browser/ parentheses pair separated by spaces" do
121
+ input = "#{complex_content} #{complex_content}"
122
+ result = process_compatibility_with(input)
123
+ expect(result.length).to be 2
124
+
125
+ result.each do |compatibility|
126
+ expect(compatibility.browser).to eq simple_content
127
+ expect(compatibility.version).to eq version
128
+ end
129
+ end
130
+
131
+ it "creates an entry with details for each browser/ parentheses pair separated by pipes" do
132
+ input = "#{complex_content} |#{complex_content}"
133
+ result = process_compatibility_with(input)
134
+ expect(result.length).to be 2
135
+
136
+ result.each do |compatibility|
137
+ expect(compatibility.browser).to eq simple_content
138
+ expect(compatibility.version).to eq version
139
+ end
140
+ end
141
+
142
+ it "creates an entry with details for each browser/ parentheses pair separated by commas" do
143
+ input = "#{complex_content}, #{complex_content}"
144
+ result = process_compatibility_with(input)
145
+ expect(result.length).to be 2
146
+
147
+ result.each do |compatibility|
148
+ expect(compatibility.browser).to eq simple_content
149
+ expect(compatibility.version).to eq version
150
+ end
151
+ end
152
+
153
+ def process_compatibility_with(content)
154
+ symbol[subject.name] = content
155
+ subject.process(symbol)
156
+ symbol[subject.name]
157
+ end
158
+ end
159
+ end
@@ -0,0 +1,24 @@
1
+ require "spec_helper"
2
+
3
+ describe Docks::Tags::DemoType do
4
+ subject { Docks::Tags::DemoType.instance }
5
+
6
+ it "does not allow multiline content" do
7
+ expect(subject.multiline?).to be false
8
+ end
9
+
10
+ it "only allows one tag per block" do
11
+ expect(subject.multiple_allowed?).to be false
12
+ end
13
+
14
+ describe "#process" do
15
+ it "makes sure the value is a valid demo type" do
16
+ symbol = Docks::Containers::Symbol.new
17
+ symbol[subject.name] = Docks::Types::Demo::JOINT
18
+
19
+ expect(subject).to receive(:ensure_valid_demo_type).and_call_original
20
+ subject.process(symbol)
21
+ expect(symbol[subject.name]).to be Docks::Types::Demo::JOINT
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,50 @@
1
+ require "spec_helper"
2
+
3
+ describe Docks::Tags::Deprecated do
4
+ subject { Docks::Tags::Deprecated.instance }
5
+
6
+ it "allows multiline content" do
7
+ expect(subject.multiline?).to be true
8
+ end
9
+
10
+ it "allows only one tag per block" do
11
+ expect(subject.multiple_allowed?).to be false
12
+ end
13
+
14
+ describe "#process" do
15
+ let(:symbol) { Docks::Containers::Symbol.new }
16
+ let(:simple_version) { "v2.0" }
17
+ let(:complex_version) { "Version 2.0.32-b2034" }
18
+ let(:description) { "This is the description" }
19
+
20
+ it "returns just the version when no description is provided" do
21
+ expect(process_deprecation_with([simple_version]).version).to eq simple_version
22
+ end
23
+
24
+ it "gets a simple version when a description is provided" do
25
+ expect(process_deprecation_with(["#{simple_version} - #{description}"]).version).to eq simple_version
26
+ expect(process_deprecation_with(["#{simple_version} - #{description}"]).version).to eq simple_version
27
+ end
28
+
29
+ it "gets a complex version when a description is provided" do
30
+ expect(process_deprecation_with(["#{complex_version} - #{description}"]).version).to eq complex_version
31
+ expect(process_deprecation_with(["#{complex_version} - #{description}"]).version).to eq complex_version
32
+ end
33
+
34
+ it "returns a nil description when no description is provided" do
35
+ expect(process_deprecation_with([complex_version]).description).to be nil
36
+ end
37
+
38
+ it "assigns a description when one is provided" do
39
+ target_description = Docks::Processors.join_with_smart_line_breaks(description)
40
+ expect(process_deprecation_with(["#{complex_version} - #{description}"]).description).to eq target_description
41
+ expect(process_deprecation_with(["#{complex_version} - #{description}"]).description).to eq target_description
42
+ end
43
+
44
+ def process_deprecation_with(content)
45
+ symbol[subject.name] = content
46
+ subject.process(symbol)
47
+ symbol[subject.name]
48
+ end
49
+ end
50
+ end