middleman-cli 4.5.1 → 5.0.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/.simplecov +2 -2
  3. data/bin/middleman +8 -11
  4. data/lib/middleman-cli/build.rb +45 -10
  5. data/lib/middleman-cli/extension.rb +0 -1
  6. data/lib/middleman-cli/init.rb +53 -34
  7. data/lib/middleman-cli/templates/extension/Gemfile +1 -1
  8. data/lib/middleman-cli/templates/extension/Rakefile +1 -1
  9. data/lib/middleman-cli/templates/extension/gemspec +1 -2
  10. data/lib/middleman-cli/templates/extension/lib/lib/extension.rb +1 -1
  11. data/lib/middleman-cli/templates/extension/lib/lib.rb +1 -1
  12. data/lib/middleman-cli.rb +1 -3
  13. data/middleman-cli.gemspec +4 -5
  14. metadata +10 -30
  15. data/features/cli_extension.feature +0 -14
  16. data/features/cli_init.feature +0 -92
  17. data/features/preview_server-hook.feature +0 -17
  18. data/features/preview_server.feature +0 -535
  19. data/features/support/env.rb +0 -12
  20. data/fixtures/preview-server-app/bin/dns_server.rb +0 -33
  21. data/fixtures/preview-server-app/config.rb +0 -0
  22. data/fixtures/preview-server-app/source/index.html.erb +0 -1
  23. data/fixtures/preview-server-app/source/layout.erb +0 -9
  24. data/fixtures/preview-server-app/source/layouts/custom.erb +0 -8
  25. data/fixtures/preview-server-app/source/real/index.html.erb +0 -5
  26. data/fixtures/preview-server-app/source/real.html +0 -1
  27. data/fixtures/preview-server-app/source/should_be_ignored.html +0 -1
  28. data/fixtures/preview-server-app/source/should_be_ignored2.html +0 -1
  29. data/fixtures/preview-server-app/source/should_be_ignored3.html +0 -1
  30. data/fixtures/preview-server-app/source/static.html +0 -1
  31. data/fixtures/preview-server-hook-app/config.rb +0 -19
  32. data/fixtures/preview-server-hook-app/source/index.html.erb +0 -9
  33. data/spec/middleman/.gitkeep +0 -1
  34. data/spec/spec_helper.rb +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 64d539f5b6ac020613f485f415b05f410c47d6c34659846417c4cd282a3ef32c
4
- data.tar.gz: 65827c5584f6328b86b1d050887b6a5225633d11a893c34f66ac302a4e12ca04
3
+ metadata.gz: 19953457367b99c42c2eabb63a759d447fd652b18baef40c0b1f85b37bca20ca
4
+ data.tar.gz: 62e4b6c8ab48aa2e560f43441cbd9cfc7c82d020d017628f6f7ecd1a8fd73457
5
5
  SHA512:
6
- metadata.gz: 0c215811b72280cce30ec62e37c85e964067e773c9ae564b7efb2e4d00b1ae09f4993b3d9de40c75537901b165dd8457157b9a9cb01cc0bb85ca55f39142d927
7
- data.tar.gz: fe1d522c15390c53f4ccb8223406f1a259b39f7afe3fc95d479f5a6e8ab12baa66a4ded9860d2a56d37a4b6ac20ff82ced77e112027da2b988ba561ced23954e
6
+ metadata.gz: 77c8d219e000a0239f8af2ae6447c11e8636e0907116a563a82a36c301a18f7f140e1fa55e494c44a6f004208c3ff300c6feb0e1e01293ff6a9fa5a8cec0a5ec
7
+ data.tar.gz: d88dcf0a57b1ddb76d5af0735f18b951b52926d61f8d875770b6b4f785deef449ab64eb014eb58c17f85f0b76dd781c4cca85153b50e97c66b956c2548560dc9
data/.simplecov CHANGED
@@ -1,7 +1,7 @@
1
- SimpleCov.configure do
1
+ SimpleCov.start do
2
2
  add_filter '/fixtures/'
3
3
  add_filter '/features/'
4
4
  add_filter '/spec/'
5
5
  add_filter '/step_definitions/'
6
6
  add_filter '/lib/vendored-middleman-deps/'
7
- end
7
+ end
data/bin/middleman CHANGED
@@ -1,12 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'middleman-core/profiling'
4
- if ARGV.include? '--profile'
5
- Middleman::Profiling.profiler = Middleman::Profiling::RubyProfProfiler.new
6
- end
7
- # Middleman::Profiling.start
4
+ Middleman::Profiling.profiler = Middleman::Profiling::RubyProfProfiler.new if ARGV.include? '--profile'
8
5
 
9
- require "middleman-core/load_paths"
6
+ require 'middleman-core/load_paths'
10
7
  Middleman.setup_load_paths
11
8
 
12
9
  require 'dotenv'
@@ -35,19 +32,16 @@ module Middleman::Cli
35
32
  end
36
33
  end
37
34
 
38
- require "middleman-cli"
35
+ require 'middleman-cli'
39
36
 
40
37
  # Change directory to the root
41
- Dir.chdir(ENV["MM_ROOT"]) if ENV["MM_ROOT"]
38
+ Dir.chdir(ENV['MM_ROOT']) if ENV['MM_ROOT']
42
39
 
43
40
  # Default command is server
44
- if ARGV[0] != 'help' && (ARGV.length < 1 || ARGV.first.include?('-'))
45
- ARGV.unshift('server')
46
- end
41
+ ARGV.unshift('server') if ARGV[0] != 'help' && (ARGV.empty? || ARGV.first.include?('-'))
47
42
 
48
43
  ::Middleman::Logger.singleton(3)
49
44
  ::Middleman::Cli.config = ::Middleman::Application.new do
