guard-jekyll-plus 2.0.0 → 2.0.1

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 (37) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +2 -0
  3. data/.rubocop.yml +10 -0
  4. data/.rubocop_todo.yml +32 -0
  5. data/.ruby-gemset +1 -0
  6. data/.travis.yml +6 -0
  7. data/CHANGELOG.md +6 -2
  8. data/Gemfile +12 -2
  9. data/Guardfile +30 -0
  10. data/README.md +5 -5
  11. data/Rakefile +9 -1
  12. data/guard-jekyll-plus.gemspec +20 -15
  13. data/lib/guard/jekyll_plus.rb +54 -0
  14. data/lib/guard/jekyll_plus/builder.rb +46 -0
  15. data/lib/guard/jekyll_plus/builder/action.rb +126 -0
  16. data/lib/guard/jekyll_plus/builder/adder.rb +23 -0
  17. data/lib/guard/jekyll_plus/builder/modifier.rb +23 -0
  18. data/lib/guard/jekyll_plus/builder/rebuilder.rb +37 -0
  19. data/lib/guard/jekyll_plus/builder/remover.rb +24 -0
  20. data/lib/guard/jekyll_plus/config.rb +131 -0
  21. data/lib/guard/jekyll_plus/server.rb +111 -0
  22. data/lib/guard/jekyll_plus/templates/Guardfile +4 -0
  23. data/lib/guard/{jekyll-plus → jekyll_plus}/version.rb +1 -1
  24. data/spec/lib/guard/jekyll-plus/builder/adder_spec.rb +94 -0
  25. data/spec/lib/guard/jekyll-plus/builder/modifier_spec.rb +113 -0
  26. data/spec/lib/guard/jekyll-plus/builder/rebuilder_spec.rb +76 -0
  27. data/spec/lib/guard/jekyll-plus/builder/remover_spec.rb +97 -0
  28. data/spec/lib/guard/jekyll-plus/builder_spec.rb +57 -0
  29. data/spec/lib/guard/jekyll-plus/config_spec.rb +138 -0
  30. data/spec/lib/guard/jekyll-plus/server_spec.rb +79 -0
  31. data/spec/lib/guard/jekyll-plus_spec.rb +114 -0
  32. data/spec/spec_helper.rb +44 -0
  33. data/test/Guardfile +3 -4
  34. metadata +70 -14
  35. data/lib/guard/jekyll-plus.rb +0 -300
  36. data/lib/guard/jekyll-plus/templates/Guardfile +0 -5
  37. data/test/Gemfile +0 -3
