middleman-core 3.4.0 → 3.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -7
  3. data/features/clean_build.feature +18 -0
  4. data/features/cli/preview_server-hook.feature +17 -0
  5. data/features/cli/preview_server.feature +20 -20
  6. data/features/data.feature +28 -0
  7. data/features/step_definitions/queryable_steps.rb +122 -45
  8. data/features/stylus.feature +1 -1
  9. data/fixtures/asciidoc-app/source/hello-with-title.adoc +1 -0
  10. data/fixtures/clean-app/config-hidden-dir-after.rb +5 -0
  11. data/fixtures/clean-app/config-hidden-dir-before.rb +1 -0
  12. data/fixtures/preview-server-hook-app/config.rb +19 -0
  13. data/fixtures/preview-server-hook-app/source/index.html.erb +9 -0
  14. data/lib/middleman-core.rb +0 -4
  15. data/lib/middleman-core/application.rb +3 -0
  16. data/lib/middleman-core/cli.rb +1 -1
  17. data/lib/middleman-core/cli/build.rb +1 -1
  18. data/lib/middleman-core/cli/server.rb +1 -1
  19. data/lib/middleman-core/configuration.rb +1 -1
  20. data/lib/middleman-core/core_extensions/data.rb +4 -8
  21. data/lib/middleman-core/core_extensions/data/file_loader.rb +71 -0
  22. data/lib/middleman-core/core_extensions/rendering.rb +8 -8
  23. data/lib/middleman-core/core_extensions/show_exceptions.rb +1 -1
  24. data/lib/middleman-core/dns_resolver/basic_network_resolver.rb +2 -2
  25. data/lib/middleman-core/extensions.rb +0 -2
  26. data/lib/middleman-core/meta_pages/sitemap_resource.rb +2 -0
  27. data/lib/middleman-core/meta_pages/sitemap_tree.rb +1 -1
  28. data/lib/middleman-core/preview_server.rb +9 -10
  29. data/lib/middleman-core/preview_server/server_information.rb +12 -3
  30. data/lib/middleman-core/preview_server/server_information_callback_proxy.rb +35 -0
  31. data/lib/middleman-core/preview_server/server_url.rb +17 -4
  32. data/lib/middleman-core/renderers/asciidoc.rb +1 -1
  33. data/lib/middleman-core/renderers/liquid.rb +1 -1
  34. data/lib/middleman-core/sitemap/extensions/content_type.rb +1 -1
  35. data/lib/middleman-core/sitemap/store.rb +9 -8
  36. data/lib/middleman-core/step_definitions.rb +1 -1
  37. data/lib/middleman-core/step_definitions/builder_steps.rb +10 -12
  38. data/lib/middleman-core/step_definitions/commandline_steps.rb +9 -9
  39. data/lib/middleman-core/step_definitions/middleman_steps.rb +10 -2
  40. data/lib/middleman-core/step_definitions/server_steps.rb +50 -30
  41. data/lib/middleman-core/templates/shared/Gemfile.tt +2 -2
  42. data/lib/middleman-core/templates/shared/config.ru +0 -1
  43. data/lib/middleman-core/templates/shared/gitignore +3 -0
  44. data/lib/middleman-core/util.rb +1 -1
  45. data/lib/middleman-core/version.rb +1 -1
  46. data/lib/middleman-more/core_extensions/default_helpers.rb +13 -2
  47. data/lib/middleman-more/extensions/cache_buster.rb +1 -1
  48. data/middleman-core.gemspec +4 -2
  49. metadata +15 -5
  50. data/.gemtest +0 -0
  51. data/.rspec +0 -1
@@ -6,7 +6,7 @@ module Middleman
6
6
  class ServerUrl
7
7
  private
8
8
 
9
- attr_reader :hosts, :port, :https
9
+ attr_reader :hosts, :port, :https, :format_output
10
10
 
11
11
  public
12
12
 
@@ -14,6 +14,7 @@ module Middleman
14
14
  @hosts = opts.fetch(:hosts)
15
15
  @port = opts.fetch(:port)
16
16
  @https = opts.fetch(:https, false)
17
+ @format_output = opts.fetch(:format_output, true)
17
18
  end
18
19
 
19
20
  # Return bind addresses
@@ -21,7 +22,11 @@ module Middleman
21
22
  # @return [Array]
22
23
  # List of bind addresses of format host:port
23
24
  def to_bind_addresses