50
- #
51
45
  config[:environment] = (ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development').to_sym
52
46
  config[:mode] = :config
53
47
  config[:exit_before_ready] = true
@@ -66,5 +60,8 @@ require 'middleman-cli/build'
66
60
  require 'middleman-cli/console'
67
61
  require 'middleman-cli/config'
68
62
 
63
+ # Support NO_COLOR: https://no-color.org
64
+ ENV['THOR_SHELL'] = 'Basic' if ENV['NO_COLOR']
65
+
69
66
  # Start the CLI
70
67
  Middleman::Cli::Base.start(ARGV)
@@ -40,15 +40,39 @@ module Middleman::Cli
40
40
  type: :boolean,
41
41
  default: false,
42
42
  desc: 'Generate profiling report for the build'
43
+ class_option :dry_run,
44
+ type: :boolean,
45
+ default: false,
46
+ desc: 'Skip writing output files'
47
+ class_option :track_dependencies,
48
+ type: :boolean,
49
+ default: false,
50
+ desc: 'Track file dependencies'
51
+ class_option :data_collection_depth,
52
+ type: :numeric,
53
+ default: ::Float::INFINITY,
54
+ desc: 'How deep to recurse into data structures when tracking changes.'
55
+ class_option :visualize_graph,
56
+ type: :boolean,
57
+ default: false,
58
+ desc: 'Generate a visual of the dependency graph'
59
+ class_option :only_changed,
60
+ type: :boolean,
61
+ default: false,
62
+ desc: 'Only build changed files'
63
+ class_option :missing_and_changed,
64
+ type: :boolean,
65
+ default: false,
66
+ desc: 'Only build changed files or files missing from build folder'
43
67
 
44
68
  Middleman::Cli.import_config(self)
45
69
 
46
70
  # Core build Thor command
47
71
  # @return [void]
48
72
  def build
49
- unless ENV['MM_ROOT']
50
- raise Thor::Error, 'Error: Could not find a Middleman project config, perhaps you are in the wrong folder?'
51
- end
73
+ root = ENV['MM_ROOT'] || Dir.pwd
74
+
75
+ raise Thor::Error, 'Error: Could not find a Middleman project config, perhaps you are in the wrong folder?' unless File.exist?(File.join(root, 'config.rb'))
52
76
 
53
77
  require 'middleman-core'
54
78
  require 'middleman-core/logger'
@@ -64,18 +88,29 @@ module Middleman::Cli
64
88
  ::Middleman::Logger.singleton(verbose, instrument)
65
89
 
66
90
  ::Middleman::Util.instrument 'builder.setup' do
91
+ missing_and_changed = !options['only_changed'] && options['missing_and_changed']
92
+ should_track_dependencies = options['only_changed'] || missing_and_changed || options['track_dependencies']
93
+ data_collection_depth = options['data_collection_depth']
94
+
67
95
  @app = ::Middleman::Application.new do
68
96
  config[:mode] = :build
69
97
  config[:show_exceptions] = false
70
98
  config[:cli_options] = cli_options.each_with_object({}) do |(k, v), sum|
71
99
  sum[k] = v
72
100
  end
101
+ config[:track_data_access] = should_track_dependencies
102
+ config[:data_collection_depth] = data_collection_depth
73
103
  end
74
104
 
75
105
  builder = Middleman::Builder.new(@app,
76
106
  glob: options['glob'],
107
+ dry_run: options['dry_run'],
77
108
  clean: options['clean'],
78
- parallel: options['parallel'])
109
+ parallel: options['parallel'],
110
+ only_changed: options['only_changed'],
111
+ missing_and_changed: missing_and_changed,
112
+ track_dependencies: should_track_dependencies,
113
+ visualize_graph: options['visualize_graph'])
79
114
  builder.thor = self
80
115
  builder.on_build_event(&method(:on_event))
81
116
  end
@@ -83,12 +118,10 @@ module Middleman::Cli
83
118
  ::Middleman::Util.instrument 'builder.run' do
84
119
  if builder.run!
85
120
  clean_directories! if options['clean']
86
- shell.say 'Project built successfully.'
121
+ puts 'Project built successfully.'
87
122
  else
88
123
  msg = 'There were errors during this build'
89
- unless options['verbose']
90
- msg << ', re-run with `middleman build --verbose` to see the full exception.'
91
- end
124
+ msg << ', re-run with `middleman build --verbose` to see the full exception.' unless options['verbose']
92
125
  shell.say msg, :red
93
126
 
94
127
  exit(1)
@@ -100,10 +133,10 @@ module Middleman::Cli
100
133
 
101
134
  # Handles incoming events from the builder.
102
135
  # @param [Symbol] event_type The type of event.
103
- # @param [String] contents The event contents.
136
+ # @param [String] target The event contents.
104
137
  # @param [String] extra The extra information.
105
138
  # @return [void]
106
- def on_event(event_type, target, extra=nil)
139
+ def on_event(event_type, target, extra = nil)
107
140
  case event_type
108
141
  when :error
109
142
  say_status :error, target, :red
@@ -116,6 +149,8 @@ module Middleman::Cli
116
149
  say_status :create, target, :green
117
150
  when :identical
118
151
  say_status :identical, target, :blue
152
+ when :skipped
153
+ say_status :skipped, target, :blue
119
154
  when :updated
120
155
  say_status :updated, target, :yellow
121
156
  else
@@ -24,7 +24,6 @@ module Middleman::Cli
24
24
  class_option :git, type: :boolean, default: true
25
25
 
26
26
  # The extension task
27
- # @param [String] name
28
27
  def extension
29
28
  copy_file 'extension/gitignore', File.join(name, '.gitignore') unless options[:'skip-git']
30
29
  template 'extension/Rakefile', File.join(name, 'Rakefile')
@@ -22,6 +22,10 @@ module Middleman::Cli
22
22
  default: false,
23
23
  desc: 'Skip bundle install'
24
24
 
25
+ class_option 'bundle-path',
26
+ type: :string,
27
+ desc: 'Use specified bundle path'
28
+
25
29
  # The init task
26
30
  def init
27
31
  require 'fileutils'
@@ -35,38 +39,29 @@ module Middleman::Cli
35
39
  end
36
40
 
37
41
  repo_path, repo_branch = if shortname?(options[:template])
