docks_app 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.editorconfig +8 -0
- data/.gitignore +22 -0
- data/.rubocop.yml +20 -0
- data/.travis.yml +10 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +35 -0
- data/Rakefile +3 -0
- data/bin/docks +5 -0
- data/config/json/docks_config.json +71 -0
- data/config/ruby/docks_config.rb +127 -0
- data/config/yaml/docks_config.yml +70 -0
- data/docks.gemspec +38 -0
- data/lib/docks/build.rb +300 -0
- data/lib/docks/cache.rb +143 -0
- data/lib/docks/command_line.rb +65 -0
- data/lib/docks/configuration.rb +217 -0
- data/lib/docks/containers/base_container.rb +103 -0
- data/lib/docks/containers/class_container.rb +39 -0
- data/lib/docks/containers/component_container.rb +92 -0
- data/lib/docks/containers/demo_container.rb +105 -0
- data/lib/docks/containers/factory_container.rb +12 -0
- data/lib/docks/containers/function_container.rb +46 -0
- data/lib/docks/containers/mixin_container.rb +19 -0
- data/lib/docks/containers/pattern_container.rb +168 -0
- data/lib/docks/containers/pattern_library_container.rb +77 -0
- data/lib/docks/containers/state_container.rb +9 -0
- data/lib/docks/containers/symbol_container.rb +77 -0
- data/lib/docks/containers/variable_container.rb +47 -0
- data/lib/docks/containers/variant_container.rb +9 -0
- data/lib/docks/containers/variation_container.rb +38 -0
- data/lib/docks/containers.rb +25 -0
- data/lib/docks/descriptor.rb +60 -0
- data/lib/docks/errors.rb +5 -0
- data/lib/docks/group.rb +66 -0
- data/lib/docks/helpers/github_helper.rb +29 -0
- data/lib/docks/helpers/path_helper.rb +94 -0
- data/lib/docks/helpers/render_helper.rb +87 -0
- data/lib/docks/helpers.rb +19 -0
- data/lib/docks/languages/base_language.rb +17 -0
- data/lib/docks/languages/coffeescript_language.rb +30 -0
- data/lib/docks/languages/common_types/markup_language.rb +71 -0
- data/lib/docks/languages/css_language.rb +13 -0
- data/lib/docks/languages/erb_language.rb +21 -0
- data/lib/docks/languages/haml_language.rb +21 -0
- data/lib/docks/languages/html_language.rb +10 -0
- data/lib/docks/languages/javascript_language.rb +42 -0
- data/lib/docks/languages/json_language.rb +18 -0
- data/lib/docks/languages/less_language.rb +33 -0
- data/lib/docks/languages/markdown_language.rb +10 -0
- data/lib/docks/languages/sass_language.rb +36 -0
- data/lib/docks/languages/slim_language.rb +21 -0
- data/lib/docks/languages/stylus_language.rb +26 -0
- data/lib/docks/languages/yaml_language.rb +18 -0
- data/lib/docks/languages.rb +103 -0
- data/lib/docks/markdown.rb +18 -0
- data/lib/docks/messenger.rb +69 -0
- data/lib/docks/naming_conventions/base_naming_convention.rb +9 -0
- data/lib/docks/naming_conventions/bem_naming_convention.rb +45 -0
- data/lib/docks/naming_conventions/suit_naming_convention.rb +45 -0
- data/lib/docks/naming_conventions.rb +21 -0
- data/lib/docks/ostruct.rb +17 -0
- data/lib/docks/parser.rb +86 -0
- data/lib/docks/parsers/base_parser.rb +128 -0
- data/lib/docks/parsers/coffeescript_parser.rb +30 -0
- data/lib/docks/parsers/css_parser.rb +27 -0
- data/lib/docks/parsers/javascript_parser.rb +30 -0
- data/lib/docks/parsers/less_parser.rb +22 -0
- data/lib/docks/parsers/sass_parser.rb +31 -0
- data/lib/docks/parsers/stylus_parser.rb +28 -0
- data/lib/docks/process.rb +60 -0
- data/lib/docks/processors.rb +416 -0
- data/lib/docks/renderers/base_renderer.rb +64 -0
- data/lib/docks/renderers/common_features/capturable.rb +69 -0
- data/lib/docks/renderers/common_features/helperable.rb +23 -0
- data/lib/docks/renderers/erb_renderer.rb +68 -0
- data/lib/docks/renderers/haml_renderer.rb +37 -0
- data/lib/docks/renderers/slim_renderer.rb +33 -0
- data/lib/docks/symbol_sources/base_symbol_source.rb +12 -0
- data/lib/docks/symbol_sources/jquery_symbol_source.rb +17 -0
- data/lib/docks/symbol_sources/mdn_symbol_source.rb +35 -0
- data/lib/docks/symbol_sources/sass_symbol_source.rb +27 -0
- data/lib/docks/symbol_sources.rb +28 -0
- data/lib/docks/tags/access_tag.rb +27 -0
- data/lib/docks/tags/activate_with_tag.rb +17 -0
- data/lib/docks/tags/active_tag.rb +14 -0
- data/lib/docks/tags/alias_tag.rb +17 -0
- data/lib/docks/tags/author_tag.rb +19 -0
- data/lib/docks/tags/base_tag.rb +52 -0
- data/lib/docks/tags/beta_tag.rb +26 -0
- data/lib/docks/tags/class_tag.rb +16 -0
- data/lib/docks/tags/compatibility_tag.rb +19 -0
- data/lib/docks/tags/demo_type_tag.rb +14 -0
- data/lib/docks/tags/deprecated_tag.rb +26 -0
- data/lib/docks/tags/description_tag.rb +99 -0
- data/lib/docks/tags/example_tag.rb +20 -0
- data/lib/docks/tags/factory_tag.rb +16 -0
- data/lib/docks/tags/for_tag.rb +23 -0
- data/lib/docks/tags/group_tag.rb +10 -0
- data/lib/docks/tags/helper_tag.rb +13 -0
- data/lib/docks/tags/include_with_tag.rb +57 -0
- data/lib/docks/tags/javascript_action_tag.rb +10 -0
- data/lib/docks/tags/link_tag.rb +18 -0
- data/lib/docks/tags/markup_tag.rb +106 -0
- data/lib/docks/tags/member_tag.rb +37 -0
- data/lib/docks/tags/method_tag.rb +18 -0
- data/lib/docks/tags/name_tag.rb +10 -0
- data/lib/docks/tags/object_tag.rb +15 -0
- data/lib/docks/tags/param_tag.rb +94 -0
- data/lib/docks/tags/pattern_tag.rb +21 -0
- data/lib/docks/tags/preclude_tag.rb +17 -0
- data/lib/docks/tags/private_tag.rb +15 -0
- data/lib/docks/tags/property_tag.rb +18 -0
- data/lib/docks/tags/public_tag.rb +15 -0
- data/lib/docks/tags/require_tag.rb +47 -0
- data/lib/docks/tags/returns_tag.rb +31 -0
- data/lib/docks/tags/set_by_tag.rb +18 -0
- data/lib/docks/tags/signature_tag.rb +35 -0
- data/lib/docks/tags/since_tag.rb +26 -0
- data/lib/docks/tags/source_tag.rb +12 -0
- data/lib/docks/tags/state_tag.rb +21 -0
- data/lib/docks/tags/static_tag.rb +14 -0
- data/lib/docks/tags/subcomponent_tag.rb +68 -0
- data/lib/docks/tags/subtitle_tag.rb +11 -0
- data/lib/docks/tags/symbol_type_tag.rb +10 -0
- data/lib/docks/tags/throws_tag.rb +30 -0
- data/lib/docks/tags/title_tag.rb +10 -0
- data/lib/docks/tags/type_tag.rb +10 -0
- data/lib/docks/tags/value_tag.rb +10 -0
- data/lib/docks/tags/variant_tag.rb +21 -0
- data/lib/docks/tags/variation_tag.rb +136 -0
- data/lib/docks/tags.rb +103 -0
- data/lib/docks/templates.rb +122 -0
- data/lib/docks/themes.rb +19 -0
- data/lib/docks/types.rb +26 -0
- data/lib/docks/version.rb +3 -0
- data/lib/docks.rb +37 -0
- data/spec/fixtures/build/scripts/bar/bar_2.js +1 -0
- data/spec/fixtures/build/scripts/bar.js +1 -0
- data/spec/fixtures/build/styles/foo/foo-2.css +1 -0
- data/spec/fixtures/build/styles/foo.css +1 -0
- data/spec/fixtures/build/templates/baz/baz_2.erb +1 -0
- data/spec/fixtures/build/templates/baz.erb +1 -0
- data/spec/fixtures/grouper/components/button/button.coffee +0 -0
- data/spec/fixtures/grouper/components/button/button.haml +0 -0
- data/spec/fixtures/grouper/components/button/button.scss +0 -0
- data/spec/fixtures/grouper/components/checkbox/_checkbox.haml +0 -0
- data/spec/fixtures/grouper/components/checkbox/_checkbox.scss +0 -0
- data/spec/fixtures/grouper/components/checkbox/checkbox.coffee +0 -0
- data/spec/fixtures/grouper/components/form/form.coffee +0 -0
- data/spec/fixtures/grouper/components/form/form.m +0 -0
- data/spec/fixtures/grouper/components/form/form.scss +0 -0
- data/spec/fixtures/grouper/components/next-expanding-textarea/_next-expanding-textarea.scss +0 -0
- data/spec/fixtures/grouper/components/next-expanding-textarea/_next_expanding_textarea.coffee +0 -0
- data/spec/fixtures/grouper/components/next-expanding-textarea/next-expanding-textarea.haml +0 -0
- data/spec/fixtures/grouper/components/next-tab/next-tab.coffee +0 -0
- data/spec/fixtures/grouper/components/next-tab/next-tab.haml +0 -0
- data/spec/fixtures/grouper/components/next-tab/next-tab.scss +0 -0
- data/spec/fixtures/grouper/components/segmented control/segmented control.coffee +0 -0
- data/spec/fixtures/grouper/components/segmented control/segmented control.haml +0 -0
- data/spec/fixtures/grouper/components/segmented control/segmented control.min.html +0 -0
- data/spec/fixtures/grouper/components/segmented control/segmented control.scss +0 -0
- data/spec/fixtures/grouper/markup/list-view.haml +0 -0
- data/spec/fixtures/grouper/markup/resizable/resizable.haml +0 -0
- data/spec/fixtures/grouper/markup/toggle.haml +0 -0
- data/spec/fixtures/grouper/scripts/resizable/resizable.coffee +0 -0
- data/spec/fixtures/grouper/scripts/toggle.coffee +0 -0
- data/spec/fixtures/grouper/style/_list-view.scss +0 -0
- data/spec/fixtures/grouper/style/_toggle.scss +0 -0
- data/spec/fixtures/languages/stub.json +3 -0
- data/spec/fixtures/languages/stub.yml +2 -0
- data/spec/fixtures/parsers/coffeescript_parser_fixture_basic.coffee +20 -0
- data/spec/fixtures/parsers/coffeescript_parser_fixture_complex.coffee +80 -0
- data/spec/fixtures/parsers/css_parser_fixture_basic.css +44 -0
- data/spec/fixtures/parsers/css_parser_fixture_complex.css +120 -0
- data/spec/fixtures/parsers/javascript_parser_fixture_basic.js +27 -0
- data/spec/fixtures/parsers/javascript_parser_fixture_complex.js +85 -0
- data/spec/fixtures/parsers/sass_parser_fixture_basic.scss +39 -0
- data/spec/fixtures/parsers/sass_parser_fixture_complex.scss +149 -0
- data/spec/fixtures/parsers/stylus_parser_fixture_basic.styl +34 -0
- data/spec/fixtures/parsers/stylus_parser_fixture_complex.styl +113 -0
- data/spec/fixtures/processors/join_with_smart_line_breaks/code_blocks.txt +10 -0
- data/spec/fixtures/processors/join_with_smart_line_breaks/headings.txt +15 -0
- data/spec/fixtures/processors/join_with_smart_line_breaks/lists.txt +21 -0
- data/spec/fixtures/processors/join_with_smart_line_breaks/lists_with_nesting.txt +13 -0
- data/spec/fixtures/processors/join_with_smart_line_breaks/multiple_paragraphs.txt +11 -0
- data/spec/fixtures/renderers/helpers.rb +37 -0
- data/spec/fixtures/renderers/html_output.html +7 -0
- data/spec/fixtures/renderers/templates/layouts/application.html.erb +0 -0
- data/spec/fixtures/renderers/templates/layouts/more/subdirectory.html.erb +0 -0
- data/spec/fixtures/renderers/templates/partials/_leading_underscore.html.erb +1 -0
- data/spec/fixtures/renderers/templates/partials/more/_subdirectory.html.erb +1 -0
- data/spec/fixtures/renderers/templates/partials/partial.html.erb +0 -0
- data/spec/fixtures/renderers/templates/partials/template.html.erb +1 -0
- data/spec/fixtures/renderers/templates/template.html.erb +1 -0
- data/spec/fixtures/tags/description/button.md +24 -0
- data/spec/fixtures/tags/description/class.md +27 -0
- data/spec/fixtures/tags/description/component.md +23 -0
- data/spec/fixtures/tags/description/function.md +30 -0
- data/spec/lib/build_spec.rb +467 -0
- data/spec/lib/cache_spec.rb +175 -0
- data/spec/lib/command_line_spec.rb +77 -0
- data/spec/lib/configuration_spec.rb +180 -0
- data/spec/lib/containers/base_container_spec.rb +214 -0
- data/spec/lib/containers/class_container_spec.rb +209 -0
- data/spec/lib/containers/component_container_spec.rb +158 -0
- data/spec/lib/containers/demo_container_spec.rb +113 -0
- data/spec/lib/containers/function_container_spec.rb +116 -0
- data/spec/lib/containers/mixin_container_spec.rb +4 -0
- data/spec/lib/containers/pattern_container_spec.rb +291 -0
- data/spec/lib/containers/pattern_library_container_spec.rb +130 -0
- data/spec/lib/containers/symbol_container_spec.rb +216 -0
- data/spec/lib/containers/variable_container_spec.rb +116 -0
- data/spec/lib/containers/variation_container_spec.rb +52 -0
- data/spec/lib/containers_spec.rb +22 -0
- data/spec/lib/descriptor_spec.rb +73 -0
- data/spec/lib/group_spec.rb +151 -0
- data/spec/lib/helpers/path_helper_spec.rb +202 -0
- data/spec/lib/helpers/render_helper_spec.rb +159 -0
- data/spec/lib/helpers_spec.rb +35 -0
- data/spec/lib/languages/base_language_spec.rb +32 -0
- data/spec/lib/languages/coffeescript_language_spec.rb +52 -0
- data/spec/lib/languages/css_language_spec.rb +13 -0
- data/spec/lib/languages/erb_language_spec.rb +33 -0
- data/spec/lib/languages/haml_language_spec.rb +32 -0
- data/spec/lib/languages/javascript_language_spec.rb +54 -0
- data/spec/lib/languages/json_language_spec.rb +24 -0
- data/spec/lib/languages/less_language_spec.rb +39 -0
- data/spec/lib/languages/markup_language_spec.rb +95 -0
- data/spec/lib/languages/sass_language_spec.rb +53 -0
- data/spec/lib/languages/slim_language_spec.rb +32 -0
- data/spec/lib/languages/stylus_language_spec.rb +34 -0
- data/spec/lib/languages/yaml_language_spec.rb +24 -0
- data/spec/lib/languages_spec.rb +127 -0
- data/spec/lib/markdown_spec.rb +63 -0
- data/spec/lib/messenger_spec.rb +1 -0
- data/spec/lib/naming_conventions/bem_naming_convention_spec.rb +112 -0
- data/spec/lib/naming_conventions/suit_naming_convention_spec.rb +107 -0
- data/spec/lib/naming_conventions_spec.rb +28 -0
- data/spec/lib/ostruct_spec.rb +15 -0
- data/spec/lib/parser_spec.rb +93 -0
- data/spec/lib/parsers/base_parser_spec.rb +128 -0
- data/spec/lib/parsers/coffeescript_parser_spec.rb +184 -0
- data/spec/lib/parsers/css_parser_spec.rb +136 -0
- data/spec/lib/parsers/javascript_parser_spec.rb +216 -0
- data/spec/lib/parsers/less_parser_spec.rb +111 -0
- data/spec/lib/parsers/sass_parser_spec.rb +233 -0
- data/spec/lib/parsers/stylus_parser_spec.rb +212 -0
- data/spec/lib/process_spec.rb +96 -0
- data/spec/lib/processors_spec.rb +555 -0
- data/spec/lib/renderers/base_renderer_spec.rb +122 -0
- data/spec/lib/renderers/common_features/helperable_spec.rb +30 -0
- data/spec/lib/renderers/erb_renderer_spec.rb +119 -0
- data/spec/lib/renderers/haml_renderer_spec.rb +103 -0
- data/spec/lib/renderers/slim_renderer_spec.rb +103 -0
- data/spec/lib/symbol_sources/jquery_symbol_source_spec.rb +25 -0
- data/spec/lib/symbol_sources/mdn_symbol_source_spec.rb +40 -0
- data/spec/lib/symbol_sources/sass_symbol_source_spec.rb +39 -0
- data/spec/lib/symbol_sources_spec.rb +19 -0
- data/spec/lib/tags/access_tag_spec.rb +32 -0
- data/spec/lib/tags/activate_with_tag_spec.rb +31 -0
- data/spec/lib/tags/active_tag_spec.rb +24 -0
- data/spec/lib/tags/alias_tag_spec.rb +31 -0
- data/spec/lib/tags/author_tag_spec.rb +172 -0
- data/spec/lib/tags/base_tag_spec.rb +21 -0
- data/spec/lib/tags/beta_tag_spec.rb +52 -0
- data/spec/lib/tags/class_tag_spec.rb +29 -0
- data/spec/lib/tags/compatibility_tag_spec.rb +159 -0
- data/spec/lib/tags/demo_type_tag_spec.rb +24 -0
- data/spec/lib/tags/deprecated_tag_spec.rb +50 -0
- data/spec/lib/tags/description_tag_spec.rb +242 -0
- data/spec/lib/tags/example_tag_spec.rb +37 -0
- data/spec/lib/tags/factory_tag_spec.rb +29 -0
- data/spec/lib/tags/for_tag_spec.rb +45 -0
- data/spec/lib/tags/group_tag_spec.rb +20 -0
- data/spec/lib/tags/helper_tag_spec.rb +22 -0
- data/spec/lib/tags/include_with_tag_spec.rb +74 -0
- data/spec/lib/tags/javascript_action_tag_spec.rb +20 -0
- data/spec/lib/tags/link_tag_spec.rb +49 -0
- data/spec/lib/tags/markup_tag_spec.rb +255 -0
- data/spec/lib/tags/member_tag_spec.rb +167 -0
- data/spec/lib/tags/method_tag_spec.rb +27 -0
- data/spec/lib/tags/name_tag_spec.rb +20 -0
- data/spec/lib/tags/object_tag_spec.rb +24 -0
- data/spec/lib/tags/param_tag_spec.rb +261 -0
- data/spec/lib/tags/pattern_tag_spec.rb +49 -0
- data/spec/lib/tags/preclude_tag_spec.rb +31 -0
- data/spec/lib/tags/private_tag_spec.rb +31 -0
- data/spec/lib/tags/property_tag_spec.rb +27 -0
- data/spec/lib/tags/public_tag_spec.rb +29 -0
- data/spec/lib/tags/require_tag_spec.rb +133 -0
- data/spec/lib/tags/returns_tag_spec.rb +85 -0
- data/spec/lib/tags/set_by_tag_spec.rb +92 -0
- data/spec/lib/tags/signature_tag_spec.rb +125 -0
- data/spec/lib/tags/since_tag_spec.rb +48 -0
- data/spec/lib/tags/state_tag_spec.rb +199 -0
- data/spec/lib/tags/static_tag_spec.rb +27 -0
- data/spec/lib/tags/subcomponent_tag_spec.rb +78 -0
- data/spec/lib/tags/subtitle_tag_spec.rb +13 -0
- data/spec/lib/tags/symbol_type_tag_spec.rb +20 -0
- data/spec/lib/tags/throws_tag_spec.rb +49 -0
- data/spec/lib/tags/title_tag_spec.rb +20 -0
- data/spec/lib/tags/type_tag_spec.rb +20 -0
- data/spec/lib/tags/value_tag_spec.rb +20 -0
- data/spec/lib/tags/variant_tag_spec.rb +13 -0
- data/spec/lib/tags/variation_tag_spec.rb +154 -0
- data/spec/lib/tags_spec.rb +264 -0
- data/spec/lib/templates_spec.rb +185 -0
- data/spec/lib/themes_spec.rb +32 -0
- data/spec/spec_helper.rb +34 -0
- data/tasks/rspec.rake +7 -0
- data/tasks/rubocop.rake +8 -0
- metadata +740 -0
@@ -0,0 +1,151 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Docks do
|
4
|
+
subject { described_class }
|
5
|
+
|
6
|
+
describe ".pattern_id" do
|
7
|
+
it "returns a nil identifier when a non-string is passed" do
|
8
|
+
expect(subject.pattern_id(:nothing_to_see_here)).to be nil
|
9
|
+
end
|
10
|
+
|
11
|
+
it "uses only the extension-less, base file name" do
|
12
|
+
expect(subject.pattern_id("foo/bar/baz/button.min.css")).to eq subject.pattern_id("button")
|
13
|
+
end
|
14
|
+
|
15
|
+
it "strips leading underscores" do
|
16
|
+
expect(subject.pattern_id("_checkbox.html.erb")).to eq "checkbox"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "normalizes dashes and underscores" do
|
20
|
+
expect(subject.pattern_id("foo_bar_baz")).to eq subject.pattern_id("foo-bar-baz")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe ".pattern_id=" do
|
25
|
+
it "allows the pattern identification method to be redefined" do
|
26
|
+
built_in_identifier = subject.instance_variable_get(:@pattern_id)
|
27
|
+
subject.pattern_id = lambda { |filename| "foo" }
|
28
|
+
expect(subject.pattern_id("bar")).to eq "foo"
|
29
|
+
subject.pattern_id = built_in_identifier
|
30
|
+
end
|
31
|
+
|
32
|
+
it "does not reassign the pattern identifier unless it returns a result for a valid input" do
|
33
|
+
expect { subject.pattern_id = lambda { |file| } }.not_to change { subject.pattern_id("foo") }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe Docks::Grouper do
|
39
|
+
subject { Docks::Grouper }
|
40
|
+
|
41
|
+
before :each do
|
42
|
+
Docks::Languages.register_bundled_languages
|
43
|
+
end
|
44
|
+
|
45
|
+
describe ".group" do
|
46
|
+
it "returns an empty Hash when no paths are provided" do
|
47
|
+
expect(subject.group([])).to eq Hash.new
|
48
|
+
end
|
49
|
+
|
50
|
+
it "returns an empty Hash when the passed glob does not match any files" do
|
51
|
+
pattern = File.join(File.dirname(__FILE__), "../fixtures/grouper/components/non-existent-thing/*")
|
52
|
+
expect(subject.group(pattern)).to eq Hash.new
|
53
|
+
end
|
54
|
+
|
55
|
+
it "groups together files of the same name that match the passed globbing patterns in an Array" do
|
56
|
+
pattern = File.join(File.dirname(__FILE__), "../fixtures/grouper/components/button/*")
|
57
|
+
files = Dir.glob(pattern)
|
58
|
+
|
59
|
+
group_result = subject.group(pattern)
|
60
|
+
button_result = group_result[Docks.pattern_id(files.first)]
|
61
|
+
|
62
|
+
expect(button_result).to eq files
|
63
|
+
end
|
64
|
+
|
65
|
+
it "groups together files of the same name that match the passed globbing patterns with multiple globbing patterns, some of which do not reference actual files" do
|
66
|
+
button_pattern = File.join(File.dirname(__FILE__), "../fixtures/grouper/components/button/*")
|
67
|
+
button_files = Dir.glob(button_pattern)
|
68
|
+
pattern_non_match = File.join(File.dirname(__FILE__), "../fixtures/grouper/components/non-existent-thing/*")
|
69
|
+
|
70
|
+
group_result = subject.group([button_pattern, pattern_non_match])
|
71
|
+
button_result = group_result[Docks.pattern_id(button_files.first)]
|
72
|
+
|
73
|
+
expect(button_result).to eq button_files
|
74
|
+
end
|
75
|
+
|
76
|
+
it "groups together files of the same name that match the passed globbing patterns with multiple globbing patterns that match" do
|
77
|
+
button_pattern = File.join(File.dirname(__FILE__), "../fixtures/grouper/components/button/*")
|
78
|
+
button_files = Dir.glob(button_pattern)
|
79
|
+
|
80
|
+
tab_pattern = File.join(File.dirname(__FILE__), "../fixtures/grouper/components/next-tab/*")
|
81
|
+
tab_files = Dir.glob(tab_pattern)
|
82
|
+
|
83
|
+
group_result = subject.group([button_pattern, tab_pattern])
|
84
|
+
button_result = group_result[Docks.pattern_id(button_files.first)]
|
85
|
+
tab_result = group_result[Docks.pattern_id(tab_files.first)]
|
86
|
+
|
87
|
+
expect(button_result).to eq button_files
|
88
|
+
expect(tab_result).to eq tab_files
|
89
|
+
end
|
90
|
+
|
91
|
+
context "when components are spread across folders" do
|
92
|
+
let(:globs) do
|
93
|
+
[
|
94
|
+
File.join(File.dirname(__FILE__), "../fixtures/grouper/markup/**/*.haml"),
|
95
|
+
File.join(File.dirname(__FILE__), "../fixtures/grouper/scripts/**/*.coffee"),
|
96
|
+
File.join(File.dirname(__FILE__), "../fixtures/grouper/style/**/*.scss")
|
97
|
+
]
|
98
|
+
end
|
99
|
+
|
100
|
+
let(:result) { subject.group(globs) }
|
101
|
+
let(:expected_results) do
|
102
|
+
{
|
103
|
+
"resizable" => 2,
|
104
|
+
"list_view" => 2,
|
105
|
+
"toggle" => 3
|
106
|
+
}
|
107
|
+
end
|
108
|
+
|
109
|
+
it "groups together files in dedicated scripts/ markup/ style folders" do
|
110
|
+
expected_results.each do |group, file_count|
|
111
|
+
expect(result[group].length).to eq file_count
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
it "groups together files in dedicated scripts/ markup/ style folders and in component folders" do
|
116
|
+
globs << File.join(File.dirname(__FILE__), "../fixtures/grouper/components/button/*")
|
117
|
+
globs << File.join(File.dirname(__FILE__), "../fixtures/grouper/components/checkbox/*")
|
118
|
+
expected_results["button"] = 3
|
119
|
+
expected_results["checkbox"] = 3
|
120
|
+
|
121
|
+
result = subject.group(globs)
|
122
|
+
|
123
|
+
expected_results.each do |group, file_count|
|
124
|
+
expect(result[group].length).to eq file_count
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
describe "acceptance criteria" do
|
130
|
+
it "rejects minified files" do
|
131
|
+
pattern = File.join(File.dirname(__FILE__), "../fixtures/grouper/components/segmented control/*")
|
132
|
+
files = Dir.glob(pattern).reject! { |filename| filename =~ /\.min\..*$/ }
|
133
|
+
|
134
|
+
group_result = subject.group(pattern)
|
135
|
+
component_result = group_result[Docks.pattern_id(files.first)]
|
136
|
+
|
137
|
+
expect(component_result).to eq files
|
138
|
+
end
|
139
|
+
|
140
|
+
it "rejects files not recognized by Docks" do
|
141
|
+
pattern = File.join(File.dirname(__FILE__), "../fixtures/grouper/components/form/*")
|
142
|
+
files = Dir.glob(pattern).select! { |filename| Docks::Languages.extensions.include?(File.extname(filename)[1..-1]) }
|
143
|
+
|
144
|
+
group_result = subject.group(pattern)
|
145
|
+
component_result = group_result[Docks.pattern_id(files.first)]
|
146
|
+
|
147
|
+
expect(component_result).to eq files
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
@@ -0,0 +1,202 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Docks::Helpers::Path do
|
4
|
+
subject do
|
5
|
+
Class.new { include Docks::Helpers::Path }.new
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:pattern_library) { Docks::Containers::PatternLibrary.new }
|
9
|
+
let(:pattern) { Docks::Containers::Pattern.new(name: "foo") }
|
10
|
+
|
11
|
+
before(:each) do
|
12
|
+
Docks::Languages.register_bundled_languages
|
13
|
+
Docks.current_render_destination = Docks.config.destination + "baz/index.html"
|
14
|
+
subject.instance_variable_set(:@pattern_library, pattern_library)
|
15
|
+
subject.instance_variable_set(:@pattern, pattern)
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#docks_path" do
|
19
|
+
it "returns the anchor for a search that is found in the pattern" do
|
20
|
+
result = Docks::Containers::Symbol.new(name: "foo")
|
21
|
+
expect(pattern).to receive(:find).with("foo").and_return result
|
22
|
+
expect(subject.docks_path("foo")).to eq "##{result.symbol_id}"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns the anchor for a search that is found in the pattern library" do
|
26
|
+
result = Docks::Containers::Symbol.new(name: "foo")
|
27
|
+
expect(pattern_library).to receive(:find).with("bar").and_return OpenStruct.new(pattern: pattern, symbol: result)
|
28
|
+
expect(subject.docks_path("bar")).to eq "#{subject.relative_asset_path(subject.pattern_path(pattern))}##{result.symbol_id}"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "returns a path from the registered symbol sources if one exists" do
|
32
|
+
expect(subject.docks_path("Object")).to eq Docks::SymbolSources.path_for("Object")
|
33
|
+
end
|
34
|
+
|
35
|
+
context "when there are multiple requests for the same thing" do
|
36
|
+
it "caches the result of the same path request" do
|
37
|
+
expected = Docks::SymbolSources.path_for("Object")
|
38
|
+
expect(Docks::SymbolSources).to receive(:path_for).with("Object", anything).once.and_call_original
|
39
|
+
subject.docks_path("Object")
|
40
|
+
subject.docks_path("Object")
|
41
|
+
|
42
|
+
result = Docks::Containers::Symbol.new(name: "foo")
|
43
|
+
expect(pattern).to receive(:find).with("foo").once.and_return result
|
44
|
+
subject.docks_path("foo")
|
45
|
+
subject.docks_path("foo")
|
46
|
+
end
|
47
|
+
|
48
|
+
it "caches the results of requests that have different language options" do
|
49
|
+
sass_expected = Docks::SymbolSources.path_for("Map", language: :sass)
|
50
|
+
js_expected = Docks::SymbolSources.path_for("Map", language: :js)
|
51
|
+
|
52
|
+
expect(Docks::SymbolSources).to receive(:path_for).with("Map", language: :sass).once.and_call_original
|
53
|
+
expect(Docks::SymbolSources).to receive(:path_for).with("Map", language: :js).once.and_call_original
|
54
|
+
|
55
|
+
subject.docks_path("Map", language: :sass)
|
56
|
+
subject.docks_path("Map", language: :js)
|
57
|
+
subject.docks_path("Map", language: :sass)
|
58
|
+
subject.docks_path("Map", language: :js)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "#stylesheet_link_tag" do
|
64
|
+
let(:expected_path) { subject.relative_asset_path(Docks.config.destination + "styles/style.css").to_s }
|
65
|
+
|
66
|
+
it "returns a relative path to the stylesheet" do
|
67
|
+
output = subject.stylesheet_link_tag("style")
|
68
|
+
expect(output).to have_tag :link, with: { rel: "stylesheet", type: "text/css", href: expected_path }
|
69
|
+
end
|
70
|
+
|
71
|
+
it "doesn't duplicate the filename" do
|
72
|
+
output = subject.stylesheet_link_tag("style.css")
|
73
|
+
expect(output).to have_tag :link, with: { href: expected_path }
|
74
|
+
end
|
75
|
+
|
76
|
+
it "prints absolute paths directly" do
|
77
|
+
output = subject.stylesheet_link_tag("/foo/bar.css")
|
78
|
+
expect(output).to have_tag :link, with: { rel: "stylesheet", type: "text/css", href: "/foo/bar.css" }
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "#javascript_include_tag" do
|
83
|
+
let(:expected_path) { subject.relative_asset_path(Docks.config.destination + "scripts/script.js").to_s }
|
84
|
+
|
85
|
+
it "returns a relative path to the script" do
|
86
|
+
output = subject.javascript_include_tag("script")
|
87
|
+
expect(output).to have_tag :script, with: { src: expected_path }
|
88
|
+
end
|
89
|
+
|
90
|
+
it "doesn't duplicate the filename" do
|
91
|
+
output = subject.javascript_include_tag("script.js")
|
92
|
+
expect(output).to have_tag :script, with: { src: expected_path }
|
93
|
+
end
|
94
|
+
|
95
|
+
it "handles absolute paths" do
|
96
|
+
output = subject.javascript_include_tag("/foo/bar.css")
|
97
|
+
expect(output).to have_tag :script, with: { src: "/foo/bar.css" }
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "#relative_asset_path" do
|
102
|
+
it "returns a path relative to the current render destination" do
|
103
|
+
expect(subject.relative_asset_path(Docks.current_render_destination)).to eq Pathname.new(".")
|
104
|
+
expect(subject.relative_asset_path(Docks.current_render_destination + "foo/bar.baz")).to eq Pathname.new("foo/bar.baz")
|
105
|
+
expect(subject.relative_asset_path(Docks.current_render_destination.dirname)).to eq Pathname.new("..")
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe "#pattern_path" do
|
110
|
+
let(:expected_path) { Docks.config.destination + File.join(Docks.config.mount_at, pattern.name, "index.html") }
|
111
|
+
|
112
|
+
it "Gives the full path to a pattern's index file" do
|
113
|
+
expect(subject.pattern_path(pattern)).to eq expected_path
|
114
|
+
end
|
115
|
+
|
116
|
+
it "adds an anchor if provided" do
|
117
|
+
expect(subject.pattern_path(pattern, anchor: "bar")).to eq Pathname.new("#{expected_path.to_s}#bar")
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
describe "#compiled_style_tags" do
|
122
|
+
let(:css_filename) { "foo.css" }
|
123
|
+
|
124
|
+
it "returns nothing when the compiled assets are empty" do
|
125
|
+
expect(subject.compiled_style_tags).to be nil
|
126
|
+
|
127
|
+
Docks.configure_with(compiled_assets: [])
|
128
|
+
expect(subject.compiled_style_tags).to be nil
|
129
|
+
|
130
|
+
Docks.configure_with(compiled_assets: nil)
|
131
|
+
expect(subject.compiled_style_tags).to be nil
|
132
|
+
end
|
133
|
+
|
134
|
+
it "includes CSS assets" do
|
135
|
+
Docks.configure_with(compiled_assets: [css_filename, "bar.scss", "baz.js"])
|
136
|
+
expected = subject.stylesheet_link_tag(css_filename)
|
137
|
+
|
138
|
+
expect(subject).to receive(:stylesheet_link_tag).with(css_filename).and_call_original
|
139
|
+
|
140
|
+
expect(subject).not_to receive(:stylesheet_link_tag).with("bar.scss")
|
141
|
+
expect(subject).not_to receive(:stylesheet_link_tag).with("baz.js")
|
142
|
+
|
143
|
+
expect(subject.compiled_style_tags).to eq expected
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
describe "#compiled_script_tags" do
|
148
|
+
let(:js_filename) { "foo.js" }
|
149
|
+
|
150
|
+
it "returns nothing when the compiled assets are empty" do
|
151
|
+
expect(subject.compiled_script_tags).to be nil
|
152
|
+
|
153
|
+
Docks.configure_with(compiled_assets: [])
|
154
|
+
expect(subject.compiled_script_tags).to be nil
|
155
|
+
|
156
|
+
Docks.configure_with(compiled_assets: nil)
|
157
|
+
expect(subject.compiled_script_tags).to be nil
|
158
|
+
end
|
159
|
+
|
160
|
+
it "includes JavaScript assets" do
|
161
|
+
Docks.configure_with(compiled_assets: [js_filename, "bar.coffee", "baz.css"])
|
162
|
+
expected = subject.javascript_include_tag(js_filename)
|
163
|
+
|
164
|
+
expect(subject).to receive(:javascript_include_tag).with(js_filename).and_call_original
|
165
|
+
expect(subject).not_to receive(:javascript_include_tag).with("bar.scss")
|
166
|
+
expect(subject).not_to receive(:javascript_include_tag).with("baz.js")
|
167
|
+
|
168
|
+
expect(subject.compiled_script_tags).to eq expected
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
describe "#docks_stylesheet" do
|
173
|
+
it "returns a stylesheet link to the main stylesheet" do
|
174
|
+
expect(subject.docks_stylesheet).to eq subject.stylesheet_link_tag("docks.css")
|
175
|
+
end
|
176
|
+
|
177
|
+
it "returns a stylesheet link with the provided postfix" do
|
178
|
+
expect(subject.docks_stylesheet(:demo)).to eq subject.stylesheet_link_tag("docks-demo.css")
|
179
|
+
end
|
180
|
+
|
181
|
+
it "returns nothing when config.use_theme_assets is false" do
|
182
|
+
Docks.configure_with(use_theme_assets: false)
|
183
|
+
expect(subject.docks_stylesheet).to be nil
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
describe "#docks_javascript" do
|
188
|
+
it "returns a script tag to the main javascript file" do
|
189
|
+
expect(subject.docks_javascript).to eq subject.javascript_include_tag("docks.js")
|
190
|
+
end
|
191
|
+
|
192
|
+
it "returns a script tag with the provided postfix" do
|
193
|
+
expect(subject.docks_javascript(:demo)).to eq subject.javascript_include_tag("docks_demo.js")
|
194
|
+
end
|
195
|
+
|
196
|
+
it "returns nothing when config.use_theme_assets is false" do
|
197
|
+
Docks.configure_with(use_theme_assets: false)
|
198
|
+
expect(subject.docks_javascript).to be nil
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
@@ -0,0 +1,159 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Docks::Helpers::Render do
|
4
|
+
subject do
|
5
|
+
Class.new { include Docks::Helpers::Render }.new
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "#render_everything" do
|
9
|
+
let(:pattern) { Docks::Containers::Pattern.new(name: "foo") }
|
10
|
+
let(:component) { Docks::Containers::Component.new(name: "foo") }
|
11
|
+
before(:each) { subject.instance_variable_set(:@pattern, pattern) }
|
12
|
+
|
13
|
+
describe "markup" do
|
14
|
+
let(:markup) { "<% 5.times do %>foo<% end %>" }
|
15
|
+
let(:output) { "foo" * 5 }
|
16
|
+
before(:each) { pattern.add(:style, component) }
|
17
|
+
|
18
|
+
it "does nothing for non-symbols" do
|
19
|
+
pattern.param = OpenStruct.new(markup: markup)
|
20
|
+
expect(subject).to_not receive(:render)
|
21
|
+
subject.render_everything
|
22
|
+
end
|
23
|
+
|
24
|
+
it "does nothing for symbols without helper or markup" do
|
25
|
+
expect(subject).to_not receive(:render)
|
26
|
+
subject.render_everything
|
27
|
+
end
|
28
|
+
|
29
|
+
it "renders markup on the component" do
|
30
|
+
component.markup = markup
|
31
|
+
expect(subject).to receive(:render).with(inline: markup, layout: false).and_return(output)
|
32
|
+
subject.render_everything
|
33
|
+
expect(component.markup).to eq output
|
34
|
+
end
|
35
|
+
|
36
|
+
it "renders helper on the component" do
|
37
|
+
component.helper = markup
|
38
|
+
expect(subject).to receive(:render).with(inline: markup, layout: false).and_return(output)
|
39
|
+
subject.render_everything
|
40
|
+
expect(component.markup).to eq output
|
41
|
+
end
|
42
|
+
|
43
|
+
it "renders markup on nested variations" do
|
44
|
+
state = Docks::Containers::State.new(name: "foo--bar", markup: markup)
|
45
|
+
component.states << state
|
46
|
+
expect(subject).to receive(:render).with(inline: markup, layout: false).and_return(output)
|
47
|
+
subject.render_everything
|
48
|
+
expect(state.markup).to eq output
|
49
|
+
end
|
50
|
+
|
51
|
+
it "renders helpers on nested variations" do
|
52
|
+
state = Docks::Containers::State.new(name: "foo--bar", helper: markup)
|
53
|
+
component.states << state
|
54
|
+
expect(subject).to receive(:render).with(inline: markup, layout: false).and_return(output)
|
55
|
+
subject.render_everything
|
56
|
+
expect(state.markup).to eq output
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "description" do
|
61
|
+
let(:description) { "<% %w(foo bar baz).each do |a| %><%= a %> <% end %>" }
|
62
|
+
let(:output) { "foo bar baz" }
|
63
|
+
|
64
|
+
it "renders the pattern description" do
|
65
|
+
pattern.description = description
|
66
|
+
expect(subject).to receive(:render).with(inline: description, layout: false).and_return(output)
|
67
|
+
subject.render_everything
|
68
|
+
expect(pattern.description).to eq output
|
69
|
+
end
|
70
|
+
|
71
|
+
it "renders the description on symbols" do
|
72
|
+
component.description = description
|
73
|
+
pattern.add(:style, component)
|
74
|
+
expect(subject).to receive(:render).with(inline: description, layout: false).and_return(output)
|
75
|
+
subject.render_everything
|
76
|
+
expect(component.description).to eq output
|
77
|
+
end
|
78
|
+
|
79
|
+
it "renders the description on nested objects" do
|
80
|
+
param = Docks::OpenStruct.new(description: description)
|
81
|
+
component.params = [param]
|
82
|
+
pattern.add(:style, component)
|
83
|
+
expect(subject).to receive(:render).with(inline: description, layout: false).and_return(output)
|
84
|
+
subject.render_everything
|
85
|
+
expect(param.description).to eq output
|
86
|
+
end
|
87
|
+
|
88
|
+
it "doesn't kill the kind of object a nested object originally was" do
|
89
|
+
param = Docks::OpenStruct.new(description: description)
|
90
|
+
component.params = [param]
|
91
|
+
pattern.add(:style, component)
|
92
|
+
expect(subject).to receive(:render).with(inline: description, layout: false).and_return(output)
|
93
|
+
subject.render_everything
|
94
|
+
expect(component.params.first).to be param
|
95
|
+
end
|
96
|
+
|
97
|
+
it "renders @link declarations" do
|
98
|
+
allow(subject).to receive(:render) { |opts| opts[:inline] }
|
99
|
+
pattern.description = "foo bar <a href='@link Baz'>baz</a>"
|
100
|
+
expect(subject).to receive(:docks_path).with("Baz", hash_including(:language)).and_return("/pattern-library/baz")
|
101
|
+
subject.render_everything
|
102
|
+
expect(pattern.description).to eq "foo bar <a href='/pattern-library/baz'>baz</a>"
|
103
|
+
end
|
104
|
+
|
105
|
+
context "when there is a code block" do
|
106
|
+
before(:each) do
|
107
|
+
allow(subject).to receive(:render) { |opts| opts[:inline] }
|
108
|
+
end
|
109
|
+
|
110
|
+
let(:code_block) { "<div>\n Foo\n</div>" }
|
111
|
+
let(:language) { "html" }
|
112
|
+
let(:markdown) { Redcarpet::Markdown.new(Docks::Markdown::Renderer, fenced_code_blocks: true) }
|
113
|
+
|
114
|
+
it "renders a code block" do
|
115
|
+
pattern.description = markdown.render(markdown_code_block)
|
116
|
+
expect(subject).to receive(:docks_code_block) do |options|
|
117
|
+
expect(options[:hideable?]).to be false
|
118
|
+
expect(options[:demo?]).to be false
|
119
|
+
|
120
|
+
code = options[:code]
|
121
|
+
expect(code.length).to be 1
|
122
|
+
expect(code.first[:code].strip).to eq code_block
|
123
|
+
expect(code.first[:language]).to eq language
|
124
|
+
end
|
125
|
+
|
126
|
+
subject.render_everything
|
127
|
+
end
|
128
|
+
|
129
|
+
it "renders a code block with the a demo" do
|
130
|
+
pattern.description = markdown.render(markdown_code_block(with_demo: true))
|
131
|
+
expect(subject).to receive(:docks_code_block) do |options|
|
132
|
+
expect(options[:hideable?]).to be true
|
133
|
+
expect(options[:demo?]).to be true
|
134
|
+
end
|
135
|
+
|
136
|
+
subject.render_everything
|
137
|
+
end
|
138
|
+
|
139
|
+
it "adds a unique ID to each demo" do
|
140
|
+
pattern.description = markdown.render(markdown_code_block * 2)
|
141
|
+
|
142
|
+
ids = []
|
143
|
+
expect(subject).to receive(:docks_code_block).twice do |options|
|
144
|
+
ids.push(options[:id])
|
145
|
+
end
|
146
|
+
|
147
|
+
subject.render_everything
|
148
|
+
expect(ids).to eq ids.uniq
|
149
|
+
end
|
150
|
+
|
151
|
+
private
|
152
|
+
|
153
|
+
def markdown_code_block(options = {})
|
154
|
+
options.fetch(:with_demo, false) ? "```#{language}_demo\n#{code_block}\n```" : "```#{language}\n#{code_block}\n```\n"
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Docks::Helpers do
|
4
|
+
describe ".add_helpers_to" do
|
5
|
+
let(:renderer) { Docks::Renderers::ERB.new }
|
6
|
+
|
7
|
+
it "adds all bundled helpers" do
|
8
|
+
helpers = []
|
9
|
+
allow(renderer).to receive(:helpers) do |*args|
|
10
|
+
helpers = helpers.concat(args)
|
11
|
+
end
|
12
|
+
|
13
|
+
described_class.add_helpers_to(renderer)
|
14
|
+
|
15
|
+
described_class.constants.each do |const|
|
16
|
+
expect(helpers).to include described_class.const_get(const)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
it "adds any user-configured helpers" do
|
21
|
+
Docks.configure_with helpers: ["foo.txt", "bar.txt"]
|
22
|
+
|
23
|
+
helpers = []
|
24
|
+
allow(renderer).to receive(:helpers) do |*args|
|
25
|
+
helpers = helpers.concat(args)
|
26
|
+
end
|
27
|
+
|
28
|
+
described_class.add_helpers_to(renderer)
|
29
|
+
|
30
|
+
Docks.config.helpers.each do |helper|
|
31
|
+
expect(helpers).to include helper
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Docks::Languages::Base do
|
4
|
+
subject { Docks::Languages::Base.instance }
|
5
|
+
|
6
|
+
describe "#load_stub" do
|
7
|
+
it "doesn't do anything to load a stub file" do
|
8
|
+
expect(subject.load_stub("foo.bar")).to be nil
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe Docks::Languages do
|
14
|
+
subject { Docks::Languages }
|
15
|
+
|
16
|
+
describe ".bundled_languages" do
|
17
|
+
it "has all bundled languages except the base language" do
|
18
|
+
bundled_languages = subject.bundled_languages
|
19
|
+
|
20
|
+
subject.constants.each do |const|
|
21
|
+
klass = subject.const_get(const)
|
22
|
+
next unless Class === klass && !(klass.eql?(subject::Base))
|
23
|
+
expect(bundled_languages).to include klass
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it "caches the bundled languages for subsequent calls" do
|
28
|
+
before = subject.bundled_languages
|
29
|
+
expect(subject.bundled_languages).to be before
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Docks::Languages::CoffeeScript do
|
4
|
+
subject { Docks::Languages::CoffeeScript.instance }
|
5
|
+
|
6
|
+
describe ".extensions" do
|
7
|
+
let(:extensions) { [subject.class.extensions].flatten }
|
8
|
+
|
9
|
+
it "includes .coffee as an extension" do
|
10
|
+
expect(extensions).to include "coffee"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "includes .coffeescript as an extension" do
|
14
|
+
expect(extensions).to include "coffeescript"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#signature_for" do
|
19
|
+
let(:name) { "foo" }
|
20
|
+
let(:function_no_params) { Docks::Containers::Function.new(name: name) }
|
21
|
+
let(:function_with_params) { Docks::Containers::Function.new(name: name, params: [OpenStruct.new(name: "bar"), OpenStruct.new(name: "baz", default: "'qux'")]) }
|
22
|
+
let(:klass) { Docks::Containers::Klass.new(name: name.capitalize, params: function_with_params.params) }
|
23
|
+
let(:something_else) { Docks::Containers::Variable.new(name: "bar") }
|
24
|
+
|
25
|
+
it "gives a signature to functions with no params" do
|
26
|
+
expect(subject.signature_for(function_no_params)).to eq "#{function_no_params.name} = -> # ..."
|
27
|
+
end
|
28
|
+
|
29
|
+
it "gives a signature to functions with params, including default values" do
|
30
|
+
expect(subject.signature_for(function_with_params)).to eq "#{function_with_params.name} = (bar, baz = 'qux') -> # ..."
|
31
|
+
end
|
32
|
+
|
33
|
+
it "gives a signature for classes with params, including default values" do
|
34
|
+
expect(subject.signature_for(klass)).to eq "class #{klass.name}\n constructor: (bar, baz = 'qux') -> # ..."
|
35
|
+
end
|
36
|
+
|
37
|
+
it "gives a signature to instance methods" do
|
38
|
+
klass.add_member(function_with_params)
|
39
|
+
expect(subject.signature_for(function_with_params)).to eq "#{function_with_params.name}: (bar, baz = 'qux') -> # ..."
|
40
|
+
end
|
41
|
+
|
42
|
+
it "gives a signature to static methods" do
|
43
|
+
function_with_params.static = true
|
44
|
+
klass.add_member(function_with_params)
|
45
|
+
expect(subject.signature_for(function_with_params)).to eq "#{klass.name}.#{function_with_params.name} = (bar, baz = 'qux') -> # ..."
|
46
|
+
end
|
47
|
+
|
48
|
+
it "doesn't provide a signature for a non-function symbol" do
|
49
|
+
expect(subject.signature_for(something_else)).to be nil
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Docks::Languages::CSS do
|
4
|
+
subject { Docks::Languages::CSS.instance }
|
5
|
+
|
6
|
+
describe ".extensions" do
|
7
|
+
let(:extensions) { [subject.class.extensions].flatten }
|
8
|
+
|
9
|
+
it "includes .css as an extension" do
|
10
|
+
expect(extensions).to include "css"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Docks::Languages::ERB do
|
4
|
+
subject { Docks::Languages::ERB.instance }
|
5
|
+
|
6
|
+
describe ".extensions" do
|
7
|
+
let(:extensions) { [subject.class.extensions].flatten }
|
8
|
+
|
9
|
+
it "includes .erb as an extension" do
|
10
|
+
expect(extensions).to include "erb"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#helper_markup_for" do
|
15
|
+
let(:mixed_arguments) { ["hello", 10, false, :goodbye, { bar: "baz", "baz" => :qux }] }
|
16
|
+
let(:mixed_arguments_output) { "\"hello\", 10, false, :goodbye, bar: \"baz\",\n#{" " * 38}\"baz\" => :qux" }
|
17
|
+
let(:argumentless_hash) { { "baz" => :qux } }
|
18
|
+
let(:argumentless_hash_output) { "\"baz\" => :qux" }
|
19
|
+
|
20
|
+
it "converts an array of arguments into the corresponding function" do
|
21
|
+
expect(subject.helper_markup_for("foo", mixed_arguments)).to eq "<%= foo #{mixed_arguments_output} %>"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "converts a hash with an arguments key into the corresponding function" do
|
25
|
+
expect(subject.helper_markup_for("foo", arguments: mixed_arguments)).to eq "<%= foo #{mixed_arguments_output} %>"
|
26
|
+
end
|
27
|
+
|
28
|
+
it "converts a hash without an array key into a function with the hash as the only param" do
|
29
|
+
expect(subject.helper_markup_for("foo", argumentless_hash)).to eq "<%= foo #{argumentless_hash_output} %>"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|