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,467 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
template_dir = File.expand_path("../../../assets", __FILE__)
|
4
|
+
empty_dir = File.expand_path("../../fixtures/build/empty", __FILE__)
|
5
|
+
existing_dir = File.expand_path("../../fixtures/build/existing", __FILE__)
|
6
|
+
|
7
|
+
describe Docks::Builder do
|
8
|
+
subject { Docks::Builder }
|
9
|
+
|
10
|
+
let(:default_options) do
|
11
|
+
{
|
12
|
+
config_type: "yaml",
|
13
|
+
template_language: "erb",
|
14
|
+
style_language: "scss",
|
15
|
+
script_language: "javascript"
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
after :all do
|
20
|
+
FileUtils.rm_rf(empty_dir)
|
21
|
+
FileUtils.rm_rf(existing_dir)
|
22
|
+
end
|
23
|
+
|
24
|
+
describe ".setup" do
|
25
|
+
let(:assets_dir) { File.join(empty_dir, Docks::ASSETS_DIR) }
|
26
|
+
let(:config_dir) { File.expand_path("../../../config", __FILE__) }
|
27
|
+
|
28
|
+
around do |example|
|
29
|
+
original_dir = Dir.pwd
|
30
|
+
FileUtils.mkdir_p(empty_dir)
|
31
|
+
FileUtils.cd(empty_dir)
|
32
|
+
|
33
|
+
example.run
|
34
|
+
|
35
|
+
FileUtils.cd(original_dir)
|
36
|
+
FileUtils.rm_rf(empty_dir)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "creates a pattern library assets folder" do
|
40
|
+
subject.setup(default_options)
|
41
|
+
expect(Dir.exists?(assets_dir)).to be true
|
42
|
+
end
|
43
|
+
|
44
|
+
%w(yaml ruby json).each do |config_type|
|
45
|
+
it "creates the mustache-rendered #{config_type} config file to the current directory" do
|
46
|
+
default_options[:config_type] = config_type
|
47
|
+
original_config = Dir[File.join(config_dir, config_type, "*.*")].first
|
48
|
+
|
49
|
+
template = subject::Config.new(OpenStruct.new(default_options))
|
50
|
+
template.template = File.read(original_config).force_encoding("UTF-8")
|
51
|
+
template = template.render.gsub(/ +$/m, "")
|
52
|
+
|
53
|
+
subject.setup(default_options)
|
54
|
+
|
55
|
+
config_file = Dir[File.join(empty_dir, "*.*")].first
|
56
|
+
config = File.read(config_file).force_encoding("UTF-8")
|
57
|
+
expect(config).to eq template
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
it "does not copy the config file if one already exists" do
|
62
|
+
file = Dir[File.join(config_dir, "**/*.rb")].first
|
63
|
+
copied_file = File.join(empty_dir, File.basename(file))
|
64
|
+
FileUtils.cp(file, empty_dir)
|
65
|
+
File.open(copied_file, "w") { |file| file.write("# foo") }
|
66
|
+
|
67
|
+
subject.setup(default_options)
|
68
|
+
|
69
|
+
expect(File.read(copied_file)).to eq "# foo"
|
70
|
+
end
|
71
|
+
|
72
|
+
it "configures the pattern library with the new config file" do
|
73
|
+
expect(Docks).to receive(:configure).with no_args
|
74
|
+
subject.setup(default_options)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "still configures the pattern library when there is already a config file" do
|
78
|
+
file = Dir[File.join(config_dir, "**/*.rb")].first
|
79
|
+
copied_file = File.join(empty_dir, File.basename(file))
|
80
|
+
FileUtils.cp(file, empty_dir)
|
81
|
+
File.open(copied_file, "w") { |file| file.write("# foo") }
|
82
|
+
|
83
|
+
expect(Docks).to receive(:configure).with no_args
|
84
|
+
subject.setup(default_options)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "calls setup with configured theme" do
|
88
|
+
theme = double()
|
89
|
+
expect(Docks).to receive(:configure_with) do
|
90
|
+
Docks.configure { |config| config.theme = theme }
|
91
|
+
end
|
92
|
+
|
93
|
+
expect(theme).to receive(:setup).with(Docks::Builder)
|
94
|
+
subject.setup(default_options)
|
95
|
+
end
|
96
|
+
|
97
|
+
it "sets the theme to false when 'false' is provided" do
|
98
|
+
default_options[:theme] = "false"
|
99
|
+
subject.setup(default_options)
|
100
|
+
expect(Docks.config.theme).to be false
|
101
|
+
end
|
102
|
+
|
103
|
+
it "sets the theme to false when 'none' is provided" do
|
104
|
+
default_options[:theme] = "none"
|
105
|
+
subject.setup(default_options)
|
106
|
+
expect(Docks.config.theme).to be false
|
107
|
+
end
|
108
|
+
|
109
|
+
it "doesn't call configure with the theme if it doesn't exist" do
|
110
|
+
default_options[:theme] = "foo"
|
111
|
+
expect { subject.setup(default_options) }.not_to raise_error
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe ".add_assets" do
|
116
|
+
let(:root) { Pathname.new(File.expand_path("../../fixtures/build", __FILE__)) }
|
117
|
+
|
118
|
+
around do |example|
|
119
|
+
FileUtils.rm_rf(root + Docks::ASSETS_DIR)
|
120
|
+
Docks.configure { |config| config.root = root }
|
121
|
+
|
122
|
+
example.run
|
123
|
+
|
124
|
+
FileUtils.rm_rf(root + Docks::ASSETS_DIR)
|
125
|
+
end
|
126
|
+
|
127
|
+
%w(styles scripts templates).each do |type|
|
128
|
+
it "adds #{type} to the #{type} in the pattern library assets and annouces the root-relative location" do
|
129
|
+
source_root = root + type
|
130
|
+
|
131
|
+
destination_root = if type == "templates"
|
132
|
+
root + Docks.config.templates
|
133
|
+
else
|
134
|
+
root + File.join(Docks::ASSETS_DIR, Docks.config.asset_folders.send(type.to_sym))
|
135
|
+
end
|
136
|
+
|
137
|
+
add_assets = Dir[source_root + "**/*.*"]
|
138
|
+
allow(Docks::Messenger).to receive(:file).and_call_original
|
139
|
+
|
140
|
+
subject.add_assets(add_assets, type: type.to_sym, root: source_root)
|
141
|
+
|
142
|
+
added_assets = Dir[destination_root + "**/*.*"]
|
143
|
+
expect(added_assets.count).to be add_assets.count
|
144
|
+
added_assets.each do |asset|
|
145
|
+
asset = Pathname.new(asset)
|
146
|
+
relative_path = asset.relative_path_from(root)
|
147
|
+
original_asset = source_root + asset.relative_path_from(destination_root)
|
148
|
+
expect(FileUtils.identical?(asset, original_asset)).to be true
|
149
|
+
expect(Docks::Messenger).to have_received(:file).with(relative_path, :created)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
it "updates non-identical assets and does nothing with identical ones" do
|
155
|
+
source_root = root + "scripts"
|
156
|
+
destination_root = root + File.join(Docks::ASSETS_DIR, Docks.config.asset_folders.scripts)
|
157
|
+
add_assets = Dir[source_root + "**/*.*"]
|
158
|
+
|
159
|
+
subject.add_assets(add_assets, type: :scripts, root: source_root)
|
160
|
+
allow(Docks::Messenger).to receive(:file).and_call_original
|
161
|
+
|
162
|
+
added_assets = Dir[destination_root + "**/*.*"]
|
163
|
+
updated = Pathname.new(added_assets.pop)
|
164
|
+
original_contents = File.read(add_assets.last)
|
165
|
+
|
166
|
+
begin
|
167
|
+
File.open(add_assets.last, "w") { |file| file.write("#{original_contents} updated") }
|
168
|
+
|
169
|
+
subject.add_assets(add_assets, type: :scripts, root: source_root)
|
170
|
+
|
171
|
+
updated_relative_path = updated.relative_path_from(root)
|
172
|
+
expect(Docks::Messenger).to have_received(:file).with(updated_relative_path, :updated)
|
173
|
+
|
174
|
+
added_assets.each do |asset|
|
175
|
+
relative_path = Pathname.new(asset).relative_path_from(root)
|
176
|
+
expect(Docks::Messenger).not_to have_received(:file).with(relative_path, anything)
|
177
|
+
end
|
178
|
+
ensure
|
179
|
+
File.open(add_assets.last, "w") { |file| file.write(original_contents) }
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
describe ".parse" do
|
185
|
+
before :each do
|
186
|
+
Docks.configure_with(root: empty_dir, library_assets: "")
|
187
|
+
end
|
188
|
+
|
189
|
+
it "adds the parse function to the top-level Docks namespace" do
|
190
|
+
expect(subject).to receive(:parse)
|
191
|
+
Docks.parse
|
192
|
+
end
|
193
|
+
|
194
|
+
it "clears the cache if the clear_cache options is passed" do
|
195
|
+
expect_any_instance_of(Docks::Cache).to receive(:clear)
|
196
|
+
Docks.parse(clear_cache: true)
|
197
|
+
end
|
198
|
+
|
199
|
+
it "passes each group to Parser and the Cache" do
|
200
|
+
groups = {
|
201
|
+
foo: ["foo.scss", "foo.haml"],
|
202
|
+
bar: ["bar.scss", "bar.coffee"]
|
203
|
+
}
|
204
|
+
|
205
|
+
expect(Docks::Grouper).to receive(:group).and_return(groups)
|
206
|
+
|
207
|
+
groups.each do |id, group|
|
208
|
+
expect(Docks::Cache).to receive(:cached?).with(group).and_return(false)
|
209
|
+
expect(Docks::Parser).to receive(:parse).with(group).and_return(Docks::Containers::Pattern.new(name: "foo"))
|
210
|
+
expect_any_instance_of(Docks::Cache).to receive(:<<)
|
211
|
+
end
|
212
|
+
|
213
|
+
expect_any_instance_of(Docks::Cache).to receive(:dump)
|
214
|
+
subject.parse
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
describe ".build" do
|
219
|
+
destination = "out"
|
220
|
+
dest_dir = File.join(existing_dir, destination)
|
221
|
+
|
222
|
+
let(:patterns) do
|
223
|
+
{ "foo" => "bar", "bar" => "baz" }
|
224
|
+
end
|
225
|
+
|
226
|
+
around do |example|
|
227
|
+
original_dir = Dir.pwd
|
228
|
+
FileUtils.mkdir_p(existing_dir)
|
229
|
+
FileUtils.cd(existing_dir)
|
230
|
+
Docks::Templates.send(:clean)
|
231
|
+
Docks.configure_with(destination: destination, root: existing_dir)
|
232
|
+
|
233
|
+
default_options[:script_language] = "coffeescript"
|
234
|
+
subject.setup(default_options)
|
235
|
+
|
236
|
+
example.run
|
237
|
+
|
238
|
+
FileUtils.cd(original_dir)
|
239
|
+
FileUtils.rm_rf(existing_dir)
|
240
|
+
end
|
241
|
+
|
242
|
+
it "adds the build function to the top-level Docks namespace" do
|
243
|
+
expect(subject).to receive(:build)
|
244
|
+
Docks.build
|
245
|
+
end
|
246
|
+
|
247
|
+
it "creates the destination directory" do
|
248
|
+
subject.build
|
249
|
+
expect(Dir.exists?(File.join(existing_dir, destination))).to be true
|
250
|
+
end
|
251
|
+
|
252
|
+
it "creates the mount_at directory as the base for the pattern library files" do
|
253
|
+
mount_at = "pattern-lab"
|
254
|
+
Docks.configure { |config| config.mount_at = mount_at }
|
255
|
+
subject.build
|
256
|
+
expect(Dir.exists?(File.join(existing_dir, destination, mount_at))).to be true
|
257
|
+
end
|
258
|
+
|
259
|
+
it "copies and renames the theme stylesheets to the destination" do
|
260
|
+
allow(Docks::Grouper).to receive(:group).and_return(Hash.new)
|
261
|
+
subject.build
|
262
|
+
|
263
|
+
original_stylesheets = Docks.config.theme.styles.map { |file| File.basename(file).sub("pattern-library", "docks") }
|
264
|
+
copied_stylesheets = Dir[File.join(Docks.config.destination, Docks.config.asset_folders.styles, "*.css")].map { |file| File.basename(file) }
|
265
|
+
|
266
|
+
original_stylesheets.each do |stylesheet|
|
267
|
+
expect(copied_stylesheets).to include stylesheet
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
it "copies and renames the theme javascripts to the destination" do
|
272
|
+
allow(Docks::Grouper).to receive(:group).and_return(Hash.new)
|
273
|
+
subject.build
|
274
|
+
|
275
|
+
original_scripts = Docks.config.theme.scripts.map { |file| File.basename(file).sub("pattern_library", "docks") }
|
276
|
+
copied_scripts = Dir[File.join(Docks.config.destination, Docks.config.asset_folders.scripts, "*.js")].map { |file| File.basename(file) }
|
277
|
+
|
278
|
+
original_scripts.each do |script|
|
279
|
+
expect(copied_scripts).to include script
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
it "copies bundled assets only when changed" do
|
284
|
+
allow(Docks::Grouper).to receive(:group).and_return(Hash.new)
|
285
|
+
subject.build
|
286
|
+
|
287
|
+
assets = Dir[File.join(Docks.config.destination + "**/*.{css,js}")]
|
288
|
+
|
289
|
+
first, rest = assets.first, assets[1..-1]
|
290
|
+
File.open(first, "a") { |file| file.puts("foo") }
|
291
|
+
expect(FileUtils).to receive(:cp).with(anything, first)
|
292
|
+
rest.each { |other| expect(FileUtils).not_to receive(:cp).with(anything, other) }
|
293
|
+
|
294
|
+
subject.build
|
295
|
+
end
|
296
|
+
|
297
|
+
it "copies bundled assets only when a theme is specified" do
|
298
|
+
allow(Docks::Grouper).to receive(:group).and_return(Hash.new)
|
299
|
+
Docks.configure_with(theme: false)
|
300
|
+
expect(FileUtils).not_to receive(:cp)
|
301
|
+
subject.build
|
302
|
+
end
|
303
|
+
|
304
|
+
context "when pagination is specified" do
|
305
|
+
it "writes a file for each pattern" do
|
306
|
+
files = {}
|
307
|
+
expect(Docks::Grouper).to receive(:group).and_return(patterns)
|
308
|
+
|
309
|
+
patterns.each do |id, group|
|
310
|
+
expect(Docks::Cache).to receive(:pattern_for?).with(id).and_return true
|
311
|
+
expect(Docks::Cache).to receive(:pattern_for).with(id).and_return(OpenStruct.new(name: id))
|
312
|
+
|
313
|
+
renderer = double(render: group, :ivars= => nil)
|
314
|
+
expect(Docks::Renderers::ERB).to receive(:new).and_return(renderer)
|
315
|
+
expect(Docks::Helpers).to receive(:add_helpers_to).with(renderer)
|
316
|
+
files[id] = { file: File.join(dest_dir, Docks.config.mount_at, id.to_s, "index.html"), content: group }
|
317
|
+
end
|
318
|
+
|
319
|
+
subject.build
|
320
|
+
|
321
|
+
files.each do |id, details|
|
322
|
+
expect(File.exists?(details[:file])).to be true
|
323
|
+
expect(File.read(details[:file]).strip).to eq details[:content]
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
# Gross tests, must refactor
|
328
|
+
it "only writes a file for each pattern on change" do
|
329
|
+
allow(Docks::Grouper).to receive(:group).and_return(patterns)
|
330
|
+
|
331
|
+
patterns.each do |id, group|
|
332
|
+
expect(Docks::Cache).to receive(:pattern_for?).with(id).and_return true
|
333
|
+
expect(Docks::Cache).to receive(:pattern_for).with(id).and_return(OpenStruct.new(name: id))
|
334
|
+
|
335
|
+
renderer = double(render: group, :ivars= => nil)
|
336
|
+
expect(Docks::Renderers::ERB).to receive(:new).and_return(renderer)
|
337
|
+
expect(Docks::Helpers).to receive(:add_helpers_to).with(renderer)
|
338
|
+
end
|
339
|
+
|
340
|
+
subject.build
|
341
|
+
|
342
|
+
patterns.each do |id, group|
|
343
|
+
expect(Docks::Cache).to receive(:pattern_for?).with(id).and_return true
|
344
|
+
expect(Docks::Cache).to receive(:pattern_for).with(id).and_return(OpenStruct.new(name: id))
|
345
|
+
|
346
|
+
renderer = double(render: group, :ivars= => nil)
|
347
|
+
expect(Docks::Renderers::ERB).to receive(:new).and_return(renderer)
|
348
|
+
expect(Docks::Helpers).to receive(:add_helpers_to).with(renderer)
|
349
|
+
expect(FileUtils).not_to receive(:cp).with(anything, File.join(dest_dir, Docks.config.mount_at, id.to_s, "index.html"))
|
350
|
+
end
|
351
|
+
|
352
|
+
subject.build
|
353
|
+
end
|
354
|
+
|
355
|
+
it "removes patterns that are no longer part of the pattern group" do
|
356
|
+
files = {}
|
357
|
+
expect(Docks::Grouper).to receive(:group).and_return(patterns)
|
358
|
+
|
359
|
+
patterns.each do |id, group|
|
360
|
+
expect(Docks::Cache).to receive(:pattern_for?).with(id).and_return true
|
361
|
+
expect(Docks::Cache).to receive(:pattern_for).with(id).and_return(OpenStruct.new(name: id))
|
362
|
+
|
363
|
+
renderer = double(render: group, :ivars= => nil)
|
364
|
+
expect(Docks::Renderers::ERB).to receive(:new).and_return(renderer)
|
365
|
+
expect(Docks::Helpers).to receive(:add_helpers_to).with(renderer)
|
366
|
+
files[id] = { file: File.join(dest_dir, Docks.config.mount_at, id.to_s, "index.html"), content: group }
|
367
|
+
end
|
368
|
+
|
369
|
+
subject.build
|
370
|
+
|
371
|
+
files = {}
|
372
|
+
excluded_pattern = patterns.keys.first
|
373
|
+
patterns.delete(excluded_pattern)
|
374
|
+
expect(Docks::Grouper).to receive(:group).and_return(patterns)
|
375
|
+
|
376
|
+
patterns.each do |id, group|
|
377
|
+
expect(Docks::Cache).to receive(:pattern_for?).with(id).and_return true
|
378
|
+
expect(Docks::Cache).to receive(:pattern_for).with(id).and_return(OpenStruct.new(name: id))
|
379
|
+
|
380
|
+
renderer = double(render: group, :ivars= => nil)
|
381
|
+
expect(Docks::Renderers::ERB).to receive(:new).and_return(renderer)
|
382
|
+
expect(Docks::Helpers).to receive(:add_helpers_to).with(renderer)
|
383
|
+
files[id] = { file: File.join(dest_dir, Docks.config.mount_at, id.to_s, "index.html"), content: group }
|
384
|
+
end
|
385
|
+
|
386
|
+
subject.build
|
387
|
+
|
388
|
+
files.each do |id, details|
|
389
|
+
expect(File.exists?(details[:file])).to be true
|
390
|
+
expect(File.read(details[:file]).strip).to eq details[:content]
|
391
|
+
end
|
392
|
+
|
393
|
+
expect(File.exists?(File.join(dest_dir, Docks.config.mount_at, excluded_pattern.to_s, "index.html"))).to be false
|
394
|
+
end
|
395
|
+
|
396
|
+
it "provides the pattern and pattern library to every render call as locals and ivars" do
|
397
|
+
pattern_library = Docks::Containers::PatternLibrary.new
|
398
|
+
|
399
|
+
expect(Docks::Grouper).to receive(:group).and_return(patterns)
|
400
|
+
expect(Docks::Cache).to receive(:pattern_library).and_return(pattern_library)
|
401
|
+
expect(pattern_library).to receive(:summarize!)
|
402
|
+
patterns.each do |id, group|
|
403
|
+
pattern = OpenStruct.new(name: id)
|
404
|
+
|
405
|
+
default_template = Docks::Templates.fallback
|
406
|
+
expect(Docks::Templates).to receive(:search_for_template).with(default_template.layout, must_be: :layout).and_return "application.erb"
|
407
|
+
expect(Docks::Templates).to receive(:search_for_template).with(default_template.path).and_return "pattern.erb"
|
408
|
+
expect(Docks::Cache).to receive(:pattern_for?).with(id).and_return true
|
409
|
+
expect(Docks::Cache).to receive(:pattern_for).with(id).and_return(pattern)
|
410
|
+
|
411
|
+
renderer = double()
|
412
|
+
expect(Docks::Renderers::ERB).to receive(:new).and_return(renderer)
|
413
|
+
expect(Docks::Helpers).to receive(:add_helpers_to).with(renderer)
|
414
|
+
expect(renderer).to receive(:ivars=).with pattern_library: pattern_library, pattern: pattern
|
415
|
+
expect(renderer).to receive(:render).with anything, hash_including(locals: { pattern_library: pattern_library, pattern: pattern })
|
416
|
+
end
|
417
|
+
|
418
|
+
subject.build
|
419
|
+
end
|
420
|
+
|
421
|
+
it "doesn't die when there are no cache results matching a pattern" do
|
422
|
+
expect(Docks::Grouper).to receive(:group).and_return(patterns)
|
423
|
+
patterns.each do |id, group|
|
424
|
+
expect { Docks::Cache.pattern_for(id) }.to raise_error(Docks::NoPatternError)
|
425
|
+
end
|
426
|
+
|
427
|
+
subject.build
|
428
|
+
end
|
429
|
+
end
|
430
|
+
|
431
|
+
context "when no pagination is specified" do
|
432
|
+
before(:each) do
|
433
|
+
Docks.configure_with(paginate: false)
|
434
|
+
end
|
435
|
+
|
436
|
+
let(:expected_file) do
|
437
|
+
Docks.config.destination + "#{Docks.config.mount_at}/index.html"
|
438
|
+
end
|
439
|
+
|
440
|
+
it "writes the pattern library file" do
|
441
|
+
renderer = double(render: "foo", :ivars= => nil)
|
442
|
+
expect(Docks::Renderers::ERB).to receive(:new).and_return(renderer)
|
443
|
+
expect(Docks::Helpers).to receive(:add_helpers_to).with(renderer)
|
444
|
+
|
445
|
+
subject.build
|
446
|
+
|
447
|
+
expect(File.exists?(expected_file)).to be true
|
448
|
+
expect(File.read(expected_file)).to eq "foo"
|
449
|
+
end
|
450
|
+
|
451
|
+
it "receives the full pattern library as ivars and locals" do
|
452
|
+
pattern_library = Docks::Containers::PatternLibrary.new
|
453
|
+
renderer = double(render: "foo", :ivars= => nil)
|
454
|
+
locals = { pattern_library: pattern_library, pattern: nil }
|
455
|
+
|
456
|
+
expect(pattern_library).not_to receive(:summarize!)
|
457
|
+
expect(Docks::Cache).to receive(:pattern_library).and_return(pattern_library)
|
458
|
+
expect(Docks::Renderers::ERB).to receive(:new).and_return(renderer)
|
459
|
+
expect(Docks::Helpers).to receive(:add_helpers_to).with(renderer)
|
460
|
+
expect(renderer).to receive(:ivars=).with(locals)
|
461
|
+
expect(renderer).to receive(:render).with anything, hash_including(locals: locals)
|
462
|
+
|
463
|
+
subject.build
|
464
|
+
end
|
465
|
+
end
|
466
|
+
end
|
467
|
+
end
|
@@ -0,0 +1,175 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Docks::Cache do
|
4
|
+
subject { described_class.new }
|
5
|
+
|
6
|
+
let(:name) { "button" }
|
7
|
+
|
8
|
+
let(:pattern) do
|
9
|
+
pattern = Docks::Containers::Pattern.new(name: name)
|
10
|
+
pattern.add(:script, Docks::Containers::Symbol.new(pattern: name.upcase))
|
11
|
+
pattern.modified = Date.new
|
12
|
+
pattern
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:root) {
|
16
|
+
File.expand_path("../../fixtures/cache", __FILE__)
|
17
|
+
}
|
18
|
+
|
19
|
+
let(:cache_file) {
|
20
|
+
File.expand_path(name, Docks.config.cache_location)
|
21
|
+
}
|
22
|
+
|
23
|
+
around do |example|
|
24
|
+
Docks.configure { |config| config.root = root }
|
25
|
+
example.run
|
26
|
+
FileUtils.rm_rf(root)
|
27
|
+
end
|
28
|
+
|
29
|
+
describe ".pattern_for" do
|
30
|
+
it "sends the cached parse patterns back when it exists" do
|
31
|
+
subject << pattern
|
32
|
+
subject.dump
|
33
|
+
expect(described_class.pattern_for(name)).to eq pattern
|
34
|
+
end
|
35
|
+
|
36
|
+
it "throws an error when no such pattern exists" do
|
37
|
+
expect { described_class.pattern_for("foo") }.to raise_error Docks::NoPatternError
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe ".cached?" do
|
42
|
+
let(:file) { "#{name}.scss" }
|
43
|
+
|
44
|
+
around do |example|
|
45
|
+
File.open(file, "w") { |file| file.write("") }
|
46
|
+
example.run
|
47
|
+
FileUtils.rm(file)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "is false when there is no cached pattern" do
|
51
|
+
expect(described_class.cached?(name)).to be false
|
52
|
+
end
|
53
|
+
|
54
|
+
it "is false when there is a more-recently modified cache file than the newest source file" do
|
55
|
+
subject << pattern
|
56
|
+
subject.dump
|
57
|
+
expect(File).to receive(:mtime).with(Docks.config.cache_location + name).and_return Time.now + 1000
|
58
|
+
expect(File).to receive(:mtime).with(file).and_return Time.now
|
59
|
+
expect(described_class.cached?(file)).to be true
|
60
|
+
end
|
61
|
+
|
62
|
+
it "is false when there is a more-recently modified source file than the cache" do
|
63
|
+
subject << pattern
|
64
|
+
subject.dump
|
65
|
+
expect(File).to receive(:mtime).with(Docks.config.cache_location + name).and_return Time.now
|
66
|
+
expect(File).to receive(:mtime).with(file).and_return Time.now + 1000
|
67
|
+
expect(described_class.cached?(file)).to be false
|
68
|
+
end
|
69
|
+
|
70
|
+
it "uses the most recently modified file" do
|
71
|
+
file_two ="#{name}-2.scss"
|
72
|
+
File.open(file_two, "w") { |file| file.write("") }
|
73
|
+
subject << pattern
|
74
|
+
subject.dump
|
75
|
+
|
76
|
+
expect(File).to receive(:mtime).with(Docks.config.cache_location + name).and_return Time.now
|
77
|
+
expect(File).to receive(:mtime).with(file).and_return Time.now + 1000
|
78
|
+
expect(File).to receive(:mtime).with(file_two).and_return Time.now - 1000
|
79
|
+
expect(described_class.cached?([file, file_two])).to be false
|
80
|
+
|
81
|
+
FileUtils.rm(file_two)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "#initialize" do
|
86
|
+
it "leaves the cache alone when the last cache was on the same version" do
|
87
|
+
subject << pattern
|
88
|
+
subject.dump
|
89
|
+
|
90
|
+
expect_any_instance_of(described_class).to_not receive(:clear)
|
91
|
+
second_instance = described_class.new
|
92
|
+
second_instance << pattern
|
93
|
+
second_instance.dump
|
94
|
+
end
|
95
|
+
|
96
|
+
it "clears the cache when a change of version happens" do
|
97
|
+
subject << pattern
|
98
|
+
subject.dump
|
99
|
+
|
100
|
+
old_version = Docks.send(:remove_const, :VERSION)
|
101
|
+
Docks.const_set(:VERSION, "#{old_version}.1")
|
102
|
+
|
103
|
+
expect_any_instance_of(described_class).to receive(:clear)
|
104
|
+
second_instance = described_class.new
|
105
|
+
second_instance << pattern
|
106
|
+
second_instance.dump
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "#clear" do
|
111
|
+
it "removes all cache files" do
|
112
|
+
FileUtils.mkdir_p Docks.config.cache_location
|
113
|
+
File.open(cache_file, "w") { |file| file.write("") }
|
114
|
+
|
115
|
+
expect(Dir[Docks.config.cache_location + "*"]).to_not be_empty
|
116
|
+
subject.clear
|
117
|
+
expect(Dir[Docks.config.cache_location + "*"]).to be_empty
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
describe "#<<" do
|
122
|
+
it "writes the contents of a parse pattern to the corresponding cache file on dump" do
|
123
|
+
subject << pattern
|
124
|
+
subject.dump
|
125
|
+
expect(Marshal::load(File.read(cache_file))).to eq pattern
|
126
|
+
end
|
127
|
+
|
128
|
+
it "doesn't cache a pattern that is invalid" do
|
129
|
+
expect(pattern).to receive(:valid?).and_return false
|
130
|
+
subject << pattern
|
131
|
+
expect(File.exists?(cache_file)).to be false
|
132
|
+
subject.dump
|
133
|
+
expect(described_class.pattern_library[name]).to be nil
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
describe "#dump" do
|
138
|
+
it "collects the sumarized details for each pattern added to the cache" do
|
139
|
+
expect_any_instance_of(Docks::Containers::PatternLibrary).to receive(:<<).with(pattern).and_call_original
|
140
|
+
subject << pattern
|
141
|
+
end
|
142
|
+
|
143
|
+
it "calls the final processors on the pattern library" do
|
144
|
+
expect(Docks::Process).to receive(:process).with an_instance_of(Docks::Containers::PatternLibrary)
|
145
|
+
subject.dump
|
146
|
+
end
|
147
|
+
|
148
|
+
it "adds the summarized details to the pattern library" do
|
149
|
+
subject << pattern
|
150
|
+
subject.dump
|
151
|
+
expect(described_class.pattern_library[name]).to eq pattern.summary
|
152
|
+
end
|
153
|
+
|
154
|
+
it "removes any cache patterns that are no longer used" do
|
155
|
+
subject << pattern
|
156
|
+
subject.dump
|
157
|
+
|
158
|
+
second_instance = described_class.new
|
159
|
+
second_instance.dump
|
160
|
+
|
161
|
+
expect(File.exists?(cache_file)).to be false
|
162
|
+
end
|
163
|
+
|
164
|
+
it "doesn't remove cache patterns that simply had no updates" do
|
165
|
+
subject << pattern
|
166
|
+
subject.dump
|
167
|
+
|
168
|
+
second_instance = described_class.new
|
169
|
+
second_instance.no_update(pattern.name)
|
170
|
+
second_instance.dump
|
171
|
+
|
172
|
+
expect(File.exists?(cache_file)).to be true
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|