38
- require 'open-uri'
39
- require 'json'
40
-
41
- api = 'https://directory.middlemanapp.com/api'
42
- uri = ::URI.parse("#{api}/#{options[:template]}.json")
43
-
44
- begin
45
- data = ::JSON.parse(uri.read)
46
- data['links']['github']
47
- data['links']['github'].split('#')
48
- rescue ::OpenURI::HTTPError
49
- say "Template `#{options[:template]}` not found in Middleman Directory."
50
- say 'Did you mean to use a full `user/repo` path?'
51
- exit 1
52
- end
53
- else
54
- repo_name, repo_branch = options[:template].split('#')
55
- [repository_path(repo_name), repo_branch]
56
- end
57
-
58
- dir = Dir.mktmpdir
42
+ require 'open-uri'
43
+ require 'json'
44
+
45
+ api = 'https://directory.middlemanapp.com/api'
46
+ uri = ::URI.parse("#{api}/#{options[:template]}.json")
47
+
48
+ begin
49
+ data = ::JSON.parse(uri.read)
50
+ is_local_dir = false
51
+ data['links']['github'].split('#')
52
+ rescue ::OpenURI::HTTPError
53
+ say "Template `#{options[:template]}` not found in Middleman Directory."
54
+ say 'Did you mean to use a full `user/repo` path?'
55
+ exit 1
56
+ end
57
+ else
58
+ repo_name, repo_branch = options[:template].split('#')
59
+ repo_path, is_local_dir = repository_path(repo_name)
60
+ [repo_path, repo_branch]
61
+ end
59
62
 
60
63
  begin
61
- branch_cmd = repo_branch ? "-b #{repo_branch} " : ''
62
-
63
- git_path = "#{branch_cmd}#{repo_path}"
64
- run("#{GIT_CMD} clone --depth 1 #{branch_cmd}#{repo_path} #{dir}")
65
-
66
- unless $?.success?
67
- say "Git clone command failed. Make sure git repository exists: #{git_path}", :red
68
- exit 1
69
- end
64
+ dir = is_local_dir ? repo_path : clone_repository(repo_path, repo_branch)
70
65
 
71
66
  inside(target) do
72
67
  thorfile = File.join(dir, 'Thorfile')
@@ -80,10 +75,11 @@ module Middleman::Cli
80
75
  directory dir, '.', exclude_pattern: /\.git\/|\.gitignore$/
81
76
  end
82
77
 
83
- run('bundle install') unless ENV['TEST'] || options[:'skip-bundle']
78
+ bundle_args = options[:'bundle-path'] ? " --path=#{options[:'bundle-path']}" : ''
79
+ run("bundle install#{bundle_args}") unless ENV['TEST'] || options[:'skip-bundle']
84
80
  end
85
81
  ensure
86
- FileUtils.remove_entry(dir) if File.directory?(dir)
82
+ FileUtils.remove_entry(dir) if !is_local_dir && File.directory?(dir)
87
83
  end
88
84
  end
89
85
 
@@ -92,6 +88,7 @@ module Middleman::Cli
92
88
  # Copied from Bundler
93
89
  def git_present?
94
90
  return @git_present if defined?(@git_present)
91
+
95
92
  @git_present = which(GIT_CMD) || which('git.exe')
96
93
  end
97
94
 
@@ -112,8 +109,30 @@ module Middleman::Cli
112
109
  repo.split('/').length == 1
113
110
  end
114
111
 
115
- def repository_path(repo)
116
- repo.include?('://') || repo.include?('git@') ? repo : "https://github.com/#{repo}.git"
112
+ def repository_path(repo_name)
113
+ if repo_name.include?('://') || /^[^@]+@[^:]+:.+/ =~ repo_name
114
+ repo_name
115
+ elsif (repo_path = Pathname(repo_name)).directory? && repo_path.absolute?
116
+ [repo_name, true]
117
+ else
118
+ "https://github.com/#{repo_name}.git"
119
+ end
120
+ end
121
+
122
+ def clone_repository(repo_path, repo_branch)
123
+ dir = Dir.mktmpdir
124
+
125
+ branch_cmd = repo_branch ? "-b #{repo_branch} " : ''
126
+
127
+ git_path = "#{branch_cmd}#{repo_path}"
128
+ run("#{GIT_CMD} clone --depth 1 #{branch_cmd}#{repo_path} #{dir}")
129
+
130
+ unless $CHILD_STATUS.success?
131
+ say "Git clone command failed. Make sure git repository exists: #{git_path}", :red
132
+ exit 1
133
+ end
134
+
135
+ dir
117
136
  end
118
137
 
119
138
  # Add to CLI
@@ -12,7 +12,7 @@ group :development do
12
12
  end
13
13
 
14
14
  group :test do
15
- gem 'cucumber'
16
15
  gem 'aruba'
16
+ gem 'cucumber'
17
17
  gem 'rspec'
18
18
  end
@@ -4,7 +4,7 @@ Bundler::GemHelper.install_tasks
4
4
  require 'cucumber/rake/task'
5
5
 
6
6
  Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
7
- t.cucumber_opts = '--color --tags ~@wip --strict'
7
+ t.cucumber_opts = '--fail-fast --color --tags "not @wip" --strict'
8
8
  end
9
9
 
10
10
  require 'rake/clean'
@@ -11,8 +11,7 @@ Gem::Specification.new do |s|
11
11
  # s.summary = %q{A short summary of your extension}
12
12
  # s.description = %q{A longer description of your extension}
13
13
 
14
- s.files = `git ls-files`.split("\n")
15
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(fixtures|features|spec)/}) }
16
15
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
16
  s.require_paths = ["lib"]
18
17
 
@@ -5,7 +5,7 @@ require 'middleman-core'
5
5
  class MyExtension < ::Middleman::Extension
6
6
  option :my_option, 'default', 'An example option'
7
7
 
8
- def initialize(app, options_hash={}, &block)
8
+ def initialize(app, _options_hash = ::Middleman::EMPTY_HASH, &block)
9
9
  # Call super to build options from the options_hash
10
10
  super
11
11
 
@@ -1,6 +1,6 @@
1
1
  require "middleman-core"
2
2
 
3
3
  Middleman::Extensions.register :<%= name %> do
4
- require "my-extension/extension"
4
+ require "<%= name %>/extension"
5
5
  MyExtension
6
6
  end
