middleman-presentation-core 0.16.0.alpha
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rdebugrc +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +52 -0
- data/.simplecov +25 -0
- data/.yardopts +5 -0
- data/Guardfile +13 -0
- data/LICENSE.software +21 -0
- data/Rakefile +200 -0
- data/config/license_finder.yml +13 -0
- data/cucumber.yml +2 -0
- data/doc/licenses/dependencies.csv +55 -0
- data/doc/licenses/dependencies.db +0 -0
- data/doc/licenses/dependencies.html +1415 -0
- data/doc/licenses/dependencies.md +603 -0
- data/doc/licenses/dependencies_detailed.csv +190 -0
- data/doc/yard/.keep +0 -0
- data/features/build_presentation.feature +62 -0
- data/features/code_highlighting.feature +43 -0
- data/features/components.feature +29 -0
- data/features/create_plugin-cli.feature +11 -0
- data/features/create_presentation-cli.feature +349 -0
- data/features/create_slide-cli.feature +188 -0
- data/features/create_slides-templates-cli.feature +114 -0
- data/features/create_theme-cli.feature +58 -0
- data/features/default_slides.feature +58 -0
- data/features/edit_slide-cli.feature +121 -0
- data/features/export_presentation-cli.feature +23 -0
- data/features/grouping_slides.feature +150 -0
- data/features/ignore_slides.feature +103 -0
- data/features/init_application-cli.feature +59 -0
- data/features/init_predefined_slides.feature +9 -0
- data/features/language_detection.feature +0 -0
- data/features/list_assets-cli.feature +13 -0
- data/features/list_components-cli.feature +13 -0
- data/features/list_helpers-cli.feature +13 -0
- data/features/list_plugins-cli.feature +13 -0
- data/features/list_styles-cli.feature +17 -0
- data/features/plugins.feature +63 -0
- data/features/presentation.feature +57 -0
- data/features/rename_slide-cli.feature +176 -0
- data/features/render_slides.feature +76 -0
- data/features/show_config-cli.feature +25 -0
- data/features/show_footer.feature +14 -0
- data/features/show_slide_number.feature +31 -0
- data/features/show_support_information-cli.feature +12 -0
- data/features/support/aruba.rb +18 -0
- data/features/support/ci.rb +3 -0
- data/features/support/env.rb +25 -0
- data/features/support/fixtures.rb +21 -0
- data/features/support/hash.rb +2 -0
- data/features/support/reporting.rb +2 -0
- data/features/version_number.feature +15 -0
- data/fixtures/middleman-presentation-simple_plugin/Rakefile +1 -0
- data/fixtures/middleman-presentation-simple_plugin/lib/middleman-presentation-plugin.rb +0 -0
- data/fixtures/middleman-presentation-simple_plugin/lib/middleman-presentation-simple_plugin/helpers.rb +13 -0
- data/fixtures/middleman-presentation-simple_plugin/lib/middleman-presentation-simple_plugin/plugin.rb +34 -0
- data/fixtures/middleman-presentation-simple_plugin/lib/middleman-presentation-simple_plugin/version.rb +8 -0
- data/fixtures/middleman-presentation-simple_plugin/lib/middleman-presentation-simple_plugin.rb +11 -0
- data/fixtures/middleman-presentation-simple_plugin/middleman-presentation-simple_plugin.gemspec +22 -0
- data/fixtures/middleman-presentation-simple_plugin/vendor/assets/stylesheets/test_simple.scss +3 -0
- data/lib/middleman-presentation-core/application_config.rb +198 -0
- data/lib/middleman-presentation-core/asset.rb +103 -0
- data/lib/middleman-presentation-core/asset_component.rb +34 -0
- data/lib/middleman-presentation-core/asset_list.rb +84 -0
- data/lib/middleman-presentation-core/asset_store.rb +73 -0
- data/lib/middleman-presentation-core/assets_loader.rb +95 -0
- data/lib/middleman-presentation-core/assets_manager.rb +73 -0
- data/lib/middleman-presentation-core/cache.rb +49 -0
- data/lib/middleman-presentation-core/cli/base.rb +30 -0
- data/lib/middleman-presentation-core/cli/base_group.rb +11 -0
- data/lib/middleman-presentation-core/cli/build.rb +13 -0
- data/lib/middleman-presentation-core/cli/build_presentation.rb +57 -0
- data/lib/middleman-presentation-core/cli/change.rb +13 -0
- data/lib/middleman-presentation-core/cli/change_slide.rb +82 -0
- data/lib/middleman-presentation-core/cli/create.rb +16 -0
- data/lib/middleman-presentation-core/cli/create_plugin.rb +62 -0
- data/lib/middleman-presentation-core/cli/create_presentation.rb +300 -0
- data/lib/middleman-presentation-core/cli/create_slide.rb +52 -0
- data/lib/middleman-presentation-core/cli/create_theme.rb +81 -0
- data/lib/middleman-presentation-core/cli/edit.rb +13 -0
- data/lib/middleman-presentation-core/cli/edit_slide.rb +49 -0
- data/lib/middleman-presentation-core/cli/export.rb +11 -0
- data/lib/middleman-presentation-core/cli/export_presentation.rb +55 -0
- data/lib/middleman-presentation-core/cli/init.rb +12 -0
- data/lib/middleman-presentation-core/cli/init_application.rb +48 -0
- data/lib/middleman-presentation-core/cli/init_predefined_slides.rb +31 -0
- data/lib/middleman-presentation-core/cli/list.rb +66 -0
- data/lib/middleman-presentation-core/cli/reset_thor.rb +18 -0
- data/lib/middleman-presentation-core/cli/runner.rb +47 -0
- data/lib/middleman-presentation-core/cli/serve.rb +13 -0
- data/lib/middleman-presentation-core/cli/serve_presentation.rb +30 -0
- data/lib/middleman-presentation-core/cli/shared.rb +51 -0
- data/lib/middleman-presentation-core/cli/show.rb +70 -0
- data/lib/middleman-presentation-core/comparable_slide.rb +69 -0
- data/lib/middleman-presentation-core/component.rb +86 -0
- data/lib/middleman-presentation-core/components_manager.rb +96 -0
- data/lib/middleman-presentation-core/configuration_file.rb +15 -0
- data/lib/middleman-presentation-core/css_class_extracter.rb +41 -0
- data/lib/middleman-presentation-core/custom_template.rb +15 -0
- data/lib/middleman-presentation-core/erb_template.rb +15 -0
- data/lib/middleman-presentation-core/errors.rb +10 -0
- data/lib/middleman-presentation-core/existing_slide.rb +92 -0
- data/lib/middleman-presentation-core/frontend_component.rb +75 -0
- data/lib/middleman-presentation-core/group_template.rb +15 -0
- data/lib/middleman-presentation-core/helpers_manager.rb +37 -0
- data/lib/middleman-presentation-core/ignore_file.rb +52 -0
- data/lib/middleman-presentation-core/liquid_template.rb +15 -0
- data/lib/middleman-presentation-core/list.rb +7 -0
- data/lib/middleman-presentation-core/locale_configurator.rb +84 -0
- data/lib/middleman-presentation-core/logger.rb +8 -0
- data/lib/middleman-presentation-core/main.rb +55 -0
- data/lib/middleman-presentation-core/markdown_template.rb +15 -0
- data/lib/middleman-presentation-core/middleman_environment.rb +108 -0
- data/lib/middleman-presentation-core/middleman_extension.rb +12 -0
- data/lib/middleman-presentation-core/middleman_step_definitions.rb +131 -0
- data/lib/middleman-presentation-core/new_slide.rb +140 -0
- data/lib/middleman-presentation-core/overwrite_sass.rb +22 -0
- data/lib/middleman-presentation-core/plugin.rb +8 -0
- data/lib/middleman-presentation-core/plugin_api.rb +65 -0
- data/lib/middleman-presentation-core/plugins_manager.rb +7 -0
- data/lib/middleman-presentation-core/predefined_slide_templates_directory.rb +15 -0
- data/lib/middleman-presentation-core/presentation_helper.rb +69 -0
- data/lib/middleman-presentation-core/register_extension.rb +4 -0
- data/lib/middleman-presentation-core/roles/comparable_by_name.rb +24 -0
- data/lib/middleman-presentation-core/slide_group.rb +33 -0
- data/lib/middleman-presentation-core/slide_list.rb +52 -0
- data/lib/middleman-presentation-core/slide_name.rb +61 -0
- data/lib/middleman-presentation-core/start.rb +68 -0
- data/lib/middleman-presentation-core/step_definitions.rb +238 -0
- data/lib/middleman-presentation-core/syntax_highlighter.rb +42 -0
- data/lib/middleman-presentation-core/test_helpers.rb +22 -0
- data/lib/middleman-presentation-core/transformers/file_keeper.rb +13 -0
- data/lib/middleman-presentation-core/transformers/group_slides.rb +34 -0
- data/lib/middleman-presentation-core/transformers/ignore_slides.rb +28 -0
- data/lib/middleman-presentation-core/transformers/remove_duplicate_slides.rb +32 -0
- data/lib/middleman-presentation-core/transformers/sort_slides.rb +13 -0
- data/lib/middleman-presentation-core/utils.rb +40 -0
- data/lib/middleman-presentation-core/version.rb +8 -0
- data/lib/middleman-presentation-core.rb +127 -0
- data/locales/de.yml +233 -0
- data/locales/en.yml +236 -0
- data/middleman-presentation-core.gemspec +40 -0
- data/source/slides/01.html.liquid +0 -0
- data/spec/asset_component_spec.rb +13 -0
- data/spec/asset_list_spec.rb +50 -0
- data/spec/asset_spec.rb +45 -0
- data/spec/asset_store_spec.rb +61 -0
- data/spec/assets_manager_spec.rb +111 -0
- data/spec/components_manager_spec.rb +142 -0
- data/spec/css_class_extracter_spec.rb +28 -0
- data/spec/existing_slide_spec.rb +177 -0
- data/spec/frontend_component_spec.rb +94 -0
- data/spec/helpers_manager_spec.rb +90 -0
- data/spec/ignore_file_spec.rb +75 -0
- data/spec/new_slide_spec.rb +155 -0
- data/spec/presentation_helper_spec.rb +137 -0
- data/spec/shared_examples/.keep +0 -0
- data/spec/slide_group_spec.rb +54 -0
- data/spec/slide_list_spec.rb +125 -0
- data/spec/slide_name_spec.rb +53 -0
- data/spec/spec_helper.rb +19 -0
- data/spec/support/aruba.rb +53 -0
- data/spec/support/ci.rb +20 -0
- data/spec/support/environment.rb +18 -0
- data/spec/support/filesystem.rb +22 -0
- data/spec/support/locale.rb +2 -0
- data/spec/support/reporting.rb +2 -0
- data/spec/support/rspec.rb +9 -0
- data/spec/support/string.rb +2 -0
- data/spec/transformers/file_keeper_spec.rb +24 -0
- data/spec/transformers/group_slides_spec.rb +44 -0
- data/spec/transformers/ignore_slides_spec.rb +64 -0
- data/spec/transformers/remove_duplicate_slides_spec.rb +120 -0
- data/spec/transformers/sort_slides_spec.rb +17 -0
- data/spec/utils_spec.rb +14 -0
- data/templates/.bowerrc.tt +4 -0
- data/templates/.gitignore +5 -0
- data/templates/Gemfile.tt +32 -0
- data/templates/LICENSE.presentation +1 -0
- data/templates/Rakefile +59 -0
- data/templates/bower.json.tt +8 -0
- data/templates/bundler_config.tt +6 -0
- data/templates/config.rb.tt +2 -0
- data/templates/config.yaml.tt +17 -0
- data/templates/gitignore.tt +14 -0
- data/templates/plugin/%plugin_name%.gemspec.tt +24 -0
- data/templates/plugin/.gitignore +13 -0
- data/templates/plugin/Gemfile.tt +4 -0
- data/templates/plugin/LICENSE.txt.tt +22 -0
- data/templates/plugin/README.md.tt +31 -0
- data/templates/plugin/Rakefile +1 -0
- data/templates/plugin/lib/%plugin_name%/version.rb.tt +8 -0
- data/templates/plugin/lib/%plugin_name%.rb.tt +10 -0
- data/templates/predefined_slides.d/00_00.html.erb.tt +26 -0
- data/templates/predefined_slides.d/00_01.html.md.tt +6 -0
- data/templates/predefined_slides.d/999980.html.erb.tt +4 -0
- data/templates/predefined_slides.d/999981.html.erb.tt +27 -0
- data/templates/predefined_slides.d/999982.html.erb.tt +4 -0
- data/templates/presentation_theme/bower.json.tt +20 -0
- data/templates/presentation_theme/images/.keep +0 -0
- data/templates/presentation_theme/javascripts/%theme_name%.js.tt +0 -0
- data/templates/presentation_theme/stylesheets/%theme_name%.scss.tt +9 -0
- data/templates/presentation_theme/stylesheets/_fonts.scss.tt +0 -0
- data/templates/presentation_theme/stylesheets/_images.scss.tt +5 -0
- data/templates/presentation_theme/stylesheets/_theme.scss.tt +251 -0
- data/templates/rackup.config.erb +16 -0
- data/templates/script/bootstrap +5 -0
- data/templates/script/build +3 -0
- data/templates/script/export +3 -0
- data/templates/script/presentation +3 -0
- data/templates/script/slide +3 -0
- data/templates/script/start +43 -0
- data/templates/slides/custom.md.tt +3 -0
- data/templates/slides/erb.tt +5 -0
- data/templates/slides/group.tt +3 -0
- data/templates/slides/liquid.tt +5 -0
- data/templates/slides/markdown.tt +3 -0
- data/templates/source/index.html.erb +1 -0
- data/templates/source/javascripts/application.js.tt +3 -0
- data/templates/source/layout.erb +133 -0
- data/templates/source/stylesheets/application.scss.tt +3 -0
- metadata +574 -0
@@ -0,0 +1,125 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe SlideList do
|
5
|
+
|
6
|
+
context '#initialize' do
|
7
|
+
it 'requires a list of patterns' do
|
8
|
+
slide = double('Middleman::Presentation::NewSlide')
|
9
|
+
allow(slide).to receive(:name).and_return '01'
|
10
|
+
|
11
|
+
slide_builder = double('Middleman::Presentation::NewSlide')
|
12
|
+
allow(slide_builder).to receive(:new).and_return slide
|
13
|
+
|
14
|
+
expect do
|
15
|
+
SlideList.new('01', slide_builder: slide_builder)
|
16
|
+
end.not_to raise_error
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'accepts a block' do
|
20
|
+
slide = double('Middleman::Presentation::NewSlide')
|
21
|
+
allow(slide).to receive(:name).and_return '01'
|
22
|
+
|
23
|
+
slide_builder = double('Middleman::Presentation::NewSlide')
|
24
|
+
allow(slide_builder).to receive(:new).and_return slide
|
25
|
+
|
26
|
+
expect do
|
27
|
+
SlideList.new('01', slide_builder: slide_builder) do |_l|
|
28
|
+
end
|
29
|
+
end.not_to raise_error
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context '#all' do
|
34
|
+
it 'holds all slides: existing and not existing' do
|
35
|
+
touch_file '01'
|
36
|
+
touch_file '02'
|
37
|
+
|
38
|
+
slide_builder = double('Middleman::Presentation::NewSlide')
|
39
|
+
|
40
|
+
%w(01 02 03).each do |name|
|
41
|
+
expect(slide_builder).to receive(:new).with(name, {}).and_return(OpenStruct.new(name: name))
|
42
|
+
end
|
43
|
+
|
44
|
+
list = SlideList.new(%w(01 02 03), slide_builder: slide_builder)
|
45
|
+
expect(list.all.size).to eq 3
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context '#transform_with' do
|
50
|
+
it 'takes a transformer to modify each entry' do
|
51
|
+
slide = double('Middleman::Presentation::NewSlide')
|
52
|
+
allow(slide).to receive(:name).and_return '01'
|
53
|
+
|
54
|
+
slide_builder = double('Middleman::Presentation::NewSlide')
|
55
|
+
allow(slide_builder).to receive(:new).and_return slide
|
56
|
+
|
57
|
+
transformer = double('Transformer')
|
58
|
+
expect(transformer).to receive(:transform)
|
59
|
+
|
60
|
+
SlideList.new(%w(01), slide_builder: slide_builder) do |l|
|
61
|
+
l.transform_with transformer
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context '#each_new' do
|
67
|
+
it 'iterates over all non existing slides because they are assumed to be new' do
|
68
|
+
slide1 = double('Slide')
|
69
|
+
expect(slide1).to receive(:exist?).and_return false
|
70
|
+
|
71
|
+
slide2 = double('Slide')
|
72
|
+
expect(slide2).to receive(:exist?).and_return true
|
73
|
+
|
74
|
+
slide_builder = double('Middleman::Presentation::NewSlide')
|
75
|
+
allow(slide_builder).to receive(:new).and_return(slide1, slide2)
|
76
|
+
|
77
|
+
result = SlideList.new(%w(01 02), slide_builder: slide_builder).each_new
|
78
|
+
expect(result).to include slide1
|
79
|
+
expect(result).not_to include slide2
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context '#each_existing' do
|
84
|
+
it 'iterates over all existing slides' do
|
85
|
+
slide1 = double('Slide')
|
86
|
+
expect(slide1).to receive(:exist?).and_return false
|
87
|
+
|
88
|
+
slide2 = double('Slide')
|
89
|
+
expect(slide2).to receive(:exist?).and_return true
|
90
|
+
|
91
|
+
slide_builder = double('Middleman::Presentation::NewSlide')
|
92
|
+
allow(slide_builder).to receive(:new).and_return(slide1, slide2)
|
93
|
+
|
94
|
+
result = SlideList.new(%w(01 02), slide_builder: slide_builder).each_existing
|
95
|
+
expect(result).not_to include slide1
|
96
|
+
expect(result).to include slide2
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context '#existing_slides' do
|
101
|
+
it 'returns all existing slides' do
|
102
|
+
slide = double('Slide')
|
103
|
+
expect(slide).to receive(:exist?).and_return true
|
104
|
+
|
105
|
+
slide_builder = double('Middleman::Presentation::NewSlide')
|
106
|
+
allow(slide_builder).to receive(:new).and_return slide
|
107
|
+
|
108
|
+
existing_slides = SlideList.new(%w(01), slide_builder: slide_builder).existing_slides
|
109
|
+
expect(existing_slides).to include slide
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
context '#to_a' do
|
114
|
+
it 'converts list to array' do
|
115
|
+
slide1 = double('Slide')
|
116
|
+
slide2 = double('Slide')
|
117
|
+
|
118
|
+
slide_builder = double('Middleman::Presentation::NewSlide')
|
119
|
+
allow(slide_builder).to receive(:new).and_return(slide1, slide2)
|
120
|
+
|
121
|
+
result = SlideList.new(%w(01 02), slide_builder: slide_builder).to_a
|
122
|
+
expect(result).to eq [slide1, slide2]
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe SlideName do
|
5
|
+
context '#to_s' do
|
6
|
+
let(:old_slide) { instance_double('Middleman::Presentation::ExistingSlide') }
|
7
|
+
|
8
|
+
it 'switches type from erb to md if no basename/type is given' do
|
9
|
+
expect(old_slide).to receive(:base_name).and_return('01')
|
10
|
+
expect(old_slide).to receive(:ext_name).and_return('.html.erb')
|
11
|
+
|
12
|
+
name = SlideName.new(old_slide, base_name: nil, type: nil)
|
13
|
+
expect(name.to_s).to eq '01.md'
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'switches type from erb to md if no basename/type is given' do
|
17
|
+
expect(old_slide).to receive(:base_name).and_return('01')
|
18
|
+
expect(old_slide).to receive(:ext_name).and_return('.html.md')
|
19
|
+
|
20
|
+
name = SlideName.new(old_slide, base_name: nil, type: nil)
|
21
|
+
expect(name.to_s).to eq '01.erb'
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'switches type from other types than erb/md to md only if no basename/type is given' do
|
25
|
+
expect(old_slide).to receive(:base_name).and_return('01')
|
26
|
+
expect(old_slide).to receive(:ext_name).and_return('.html.liquid')
|
27
|
+
|
28
|
+
name = SlideName.new(old_slide, base_name: nil, type: nil)
|
29
|
+
expect(name.to_s).to eq '01.md'
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'switches to given type and uses base name from old slide' do
|
33
|
+
expect(old_slide).to receive(:base_name).and_return('01')
|
34
|
+
|
35
|
+
name = SlideName.new(old_slide, base_name: nil, type: 'erb')
|
36
|
+
expect(name.to_s).to eq '01.erb'
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'switches to given type (with dot) and uses base name from old slide' do
|
40
|
+
expect(old_slide).to receive(:base_name).and_return('01')
|
41
|
+
|
42
|
+
name = SlideName.new(old_slide, base_name: nil, type: '.erb')
|
43
|
+
expect(name.to_s).to eq '01.erb'
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'switches to given basename and uses type from old slide' do
|
47
|
+
expect(old_slide).to receive(:ext_name).and_return('.html.erb')
|
48
|
+
|
49
|
+
name = SlideName.new(old_slide, base_name: '02', type: nil)
|
50
|
+
expect(name.to_s).to eq '02.erb'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$LOAD_PATH << File.expand_path('../../lib', __FILE__)
|
3
|
+
|
4
|
+
require 'simplecov'
|
5
|
+
SimpleCov.command_name 'rspec'
|
6
|
+
SimpleCov.start
|
7
|
+
|
8
|
+
# Pull in all of the gems including those in the `test` group
|
9
|
+
require 'bundler'
|
10
|
+
Bundler.require :default, :test, :development
|
11
|
+
|
12
|
+
require 'middleman-presentation'
|
13
|
+
|
14
|
+
# Loading support files
|
15
|
+
Dir.glob(::File.expand_path('../support/*.rb', __FILE__)).each { |f| require_relative f }
|
16
|
+
Dir.glob(::File.expand_path('../shared_examples/*.rb', __FILE__)).each { |f| require_relative f }
|
17
|
+
|
18
|
+
# Avoid writing "describe MyModule::MyClass do [..]" but "describe MyClass do [..]"
|
19
|
+
include Middleman::Presentation
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'aruba/api'
|
3
|
+
require 'aruba/reporting'
|
4
|
+
|
5
|
+
module Middleman
|
6
|
+
module Presentation
|
7
|
+
# Spec Helpers
|
8
|
+
module SpecHelper
|
9
|
+
# Helpers for aruba
|
10
|
+
module Aruba
|
11
|
+
include ::Aruba::Api
|
12
|
+
|
13
|
+
def dirs
|
14
|
+
@dirs ||= %w(tmp rspec)
|
15
|
+
end
|
16
|
+
|
17
|
+
def absolute_path(*args)
|
18
|
+
in_current_dir { File.expand_path File.join(*args) }
|
19
|
+
end
|
20
|
+
|
21
|
+
def _create_file(*args)
|
22
|
+
super
|
23
|
+
|
24
|
+
args.first
|
25
|
+
end
|
26
|
+
|
27
|
+
def create_dir(*args)
|
28
|
+
super
|
29
|
+
|
30
|
+
args.first
|
31
|
+
end
|
32
|
+
|
33
|
+
def touch_file(file_name)
|
34
|
+
in_current_dir do
|
35
|
+
file_name = File.expand_path(file_name)
|
36
|
+
_mkdir(File.dirname(file_name))
|
37
|
+
FileUtils.touch file_name
|
38
|
+
end
|
39
|
+
|
40
|
+
file_name
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
RSpec.configure do |c|
|
48
|
+
c.include Middleman::Presentation::SpecHelper::Aruba
|
49
|
+
c.before :each do
|
50
|
+
clean_current_dir
|
51
|
+
restore_env
|
52
|
+
end
|
53
|
+
end
|
data/spec/support/ci.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Test helpers
|
4
|
+
require 'middleman-presentation-core/test_helpers'
|
5
|
+
|
6
|
+
module Middleman
|
7
|
+
module Presentation
|
8
|
+
# Spec Helpers
|
9
|
+
module SpecHelper
|
10
|
+
# Helpers for ci
|
11
|
+
module Ci
|
12
|
+
include Middleman::Presentation::TestHelpers
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
RSpec.configure do |c|
|
19
|
+
c.include Middleman::Presentation::SpecHelper::Ci
|
20
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# require 'fedux_org_stdlib/environment'
|
3
|
+
#
|
4
|
+
# module Middleman
|
5
|
+
# module Presentation
|
6
|
+
# # Spec Helpers
|
7
|
+
# module SpecHelper
|
8
|
+
# # Helpers for environment
|
9
|
+
# module Environment
|
10
|
+
# include FeduxOrgStdlib::Environment
|
11
|
+
# end
|
12
|
+
# end
|
13
|
+
# end
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# RSpec.configure do |c|
|
17
|
+
# c.include Middleman::Presentation::SpecHelper::Environment
|
18
|
+
# end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# require 'fedux_org_stdlib/filesystem'
|
3
|
+
#
|
4
|
+
# module Middleman
|
5
|
+
# module Presentation
|
6
|
+
# module SpecHelper
|
7
|
+
# # Helpers for filesystem
|
8
|
+
# module Filesystem
|
9
|
+
# include FeduxOrgStdlib::Filesystem
|
10
|
+
#
|
11
|
+
# def root_directory
|
12
|
+
# ::File.expand_path('../../../', __FILE__)
|
13
|
+
# end
|
14
|
+
# end
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# RSpec.configure do |c|
|
20
|
+
# c.include Middleman::Presentation::SpecHelper::Filesystem
|
21
|
+
# c.before(:each) { cleanup_working_directory }
|
22
|
+
# end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe Transformers::FileKeeper do
|
5
|
+
context '#transform' do
|
6
|
+
it 'removes directories from array and keep files' do
|
7
|
+
slide1 = instance_double('Middleman::Presentation::NewSlide')
|
8
|
+
file = touch_file('01.html.erb')
|
9
|
+
allow(slide1).to receive(:path).and_return absolute_path(file)
|
10
|
+
|
11
|
+
slide2 = instance_double('Middleman::Presentation::NewSlide')
|
12
|
+
directory = create_dir('01_dir')
|
13
|
+
allow(slide2).to receive(:path).and_return absolute_path(directory)
|
14
|
+
|
15
|
+
slides = []
|
16
|
+
slides << slide2
|
17
|
+
slides << slide1
|
18
|
+
|
19
|
+
slides = Transformers::FileKeeper.new.transform(slides)
|
20
|
+
expect(slides).to include slide1
|
21
|
+
expect(slides).not_to include slide2
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe Transformers::GroupSlides do
|
5
|
+
context '#initialize' do
|
6
|
+
it 'requires a base directory' do
|
7
|
+
template = double('Template')
|
8
|
+
allow(template).to receive(:result)
|
9
|
+
|
10
|
+
expect do
|
11
|
+
Transformers::GroupSlides.new(template: template)
|
12
|
+
end.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context '#transforms' do
|
17
|
+
it 'groups slides with same group' do
|
18
|
+
slide1 = instance_double('Middleman::Presentation::ExistingSlide')
|
19
|
+
allow(slide1).to receive(:group).and_return 'group'
|
20
|
+
allow(slide1).to receive(:group?).and_return true
|
21
|
+
allow(slide1).to receive(:render).and_return '01'
|
22
|
+
|
23
|
+
slide2 = instance_double('Middleman::Presentation::ExistingSlide')
|
24
|
+
allow(slide2).to receive(:group).and_return 'group'
|
25
|
+
allow(slide2).to receive(:group?).and_return true
|
26
|
+
allow(slide2).to receive(:render).and_return '02'
|
27
|
+
|
28
|
+
slide3 = instance_double('Middleman::Presentation::ExistingSlide')
|
29
|
+
allow(slide3).to receive(:group).and_return nil
|
30
|
+
allow(slide3).to receive(:group?).and_return false
|
31
|
+
allow(slide3).to receive(:render).and_return '03'
|
32
|
+
|
33
|
+
transformer = Transformers::GroupSlides.new(template: Erubis::Eruby.new('<%= slides %>'))
|
34
|
+
result = transformer.transform [slide1, slide2, slide3]
|
35
|
+
|
36
|
+
expect(result).not_to include slide1
|
37
|
+
expect(result).not_to include slide2
|
38
|
+
expect(result).to include slide3
|
39
|
+
|
40
|
+
group = result.first
|
41
|
+
expect(group.render { |s| s }).to include "01\n02"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe Transformers::IgnoreSlides do
|
5
|
+
context '#transform' do
|
6
|
+
it 'ignores slides based on file name' do
|
7
|
+
ignore_file = write_file '.slidesignore', <<-EOS.strip_heredoc
|
8
|
+
02.html.md
|
9
|
+
EOS
|
10
|
+
|
11
|
+
slide1 = instance_double('Middleman::Presentation::ExistingSlide')
|
12
|
+
allow(slide1).to receive(:match?).and_return(false)
|
13
|
+
|
14
|
+
slide2 = instance_double('Middleman::Presentation::ExistingSlide')
|
15
|
+
allow(slide2).to receive(:match?).and_return(false)
|
16
|
+
allow(slide2).to receive(:match?).with(/(?-mix:^!$)|(?-mix:02.html.md)/).and_return(true)
|
17
|
+
|
18
|
+
transformer = Transformers::IgnoreSlides.new ignore_file: absolute_path(ignore_file)
|
19
|
+
result = transformer.transform([slide1, slide2])
|
20
|
+
|
21
|
+
expect(result).to include slide1
|
22
|
+
expect(result).not_to include slide2
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'unignores slides based on file name' do
|
26
|
+
ignore_file = write_file '.slidesignore', <<-EOS.strip_heredoc
|
27
|
+
.md$
|
28
|
+
!02.html.md
|
29
|
+
EOS
|
30
|
+
|
31
|
+
slide1 = instance_double('Middleman::Presentation::ExistingSlide')
|
32
|
+
allow(slide1).to receive(:match?).with(/(?-mix:^!$)|(?-mix:.md$)/).and_return(false)
|
33
|
+
allow(slide1).to receive(:match?).with(/(?-mix:^!$)|(?-mix:02.html.md)/).and_return(true)
|
34
|
+
|
35
|
+
slide2 = instance_double('Middleman::Presentation::ExistingSlide')
|
36
|
+
allow(slide2).to receive(:match?).with(/(?-mix:^!$)|(?-mix:.md$)/).and_return(true)
|
37
|
+
allow(slide2).to receive(:match?).with(/(?-mix:^!$)|(?-mix:02.html.md)/).and_return(true)
|
38
|
+
|
39
|
+
slide3 = instance_double('Middleman::Presentation::ExistingSlide')
|
40
|
+
allow(slide3).to receive(:match?).with(/(?-mix:^!$)|(?-mix:.md$)/).and_return(true)
|
41
|
+
allow(slide3).to receive(:match?).with(/(?-mix:^!$)|(?-mix:02.html.md)/).and_return(false)
|
42
|
+
|
43
|
+
transformer = Transformers::IgnoreSlides.new ignore_file: absolute_path(ignore_file)
|
44
|
+
result = transformer.transform([slide1, slide2, slide3])
|
45
|
+
|
46
|
+
expect(result).to include slide1
|
47
|
+
expect(result).to include slide2
|
48
|
+
expect(result).not_to include slide3
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'handles non existing ignore file' do
|
52
|
+
slide1 = instance_double('Middleman::Presentation::ExistingSlide')
|
53
|
+
slide2 = instance_double('Middleman::Presentation::ExistingSlide')
|
54
|
+
slide3 = instance_double('Middleman::Presentation::ExistingSlide')
|
55
|
+
|
56
|
+
transformer = Transformers::IgnoreSlides.new ignore_file: SecureRandom.hex
|
57
|
+
result = transformer.transform([slide1, slide2, slide3])
|
58
|
+
|
59
|
+
expect(result).to include slide1
|
60
|
+
expect(result).to include slide2
|
61
|
+
expect(result).to include slide3
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe Transformers::RemoveDuplicateSlides do
|
5
|
+
context '#transform' do
|
6
|
+
it 'removes similar slides: same basename but different file name' do
|
7
|
+
slide1 = instance_double('Middleman::Presentation::ExistingSlide')
|
8
|
+
slide2 = instance_double('Middleman::Presentation::ExistingSlide')
|
9
|
+
slide3 = instance_double('Middleman::Presentation::ExistingSlide')
|
10
|
+
|
11
|
+
allow(slide1).to receive(:eql?).with(slide1).and_return(true)
|
12
|
+
allow(slide1).to receive(:eql?).with(slide2).and_return(false)
|
13
|
+
allow(slide1).to receive(:eql?).with(slide3).and_return(false)
|
14
|
+
allow(slide1).to receive(:similar?).with(slide1).and_return(false)
|
15
|
+
allow(slide1).to receive(:similar?).with(slide2).and_return(true)
|
16
|
+
allow(slide1).to receive(:similar?).with(slide3).and_return(false)
|
17
|
+
|
18
|
+
allow(slide2).to receive(:eql?).with(slide1).and_return(false)
|
19
|
+
allow(slide2).to receive(:eql?).with(slide2).and_return(true)
|
20
|
+
allow(slide2).to receive(:eql?).with(slide3).and_return(false)
|
21
|
+
allow(slide2).to receive(:similar?).with(slide1).and_return(true)
|
22
|
+
allow(slide2).to receive(:similar?).with(slide2).and_return(false)
|
23
|
+
allow(slide2).to receive(:similar?).with(slide3).and_return(false)
|
24
|
+
|
25
|
+
allow(slide3).to receive(:eql?).with(slide1).and_return(false)
|
26
|
+
allow(slide3).to receive(:eql?).with(slide2).and_return(false)
|
27
|
+
allow(slide3).to receive(:eql?).with(slide3).and_return(true)
|
28
|
+
allow(slide3).to receive(:similar?).with(slide1).and_return(false)
|
29
|
+
allow(slide3).to receive(:similar?).with(slide2).and_return(false)
|
30
|
+
allow(slide3).to receive(:similar?).with(slide3).and_return(false)
|
31
|
+
|
32
|
+
transformer = Transformers::RemoveDuplicateSlides.new
|
33
|
+
result = transformer.transform([slide1, slide2, slide3])
|
34
|
+
|
35
|
+
expect(result).not_to include slide1
|
36
|
+
expect(result).not_to include slide2
|
37
|
+
expect(result).to include slide3
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'raises an error on similar slides' do
|
41
|
+
slide1 = instance_double('Middleman::Presentation::ExistingSlide')
|
42
|
+
slide2 = instance_double('Middleman::Presentation::ExistingSlide')
|
43
|
+
|
44
|
+
allow(slide1).to receive(:eql?).with(slide1).and_return(false)
|
45
|
+
allow(slide1).to receive(:eql?).with(slide2).and_return(false)
|
46
|
+
allow(slide1).to receive(:file_name).and_return('01.html.erb')
|
47
|
+
allow(slide1).to receive(:similar?).with(slide1).and_return(true)
|
48
|
+
allow(slide1).to receive(:similar?).with(slide2).and_return(true)
|
49
|
+
|
50
|
+
allow(slide2).to receive(:eql?).with(slide1).and_return(false)
|
51
|
+
allow(slide2).to receive(:eql?).with(slide2).and_return(false)
|
52
|
+
allow(slide2).to receive(:file_name).and_return('01.html.md')
|
53
|
+
allow(slide2).to receive(:similar?).with(slide1).and_return(true)
|
54
|
+
allow(slide2).to receive(:similar?).with(slide2).and_return(true)
|
55
|
+
|
56
|
+
transformer = Transformers::RemoveDuplicateSlides.new raise_error: true
|
57
|
+
|
58
|
+
expect do
|
59
|
+
transformer.transform([slide1, slide2])
|
60
|
+
end.to raise_error ArgumentError
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'considers additional slides which will be not part of the output' do
|
64
|
+
slide1 = instance_double('Middleman::Presentation::ExistingSlide')
|
65
|
+
slide2 = instance_double('Middleman::Presentation::ExistingSlide')
|
66
|
+
slide3 = instance_double('Middleman::Presentation::ExistingSlide')
|
67
|
+
slide4 = instance_double('Middleman::Presentation::ExistingSlide')
|
68
|
+
|
69
|
+
allow(slide1).to receive(:file_name).and_return '01.html.erb'
|
70
|
+
allow(slide1).to receive(:eql?).with(slide1).and_return(true)
|
71
|
+
allow(slide1).to receive(:eql?).with(slide2).and_return(true)
|
72
|
+
allow(slide1).to receive(:eql?).with(slide3).and_return(false)
|
73
|
+
allow(slide1).to receive(:eql?).with(slide4).and_return(false)
|
74
|
+
allow(slide1).to receive(:similar?).with(slide1).and_return(false)
|
75
|
+
allow(slide1).to receive(:similar?).with(slide2).and_return(true)
|
76
|
+
allow(slide1).to receive(:similar?).with(slide3).and_return(false)
|
77
|
+
allow(slide1).to receive(:similar?).with(slide4).and_return(false)
|
78
|
+
|
79
|
+
allow(slide2).to receive(:file_name).and_return '01.html.md'
|
80
|
+
allow(slide2).to receive(:eql?).with(slide1).and_return(false)
|
81
|
+
allow(slide2).to receive(:eql?).with(slide2).and_return(true)
|
82
|
+
allow(slide2).to receive(:eql?).with(slide3).and_return(false)
|
83
|
+
allow(slide2).to receive(:eql?).with(slide4).and_return(false)
|
84
|
+
allow(slide2).to receive(:similar?).with(slide1).and_return(true)
|
85
|
+
allow(slide2).to receive(:similar?).with(slide2).and_return(false)
|
86
|
+
allow(slide2).to receive(:similar?).with(slide3).and_return(false)
|
87
|
+
allow(slide2).to receive(:similar?).with(slide4).and_return(false)
|
88
|
+
|
89
|
+
allow(slide2).to receive(:file_name).and_return '02.html.md'
|
90
|
+
allow(slide3).to receive(:eql?).with(slide1).and_return(false)
|
91
|
+
allow(slide3).to receive(:eql?).with(slide2).and_return(false)
|
92
|
+
allow(slide3).to receive(:eql?).with(slide3).and_return(true)
|
93
|
+
allow(slide3).to receive(:eql?).with(slide4).and_return(false)
|
94
|
+
allow(slide3).to receive(:similar?).with(slide1).and_return(false)
|
95
|
+
allow(slide3).to receive(:similar?).with(slide2).and_return(false)
|
96
|
+
allow(slide3).to receive(:similar?).with(slide3).and_return(false)
|
97
|
+
allow(slide3).to receive(:similar?).with(slide4).and_return(false)
|
98
|
+
|
99
|
+
allow(slide2).to receive(:file_name).and_return '03.html.md'
|
100
|
+
allow(slide4).to receive(:eql?).with(slide1).and_return(false)
|
101
|
+
allow(slide4).to receive(:eql?).with(slide2).and_return(false)
|
102
|
+
allow(slide4).to receive(:eql?).with(slide3).and_return(false)
|
103
|
+
allow(slide4).to receive(:eql?).with(slide4).and_return(true)
|
104
|
+
allow(slide4).to receive(:similar?).with(slide1).and_return(false)
|
105
|
+
allow(slide4).to receive(:similar?).with(slide2).and_return(false)
|
106
|
+
allow(slide4).to receive(:similar?).with(slide3).and_return(false)
|
107
|
+
allow(slide4).to receive(:similar?).with(slide4).and_return(false)
|
108
|
+
|
109
|
+
transformer = Transformers::RemoveDuplicateSlides.new additional_slides: [slide2, slide4]
|
110
|
+
result = transformer.transform([slide1, slide3])
|
111
|
+
|
112
|
+
# slide1 cannot be part of output
|
113
|
+
# because a similar slide already exists
|
114
|
+
expect(result).not_to include slide1
|
115
|
+
expect(result).not_to include slide2
|
116
|
+
expect(result).not_to include slide4
|
117
|
+
expect(result).to include slide3
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe Transformers::SortSlides do
|
5
|
+
context '#transform' do
|
6
|
+
it 'sorts slides' do
|
7
|
+
slides = []
|
8
|
+
slides << 1
|
9
|
+
slides << 3
|
10
|
+
slides << 2
|
11
|
+
|
12
|
+
slides = Transformers::SortSlides.new.transform(slides)
|
13
|
+
expect(slides.first).to eq 1
|
14
|
+
expect(slides.last).to eq 3
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/spec/utils_spec.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe Utils do
|
5
|
+
context '#zip' do
|
6
|
+
it 'creates a zip archive from directory' do
|
7
|
+
touch_file 'test.txt'
|
8
|
+
|
9
|
+
Middleman::Presentation::Utils.zip absolute_path('.'), absolute_path('test.zip')
|
10
|
+
|
11
|
+
check_file_presence(['test.zip'], true)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gem 'middleman'
|
4
|
+
|
5
|
+
# For faster file watcher updates on Windows:
|
6
|
+
# gem 'wdm', :platforms => [:mswin, :mingw]
|
7
|
+
|
8
|
+
<% if Middleman::Presentation.config.runtime_environment == :test -%>
|
9
|
+
# Make sure the paths are correct, otherwise you get
|
10
|
+
# Bundler-errors a la `Path does not exist`
|
11
|
+
gem 'middleman-presentation', path: '<%= File.join(@rubygem_path, 'middleman-presentation') %>'
|
12
|
+
gem 'middleman-presentation-core', path: '<%= File.join(@rubygem_path, 'middleman-presentation-core') %>'
|
13
|
+
gem 'middleman-presentation-helpers', path: '<%= File.join(@rubygem_path, 'middleman-presentation-helpers') %>'
|
14
|
+
gem 'middleman-presentation-simple_plugin', path: '<%= File.join(@rubygem_path, 'middleman-presentation-core/fixtures/middleman-presentation-simple_plugin') %>'
|
15
|
+
<% else -%>
|
16
|
+
gem 'middleman-presentation'
|
17
|
+
<% end -%>
|
18
|
+
|
19
|
+
# Choose one to make `execjs` happy
|
20
|
+
# gem 'therubyracer'
|
21
|
+
# gem 'therubyrhino'
|
22
|
+
|
23
|
+
gem 'kramdown'
|
24
|
+
gem 'github-markup'
|
25
|
+
gem 'liquid'
|
26
|
+
gem 'rake'
|
27
|
+
|
28
|
+
group :debug do
|
29
|
+
gem 'pry'
|
30
|
+
gem 'byebug'
|
31
|
+
gem 'pry-byebug'
|
32
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
This is a stub. Please place the license or a link to the license for your presentation here.
|