middleman-presentation 0.15.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +33 -0
  3. data/.rdebugrc +7 -0
  4. data/.rspec +5 -0
  5. data/.rubocop.yml +4 -0
  6. data/.simplecov +8 -0
  7. data/.travis.yml +8 -0
  8. data/.yardopts +5 -0
  9. data/CONTRIBUTING.md +44 -0
  10. data/Gemfile +49 -0
  11. data/Gemfile.lock +328 -0
  12. data/Guardfile +13 -0
  13. data/LICENSE.software +21 -0
  14. data/README.md +601 -0
  15. data/RELEASE_NOTES.md +36 -0
  16. data/Rakefile +191 -0
  17. data/bin/middleman-presentation +7 -0
  18. data/bin/mp +7 -0
  19. data/config/license_finder.yml +13 -0
  20. data/config/rubocop/exclude.yml +25 -0
  21. data/config/rubocop/include.yml +142 -0
  22. data/cucumber.yml +2 -0
  23. data/doc/licenses/dependencies.csv +55 -0
  24. data/doc/licenses/dependencies.db +0 -0
  25. data/doc/licenses/dependencies.html +1415 -0
  26. data/doc/licenses/dependencies.md +603 -0
  27. data/doc/licenses/dependencies_detailed.csv +190 -0
  28. data/features/create_presentation-cli.feature +301 -0
  29. data/features/create_theme-cli.feature +62 -0
  30. data/features/grouping_slides.feature +121 -0
  31. data/features/ignore_slides.feature +86 -0
  32. data/features/image_gallery.feature +58 -0
  33. data/features/init_application-cli.feature +91 -0
  34. data/features/init_predefined_slides.feature +13 -0
  35. data/features/presentation.feature +113 -0
  36. data/features/show_config-cli.feature +27 -0
  37. data/features/show_style-cli.feature +21 -0
  38. data/features/show_support_information-cli.feature +12 -0
  39. data/features/slide-cli.feature +300 -0
  40. data/features/step_definitions.rb +135 -0
  41. data/features/support/ci.rb +3 -0
  42. data/features/support/env.rb +19 -0
  43. data/features/support/reporting.rb +2 -0
  44. data/features/version_number.feature +18 -0
  45. data/fixtures/images/image01.png +0 -0
  46. data/fixtures/images/image02.png +0 -0
  47. data/lib/middleman-presentation.rb +72 -0
  48. data/lib/middleman-presentation/cli/create.rb +14 -0
  49. data/lib/middleman-presentation/cli/create_presentation.rb +308 -0
  50. data/lib/middleman-presentation/cli/create_theme.rb +77 -0
  51. data/lib/middleman-presentation/cli/init.rb +34 -0
  52. data/lib/middleman-presentation/cli/reset_thor.rb +18 -0
  53. data/lib/middleman-presentation/cli/runner.rb +18 -0
  54. data/lib/middleman-presentation/cli/show.rb +37 -0
  55. data/lib/middleman-presentation/commands/presentation.rb +23 -0
  56. data/lib/middleman-presentation/commands/slide.rb +86 -0
  57. data/lib/middleman-presentation/commands/style.rb +29 -0
  58. data/lib/middleman-presentation/comparable_slide.rb +69 -0
  59. data/lib/middleman-presentation/css_class_extracter.rb +41 -0
  60. data/lib/middleman-presentation/custom_template.rb +11 -0
  61. data/lib/middleman-presentation/erb_template.rb +11 -0
  62. data/lib/middleman-presentation/existing_slide.rb +133 -0
  63. data/lib/middleman-presentation/extension.rb +12 -0
  64. data/lib/middleman-presentation/file_extensions.rb +60 -0
  65. data/lib/middleman-presentation/frontend_component.rb +82 -0
  66. data/lib/middleman-presentation/group_template.rb +11 -0
  67. data/lib/middleman-presentation/helpers.rb +11 -0
  68. data/lib/middleman-presentation/helpers/images.rb +38 -0
  69. data/lib/middleman-presentation/helpers/slides.rb +31 -0
  70. data/lib/middleman-presentation/helpers/tests.rb +13 -0
  71. data/lib/middleman-presentation/ignore_file.rb +52 -0
  72. data/lib/middleman-presentation/liquid_template.rb +11 -0
  73. data/lib/middleman-presentation/logger.rb +8 -0
  74. data/lib/middleman-presentation/main.rb +40 -0
  75. data/lib/middleman-presentation/markdown_template.rb +11 -0
  76. data/lib/middleman-presentation/new_slide.rb +147 -0
  77. data/lib/middleman-presentation/predefined_slide_templates_directory.rb +11 -0
  78. data/lib/middleman-presentation/presentation_config.rb +48 -0
  79. data/lib/middleman-presentation/slide_group.rb +38 -0
  80. data/lib/middleman-presentation/slide_list.rb +46 -0
  81. data/lib/middleman-presentation/transformers/file_keeper.rb +13 -0
  82. data/lib/middleman-presentation/transformers/group_slides.rb +34 -0
  83. data/lib/middleman-presentation/transformers/ignore_slides.rb +28 -0
  84. data/lib/middleman-presentation/transformers/remove_duplicate_slides.rb +32 -0
  85. data/lib/middleman-presentation/transformers/sort_slides.rb +13 -0
  86. data/lib/middleman-presentation/version.rb +8 -0
  87. data/lib/middleman_extension.rb +2 -0
  88. data/locales/de.yml +9 -0
  89. data/locales/en.yml +18 -0
  90. data/middleman-presentation.gemspec +38 -0
  91. data/script/bootstrap +11 -0
  92. data/script/ci +3 -0
  93. data/spec/css_class_extracter_spec.rb +28 -0
  94. data/spec/existing_slide_spec.rb +158 -0
  95. data/spec/frontend_resource_spec.rb +87 -0
  96. data/spec/ignore_file_spec.rb +74 -0
  97. data/spec/new_slide_spec.rb +130 -0
  98. data/spec/shared_examples/.keep +0 -0
  99. data/spec/slide_group_spec.rb +69 -0
  100. data/spec/slide_list_spec.rb +90 -0
  101. data/spec/spec_helper.rb +19 -0
  102. data/spec/support/ci.rb +20 -0
  103. data/spec/support/environment.rb +18 -0
  104. data/spec/support/filesystem.rb +22 -0
  105. data/spec/support/reporting.rb +2 -0
  106. data/spec/support/rspec.rb +9 -0
  107. data/spec/support/string.rb +2 -0
  108. data/spec/transformers/file_keeper_spec.rb +23 -0
  109. data/spec/transformers/group_slides_spec.rb +44 -0
  110. data/spec/transformers/ignore_slides_spec.rb +64 -0
  111. data/spec/transformers/remove_duplicate_slides_spec.rb +120 -0
  112. data/spec/transformers/sort_slides_spec.rb +17 -0
  113. data/templates/.bowerrc.tt +4 -0
  114. data/templates/.gitignore +5 -0
  115. data/templates/LICENSE.presentation +1 -0
  116. data/templates/Rakefile +59 -0
  117. data/templates/bower.json.tt +8 -0
  118. data/templates/config.yaml.tt +41 -0
  119. data/templates/data/config.yml.tt +9 -0
  120. data/templates/data/metadata.yml.tt +77 -0
  121. data/templates/predefined_slides.d/00.html.erb.tt +23 -0
  122. data/templates/predefined_slides.d/999980.html.erb.tt +4 -0
  123. data/templates/predefined_slides.d/999981.html.erb.tt +21 -0
  124. data/templates/predefined_slides.d/999982.html.erb.tt +3 -0
  125. data/templates/presentation_theme/bower.json.tt +20 -0
  126. data/templates/presentation_theme/images/.keep +0 -0
  127. data/templates/presentation_theme/javascripts/%theme_name%.js.tt +0 -0
  128. data/templates/presentation_theme/stylesheets/%theme_name%.scss.tt +9 -0
  129. data/templates/presentation_theme/stylesheets/_fonts.scss.tt +0 -0
  130. data/templates/presentation_theme/stylesheets/_images.scss.tt +5 -0
  131. data/templates/presentation_theme/stylesheets/_theme.scss.tt +252 -0
  132. data/templates/script/bootstrap +5 -0
  133. data/templates/script/build +3 -0
  134. data/templates/script/export +34 -0
  135. data/templates/script/presentation +3 -0
  136. data/templates/script/slide +3 -0
  137. data/templates/script/start +43 -0
  138. data/templates/slides/custom.md.tt +3 -0
  139. data/templates/slides/erb.tt +5 -0
  140. data/templates/slides/group.tt +3 -0
  141. data/templates/slides/liquid.tt +5 -0
  142. data/templates/slides/markdown.tt +3 -0
  143. data/templates/source/index.html.erb +1 -0
  144. data/templates/source/javascripts/application.js.tt +3 -0
  145. data/templates/source/layout.erb +89 -0
  146. data/templates/source/stylesheets/application.scss.tt +3 -0
  147. metadata +427 -0