24
- hosts.map { |l| format('"%s:%s"', l.to_s, port) }
25
+ if format_output
26
+ hosts.map { |l| format('"%s:%s"', l.to_s, port) }
27
+ else
28
+ hosts.map { |l| format('%s:%s', l.to_s, port) }
29
+ end
25
30
  end
26
31
 
27
32
  # Return server urls
@@ -29,7 +34,11 @@ module Middleman
29
34
  # @return [Array]
30
35
  # List of urls of format http://host:port
31
36
  def to_urls
32
- hosts.map { |l| format('"%s://%s:%s"', https? ? 'https' : 'http', l.to_browser, port) }
37
+ if format_output
38
+ hosts.map { |l| format('"%s://%s:%s"', https? ? 'https' : 'http', l.to_browser, port) }
39
+ else
40
+ hosts.map { |l| format('%s://%s:%s', https? ? 'https' : 'http', l.to_browser, port) }
41
+ end
33
42
  end
34
43
 
35
44
  # Return server config urls
@@ -37,7 +46,11 @@ module Middleman
37
46
  # @return [Array]
38
47
  # List of urls of format http://host:port/__middleman
39
48
  def to_config_urls
40
- hosts.map { |l| format('"%s://%s:%s/__middleman"', https? ? 'https' : 'http', l.to_browser, port) }
49
+ if format_output
50
+ hosts.map { |l| format('"%s://%s:%s/__middleman"', https? ? 'https' : 'http', l.to_browser, port) }
51
+ else
52
+ hosts.map { |l| format('%s://%s:%s/__middleman', https? ? 'https' : 'http', l.to_browser, port) }
53
+ end
41
54
  end
42
55
 
43
56
  private
