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,23 @@
1
+ module Docks
2
+ module Tags
3
+ class For < Base
4
+ def initialize
5
+ @name = :for
6
+ @multiline = false
7
+ end
8
+
9
+ def setup_post_processors
10
+ after_each_pattern(:late) do |pattern|
11
+ pattern.components.each { |component| set_for_on_component_variations(component) }
12
+ end
13
+ end
14
+
15
+ protected
16
+
17
+ def set_for_on_component_variations(component)
18
+ component.variations.each { |variation| variation.for = component.name }
19
+ component.subcomponents.each { |subcomponent| set_for_on_component_variations(subcomponent) }
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,10 @@
1
+ module Docks
2
+ module Tags
3
+ class Group < Base
4
+ def initialize
5
+ @name = :group
6
+ @multiline = false
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ module Docks
2
+ module Tags
3
+ class Helper < Base
4
+ def initialize
5
+ @name = :helper
6
+ end
7
+
8
+ def process(symbol)
9
+ symbol.update(@name) { |helper| helper.join("\n") }
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,57 @@
1
+ module Docks
2
+ module Tags
3
+ class IncludeWith < Base
4
+ def initialize
5
+ @name = :include_with
6
+ @multiline = false
7
+ @multiple_allowed = true
8
+ end
9
+
10
+ def process(symbol)
11
+ symbol.update(@name) do |include_with|
12
+ Array(include_with).map { |with| split_on_commas_spaces_and_pipes(with) }.flatten
13
+ end
14
+ end
15
+
16
+ def setup_post_processors
17
+ after_each_pattern(:late) do |pattern|
18
+ components = pattern.components
19
+ components.each { |component| find_and_associate_inclusion(component, components) }
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def find_and_associate_inclusion(component, components)
26
+ include_withs = component.fetch(:include_with, [])
27
+ unless include_withs.empty?
28
+ components.each do |other|
29
+ next unless include_withs.include?(other.name)
30
+ other.included_symbols ||= []
31
+ other.included_symbols << component
32
+ end
33
+ end
34
+
35
+ component.variations do |variation|
36
+ include_withs = variation.fetch(:include_with, [])
37
+ next if include_withs.empty?
38
+ components.each do |other|
39
+ next unless include_withs.include?(other.name)
40
+ other.included_symbols ||= []
41
+ other.included_symbols << variation
42
+ end
43
+ end
44
+
45
+ component.subcomponents { |subcomponent| find_and_associate_inclusion(subcomponent, components) }
46
+ end
47
+ end
48
+
49
+ class IncludedSymbol < Base
50
+ def initialize
51
+ @name = :included_symbol
52
+ @parseable = false
53
+ @multiple_allowed = true
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,10 @@
1
+ module Docks
2
+ module Tags
3
+ class JavascriptAction < Base
4
+ def initialize
5
+ @name = :javascript_action
6
+ @multiline = false
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,18 @@
1
+ module Docks
2
+ module Tags
3
+ class Link < Base
4
+ def initialize
5
+ @name = :link
6
+ @synonyms = [:see]
7
+ @multiline = false
8
+ @multiple_allowed = true
9
+ end
10
+
11
+ def process(symbol)
12
+ symbol.update(@name) do |links|
13
+ Array(links).map { |link| OpenStruct.new name_and_parenthetical(link, :url, :caption) }
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,106 @@
1
+ module Docks
2
+ module Tags
3
+ class Markup < Base
4
+ def initialize
5
+ @name = :markup
6
+ end
7
+
8
+ def process(symbol)
9
+ symbol.update(@name) { |markup| markup.join("\n") }
10
+ end
11
+
12
+ def setup_post_processors
13
+ after_each_pattern(:late) do |pattern|
14
+ components = pattern.components
15
+ associate_content_from_external_files(components)
16
+ clean_up_helper_and_markup(components)
17
+ prepare_variation_markup(components)
18
+ pattern
19
+ end
20
+ end
21
+
22
+ protected
23
+
24
+ def associate_content_from_external_files(components)
25
+ markup_files = Grouper.source_files_of_type(Types::Languages::MARKUP)
26
+ stub_files = Grouper.source_files_of_type(Types::Languages::STUB)
27
+
28
+ components.each do |component|
29
+ name = component.name
30
+ id = Docks.pattern_id(name)
31
+
32
+ if component.markup.nil? && !markup_files.empty?
33
+ markup_file = markup_files.find do |file|
34
+ name == File.basename(file, ".*").sub(/^_+/, "") || id == Docks.pattern_id(file)
35
+ end
36
+
37
+ component.markup = File.read(markup_file) unless markup_file.nil?
38
+ end
39
+
40
+ if component.markup.nil? && !component.helper.nil? && !stub_files.empty?
41
+ markup_language = Languages.most_common_markup_language || Languages::ERB.instance
42
+ next unless markup_language.respond_to?(:helper_markup_for)
43
+
44
+ stub_file = stub_files.find do |file|
45
+ name == File.basename(file, ".*").sub(/^_+/, "") || id == Docks.pattern_id(file)
46
+ end
47
+
48
+ stub = stub_file.nil? ? nil : Languages.language_for(stub_file).load_stub(stub_file)
49
+ component.helper = markup_language.helper_markup_for(component.helper, stub) unless stub.nil?
50
+ end
51
+ end
52
+ end
53
+
54
+ def clean_up_helper_and_markup(components)
55
+ components.each do |component|
56
+ markup, helper = component.markup, component.helper
57
+ if markup && helper && markup.include?(helper)
58
+ component.helper = component.markup
59
+ component.markup = nil
60
+ end
61
+ end
62
+ end
63
+
64
+ def prepare_variation_markup(components)
65
+ components.each do |component|
66
+ next unless component.has_demo?
67
+ markup, helper = component.markup, component.helper
68
+
69
+ component.variations do |variation|
70
+ next unless variation.has_demo?
71
+ next if variation.helper || variation.markup
72
+
73
+ if helper
74
+ update_helper_for_variation(helper, variation)
75
+ elsif markup
76
+ update_markup_for_variation(markup, variation)
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ def update_markup_for_variation(markup, variation)
83
+ variation.markup = markup.gsub(/class\s*=\s*['"][^'"]*#{Docks.config.naming_convention.component(variation.name)}[\s'"]/) do |match|
84
+ "#{match[0...-1]} #{variation.name}#{match[-1]}"
85
+ end
86
+ end
87
+
88
+ def update_helper_for_variation(helper, variation)
89
+ variation.set_by.each do |set_by|
90
+ update_found = false
91
+ new_helper = helper.gsub(/#{Regexp.escape(set_by[:setter].sub(/^:/, ""))}(:\s*|\s*=>\s*)([:a-zA-Z_]*)/) do |match|
92
+ update_found = true
93
+ value = set_by[:constant] || "true"
94
+ join = $1.dup
95
+ "#{set_by[:setter].sub(/^:/, "")}#{join}#{value}"
96
+ end
97
+
98
+ if update_found
99
+ variation.helper = new_helper
100
+ break
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,37 @@
1
+ require_relative "base_tag.rb"
2
+
3
+ module Docks
4
+ module Tags
5
+ class Member < Base
6
+ def initialize
7
+ @name = :variation
8
+ @parseable = false
9
+ @multiple_allowed = true
10
+ end
11
+
12
+ def setup_post_processors
13
+ after_each_pattern(:middle) do |pattern|
14
+ last_object = nil
15
+ script_symbols = pattern.script_symbols
16
+
17
+ script_symbols.each do |symbol|
18
+ is_member = symbol.member?
19
+ for_symbol = symbol.for
20
+
21
+ if for_symbol
22
+ matching_symbol = script_symbols.find { |symbol| symbol.name == for_symbol }
23
+ end
24
+
25
+ last_object = symbol if last_object.nil? && !is_member
26
+ next if last_object.nil? || (for_symbol && !matching_symbol)
27
+
28
+ (matching_symbol || last_object).add_member(symbol) if is_member || for_symbol
29
+ last_object = symbol if !is_member
30
+ end
31
+
32
+ pattern.script_symbols.delete_if(&:member?)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,18 @@
1
+ require_relative "member_tag.rb"
2
+
3
+ module Docks
4
+ module Tags
5
+ class Method < Member
6
+ def initialize
7
+ @name = :method
8
+ @multiline = false
9
+ @multiple_allowed = false
10
+ end
11
+
12
+ def process(symbol)
13
+ symbol[@name] = true
14
+ Containers::Function.from_symbol(symbol)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,10 @@
1
+ module Docks
2
+ module Tags
3
+ class Name < Base
4
+ def initialize
5
+ @name = :name
6
+ @multiline = false
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ module Docks
2
+ module Tags
3
+ class Object < Base
4
+ def initialize
5
+ @name = :object
6
+ @multiline = false
7
+ end
8
+
9
+ def process(symbol)
10
+ symbol[@name] = true
11
+ symbol.type = "Object"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,94 @@
1
+ module Docks
2
+ module Tags
3
+ class Param < Base
4
+ def initialize
5
+ @name = :param
6
+ @synonyms = [:arg, :argument, :parameter]
7
+ @multiple_allowed = true
8
+ end
9
+
10
+ def process(symbol)
11
+ symbol.update(@name) do |params|
12
+ params = Array(params).map do |param|
13
+ param = multiline_description(param) { |first_line| proccess_first_line_of_param(first_line) }
14
+ OpenStruct.new(param)
15
+ end
16
+
17
+ join_sub_params(params)
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ PROP_MATCHER = /(?<base>\w+)(?:\.(?<name>\w+)|\[\s*['"](?<name>\w+))/
24
+ NAME_MATCHER = /(?<optional>\[)?(?<name>[^\s=\]]*)[\s=\]]*/
25
+
26
+ def proccess_first_line_of_param(first_line)
27
+ first_line = first_line.strip
28
+ result = {
29
+ multiple: false,
30
+ types: Array.new,
31
+ optional: false,
32
+ description: nil
33
+ }
34
+
35
+ if type_match = first_line.match(/^\{([^\}]*)\}\s*/)
36
+ result[:types] = split_types(type_match.captures.first)
37
+ first_line = first_line.sub(type_match.to_s, "")
38
+ end
39
+
40
+ first_line.sub!(/([^=\s])\[\]/, '\1')
41
+ name_match = first_line.match(NAME_MATCHER)
42
+ result[:optional] = !name_match[:optional].nil?
43
+ result[:name] = name_match[:name]
44
+ first_line = first_line.sub(name_match.to_s, "")
45
+
46
+ result[:name].sub!(/^\.{3}/) do
47
+ result[:multiple] = true
48
+ ""
49
+ end
50
+
51
+ description_match = first_line.match(/\s*\-\s*(.*)/)
52
+ result[:description] = description_match.nil? ? nil : description_match.captures.first
53
+ first_line.sub!(description_match.to_s, "") unless description_match.nil?
54
+
55
+ default_match = first_line.match(/(.*)\]\s*/)
56
+ result[:default] = default_match.nil? ? nil : default_match.captures.first
57
+ first_line = first_line.sub(default_match.to_s, "") unless default_match.nil?
58
+
59
+ result[:description] = first_line if result[:description].nil? && !first_line.empty?
60
+
61
+ result
62
+ end
63
+
64
+ def join_sub_params(params)
65
+ final_params = []
66
+
67
+ params.each do |param|
68
+ param.properties ||= []
69
+
70
+ if matches = param.name.match(PROP_MATCHER)
71
+ base_param_name, param.name = matches[:base], matches[:name]
72
+ base_param = final_params.find { |final_param| final_param.name == base_param_name }
73
+
74
+ if base_param.nil?
75
+ base_param = OpenStruct.new({
76
+ name: base_param_name,
77
+ types: ["Object"],
78
+ properties: []
79
+ })
80
+
81
+ final_params << base_param
82
+ end
83
+
84
+ base_param.properties << param
85
+ else
86
+ final_params << param
87
+ end
88
+ end
89
+
90
+ final_params
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,21 @@
1
+ module Docks
2
+ module Tags
3
+ class Pattern < Base
4
+ def initialize
5
+ @name = :pattern
6
+ @synonyms = [:page]
7
+ @multiline = false
8
+ end
9
+
10
+ def setup_post_processors
11
+ after_each_pattern(:middle) do |pattern|
12
+ name = pattern.name
13
+
14
+ pattern.symbols.each do |symbol|
15
+ symbol.pattern = name
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ module Docks
2
+ module Tags
3
+ class Preclude < Base
4
+ def initialize
5
+ @name = :preclude
6
+ @multiline = false
7
+ @multiple_allowed = true
8
+ end
9
+
10
+ def process(symbol)
11
+ symbol.update(@name) do |precludes|
12
+ Array(precludes).map { |preclude| split_on_commas_spaces_and_pipes(preclude) }.flatten
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ module Docks
2
+ module Tags
3
+ class Private < Base
4
+ def initialize
5
+ @name = :private
6
+ @multiline = false
7
+ end
8
+
9
+ def process(symbol)
10
+ symbol.delete(@name)
11
+ symbol[Access] = Docks::Types::Access::PRIVATE
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ require_relative "member_tag.rb"
2
+
3
+ module Docks
4
+ module Tags
5
+ class Property < Member
6
+ def initialize
7
+ @name = :property
8
+ @multiline = false
9
+ @multiple_allowed = false
10
+ end
11
+
12
+ def process(symbol)
13
+ symbol[@name] = true
14
+ Containers::Variable.from_symbol(symbol)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,15 @@
1
+ module Docks
2
+ module Tags
3
+ class Public < Base
4
+ def initialize
5
+ @name = :public
6
+ @multiline = false
7
+ end
8
+
9
+ def process(symbol)
10
+ symbol.delete(@name)
11
+ symbol[Access] = Docks::Types::Access::PUBLIC
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,47 @@
1
+ module Docks
2
+ module Tags
3
+ class Require < Base
4
+ def initialize
5
+ @name = :require
6
+ @multiline = false
7
+ @multiple_allowed = true
8
+
9
+ @require_associations = {}
10
+ end
11
+
12
+ def process(symbol)
13
+ symbol.update(@name) do |requires|
14
+ Array(requires).map { |a_require| split_on_commas_spaces_and_pipes(a_require) }.flatten
15
+ end
16
+
17
+ if requires = symbol[@name]
18
+ requires.each do |required|
19
+ @require_associations[required] ||= []
20
+ @require_associations[required] << symbol
21
+ end
22
+ end
23
+ end
24
+
25
+ def setup_post_processors
26
+ after_all(:late) do |pattern_library|
27
+ @require_associations.each do |descriptor, users|
28
+ if result = pattern_library.find(descriptor)
29
+ symbol = result.symbol || result.pattern
30
+ symbol[UsedBy] = users.map { |user| user.to_descriptor }
31
+ end
32
+ end
33
+
34
+ @require_associations = {}
35
+ end
36
+ end
37
+ end
38
+
39
+ class UsedBy < Base
40
+ def initialize
41
+ @name = :used_by
42
+ @synonyms = [:required_by, :used_in]
43
+ @parseable = false
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,31 @@
1
+ module Docks
2
+ module Tags
3
+ class Returns < Base
4
+ def initialize
5
+ @name = :returns
6
+ @synonyms = [:return]
7
+ end
8
+
9
+ def process(symbol)
10
+ symbol.update(@name) do |returns|
11
+ returns = multiline_description(returns) do |first_line|
12
+ first_line.strip!
13
+ if match = first_line.match(/nothing\s*\-?\s*(?<description>.*)/i)
14
+ { description: match[:description] }
15
+
16
+ else
17
+ match = first_line.match(/\{?(?<type>[^\}\-]*)\}?(?:\s*\-?\s*(?<description>.*))?/)
18
+ {
19
+ types: split_types(match[:type].strip),
20
+ description: match[:description]
21
+ }
22
+ end
23
+ end
24
+
25
+ returns[:types] = nil if Array(returns[:types]).empty?
26
+ OpenStruct.new(returns)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,18 @@
1
+ module Docks
2
+ module Tags
3
+ class SetBy < Base
4
+ def initialize
5
+ @name = :set_by
6
+ @multiline = false
7
+ @multiple_allowed = true
8
+ end
9
+
10
+ def process(symbol)
11
+ symbol.update(@name) do |set_bys|
12
+ set_bys = Array(set_bys).map { |set_by| split_on_top_level_parens_commas_and_pipes(set_by) }.flatten
13
+ set_bys.map { |set_by| OpenStruct.new name_and_parenthetical(set_by, :setter, :constant) }
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,35 @@
1
+ module Docks
2
+ module Tags
3
+ class Signature < Base
4
+ def initialize
5
+ @name = :signature
6
+ end
7
+
8
+ def process(symbol)
9
+ symbol.update(@name) { |signature| signature.join("\n") }
10
+ end
11
+
12
+ def setup_post_processors
13
+ after_each_pattern(:late) do |pattern|
14
+ pattern.symbols.each { |symbol| add_signature(symbol) }
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ SYMBOL_TYPES_WITH_SIGNATURES = %w(class factory function mixin)
21
+
22
+ def add_signature(symbol)
23
+ return unless source = symbol.source
24
+ language = Languages.language_for(source.file)
25
+ return unless language
26
+
27
+ if !symbol.signature && SYMBOL_TYPES_WITH_SIGNATURES.include?(symbol.symbol_type)
28
+ symbol.signature = language.signature_for(symbol)
29
+ end
30
+
31
+ symbol.methods.each { |method| add_signature(method) }
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,26 @@
1
+ module Docks
2
+ module Tags
3
+ class Since < Base
4
+ def initialize
5
+ @name = :since
6
+ @synonyms = [:introduced_in]
7
+ end
8
+
9
+ def process(symbol)
10
+ symbol.update(@name) do |since|
11
+ since = multiline_description(since) do |first_line|
12
+ if match = first_line.match(/\s*(?<version>[0-9a-zA\.\-_]*)(?:\s+\-?\s*(?<description>.*))?/)
13
+ description = match[:description]
14
+ {
15
+ version: match[:version],
16
+ description: description.nil? || description.length == 0 ? nil : match[:description]
17
+ }
18
+ end
19
+ end
20
+
21
+ OpenStruct.new(since)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,12 @@
1
+ require_relative "base_tag.rb"
2
+
3
+ module Docks
4
+ module Tags
5
+ class Source < Base
6
+ def initialize
7
+ @name = :source
8
+ @parseable = false
9
+ end
10
+ end
11
+ end
12
+ end