@@ -0,0 +1,79 @@
1
+ require 'guard/jekyll_plus/server'
2
+
3
+ # stub for tests to avoid requiring
4
+ unless Object.const_defined?(:Rack)
5
+ module Rack
6
+ class Handler
7
+ class Thin
8
+ end
9
+ end
10
+
11
+ class Server
12
+ def initialize(_options)
13
+ end
14
+
15
+ def server
16
+ end
17
+
18
+ def start
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ RSpec.describe Guard::JekyllPlus::Server do
25
+ let(:config) { instance_double(Guard::JekyllPlus::Config) }
26
+ subject { described_class.new(config) }
27
+
28
+ before do
29
+ allow(Thread).to receive(:new) do |&block|
30
+ block.call
31
+ end
32
+
33
+ allow(Process).to receive(:fork) do |&block|
34
+ block.call
35
+ end
36
+
37
+ allow(Process).to receive(:wait)
38
+ allow(Process).to receive(:kill)
39
+
40
+ allow_any_instance_of(Rack::Server).to receive(:start)
41
+ allow(Jekyll::Commands::Serve).to receive(:process)
42
+ end
43
+
44
+ describe '#start' do
45
+ before do
46
+ allow(config).to receive(:host)
47
+ allow(config).to receive(:baseurl)
48
+ allow(config).to receive(:port)
49
+ allow(config).to receive(:info)
50
+ allow(config).to receive(:jekyll_serve_options)
51
+ end
52
+
53
+ context 'when Rack is available' do
54
+ before do
55
+ allow(Kernel).to receive(:require)
56
+ allow(config).to receive(:server_root)
57
+ allow(config).to receive(:rack_config)
58
+ allow(config).to receive(:rack_environment)
59
+ allow(File).to receive(:exist?).with('config.ru').and_return(false)
60
+ end
61
+
62
+ it 'starts the Rack server' do
63
+ expect_any_instance_of(Rack::Server).to receive(:start)
64
+ subject.start
65
+ end
66
+ end
67
+
68
+ context 'when Rack is not available' do
69
+ before do
70
+ allow(Kernel).to receive(:require).and_raise(LoadError)
71
+ end
72
+
73
+ it 'starts the Jekyll server' do
74
+ expect(Jekyll::Commands::Serve).to receive(:process)
75
+ subject.start
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,114 @@
1
+ require 'guard/compat/test/helper'
2
+ require 'guard/jekyll_plus'
3
+
4
+ RSpec.describe Guard::JekyllPlus do
5
+ let(:server) { instance_double(Guard::JekyllPlus::Server) }
6
+ let(:config) { instance_double(Guard::JekyllPlus::Config) }
7
+ let(:builder) { instance_double(Guard::JekyllPlus::Builder) }
8
+
9
+ before do
10
+ allow(Guard::Compat::UI).to receive(:info)
11
+
12
+ allow(Guard::JekyllPlus::Config).to receive(:new).and_return(config)
13
+ allow(Guard::JekyllPlus::Server).to receive(:new).and_return(server)
14
+ allow(Guard::JekyllPlus::Builder).to receive(:new).and_return(builder)
15
+
16
+ allow(config).to receive(:info)
17
+ allow(config).to receive(:source)
18
+ allow(config).to receive(:destination)
19
+ end
20
+
21
+ describe '#initialize' do
22
+ it 'sets up the configuration' do
23
+ options = double('options')
24
+ expect(Guard::JekyllPlus::Config).to receive(:new).with(options)
25
+ described_class.new(options)
26
+ end
27
+ end
28
+
29
+ describe '#start' do
30
+ before do
31
+ allow(config).to receive(:serve?)
32
+ allow(builder).to receive(:build)
33
+ end
34
+
35
+ it 'processes the site' do
36
+ expect(builder).to receive(:build)
37
+ subject.start
38
+ end
39
+
40
+ context 'when not serving' do
41
+ before do
42
+ allow(config).to receive(:serve?).and_return(false)
43
+ end
44
+
45
+ it 'does not start the server' do
46
+ expect(server).to_not receive(:start)
47
+ subject.start
48
+ end
49
+ end
50
+
51
+ context 'when serving' do
52
+ before do
53
+ allow(config).to receive(:serve?).and_return(true)
54
+ end
55
+
56
+ it 'starts the server' do
57
+ expect(server).to receive(:start)
58
+ subject.start
59
+ end
60
+ end
61
+ end
62
+
63
+ describe '#run_on_modifications' do
64
+ before do
65
+ allow(builder).to receive(:modified)
66
+ end
67
+
68
+ context 'with normal modifications' do
69
+ before do
70
+ allow(config).to receive(:config_file?).and_return(false)
71
+ end
72
+
73
+ it 'updates based on given paths' do
74
+ paths = [double('paths')]
75
+ expect(builder).to receive(:modified).with(paths)
76
+ subject.run_on_modifications(paths)
77
+ end
78
+ end
79
+
80
+ context 'with changed config' do
81
+ before do
82
+ allow(config).to receive(:config_file?).and_return(true)
83
+
84
+ # after config changes
85
+ allow(builder).to receive(:build)
86
+ allow(server).to receive(:stop)
87
+ allow(config).to receive(:reload)
88
+ allow(config).to receive(:serve?).and_return(false)
89
+ end
90
+
91
+ it 'reloads config' do
92
+ paths = [double('paths')]
93
+ expect(builder).to receive(:reload)
94
+ subject.run_on_modifications(paths)
95
+ end
96
+ end
97
+ end
98
+
99
+ describe '#run_on_additions' do
100
+ it 'updates based on given paths' do
101
+ paths = [double('paths')]
102
+ expect(builder).to receive(:added).with(paths)
103
+ subject.run_on_additions(paths)
104
+ end
105
+ end
106
+
107
+ describe '#run_on_removals' do
108
+ it 'updates based on given paths' do
109
+ paths = [double('paths')]
110
+ expect(builder).to receive(:removed).with(paths)
111
+ subject.run_on_removals(paths)
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,44 @@
1
+ RSpec.configure do |config|
2
+ config.expect_with :rspec do |expectations|
3
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
4
+ end
5
+
6
+ config.mock_with :rspec do |mocks|
7
+ mocks.verify_partial_doubles = true
8
+ end
9
+
10
+ config.filter_run :focus
11
+ config.run_all_when_everything_filtered = true
12
+
13
+ config.disable_monkey_patching!
14
+
15
+ # config.warnings = true
16
+
17
+ config.default_formatter = 'doc' if config.files_to_run.one?
18
+
19
+ # config.profile_examples = 10
20
+
21
+ config.order = :random
22
+
23
+ Kernel.srand config.seed
24
+
25
+ config.before do
26
+ %w(cp rm_r rm mkdir mkdir_p).each do |meth|
27
+ allow(FileUtils).to receive(meth) do |*args|
28
+ fail "stub me: FileUtils.#{meth}(#{args.map(&:inspect).join(', ')})"
29
+ end
30
+ end
31
+
32
+ %w(exist?).each do |meth|
33
+ allow(File).to receive(meth) do |*args|
34
+ fail "stub me: File.#{meth}(#{args.map(&:inspect).join(', ')})"
35
+ end
36
+ end
37
+
38
+ %w([]).each do |meth|
39
+ allow(Dir).to receive(meth) do |*args|
40
+ fail "stub me: Dir.#{meth}(#{args.map(&:inspect).join(', ')})"
41
+ end
42
+ end
43
+ end
44
+ end
data/test/Guardfile CHANGED
@@ -1,8 +1,7 @@
1
1
  # A sample Guardfile