data/lib/middleman-cli.rb CHANGED
@@ -1,7 +1,5 @@
1
- # rubocop:disable FileName
2
-
3
1
  # Setup our load paths
4
- libdir = File.expand_path(File.dirname(__FILE__))
2
+ libdir = __dir__
5
3
  $LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
6
4
 
7
5
  # Require Thor since that's what the whole CLI is built around
@@ -11,14 +11,13 @@ Gem::Specification.new do |s|
11
11
  s.email = ['me@tdreyno.com', 'ben@benhollis.net']
12
12
  s.homepage = 'http://middlemanapp.com'
13
13
  s.summary = 'Hand-crafted frontend development'
14
- s.description = 'A static site generator. Provides dozens of templating languages (Haml, Sass, Compass, Slim, CoffeeScript, and more). Makes minification, compression, cache busting, Yaml data (and more) an easy part of your development cycle.'
14
+ s.description = 'A static site generator. Provides dozens of templating languages (Haml, Sass, Slim, CoffeeScript, and more). Makes minification, compression, cache busting, Yaml data (and more) an easy part of your development cycle.'
15
15
 
16
- s.files = `git ls-files -z`.split("\0")
17
- s.test_files = `git ls-files -z -- {fixtures,features}/*`.split("\0")
16
+ s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(fixtures|features|spec)/}) }
18
17
  s.executable = 'middleman'
19
18
  s.require_path = 'lib'
20
- s.required_ruby_version = '>= 2.5.0'
19
+ s.required_ruby_version = '>= 2.3.0'
21
20
 
22
21
  # CLI
23
- s.add_dependency('thor', ['>= 0.17.0', '< 1.3.0'])
22
+ s.add_dependency('thor', ['>= 0.17.0', '< 2.0'])
24
23
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.5.1
4
+ version: 5.0.0.rc.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Reynolds
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-10-23 00:00:00.000000000 Z
12
+ date: 2019-05-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
@@ -20,7 +20,7 @@ dependencies:
20
20
  version: 0.17.0
21
21
  - - "<"
22
22
  - !ruby/object:Gem::Version
23
- version: 1.3.0
23
+ version: '2.0'
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
@@ -30,10 +30,10 @@ dependencies:
30
30
  version: 0.17.0
31
31
  - - "<"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.3.0
33
+ version: '2.0'
34
34
  description: A static site generator. Provides dozens of templating languages (Haml,
35
- Sass, Compass, Slim, CoffeeScript, and more). Makes minification, compression, cache
36
- busting, Yaml data (and more) an easy part of your development cycle.
35
+ Sass, Slim, CoffeeScript, and more). Makes minification, compression, cache busting,
36
+ Yaml data (and more) an easy part of your development cycle.
37
37
  email:
38
38
  - me@tdreyno.com
39
39
  - ben@benhollis.net
@@ -47,24 +47,6 @@ files:
47
47
  - ".yardopts"
48
48
  - Rakefile
49
49
  - bin/middleman
50
- - features/cli_extension.feature
51
- - features/cli_init.feature
52
- - features/preview_server-hook.feature
53
- - features/preview_server.feature
54
- - features/support/env.rb
55
- - fixtures/preview-server-app/bin/dns_server.rb
56
- - fixtures/preview-server-app/config.rb
57
- - fixtures/preview-server-app/source/index.html.erb
58
- - fixtures/preview-server-app/source/layout.erb
59
- - fixtures/preview-server-app/source/layouts/custom.erb
60
- - fixtures/preview-server-app/source/real.html
61
- - fixtures/preview-server-app/source/real/index.html.erb
62
- - fixtures/preview-server-app/source/should_be_ignored.html
63
- - fixtures/preview-server-app/source/should_be_ignored2.html
64
- - fixtures/preview-server-app/source/should_be_ignored3.html
65
- - fixtures/preview-server-app/source/static.html
66
- - fixtures/preview-server-hook-app/config.rb
67
- - fixtures/preview-server-hook-app/source/index.html.erb
68
50
  - lib/middleman-cli.rb
69
51
  - lib/middleman-cli/build.rb
70
52
  - lib/middleman-cli/config.rb
@@ -81,8 +63,6 @@ files:
81
63
  - lib/middleman-cli/templates/extension/lib/lib/extension.rb
82
64
  - lib/middleman-core/cli.rb
83
65
  - middleman-cli.gemspec
84
- - spec/middleman/.gitkeep
85
- - spec/spec_helper.rb
86
66
  homepage: http://middlemanapp.com
87
67
  licenses:
88
68
  - MIT
@@ -95,14 +75,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
95
75
  requirements:
96
76
  - - ">="
97
77
  - !ruby/object:Gem::Version
98
- version: 2.5.0
78
+ version: 2.3.0
99
79
  required_rubygems_version: !ruby/object:Gem::Requirement
100
80
  requirements:
101
- - - ">="
81
+ - - ">"
102
82
  - !ruby/object:Gem::Version
103
- version: '0'
83
+ version: 1.3.1
104
84
  requirements: []
105
- rubygems_version: 3.4.10
85
+ rubygems_version: 3.0.2
106
86
  signing_key:
107
87
  specification_version: 4
108
88
  summary: Hand-crafted frontend development