@@ -8,7 +8,7 @@ module Middleman
8
8
  app.config.define_setting :asciidoc, {
9
9
  safe: :safe,
10
10
  backend: :html5,
11
- attributes: %W(showtitle env=middleman env-middleman middleman-version=#{::Middleman::VERSION})
11
+ attributes: %W(env=middleman env-middleman middleman-version=#{::Middleman::VERSION})
12
12
  }, 'AsciiDoc engine options (Hash)'
13
13
  app.config.define_setting :asciidoc_attributes, [], 'AsciiDoc custom attributes (Array)'
14
14
  app.before_configuration do
@@ -7,7 +7,7 @@ module Middleman
7
7
  module Liquid
8
8
  # Setup extension
9
9
  class << self
10
- # Once registerd
10
+ # Once registered
11
11
  def registered(app)
12
12
  app.before_configuration do
13
13
  template_extensions liquid: :html
@@ -5,7 +5,7 @@ module Middleman::Sitemap::Extensions
5
5
  module ContentType
6
6
  # The preferred MIME content type for this resource
7
7
  def content_type
8
- # Allow explcitly setting content type from page/proxy options
8
+ # Allow explicitly setting content type from page/proxy options
9
9
  meta_type = metadata[:options][:content_type]
10
10
  return meta_type if meta_type
11
11
 
@@ -54,7 +54,7 @@ module Middleman
54
54
  rebuild_resource_list!(:registered_new)
55
55
  end
56
56
 
57
- # Rebuild the list of resources from scratch, using registed manipulators
57
+ # Rebuild the list of resources from scratch, using registered manipulators
58
58
  # rubocop:disable UnusedMethodArgument
59
59
  # @return [void]
60
60
  def rebuild_resource_list!(reason=nil)
@@ -99,7 +99,7 @@ module Middleman
99
99
  end
100
100
  end
101
101
 
102
- # Invalidate our cached view of resource that are not ingnored. If your extension
102
+ # Invalidate our cached view of resource that are not ignored. If your extension
103
103
  # adds ways to ignore files, you should call this to make sure #resources works right.
104
104
  def invalidate_resources_not_ignored_cache!
105
105
  @resources_not_ignored = nil
@@ -211,20 +211,21 @@ module Middleman
211
211
 
212
212
  @app.logger.debug '== Rebuilding resource list'
213
213
 
214
- @resources = @resource_list_manipulators.reduce([]) do |result, (_, inst)|
215
- newres = inst.manipulate_resource_list(result)
214
+ @resources = []
215
+
216
+ @resource_list_manipulators.each do |(_, inst)|
217
+ @resources = inst.manipulate_resource_list(@resources)
216
218
 
217
219
  # Reset lookup cache
218
220
  reset_lookup_cache!
219
- newres.each do |resource|
221
+
222
+ @resources.each do |resource|
220
223
  @_lookup_by_path[resource.path] = resource
221
224
  @_lookup_by_destination_path[resource.destination_path] = resource
222
225
  end
223
226
 
224
- newres
227
+ invalidate_resources_not_ignored_cache!
225
228
  end
226
-
227
- invalidate_resources_not_ignored_cache!
228
229
  end
229
230
  end
230
231
 
@@ -1,5 +1,5 @@
1
1
  require 'aruba/cucumber'
2
- require 'aruba/jruby'
2
+ require 'aruba/config/jruby'
3
3
  require 'middleman-core/step_definitions/middleman_steps'
4
4
  require 'middleman-core/step_definitions/builder_steps'
5
5
  require 'middleman-core/step_definitions/server_steps'
@@ -5,29 +5,27 @@ Before do
5
5
  end
6
6
 
7
7
  Given /^app "([^\"]*)" is using config "([^\"]*)"$/ do |path, config_name|
8
- target = File.join(PROJECT_ROOT_PATH, 'fixtures', path)
9
- config_path = File.join(current_directory, "config-#{config_name}.rb")
10
- config_dest = File.join(current_directory, 'config.rb')
11
- FileUtils.cp(config_path, config_dest)
8
+ copy("config-#{config_name}.rb", 'config.rb')
12
9
  end
13
10
 
14
11
  Given /^an empty app$/ do
15
12
  step %Q{a directory named "empty_app"}
16
13
  step %Q{I cd to "empty_app"}
17
- ENV['MM_ROOT'] = nil
14
+
15
+ delete_environment_variable 'MM_ROOT'
18
16
  end
19
17
 
20
18
  Given /^a fixture app "([^\"]*)"$/ do |path|
21
- ENV['MM_ROOT'] = nil
19
+ delete_environment_variable 'MM_ROOT'
22
20
 
23
21
  # This step can be reentered from several places but we don't want
24
22
  # to keep re-copying and re-cd-ing into ever-deeper directories
25
- next if File.basename(current_directory) == path
23
+ next if File.basename(expand_path('.')) == path
26
24
 
27
25
  step %Q{a directory named "#{path}"}
28
26
 
29
27
  target_path = File.join(PROJECT_ROOT_PATH, 'fixtures', path)
30
- FileUtils.cp_r(target_path, current_directory)
28
+ FileUtils.cp_r(target_path, expand_path('.'))
31
29
 
32
30
  step %Q{I cd to "#{path}"}
33
31
  end
@@ -58,20 +56,20 @@ Given /^a successfully built app at "([^\"]*)" with flags "([^\"]*)"$/ do |path,
58
56
  end
59
57
 
60
58
  Given /^a modification time for a file named "([^\"]*)"$/ do |file|
61
- target = File.join(current_directory, file)
59
+ target = expand_path(file)
62
60
  @modification_times[target] = File.mtime(target)
63
61
  end
64
62
 
65
63
  Then /^the file "([^\"]*)" should not have been updated$/ do |file|
66
- target = File.join(current_directory, file)
64
+ target = expand_path(file)
67
65
  File.mtime(target).should == @modification_times[target]
68
66
  end
69
67
 
70
68
  # Provide this Aruba overload in case we're matching something with quotes in it
71
69
  Then /^the file "([^"]*)" should contain '([^']*)'$/ do |file, partial_content|
72
- check_file_content(file, Regexp.new(Regexp.escape(partial_content)), true)
70
+ expect(file).to have_file_content Regexp.new(Regexp.escape(partial_content))
73
71
  end
74
72
 
75
73
  And /the file "(.*)" should be gzipped/ do |file|
76
- expect(File.binread(File.join(current_directory, file), 2)).to eq(['1F8B'].pack('H*'))
74
+ expect(File.binread(expand_path(file), 2)).to eq(['1F8B'].pack('H*'))
77
75
  end
@@ -1,11 +1,11 @@
1
1
  When /^I stop (?:middleman|all commands) if the output( of the last command)? contains:$/ do |last_command, expected|
2
2
  begin
3
- Timeout.timeout(exit_timeout) do
3
+ Timeout.timeout(aruba.config.exit_timeout) do
4
4
  loop do
5
- fail "You need to start middleman interactively first." unless @interactive
5
+ fail "You need to start middleman interactively first." if last_command_started.nil?
6
6
 