2
2
  # More info at https://github.com/guard/guard#readme
3
3
 
4
- guard "jekyll-plus", :config => ['_config.yml', '_override.yml'], :serve => true do
5
- watch /.*/
6
- ignore /^_site/
4
+ ignore(/^_site/)
5
+ guard 'jekyll_plus', config: ['_config.yml', '_override.yml'], serve: true do
6
+ watch(/.*/)
7
7
  end
8
-
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guard-jekyll-plus
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Mathis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-15 00:00:00.000000000 Z
11
+ date: 2015-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: guard
@@ -16,14 +16,34 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.8'
19
+ version: '2.10'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.10.3
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.10'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.10.3
33
+ - !ruby/object:Gem::Dependency
34
+ name: guard-compat
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.1'
20
40
  type: :runtime
21
41
  prerelease: false
22
42
  version_requirements: !ruby/object:Gem::Requirement
23
43
  requirements:
24
44
  - - "~>"
25
45
  - !ruby/object:Gem::Version
26
- version: '2.8'
46
+ version: '1.1'
27
47
  - !ruby/object:Gem::Dependency
28
48
  name: jekyll
29
49
  requirement: !ruby/object:Gem::Requirement
@@ -53,19 +73,33 @@ dependencies:
53
73
  - !ruby/object:Gem::Version
54
74
  version: '0'
55
75
  - !ruby/object:Gem::Dependency
56
- name: pry-byebug
76
+ name: rspec
57
77
  requirement: !ruby/object:Gem::Requirement
58
78
  requirements:
59
- - - ">="
79
+ - - "~>"
60
80
  - !ruby/object:Gem::Version
61
- version: '0'
81
+ version: '3.1'
62
82
  type: :development
63
83
  prerelease: false
64
84
  version_requirements: !ruby/object:Gem::Requirement
65
85
  requirements:
66
- - - ">="
86
+ - - "~>"
67
87
  - !ruby/object:Gem::Version
68
- version: '0'
88
+ version: '3.1'
89
+ - !ruby/object:Gem::Dependency
90
+ name: nenv
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '0.1'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '0.1'
69
103
  - !ruby/object:Gem::Dependency
70
104
  name: bundler