@@ -0,0 +1,3 @@
1
+ # Test helpers
2
+ require 'middleman-presentation/helpers/tests'
3
+ World(Middleman::Presentation::Helpers::Tests)
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+ require 'aruba/cucumber'
3
+
4
+ require 'simplecov'
5
+ SimpleCov.command_name 'cucumber'
6
+ SimpleCov.start
7
+
8
+ # middleman
9
+ require 'middleman-core'
10
+ require 'middleman-core/step_definitions'
11
+
12
+ # Pull in all of the gems including those in the `test` group
13
+ require 'bundler'
14
+ Bundler.require :default, :test, :development
15
+
16
+ ENV['TEST'] = 'true'
17
+ ENV['AUTOLOAD_SPROCKETS'] = 'false'
18
+
19
+ PROJECT_ROOT_PATH = File.expand_path('../../../', __FILE__)
@@ -0,0 +1,2 @@
1
+ # encoding: utf-8
2
+ require 'active_support/core_ext/kernel/reporting'
@@ -0,0 +1,18 @@
1
+ Feature: Show version number
2
+
3
+ As a presentator
4
+ I want to add a version number to a new presentation
5
+ In order to display it
6
+
7
+ Background:
8
+ Given a mocked home directory
9
+ And git is configured with username "User" and email-address "email@example.com"
10
+
11
+ Scenario: Default version number
12
+ Given I successfully run `middleman-presentation create presentation --title "Test"`
13
+ And the Server is running
14
+ When I go to "/"
15
+ Then I should see:
16
+ """
17
+ v0.0.1
18
+ """
Binary file
Binary file
@@ -0,0 +1,72 @@
1
+ # encoding: utf-8
2
+
3
+ require 'set'
4
+ require 'bundler'
5
+ require 'English'
6
+ # require 'ptools'
7
+ require 'pathname'
8
+ require 'fileutils'
9
+ require 'middleman-core'
10
+ require 'middleman-core/cli'
11
+ require 'uri'
12
+ require 'addressable/uri'
13
+ require 'securerandom'
14
+ require 'fedux_org_stdlib/app_config'
15
+ require 'fedux_org_stdlib/logging/logger'
16
+ require 'fedux_org_stdlib/file_template'
17
+ require 'fedux_org_stdlib/template_directory'
18
+ require 'fedux_org_stdlib/core_ext/array/list'
19
+ require 'fedux_org_stdlib/core_ext/hash/list'
20
+ require 'fedux_org_stdlib/core_ext/hash/options'
21
+ require 'fedux_org_stdlib/shell_language_detector'
22
+ require 'fedux_org_stdlib/support_information'
23
+ require 'securerandom'
24
+ require 'shellwords'
25
+ require 'nokogiri'
26
+ require 'rake/file_list'
27
+
28
+ require 'active_support/core_ext/string/strip'
29
+ require 'active_support/core_ext/string/inflections'
30
+ require 'active_support/core_ext/object/blank'
31
+ require 'active_support/core_ext/kernel/reporting'
32
+
33
+ require 'middleman-presentation/version'
34
+ require 'middleman-presentation/file_extensions'
35
+ require 'middleman-presentation/logger'
36
+ require 'middleman-presentation/presentation_config'
37
+ require 'middleman-presentation/main'
38
+
39
+ require 'middleman-presentation/predefined_slide_templates_directory'
40
+ require 'middleman-presentation/frontend_component'
41
+ require 'middleman-presentation/comparable_slide'
42
+ require 'middleman-presentation/existing_slide'
43
+ require 'middleman-presentation/new_slide'
44
+ require 'middleman-presentation/css_class_extracter'
45
+ require 'middleman-presentation/slide_list'
46
+ require 'middleman-presentation/helpers'
47
+ require 'middleman-presentation/ignore_file'
48
+ require 'middleman-presentation/slide_group'
49
+ require 'middleman-presentation/commands/slide'
50
+ require 'middleman-presentation/group_template'
51
+ require 'middleman-presentation/erb_template'
52
+ require 'middleman-presentation/markdown_template'
53
+ require 'middleman-presentation/liquid_template'
54
+ require 'middleman-presentation/custom_template'
55
+ require 'middleman-presentation/transformers/group_slides'
56
+ require 'middleman-presentation/transformers/sort_slides'
57
+ require 'middleman-presentation/transformers/ignore_slides'
58
+ require 'middleman-presentation/transformers/remove_duplicate_slides'
59
+ require 'middleman-presentation/transformers/file_keeper'
60
+
61
+ require 'middleman-presentation/cli/reset_thor'
62
+ require 'middleman-presentation/cli/create_theme'
63
+ require 'middleman-presentation/cli/create_presentation'
64
+ require 'middleman-presentation/cli/show'
65
+ require 'middleman-presentation/cli/init'
66
+ require 'middleman-presentation/cli/create'
67
+ require 'middleman-presentation/cli/runner'
68
+
69
+ ::Middleman::Extensions.register(:presentation) do
70
+ require 'middleman-presentation/extension'
71
+ ::Middleman::Presentation::PresentationExtension
72
+ end
@@ -0,0 +1,14 @@
1
+ # encoding: utf-8
2
+ module Middleman
3
+ module Presentation
4
+ module Cli
5
+ # This class provides an 'presentation init' command for the middleman CLI.
6
+ class Create < Thor
7
+ register(CreateTheme, 'theme', 'theme NAME', 'Create a new theme named NAMED')
8
+ register(CreatePresentation, 'presentation', 'presentation [DIR]', 'Initialize a new presentation in DIR (default: $PWD)')
9
+
10
+ default_command :presentation
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,308 @@
1
+ # encoding: utf-8
2
+ module Middleman
3
+ module Presentation
4
+ module Cli
5
+ # Initialize presentation
6
+ class CreatePresentation < Thor::Group
7
+ include Thor::Actions
8
+
9
+ class_option :speaker, required: true, default: Middleman::Presentation.config.speaker, desc: 'Name of speaker'
10
+ class_option :title, required: true, desc: 'Title of presentation'
11
+ class_option :date, required: true, default: Time.now.strftime('%d.%m.%Y'), desc: 'Date of presentation'
12
+ class_option :license, required: true, default: Middleman::Presentation.config.license, desc: 'License of the presentation, e.g. CC BY'
13
+
14
+ class_option :bower_directory, default: Middleman::Presentation.config.bower_directory, desc: 'Directory for bower components in "source"-directory'
15
+ class_option :author, default: Middleman::Presentation.config.author, desc: 'Author of presentation'
16
+ class_option :description, desc: 'Description for presentation'
17
+ class_option :subtitle, desc: 'Subtitle of presentation'
18
+ class_option :homepage, default: Middleman::Presentation.config.homepage, desc: 'Homepage of company and/or speaker'
19
+ class_option :company, default: Middleman::Presentation.config.company, desc: 'Company or employer or organization of speaker'
20
+ class_option :location, default: Middleman::Presentation.config.location, desc: 'Location where the presentation take place'
21
+ class_option :audience, default: Middleman::Presentation.config.audience, desc: 'Audience of presentation'
22
+
23
+ class_option :phone_number, default: Middleman::Presentation.config.phone_number, desc: 'Phone number to contact speaker'
24
+ class_option :email_address, default: Middleman::Presentation.config.email_address, desc: 'Email address to contact speaker'
25
+ class_option :github_url, default: Middleman::Presentation.config.github_url, desc: 'Url to Github account of speaker'
26
+
27
+ class_option :activate_controls, type: :boolean, default: Middleman::Presentation.config.activate_controls, desc: 'Activate controls in reveal.js'
28
+ class_option :activate_progress, type: :boolean, default: Middleman::Presentation.config.activate_progress, desc: 'Activate progress in reveal.js'
29
+ class_option :activate_history, type: :boolean, default: Middleman::Presentation.config.activate_history, desc: 'Activate history in reveal.js'
30
+ class_option :activate_center, type: :boolean, default: Middleman::Presentation.config.activate_center, desc: 'Activate center in reveal.js'
31
+ class_option :activate_slide_number, type: :boolean, default: Middleman::Presentation.config.activate_slide_number, desc: 'Activate slide number in reveal.js'
32
+
33
+ class_option :default_transition_type, default: Middleman::Presentation.config.default_transition_type, desc: 'Default slide transition. Can be overwridden per slide.'
34
+ class_option :default_transition_speed, default: Middleman::Presentation.config.default_transition_speed, desc: 'Default speed for slide transition. Can be overwridden per slide.'
35
+
36
+ class_option :install_assets, type: :boolean, default: Middleman::Presentation.config.install_assets, desc: 'Install assets'
37
+ class_option :initialize_git, type: :boolean, default: Middleman::Presentation.config.initialize_git, desc: 'Initialize git repository'
38
+ class_option :check_for_bower, type: :boolean, default: Middleman::Presentation.config.check_for_bower, desc: 'Check if bower is installed on the system'
39
+
40
+ class_option :create_predefined_slides, type: :boolean, default: Middleman::Presentation.config.create_predefined_slides, desc: 'Install predefined slides'
41
+
42
+ class_option :language, type: :array, desc: 'Language to use for translatable slide templates, e.g. "de", "en"'
43
+ class_option :version, default: Middleman::Presentation.config.default_version_number, desc: 'Version number for your presentation'
44
+
45
+ argument :directory, default: Dir.getwd, desc: 'Directory to create presentation in'
46
+ desc 'Initialize a new presentation in DIR (default: $PWD)'
47
+
48
+ def define_root_directory
49
+ @root_directory = File.expand_path directory
50
+ end
51
+
52
+ def add_to_source_path
53
+ source_paths << File.expand_path('../../../../templates', __FILE__)
54
+ end
55
+
56
+ def initialize_middleman
57
+ run("middleman init --skip-bundle --template empty #{directory}")
58
+ fail Thor::Error, 'Error executing `middleman init`-command. Please fix your setup and run again.' unless $CHILD_STATUS.exitstatus == 0
59
+ end
60
+
61
+ def set_language
62
+ language_detector = FeduxOrgStdlib::ShellLanguageDetector.new
63
+ language = language_detector.detect allowed: I18n.available_locales, overwrite: options[:language]
64
+
65
+ I18n.default_locale = language.language_code
66
+ end
67
+
68
+ def add_frontend_components
69
+ @external_assets = []
70
+
71
+ @external_assets << Middleman::Presentation::FrontendComponent.new(name: 'jquery', version: '~1.11', javascripts: %w(dist/jquery))
72
+ @external_assets << Middleman::Presentation::FrontendComponent.new(name: 'reveal.js', version: 'latest', javascripts: %w(lib/js/head.min js/reveal.min))
73
+ @external_assets << Middleman::Presentation::FrontendComponent.new(name: 'lightbox2', github: 'dg-vrnetze/revealjs-lightbox2', javascripts: %w(js/lightbox))
74
+ @external_assets << Middleman::Presentation::FrontendComponent.new(
75
+ name: 'middleman-presentation-theme-common',
76
+ github: 'dg-vrnetze/middleman-presentation-theme-common',
77
+ stylesheets: %w(stylesheets/middleman-presentation-theme-common),
78
+ javascripts: %w(javascripts/middleman-presentation-theme-common)
79
+ )
80
+
81
+ @external_assets.concat Middleman::Presentation::FrontendComponent.parse(Middleman::Presentation.config.components)
82
+ end
83
+
84
+ def add_theme
85
+ if Middleman::Presentation.config.theme.blank?
86
+ @external_assets << Middleman::Presentation::FrontendComponent.new(
87
+ name: 'middleman-presentation-theme-default',
88
+ github: 'maxmeyer/middleman-presentation-theme-default',
89
+ stylesheets: %w(stylesheets/middleman-presentation-theme-default)
90
+ )
91
+ else
92
+ @external_assets.concat Middleman::Presentation::FrontendComponent.parse(Middleman::Presentation.config.theme)
93
+ end
94
+ end
95
+
96
+ def set_variables_for_templates
97
+ @bower_directory = options[:bower_directory]
98
+ @author = options[:author]
99
+ @speaker = options[:speaker]
100
+ @title = options[:title]
101
+ @description = options[:description]
102
+ @subtitle = options[:subtitle]
103
+ @date = options[:date]
104
+ @homepage = options[:homepage]
105
+ @company = options[:company]
106
+ @license = options[:license]
107
+ @location = options[:location]
108
+ @audience = options[:audience]
109
+
110
+ @email_address = options[:email_address]
111
+ @phone_number = options[:phone_number]
112
+ @github_url = options[:github_url]
113
+
114
+ @version = options[:version]
115
+ @project_id = format '%s-%s', ActiveSupport::Inflector.transliterate(options[:title]).parameterize, SecureRandom.hex
116
+ end
117
+
118
+ def set_configuration_for_revealjs
119
+ @revealjs_config = {}
120
+ @revealjs_config[:controls] = options[:activate_controls]
121
+ @revealjs_config[:progress] = options[:activate_progress]
122
+ @revealjs_config[:history] = options[:activate_history]
123
+ @revealjs_config[:center] = options[:activate_center]
124
+ @revealjs_config[:slide_number] = options[:activate_slide_number]
125
+ @revealjs_config[:default_transition_type] = options[:default_transition_type]
126
+ @revealjs_config[:default_transition_speed] = options[:default_transition_speed]
127
+ end
128
+
129
+ def create_middleman_data_files
130
+ template 'data/metadata.yml.tt', File.join(data_directory, 'metadata.yml')
131
+ template 'data/config.yml.tt', File.join(data_directory, 'config.yml')
132
+ end
133
+
134
+ def create_bower_configuration_files
135
+ template '.bowerrc.tt', File.join(root_directory, '.bowerrc')
136
+ template 'bower.json.tt', File.join(root_directory, 'bower.json')
137
+ end
138
+
139
+ def create_rake_file
140
+ template 'Rakefile', File.join(root_directory, 'Rakefile')
141
+ end
142
+
143
+ def create_slides_ignore_file
144
+ create_file File.join(root_directory, '.slidesignore'), "# empty\n"
145
+ end
146
+
147
+ def add_gems_to_gem_file
148
+ if ENV['MM_ENV'] == 'development'
149
+ append_to_file File.join(root_directory, 'Gemfile'), <<-EOS.strip_heredoc
150
+
151
+ gem 'middleman-presentation', path: '#{File.expand_path('../../../../', __FILE__)}
152
+
153
+ EOS
154
+ else
155
+ append_to_file File.join(root_directory, 'Gemfile'), <<-EOS.strip_heredoc
156
+
157
+ gem 'middleman-presentation'
158
+
159
+ EOS
160
+ end
161
+
162
+ append_to_file File.join(root_directory, 'Gemfile'), <<-EOS.strip_heredoc
163
+
164
+ group :development, :test do
165
+ gem 'pry'
166
+ gem 'byebug'
167
+ gem 'pry-byebug'
168
+ end
169
+
170
+ gem 'kramdown'
171
+ gem 'github-markup'
172
+ gem 'liquid'
173
+ gem 'rake'
174
+ EOS
175
+ end
176
+
177
+ def add_configuration_for_middleman_presentation
178
+ append_to_file File.join(root_directory, 'config.rb'), <<-EOS.strip_heredoc
179
+
180
+ activate :presentation
181
+
182
+ set :markdown_engine, :kramdown
183
+ set :markdown, parse_block_html: true
184
+
185
+ bower_directory = '#{@bower_directory}'
186
+
187
+ if respond_to?(:sprockets) && sprockets.respond_to?(:import_asset)
188
+ sprockets.append_path File.join(root, bower_directory)
189
+
190
+ patterns = [
191
+ '.png', '.gif', '.jpg', '.jpeg', '.svg', # Images
192
+ '.eot', '.otf', '.svc', '.woff', '.ttf', # Fonts
193
+ '.js', # Javascript
194
+ ].map { |e| File.join(bower_directory, '**', "*\#{e}") }
195
+
196
+ require 'rake/file_list'
197
+
198
+ list = Rake::FileList.new(*patterns) do |l|
199
+ l.exclude(/src/)
200
+ l.exclude(/test/)
201
+ l.exclude(/demo/)
202
+ l.exclude { |f| !File.file? f }
203
+ end
204
+
205
+ list.each do |f|
206
+ sprockets.import_asset Pathname.new(f).relative_path_from(Pathname.new(bower_directory))
207
+ end
208
+
209
+ Rake::FileList.new(File.join('vendor/assets/components', '**', 'notes.html' )).each do |f|
210
+ sprockets.import_asset(Pathname.new(f).relative_path_from(Pathname.new(bower_directory))) { |local_path| Pathname.new('javascripts') + local_path }
211
+ end
212
+
213
+ Rake::FileList.new(File.join('vendor/assets/components', '**', 'pdf.css' )).each do |f|
214
+ sprockets.import_asset(Pathname.new(f).relative_path_from(Pathname.new(bower_directory))) { |local_path| Pathname.new('stylesheets') + local_path }
215
+ end
216
+ end
217
+ EOS
218
+ end
219
+
220
+ def add_patterns_to_gitignore
221
+ append_to_file File.join(root_directory, '.gitignore'), <<-EOS.strip_heredoc
222
+ *.zip
223
+ *.tar.gz
224
+ tmp/
225
+ EOS
226
+ end
227
+
228
+ def create_application_asset_files
229
+ template 'source/stylesheets/application.scss.tt', File.join(middleman_source_directory, 'stylesheets', 'application.scss')
230
+ template 'source/javascripts/application.js.tt', File.join(middleman_source_directory, 'javascripts', 'application.js')
231
+ end
232
+
233
+ def create_image_directory
234
+ empty_directory File.join(middleman_source_directory, 'images')
235
+ end
236
+
237
+ def create_presentation_layout
238
+ copy_file 'source/layout.erb', File.join(middleman_source_directory, 'layout.erb')
239
+ copy_file 'source/index.html.erb', File.join(middleman_source_directory, 'index.html.erb')
240
+ end
241
+
242
+ def create_default_slides
243
+ return unless options[:create_predefined_slides]
244
+
245
+ PredefinedSlideTemplateDirectory.new(working_directory: root_directory).template_files.each do |file|
246
+ template file, File.join(slides_directory, File.basename(file, '.tt'))
247
+ end
248
+ end
249
+
250
+ def create_default_license_file_to_presentation
251
+ copy_file 'LICENSE.presentation', File.join(root_directory, 'LICENSE.presentation')
252
+ end
253
+
254
+ def create_helper_scripts
255
+ %w(start bootstrap slide presentation build).each do |s|
256
+ copy_file File.join('script', s), File.join(root_directory, 'script', s)
257
+ chmod File.join(root_directory, 'script', s), 0755
258
+ end
259
+ end
260
+
261
+ def install_external_assets
262
+ inside directory do
263
+ message = format('`bower`-command cannot be found in PATH "%s". Please make sure it is installed and PATH includes the directory where is stored.', ENV['PATH'])
264
+ fail Thor::Error, message if options[:check_for_bower] && File.which('bower').blank?
265
+
266
+ result = run('bower update', capture: true) if options[:install_assets] == true
267
+ fail Thor::Error, "Error executing `bower`-command. Please fix your setup and run again:\n#{result}" unless $CHILD_STATUS.exitstatus == 0
268
+ end
269
+ end
270
+
271
+ def install_gems
272
+ inside directory do
273
+ Bundler.with_clean_env do
274
+ result = run('bundle install', capture: true) if options[:install_assets] == true
275
+ fail Thor::Error, "Error executing `bundle`-command. Please fix your setup and run again:\n#{result}" unless $CHILD_STATUS.exitstatus == 0
276
+ end
277
+ end
278
+ end
279
+
280
+ def initialize_git_directory
281
+ return unless options[:initialize_git]
282
+
283
+ inside directory do
284
+ run 'git init'
285
+ run 'git add -A .'
286
+ run 'git commit -m Init'
287
+ end
288
+ end
289
+
290
+ no_commands do
291
+ attr_reader :root_directory
292
+
293
+ def data_directory
294
+ File.join root_directory, 'data'
295
+ end
296
+
297
+ def middleman_source_directory
298
+ File.join root_directory, 'source'
299
+ end
300
+
301
+ def slides_directory
302
+ File.join middleman_source_directory, Middleman::Presentation.config.slides_directory
303
+ end
304
+ end
305
+ end
306
+ end
307
+ end
308
+ end