7
- if unescape(@interactive.output) =~ Regexp.new(unescape(expected))
8
- only_processes.each { |p| p.terminate }
7
+ if sanitize_text(last_command_started.output) =~ Regexp.new(sanitize_text(expected))
8
+ terminate_all_commands
9
9
  break
10
10
  end
11
11
 
@@ -13,10 +13,10 @@ When /^I stop (?:middleman|all commands) if the output( of the last command)? co
13
13
  end
14
14
  end
15
15
  rescue ChildProcess::TimeoutError, TimeoutError
16
- @interactive.terminate
16
+ terminate_all_commands
17
17
  ensure
18
- announcer.stdout @interactive.stdout
19
- announcer.stderr @interactive.stderr
18
+ announcer.announce :stdout, last_command_started.stdout
19
+ announcer.announce :stderr, last_command_started.stderr
20
20
  end
21
21
  end
22
22
 
@@ -68,7 +68,7 @@ Given /I start a mdns server with:/ do |string|
68
68
  )
69
69
  )
70
70
 
71
- set_env 'PATH', File.expand_path(File.join(current_dir, 'bin')) + ':' + ENV['PATH']
71
+ set_environment_variable 'PATH', File.expand_path(File.join(current_dir, 'bin')) + ':' + ENV['PATH']
72
72
  write_file db_file, string
73
73
 
74
74
  @mdns_server = run("dns_server.rb #{db_file} #{port}", 120)
@@ -80,7 +80,7 @@ end
80
80
 
81
81
  # Make sure each and every process is really dead
82
82
  After do
83
- only_processes.each { |p| p.terminate }
83
+ terminate_all_commands
84
84
  end
85
85
 
86
86
  Before '@ruby-2.1' do
@@ -9,9 +9,17 @@ Then /^the file "([^\"]*)" is removed$/ do |path|
9
9
  end
10
10
 
11
11
  Then /^the file "([^\"]*)" did change$/ do |path|
12
- @server_inst.files.did_change(path)
12
+ cd '.' do
13
+ with_environment do
14
+ @server_inst.files.did_change(path)
15
+ end
16
+ end
13
17
  end
14
18
 
15
19
  Then /^the file "([^\"]*)" did delete$/ do |path|
16
- @server_inst.files.did_delete(path)
20
+ cd '.' do
21
+ with_environment do
22
+ @server_inst.files.did_delete(path)
23
+ end
24
+ end
17
25
  end
@@ -31,15 +31,13 @@ Given /^current environment is "([^\"]*)"$/ do |env|
31
31
  end
32
32
 
33
33
  Given /^the Server is running$/ do
34
- root_dir = File.expand_path(current_directory)
35
-
36
- if File.exists?(File.join(root_dir, 'source'))
37
- ENV['MM_SOURCE'] = 'source'
34
+ if exist? 'source'
35
+ set_environment_variable 'MM_SOURCE', 'source'
38
36
  else
39
- ENV['MM_SOURCE'] = ''
37
+ set_environment_variable 'MM_SOURCE', ''
40
38
  end
41
39
 
42
- ENV['MM_ROOT'] = root_dir
40
+ set_environment_variable 'MM_ROOT', expand_path('.')
43
41
 
44
42
  initialize_commands = @initialize_commands || []
45
43
  initialize_commands.unshift lambda {
@@ -47,10 +45,12 @@ Given /^the Server is running$/ do
47
45
  set :show_exceptions, false
48
46
  }
49
47
 
50
- in_current_directory do
51
- @server_inst = Middleman::Application.server.inst do
52
- initialize_commands.each do |p|
53
- instance_exec(&p)
48
+ cd '.' do
49
+ with_environment do
50
+ @server_inst = Middleman::Application.server.inst do
51
+ initialize_commands.each do |p|
52
+ instance_exec(&p)
53
+ end
54
54
  end
55
55
  end
56
56
  end
@@ -68,61 +68,81 @@ Given /^a template named "([^\"]*)" with:$/ do |name, string|
68
68
  end
69
69
 
70
70
  When /^I go to "([^\"]*)"$/ do |url|
71
- in_current_directory do
72
- visit(URI.encode(url).to_s)
71
+ cd '.' do
72
+ with_environment do
73
+ visit(URI.encode(url).to_s)
74
+ end
73
75
  end
74
76
  end
75
77
 
76
78
  Then /^going to "([^\"]*)" should not raise an exception$/ do |url|