71
105
  requirement: !ruby/object:Gem::Requirement
@@ -88,19 +122,41 @@ extensions: []
88
122
  extra_rdoc_files: []
89
123
  files:
90
124
  - ".gitignore"
125
+ - ".rspec"
126
+ - ".rubocop.yml"
127
+ - ".rubocop_todo.yml"
128
+ - ".ruby-gemset"
129
+ - ".travis.yml"
91
130
  - CHANGELOG.md
92
131
  - Gemfile
132
+ - Guardfile
93
133
  - LICENSE.txt
94
134
  - README.md
95
135
  - Rakefile
96
136
  - guard-jekyll-plus.gemspec
97
- - lib/guard/jekyll-plus.rb
98
- - lib/guard/jekyll-plus/templates/Guardfile
99
- - lib/guard/jekyll-plus/version.rb
137
+ - lib/guard/jekyll_plus.rb
138
+ - lib/guard/jekyll_plus/builder.rb
139
+ - lib/guard/jekyll_plus/builder/action.rb
140
+ - lib/guard/jekyll_plus/builder/adder.rb
141
+ - lib/guard/jekyll_plus/builder/modifier.rb
142
+ - lib/guard/jekyll_plus/builder/rebuilder.rb
143
+ - lib/guard/jekyll_plus/builder/remover.rb
144
+ - lib/guard/jekyll_plus/config.rb
145
+ - lib/guard/jekyll_plus/server.rb
146
+ - lib/guard/jekyll_plus/templates/Guardfile
147
+ - lib/guard/jekyll_plus/version.rb
100
148
  - lib/rack/config.ru
149
+ - spec/lib/guard/jekyll-plus/builder/adder_spec.rb
150
+ - spec/lib/guard/jekyll-plus/builder/modifier_spec.rb
151
+ - spec/lib/guard/jekyll-plus/builder/rebuilder_spec.rb
152
+ - spec/lib/guard/jekyll-plus/builder/remover_spec.rb
153
+ - spec/lib/guard/jekyll-plus/builder_spec.rb
154
+ - spec/lib/guard/jekyll-plus/config_spec.rb
155
+ - spec/lib/guard/jekyll-plus/server_spec.rb
156
+ - spec/lib/guard/jekyll-plus_spec.rb
157
+ - spec/spec_helper.rb
101
158
  - test/.gitignore
102
159
  - test/404.html
103
- - test/Gemfile
104
160
  - test/Guardfile
105
161
  - test/Testfile
106
162
  - test/_config.yml
@@ -135,7 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
191
  version: '0'
136
192
  requirements: []
137
193
  rubyforge_project:
138
- rubygems_version: 2.4.1
194
+ rubygems_version: 2.2.2
139
195
  signing_key:
140
196
  specification_version: 4
141
197
  summary: A Guard plugin for Jekyll which intelligently handles changes to static and