@@ -1,14 +0,0 @@
1
- Feature: Middleman New Extension CLI
2
-
3
- Scenario: Create a new extension scaffold
4
- Given I run `middleman extension my-extension-library`
5
- Then the exit status should be 0
6
- When I cd to "my-extension-library"
7
- Then the following files should exist:
8
- | Gemfile |
9
- | Rakefile |
10
- | my-extension-library.gemspec |
11
- | features/support/env.rb |
12
- | lib/my-extension-library/extension.rb |
13
- | lib/my-extension-library.rb |
14
- | .gitignore |
@@ -1,92 +0,0 @@
1
- Feature: Middleman CLI
2
-
3
- Scenario: Create a new project
4
- When I run `middleman init MY_PROJECT` interactively
5
- And I type "y"
6
- And I type "y"
7
- And I type "y"
8
- And I type "y"
9
- Then the exit status should be 0
10
- When I cd to "MY_PROJECT"
11
- Then the following files should exist:
12
- | Gemfile |
13
- | .gitignore |
14
- | config.rb |
15
- | source/index.html.erb |
16
- | source/layouts/layout.erb |
17
- | source/javascripts/site.js |
18
- | source/stylesheets/site.css.scss |
19
-
20
- Scenario: Create a new project in the current directory
21
- Given a directory named "MY_PROJECT"
22
- When I cd to "MY_PROJECT"
23
- And I run `middleman init` interactively
24
- And I type "y"
25
- And I type "y"
26
- And I type "y"
27
- And I type "y"
28
- Then the exit status should be 0
29
- And the following files should exist:
30
- | Gemfile |
31
- | config.rb |
32
- | source/index.html.erb |
33
-
34
- Scenario: Create a new project (alias i)
35
- When I run `middleman i MY_PROJECT` interactively
36
- And I type "y"
37
- And I type "y"
38
- And I type "y"
39
- And I type "y"
40
- Then a directory named "MY_PROJECT" should exist
41
-
42
- Scenario: Create a new project (alias new)
43
- When I run `middleman new MY_PROJECT` interactively
44
- And I type "y"
45
- And I type "y"
46
- And I type "y"
47
- And I type "y"
48
- Then a directory named "MY_PROJECT" should exist
49
-
50
- Scenario: Create a new project (alias n)
51
- When I run `middleman n MY_PROJECT` interactively
52
- And I type "y"
53
- And I type "y"
54
- And I type "y"
55
- And I type "y"
56
- Then a directory named "MY_PROJECT" should exist
57
-
58
- Scenario: Create a new project using Middleman directory
59
- When I run `middleman init MY_PROJECT -T blog`
60
- Then a directory named "MY_PROJECT" should exist
61
- When I cd to "MY_PROJECT"
62
- And the file "Gemfile" should contain "middleman-blog"
63
- And the file ".gitignore" should exist
64
-
65
- Scenario: Create an invalid project using Middleman directory
66
- When I run `middleman init MY_PROJECT -T does-not-exist-for-reals`
67
- Then the exit status should be 1
68
-
69
- Scenario: Create a new project using github(user/repository)
70
- When I run `middleman init MY_PROJECT -T middleman/middleman-templates-default` interactively
71
- And I type "y"
72
- And I type "y"
73
- And I type "y"
74
- And I type "y"
75
- Then a directory named "MY_PROJECT" should exist
76
-
77
- Scenario: Create a new project using github(user/repository#branch)
78
- When I run `middleman init MY_PROJECT -T middleman/middleman-templates-default#master` interactively
79
- And I type "y"
80
- And I type "y"
81
- And I type "y"
82
- And I type "y"
83
- Then a directory named "MY_PROJECT" should exist
84
- And the output should contain "-b master"
85
-
86
- Scenario: Create a new project using full path(://)
87
- When I run `middleman init MY_PROJECT -T https://github.com/middleman/middleman-templates-default.git` interactively
88
- And I type "y"
89
- And I type "y"
90
- And I type "y"
91
- And I type "y"
92
- Then a directory named "MY_PROJECT" should exist
@@ -1,17 +0,0 @@
1
- Feature: Run preview server before hook
2
-
3
- Scenario: When run
4
- Given a fixture app "preview-server-hook-app"
5
- And the default aruba timeout is 30 seconds
6
- When I run `middleman server --server-name localhost --bind-address 127.0.0.1` interactively
7
- And I stop middleman if the output contains:
8
- """
9
- ### END ###
10
- """
11
- Then the output should contain:
12
- """
13
- /// 127.0.0.1:4567 ///
14
- /// 4567 ///
15
- /// localhost ///
16
- /// http://localhost:4567 ///
17
- """
@@ -1,535 +0,0 @@
1
- Feature: Run the preview server
2
-
3
- As a software developer
4
- I want to start the preview server
5
- In order to view my changes immediately in the browser
6
-
7
- Background:
8
- Given a fixture app "preview-server-app"
9
- And the default aruba timeout is 30 seconds
10
-
11
- Scenario: Start the server with defaults
12
- When I run `middleman server` interactively
13
- And I stop middleman if the output contains:
14
- """
15
- Inspect your site configuration
16
- """
17
- And the output should contain:
18
- """
19
- View your site at "http://
20
- """
21
- And the output should contain:
22
- """
23
- Inspect your site configuration at "http://
24
- """
25
-
26
- Scenario: Start the server with defaults in verbose mode
27
- When I run `middleman server --verbose` interactively
28
- And I stop middleman if the output contains:
29
- """
30
- Inspect your site configuration
31
- """
32
- Then the output should contain:
33
- """
34
- The Middleman preview server is bound to ":::4567", "0.0.0.0:4567"
35
- """
36
- And the output should contain:
37
- """
38
- View your site at "http://
39
- """
40
- And the output should contain:
41
- """
42
- Inspect your site configuration at "http://
43
- """
44
-
45
- @wip
46
- Scenario: Start the server with defaults in verbose mode, when a local mdns server resolves the local hostname
47
- Given I start a mdns server for the local hostname
48
- When I run `middleman server --verbose` interactively
49
- And I stop middleman if the output contains:
50
- """
51
- Inspect your site configuration
52
- """
53
- Then the output should contain:
54
- """
55
- The Middleman preview server is bound to ":::4567", "0.0.0.0:4567"
56
- """
57
- And the output should contain:
58
- """
59
- View your site at "http://
60
- """
61
- And the output should contain:
62
- """
63
- Inspect your site configuration at "http://
64
- """
65
-
66
- Scenario: Start the server with bind address 127.0.0.1
67
- Given I have a local hosts file with:
68
- """
69
- # <ip-address> <hostname.domain.org> <hostname>
70
- 127.0.0.1 localhost.localdomain localhost
71
- """
72
- When I run `middleman server --verbose --bind-address 127.0.0.1` interactively
73
- And I stop middleman if the output contains:
74
- """
75
- Inspect your site configuration
76
- """
77
- Then the output should contain:
78
- """
79
- The Middleman preview server is bound to "127.0.0.1:4567"
80
- """
81
- And the output should contain:
82
- """
83
- View your site at "http://127.0.0.1:4567"
84
- """
85
- And the output should contain:
86
- """
87
- Inspect your site configuration at "http://127.0.0.1:4567/__middleman"
88
- """
89
-
90
- Scenario: Start the server with bind address 127.0.0.1 configured via config.rb
91
- Given I have a local hosts file with:
92
- """
93
- # <ip-address> <hostname.domain.org> <hostname>
94
- 127.0.0.1 localhost.localdomain localhost
95
- """
96
- And a file named "config.rb" with:
97
- """
98
- set :bind_address, '127.0.0.1'
99
- """
100
- When I run `middleman server --verbose` interactively
101
- And I stop middleman if the output contains:
102
- """
103
- Inspect your site configuration
104
- """
105
- Then the output should contain:
106
- """
107
- The Middleman preview server is bound to "127.0.0.1:4567"
108
- """
109
- And the output should contain:
110
- """
111
- View your site at "http://127.0.0.1:4567"
112
- """
113
- And the output should contain:
114
- """
115
- Inspect your site configuration at "http://127.0.0.1:4567/__middleman"
116
- """
117
-
118
- @wip
119
- Scenario: Start the server with bind address 127.0.0.5
120
-
121
- This will have no hostname attached because the hosts file, the DNS server
122
- and the MDNS-server do not know anything about 127.0.0.5
123
-
124
- When I run `middleman server --verbose --bind-address 127.0.0.5` interactively
125
- And I stop middleman if the output contains:
126
- """
127
- Inspect your site configuration
128
- """
129
- Then the output should contain:
130
- """
131
- The Middleman preview server is bound to "127.0.0.5:4567"
132
- """
133
- And the output should contain:
134
- """
135
- View your site at "http://127.0.0.5:4567"
136
- """
137
- And the output should contain:
138
- """
139
- Inspect your site configuration at "http://127.0.0.5:4567/__middleman"
140
- """
141
-
142
- @wip
143
- Scenario: Start the server with bind address ::1
144
- Given a file named ".hosts" with:
145
- """
146
- # <ip-address> <hostname.domain.org> <hostname>
147
- ::1 localhost.localdomain localhost
148
- """
149
- When I run `middleman server --verbose --bind-address ::1` interactively
150
- And I stop middleman if the output contains:
151
- """
152
- Inspect your site configuration
153
- """
154
- Then the output should contain:
155
- """
156
- The Middleman preview server is bound to "::1:4567"
157
- """
158
- And the output should contain:
159
- """
160
- View your site at "http://[::1]:4567"
161
- """
162
- And the output should contain:
163
- """
164
- Inspect your site configuration at "http://[::1]:4567/__middleman"
165
- """
166
-
167
- Scenario: Start the server with bind address 0.0.0.0
168
- When I run `middleman server --verbose --bind-address 0.0.0.0` interactively
169
- And I stop middleman if the output contains:
170
- """
171
- Inspect your site configuration
172
- """
173
- Then the output should contain:
174
- """
175
- The Middleman preview server is bound to "0.0.0.0:4567"
176
- """
177
- And the output should contain:
178
- """
179
- View your site at "http://
180
- """
181
- And the output should contain:
182
- """
183
- Inspect your site configuration at "http://
184
- """
185
-
186
- Scenario: Start the server with bind address ::
187
- When I run `middleman server --verbose --bind-address ::` interactively
188
- And I stop middleman if the output contains:
189
- """
190
- Inspect your site configuration
191
- """
192
- Then the output should contain:
193
- """
194
- The Middleman preview server is bound to ":::4567"
195
- """
196
- And the output should contain:
197
- """
198
- View your site at "http://
199
- """
200
- And the output should contain:
201
- """
202
- Inspect your site configuration at "http://
203
- """
204
-
205
- Scenario: Start the server with server name "localhost"
206
- Given I have a local hosts file with:
207
- """
208
- # <ip-address> <hostname.domain.org> <hostname>
209
- 127.0.0.1 localhost.localdomain localhost
210
- """
211
- When I run `middleman server --verbose --server-name localhost` interactively
212
- And I stop middleman if the output contains:
213
- """
214
- Inspect your site configuration
215
- """
216
- Then the output should contain:
217
- """
218
- The Middleman preview server is bound to "127.0.0.1:4567"
219
- """
220
- And the output should contain:
221
- """
222
- View your site at "http://localhost:4567", "http://127.0.0.1:4567"
223
- """
224
- And the output should contain:
225
- """
226
- Inspect your site configuration at "http://localhost:4567/__middleman", "http://127.0.0.1:4567/__middleman"
227
- """
228
-
229
- Scenario: Start the server with server name "localhost" configured via config.rb
230
- Given I have a local hosts file with:
231
- """
232
- # <ip-address> <hostname.domain.org> <hostname>
233
- 127.0.0.1 localhost.localdomain localhost
234
- """
235
- And a file named "config.rb" with:
236
- """
237
- set :server_name, 'localhost'
238
- """
239
- When I run `middleman server --verbose` interactively
240
- And I stop middleman if the output contains:
241
- """
242
- Inspect your site configuration
243
- """
244
- Then the output should contain:
245
- """
246
- The Middleman preview server is bound to "127.0.0.1:4567"
247
- """
248
- And the output should contain:
249
- """
250
- View your site at "http://localhost:4567", "http://127.0.0.1:4567"
251
- """
252
- And the output should contain:
253
- """
254
- Inspect your site configuration at "http://localhost:4567/__middleman", "http://127.0.0.1:4567/__middleman"
255
- """
256
-
257
- Scenario: Start the server with server name "localhost" and bind address "127.0.0.1"
258
- Given I have a local hosts file with:
259
- """
260
- # <ip-address> <hostname.domain.org> <hostname>
261
- 127.0.0.1 localhost.localdomain localhost
262
- """
263
- When I run `middleman server --verbose --server-name localhost --bind-address 127.0.0.1` interactively
264
- And I stop middleman if the output contains:
265
- """
266
- Inspect your site configuration
267
- """
268
- Then the output should contain:
269
- """
270
- The Middleman preview server is bound to "127.0.0.1:4567"
271
- """
272
- And the output should contain:
273
- """
274
- View your site at "http://localhost:4567", "http://127.0.0.1:4567"
275
- """
276
- And the output should contain:
277
- """
278
- Inspect your site configuration at "http://localhost:4567/__middleman", "http://127.0.0.1:4567/__middleman"
279
- """
280
-
281
- Scenario: Start the server with server name "127.0.0.1"
282
- When I run `middleman server --verbose --server-name 127.0.0.1` interactively
283
- And I stop middleman if the output contains:
284
- """
285
- Inspect your site configuration
286
- """
287
- Then the output should contain:
288
- """
289
- The Middleman preview server is bound to "127.0.0.1:4567"
290
- """
291
- And the output should contain:
292
- """
293
- View your site at "http://127.0.0.1:4567"
294
- """
295
- And the output should contain:
296
- """
297
- Inspect your site configuration at "http://127.0.0.1:4567/__middleman"
298
- """
299
-
300
- Scenario: Start the server with server name "::1"
301
- When I run `middleman server --verbose --server-name ::1` interactively
302
- And I stop middleman if the output contains:
303
- """
304
- Inspect your site configuration
305
- """
306
- Then the output should contain:
307
- """
308
- The Middleman preview server is bound to "::1:4567"
309
- """
310
- And the output should contain:
311
- """
312
- View your site at "http://[::1]:4567"
313
- """
314
- And the output should contain:
315
- """
316
- Inspect your site configuration at "http://[::1]:4567/__middleman"
317
- """
318
-
319
- Scenario: Start the server with https
320
- When I run `middleman server --verbose --https` interactively
321
- And I stop middleman if the output contains:
322
- """
323
- Inspect your site configuration
324
- """
325
- Then the output should contain:
326
- """
327
- The Middleman preview server is bound to ":::4567", "0.0.0.0:4567"
328
- """
329
- And the output should contain:
330
- """
331
- View your site at "https://
332
- """
333
- And the output should contain:
334
- """
335
- Inspect your site configuration at "https://
336
- """
337
-
338
- Scenario: Start the server with port 65432
339
- When I run `middleman server --verbose --port 65432` interactively
340
- And I stop middleman if the output contains:
341
- """
342
- Inspect your site configuration
343
- """
344
- Then the output should contain:
345
- """
346
- The Middleman preview server is bound to ":::65432", "0.0.0.0:65432"
347
- """
348
-
349
- Scenario: Start the server with port 65432 configured via config.rb
350
- Given a file named "config.rb" with:
351
- """
352
- set :port, 65432
353
- """
354
- When I run `middleman server --verbose` interactively
355
- And I stop middleman if the output contains:
356
- """
357
- Inspect your site configuration
358
- """
359
- Then the output should contain:
360
- """
361
- The Middleman preview server is bound to ":::65432", "0.0.0.0:65432"
362
- """
363
-
364
- @wip
365
- Scenario: Start the server when port is blocked by other middleman instance
366
- Given `middleman server` is running in background
367
- When I run `middleman server --verbose` interactively
368
- And I stop all commands if the output of the last command contains:
369
- """
370
- Inspect your site configuration
371
- """
372
- Then the output should contain:
373
- """
374
- The Middleman uses a different port
375
- """
376
-
377
- Scenario: Start the server with bind address 1.1.1.1
378
-
379
- This should fail, because "1.1.1.1" is not an interface available on this computer.
380
-
381
- Given a file named ".hosts" with:
382
- """
383
- 1.1.1.1 www.example.com www
384
- """
385
- When I run `middleman server --verbose --bind-address 1.1.1.1` interactively
386
- And I stop middleman if the output contains:
387
- """
388
- Running Middleman failed:
389
- """
390
- Then the output should contain:
391
- """
392
- Bind address "1.1.1.1" is not available on your system
393
- """
394
-
395
- Scenario: Start the server with server name www.example.com and bind address 0.0.0.0
396
-
397
- This should fail, because the user can just use `--server-name`. It does
398
- not make sense for `middleman` to only listen on `0.0.0.0` (IPv4 all
399
- interfaces), but not on `::` (IPv6 all interfaces). There are other tools
400
- like `iptables` (Linux-only) or better some `kernel`-configurations to make
401
- this possible.
402
-
403
- When I run `middleman server --verbose --server-name www.example.com --bind-address 0.0.0.0` interactively
404
- And I stop middleman if the output contains:
405
- """
406
- Running Middleman failed:
407
- """
408
- Then the output should contain:
409
- """
410
- Undefined combination of options "--server-name" and "--bind-address".
411
- """
412
-
413
- Scenario: Start the server with server name "www.example.com" and bind address "127.0.0.1"
414
-
415
- This should fail because the server name does not resolve to the ip address.
416
-
417
- Given a file named ".hosts" with:
418
- """
419
- 1.1.1.1 www.example.com www
420
- """
421
- When I run `middleman server --verbose --server-name www.example.com --bind-address 127.0.0.1` interactively
422
- And I stop middleman if the output contains:
423
- """
424
- Running Middleman failed:
425
- """
426
- Then the output should contain:
427
- """
428
- Server name "www.example.com" does not resolve to bind address "127.0.0.1". Please fix that and try again.
429
- """
430
-
431
- Scenario: Start the server with server name "garbage.example.com"
432
- When I run `middleman server --verbose --server-name garbage.example.com` interactively
433
- And I stop middleman if the output contains:
434
- """
435
- Running Middleman failed:
436
- """
437
- Then the output should contain:
438
- """
439
- Server name "garbage.example.com" does not resolve to an ip address. Please fix that and try again.
440
- """
441
-
442
- Scenario: Start the server with server name "www.example.com" and the network name server is used to resolve the server name
443
- Given I have a local hosts file with:
444
- """
445
- # empty
446
- """
447
- And I start a mdns server with:
448
- """
449
- # empty
450
- """
451
- And I start a dns server with:
452
- """
453
- www.example.com: 127.0.0.1
454
- """
455
- When I run `middleman server --verbose --server-name www.example.com` interactively
456
- And I stop middleman if the output contains:
457
- """
458
- Inspect your site configuration
459
- """
460
- Then the output should contain:
461
- """
462
- The Middleman preview server is bound to "127.0.0.1:4567"
463
- """
464
- And the output should contain:
465
- """
466
- View your site at "http://www.example.com:4567", "http://127.0.0.1:4567"
467
- """
468
- And the output should contain:
469
- """
470
- Inspect your site configuration at "http://www.example.com:4567/__middleman", "http://127.0.0.1:4567/__middleman"
471
- """
472
-
473
- @wip
474
- Scenario: Start the server with server name "host.local" and the link local name server is used to resolve the server name
475
-
476
- To make the mdns resolver resolve a name, it needs to end with ".local".
477
- Otherwise the resolver returns [].
478
-
479
- Given I have a local hosts file with:
480
- """
481
- # empty
482
- """
483
- And I start a mdns server with:
484
- """
485
- host.local: 127.0.0.1
486
- """
487
- When I run `middleman server --verbose --server-name host.local` interactively
488
- And I stop middleman if the output contains:
489
- """
490
- Inspect your site configuration
491
- """
492
- Then the output should contain:
493
- """
494
- The Middleman preview server is bound to "127.0.0.1:4567"
495
- """
496
- And the output should contain:
497
- """
498
- View your site at "http://host.local:4567", "http://127.0.0.1:4567"
499
- """
500
- And the output should contain:
501
- """
502
- Inspect your site configuration at "http://host.local:4567/__middleman", "http://127.0.0.1:4567/__middleman"
503
- """
504
-
505
- @wip
506
- Scenario: Start the server with server name "host" and the link local name server is used to resolve the server name
507
-
508
- To make the mdns resolver resolve a name, it needs to end with ".local". If
509
- a plain hostname is given `middleman` appends ".local" automatically.
510
-
511
- Given I have a local hosts file with:
512
- """
513
- # empty
514
- """
515
- And I start a mdns server with:
516
- """
517
- host.local: 127.0.0.1
518
- """
519
- When I run `middleman server --verbose --server-name host` interactively
520
- And I stop middleman if the output contains:
521
- """
522
- Inspect your site configuration
523
- """
524
- Then the output should contain:
525
- """
526
- The Middleman preview server is bound to "127.0.0.1:4567"
527
- """
528
- And the output should contain:
529
- """
530
- View your site at "http://host.local:4567", "http://127.0.0.1:4567"
531
- """
532
- And the output should contain:
533
- """
534
- Inspect your site configuration at "http://host.local:4567/__middleman", "http://127.0.0.1:4567/__middleman"
535
- """
@@ -1,12 +0,0 @@
1
- ENV["TEST"] = "true"
2
-
3
- require 'sassc'
4
-
5
- require 'simplecov'
6
- SimpleCov.root(File.expand_path(File.dirname(__FILE__) + '/../..'))
7
-
8
- SimpleCov.start
9
-
10
- PROJECT_ROOT_PATH = File.dirname(File.dirname(File.dirname(__FILE__)))
11
- require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-cli')
12
- require File.join(File.dirname(PROJECT_ROOT_PATH), 'middleman-core', 'lib', 'middleman-core', 'step_definitions')
@@ -1,33 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'rubydns'
4
- require 'psych'
5
-
6
- db_file = ARGV[0]
7
- port = ARGV[1] || 5300
8
-
9
- db = if File.file? db_file
10
- $stderr.puts 'Found dns db'
11
- Psych.load_file(db_file)
12
- else
13
- $stderr.puts 'Found no dns db. Use default db.'
14
-
15
- {
16
- /www\.example\.org/ => '1.1.1.1'
17
- }
18
- end
19
-
20
- interfaces = [
21
- [:udp, "127.0.0.1", port],
22
- [:tcp, "127.0.0.1", port]
23
- ]
24
-
25
-
26
- # Start the RubyDNS server
27
- RubyDNS::run_server(listen: interfaces) do
28
- db.each do |matcher, result|
29
- match(matcher, Resolv::DNS::Resource::IN::A) do |transaction|
30
- transaction.respond!(result)
31
- end
32
- end
33
- end
File without changes
@@ -1 +0,0 @@
1
- <h1>Welcome</h1>
@@ -1,9 +0,0 @@
1
- <html>
2
- <head>
3
- <title>My Sample Site</title>
4
- <!-- Comment in layout -->
5
- </head>
6
- <body>
7
- <%= yield %>
8
- </body>
9
- </html>
@@ -1,8 +0,0 @@
1
- <html>
2
- <head>
3
- <title>Custom Layout</title>
4
- </head>
5
- <body>
6
- <%= yield %>
7
- </body>
8
- </html>
@@ -1,5 +0,0 @@
1
- ---
2
- layout: false
3
- ---
4
-
5
- I am real: <%= @num %>
@@ -1 +0,0 @@
1
- I am real
@@ -1 +0,0 @@
1
- <h1>Ignore me!</h1>
@@ -1 +0,0 @@
1
- <h1>Ignore me! 2</h1>
@@ -1 +0,0 @@
1
- <h1>Ignore me! 3</h1>
@@ -1 +0,0 @@
1
- Static, no code!
@@ -1,19 +0,0 @@
1
- set :layout, false
2
-
3
- class MyFeature < Middleman::Extension
4
- def initialize(app, options_hash = {}, &block)
5
- super
6
-
7
- app.before_server do |server_information|
8
- puts "/// #{server_information.listeners.first} ///"
9
- puts "/// #{server_information.port} ///"
10
- puts "/// #{server_information.server_name} ///"
11
- puts "/// #{server_information.site_addresses.first} ///"
12
- puts "/// ### END ### ///"
13
- end
14
- end
15
- end
16
-
17
- ::Middleman::Extensions.register(:my_feature, MyFeature)
18
-
19
- activate :my_feature
@@ -1,9 +0,0 @@
1
- <html>
2
- <head>
3
- <meta charset="utf-8">
4
- <title>preview-server-hook-app</title>
5
- </head>
6
- <body>
7
- <h1>preview-server-hook-app</h1>
8
- </body>
9
- </html>
@@ -1 +0,0 @@
1
- .gitkeep
data/spec/spec_helper.rb DELETED
File without changes