77
- in_current_directory do
78
- expect{ visit(URI.encode(url).to_s) }.to_not raise_exception
79
+ cd '.' do
80
+ with_environment do
81
+ expect{ visit(URI.encode(url).to_s) }.to_not raise_exception
82
+ end
79
83
  end
80
84
  end
81
85
 
82
86
  Then /^the content type should be "([^\"]*)"$/ do |expected|
83
- in_current_directory do
84
- expect(page.response_headers['Content-Type']).to start_with expected
87
+ cd '.' do
88
+ with_environment do
89
+ expect(page.response_headers['Content-Type']).to start_with expected
90
+ end
85
91
  end
86
92
  end
87
93
 
88
94
  Then /^I should see "([^\"]*)"$/ do |expected|
89
- in_current_directory do
90
- expect(page.body).to include expected
95
+ cd '.' do
96
+ with_environment do
97
+ expect(page.body).to include expected
98
+ end
91
99
  end
92
100
  end
93
101
 
94
102
  Then /^I should see '([^\']*)'$/ do |expected|
95
- in_current_directory do
96
- expect(page.body).to include expected
103
+ cd '.' do
104
+ with_environment do
105
+ expect(page.body).to include expected
106
+ end
97
107
  end
98
108
  end
99
109
 
100
110
  Then /^I should see:$/ do |expected|
101
- in_current_directory do
102
- expect(page.body).to include expected
111
+ cd '.' do
112
+ with_environment do
113
+ expect(page.body).to include expected
114
+ end
103
115
  end
104
116
  end
105
117
 
106
118
  Then /^I should not see "([^\"]*)"$/ do |expected|
107
- in_current_directory do
108
- expect(page.body).not_to include expected
119
+ cd '.' do
120
+ with_environment do
121
+ expect(page.body).not_to include expected
122
+ end
109
123
  end
110
124
  end
111
125
 
112
126
  Then /^I should not see:$/ do |expected|
113
- in_current_directory do
114
- expect(page.body).not_to include expected
127
+ cd '.' do
128
+ with_environment do
129
+ expect(page.body).not_to include expected
130
+ end
115
131
  end
116
132
  end
117
133
 
118
134
  Then /^the status code should be "([^\"]*)"$/ do |expected|
119
- in_current_directory do
120
- expect(page.status_code).to eq expected.to_i
135
+ cd '.' do
136
+ with_environment do
137
+ expect(page.status_code).to eq expected.to_i
138
+ end
121
139
  end
122
140
  end
123
141
 
124
142
  Then /^I should see "([^\"]*)" lines$/ do |lines|
125
- in_current_directory do
126
- expect(page.body.chomp.split($/).length).to eq lines.to_i
143
+ cd '.' do
144
+ with_environment do
145
+ expect(page.body.chomp.split($/).length).to eq lines.to_i
146
+ end
127
147
  end
128
148
  end
@@ -5,10 +5,10 @@ source 'https://rubygems.org'
5
5
  gem "middleman", "~><%= Middleman::VERSION %>"
6
6
 
7
7
  # Live-reloading plugin
8
- gem "middleman-livereload", "~> 3.1.0"
8
+ gem "middleman-livereload", "~> 3.3.0"
9
9
 
10
10
  # For faster file watcher updates on Windows:
11
11
  gem "wdm", "~> 0.1.0", :platforms => [:mswin, :mingw]
12
12
 
13
13
  # Windows does not come with time zone data
14
- gem "tzinfo-data", platforms: [:mswin, :mingw, :jruby]
14
+ gem "tzinfo-data", platforms: [:mswin, :mingw, :jruby]
@@ -1,4 +1,3 @@
1
- require 'rubygems'
2
1
  require 'middleman/rack'
3
2
 
4
3
  run Middleman.server
@@ -16,3 +16,6 @@
16
16
 
17
17
  # Ignore .DS_store file
18
18
  .DS_Store
19
+
20
+ # Ignore gems installed in local directory
21
+ /vendor/bundle/
@@ -112,7 +112,7 @@ module Middleman
112
112
  end
113
113
  end
114
114
 
115
- # Get a recusive list of files inside a path.
115
+ # Get a recursive list of files inside a path.
116
116
  # Works with symlinks.
117
117
  #
118
118
  # @param path Some path string or Pathname
@@ -1,5 +1,5 @@
1
1
  module Middleman
2
2
  # Current Version
3
3
  # @return [String]
4
- VERSION = '3.4.0' unless const_defined?(:VERSION)
4
+ VERSION = '3.4.1' unless const_defined?(:VERSION)
5
5
  end