@@ -1,300 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'benchmark'
4
- require 'guard/plugin'
5
- require 'jekyll'
6
-
7
- begin
8
- require 'rack'
9
- rescue LoadError
10
- end
11
-
12
- module Guard
13
- class Jekyllplus < Plugin
14
- def initialize(options = {})
15
- super
16
-
17
- default_extensions = ['md','mkd','mkdn','markdown','textile','html','haml','slim','xml','yml','sass','scss']
18
-
19
- @options = {
20
- :extensions => [],
21
- :config => ['_config.yml'],
22
- :serve => false,
23
- :rack_config => nil,
24
- :drafts => false,
25
- :future => false,
26
- :config_hash => nil,
27
- :silent => false,
28
- :msg_prefix => 'Jekyll'
29
- }.merge(options)
30
-
31
- @config = load_config(@options)
32
- @source = local_path @config['source']
33
- @destination = local_path @config['destination']
34
- @msg_prefix = @options[:msg_prefix]
35
-
36
- # Convert array of extensions into a regex for matching file extensions eg, /\.md$|\.markdown$|\.html$/i
37
- #
38
- extensions = @options[:extensions].concat(default_extensions).flatten.uniq
39
- @extensions = Regexp.new extensions.map { |e| (e << '$').gsub('\.', '\\.') }.join('|'), true
40
-
41
- # set Jekyll server thread to nil
42
- @server_thread = nil
43
-
44
- end
45
-
46
- def load_config(options)
47
- config = jekyll_config(options)
48
-
49
- # Override configuration with guard option values
50
- config['show_drafts'] ||= options[:drafts]
51
- config['future'] ||= options[:future]
52
- config
53
- end
54
-
55
- def reload_config!
56
- UI.info "Reloading Jekyll configuration!"
57
- @config = load_config(@options)
58
- end
59
-
60
- def start
61
- if @options[:serve]
62
- build
63
- start_server
64
- UI.info "#{@msg_prefix} " + "watching and serving at #{@config['host']}:#{@config['port']}#{@config['baseurl']}" unless @config[:silent]
65
- else
66
- build
67
- UI.info "#{@msg_prefix} " + "watching" unless @config[:silent]
68
- end
69
- end
70
-
71
- def reload
72
- stop if !@server_thread.nil? and @server_thread.alive?
73
- reload_config!
74
- start
75
- end
76
-
77
- def reload_server
78
- stop_server
79
- start_server
80
- end
81
-
82
- def stop
83
- stop_server
84
- end
85
-
86
- def run_on_modifications(paths)
87
- # At this point we know @options[:config] is going to be an Array
88
- # thanks to the call the jekyll_config earlier.
89
- reload_config! if @options[:config].map { |f| paths.include?(f) }.any?
90
- matched = jekyll_matches paths
91
- unmatched = non_jekyll_matches paths
92
- if matched.size > 0
93
- build(matched, "Files changed: ", " ~ ".yellow)
94
- elsif unmatched.size > 0
95
- copy(unmatched)
96
- end
97
- end
98
-
99
- def run_on_additions(paths)
100
- matched = jekyll_matches paths
101
- unmatched = non_jekyll_matches paths
102
-
103
- if matched.size > 0
104
- build(matched, "Files added: ", " + ".green)
105
- elsif unmatched.size > 0
106
- copy(unmatched)
107
- end
108
- end
109
-
110
- def run_on_removals(paths)
111
- matched = jekyll_matches paths
112
- unmatched = non_jekyll_matches paths
113
-
114
- if matched.size > 0
115
- build(matched, "Files removed: ", " x ".red)
116
- elsif unmatched.size > 0
117
- remove(unmatched)
118
- end
119
- end
120
-
121
-
122
- private
123
-
124
- def build(files = nil, message = '', mark = nil)
125
- begin
126
- UI.info "#{@msg_prefix} #{message}" + "building...".yellow unless @config[:silent]
127
- if files
128
- puts '| ' # spacing
129
- files.each { |file| puts '|' + mark + file }
130
- puts '| ' # spacing
131
- end
132
- elapsed = Benchmark.realtime { build_site(@config) }
133
- UI.info "#{@msg_prefix} " + "build completed in #{elapsed.round(2)}s ".green + "#{@source} → #{@destination}" unless @config[:silent]
134
- rescue Exception
135
- UI.error "#{@msg_prefix} build has failed" unless @config[:silent]
136
- stop_server
137
- throw :task_has_failed
138
- end
139
- end
140
-
141
- # Copy static files to destination directory
142
- #
143
- def copy(files=[])
144
- files = ignore_stitch_sources files
145
- if files.size > 0
146
- begin
147
- message = 'copied file'
148
- message += 's' if files.size > 1
149
- UI.info "#{@msg_prefix} #{message.green}" unless @config[:silent]
150
- puts '| ' #spacing
151
- files.each do |file|
152
- if(!check_jekyll_exclude(file))
153
- path = destination_path file
154
- FileUtils.mkdir_p File.dirname(path)
155
- FileUtils.cp file, path
156
- puts '|' + " → ".green + path
157
- else
158
- puts '|' + " ~ ".yellow + "Jekyll exclude: Ignoring changes to #{file}".yellow
159
- end
160
- end
161
- puts '| ' #spacing
162
-
163
- rescue Exception
164
- UI.error "#{@msg_prefix} copy has failed" unless @config[:silent]
165
- UI.error e
166
- stop_server
167
- throw :task_has_failed
168
- end
169
- true
170
- end
171
- end
172
-
173
- def ignore_stitch_sources(files)
174
- if ENV['GUARD_STITCH_PLUS_FILES']
175
- ignore = ENV['GUARD_STITCH_PLUS_FILES'].split(',')
176
- files.reject {|f| ignore.include? f }
177
- else
178
- files
179
- end
180
-
181
- end
182
-
183
- # Remove deleted source file/directories from destination
184
- #
185
- def remove(files=[])
186
- files = ignore_stitch_sources files
187
- # Ensure at least one file still exists (other scripts may clean up too)
188
- if files.select {|f| File.exist? f }.size > 0
189
- begin
190
- message = 'removed file'
191
- message += 's' if files.size > 1
192
- UI.info "#{@msg_prefix} #{message.red}" unless @config[:silent]
193
- puts '| ' #spacing
194
-
195
- files.each do |file|
196
- path = destination_path file
197
- if File.exist? path
198
- FileUtils.rm path
199
- puts '|' + " x ".red + path
200
- end
201
-
202
- dir = File.dirname path
203
- if Dir[dir+'/*'].empty?
204
- FileUtils.rm_r(dir)
205
- puts '|' + " x ".red + dir
206
- end
207
- end
208
- puts '| ' #spacing
209
-
210
- rescue Exception
211
- UI.error "#{@msg_prefix} remove has failed" unless @config[:silent]
212
- UI.error e
213
- stop_server
214
- throw :task_has_failed
215
- end
216
- true
217
- end
218
- end
219
-
220
- def jekyll_matches(paths)
221
- paths.select { |file| file =~ @extensions }
222
- end
223
-
224
- def non_jekyll_matches(paths)
225
- paths.select { |file| !file.match(/^_/) and !file.match(@extensions) }
226
- end
227
-
228
- def jekyll_config(options)
229
- if options[:config_hash]
230
- config = options[:config_hash]
231
- elsif options[:config]
232
- options[:config] = [options[:config]] unless options[:config].is_a? Array
233
- config = options
234
- end
235
- Jekyll.configuration(config)
236
- end
237
-
238
- def check_jekyll_exclude(path)
239
- return @config['exclude'].any? {|f| File.fnmatch?(path, f)}
240
- end
241
-
242
- def rack_config(root)
243
- ENV['RACK_ROOT'] = root
244
- default_config = File.expand_path("../rack/config.ru", File.dirname(__FILE__))
245
- local_config = File.exist?('config.ru') ? 'config.ru' : nil
246
-
247
- config = (@config['rack_config'] || local_config || default_config)
248
- { :config => config, :Port => @config['port'], :Host => @config['host'], :environment => 'development' }
249
- end
250
-
251
- def local_path(path)
252
- Dir.chdir('.')
253
- current = Dir.pwd
254
- path = path.sub current, ''
255
- if path == ''
256
- './'
257
- else
258
- path.sub(/^\//, '')
259
- end
260
- end
261
-
262
- def build_site(options)
263
- Jekyll.logger.log_level = :error
264
- site = Jekyll::Site.new(options)
265
- Jekyll.logger.log_level = :info
266
- site.process
267
- end
268
-
269
-
270
- def destination_path(file)
271
- if @source =~ /^\./
272
- File.join @destination, file
273
- else
274
- file.sub(/^#{@source}/, "#{@destination}")
275
- end
276
- end
277
-
278
- def server(config)
279
- if defined? ::Rack
280
- Thread.new { ::Rack::Server.start(rack_config(@destination)) }
281
- UI.info "#{@msg_prefix} running Rack" unless @config[:silent]
282
- else
283
- Thread.new { Jekyll::Commands::Serve.process(config) }
284
- end
285
- end
286
-
287
- def start_server
288
- if @server_thread.nil?
289
- @server_thread = server(@config)
290
- else
291
- UI.warning "#{@msg_prefix} using an old server thread!"
292
- end
293
- end
294
-
295
- def stop_server
296
- @server_thread.kill unless @server_thread.nil?
297
- @server_thread = nil
298
- end
299
- end
300
- end