hawkins 0.1.0 → 2.0.0

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.
@@ -0,0 +1,18 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIC+zCCAeOgAwIBAgIJAOJlIUfFTfXPMA0GCSqGSIb3DQEBCwUAMBQxEjAQBgNV
3
+ BAMMCWxvY2FsaG9zdDAeFw0xNjAzMjExNDQ5NDRaFw0yNjAzMTkxNDQ5NDRaMBQx
4
+ EjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
5
+ ggEBAJ00+Klf0gP3V/RY0WiXLhJ1vJEjcMKLUWY72p/aXmrzO8tQfWdZ1j+q3TDk
6
+ vVzPIeYZl0WNyE6cWDGp/TUOzOOLazsJoPB9raRBxe+zOeSEDL1j2mAApG3rp35Y
7
+ j60lFq0e7AnFtDFZ+GKQOrlOXngR+GBzGvOBcM0stGB53wAN/RlkMcxoItd/aI/y
8
+ ZsvXsGQEZFFVStkuZKlFo8vCKnLIBW/3bT0epJ9piA5+Te0CYHcdbSE/5hVNrroX
9
+ P+/Xw9j2BK5MslTaWifcOkAPqpSbviDYOraecqxgJ0lV1XvipFxogWOQhba0yFWd
10
+ cMMNeVezp/jssamd8UgVRxC0M70CAwEAAaNQME4wHQYDVR0OBBYEFNq0iKr0+nQt
11
+ CkoODjkYCbfQq1CbMB8GA1UdIwQYMBaAFNq0iKr0+nQtCkoODjkYCbfQq1CbMAwG
12
+ A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAEd0kPvSophHOxZqWC7wPyGM
13
+ q/9doail8bnvpKTyBuyIhCD2s0lczPXPN/f7kpdBniOfstDzOn24Jo/Y75nP1EaX
14
+ LlvGODX6LTALxe8lAasjG4p5jFz7cZxZr60fbe1LMQO+gPYLIEEB5Op5W+ZXQnR4
15
+ fZhukXjk671Hag2hlInm9kwaBi7PboNFi3kzuQatrW7Ewj/PcRgQb2bO2C5ZZEzk
16
+ NJipyuCsn8k+Jru6fPriZwkcN8nGMN8OUkUxqV2EHGR3WeBCuMavzL7/eW3IAjbc
17
+ pyZPIPM9Hafj4zI+jShCV4fATCbCCVCzERyELyUF6v7LVoIeK2zjP8gDmb+WI2Q=
18
+ -----END CERTIFICATE-----
@@ -0,0 +1,28 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCdNPipX9ID91f0
3
+ WNFoly4SdbyRI3DCi1FmO9qf2l5q8zvLUH1nWdY/qt0w5L1czyHmGZdFjchOnFgx
4
+ qf01Dszji2s7CaDwfa2kQcXvsznkhAy9Y9pgAKRt66d+WI+tJRatHuwJxbQxWfhi
5
+ kDq5Tl54EfhgcxrzgXDNLLRged8ADf0ZZDHMaCLXf2iP8mbL17BkBGRRVUrZLmSp
6
+ RaPLwipyyAVv9209HqSfaYgOfk3tAmB3HW0hP+YVTa66Fz/v18PY9gSuTLJU2lon
7
+ 3DpAD6qUm74g2Dq2nnKsYCdJVdV74qRcaIFjkIW2tMhVnXDDDXlXs6f47LGpnfFI
8
+ FUcQtDO9AgMBAAECggEAdoqc/srcSFVYo03eCioFebICEMdSncAEDz0O6/7zt13W
9
+ Nsdo6GfboIKs69Nv3u3pt+KQKMhyxKQr9Lcj0cBpSyO0Jf5qty1tpDBcmxTgkKnq
10
+ GV2UK1QQqTpLQIBzRrJy2PQ6NFw6NgSLwXbUcSrhHVUfn0rshbWTY4NUOHNtblHv
11
+ QbB6/Ge4CE5ZLD94pguMb7mvOgkhvuZJ0b39zHd38xy73ziNAvDpIGtfee2vvmGe
12
+ GFF3e3P1YPpH0CuloiYu5Urm8GXBHNuScpuzQKFYlxpTByZ3I3z2gGcmSUGwhBE9
13
+ yehOYlxl49Xr5GB5+pW4DK/4A6i+K3fzBrwUmnA62QKBgQDQtl4D5tnEwY94ucXs
14
+ Q4lUDhmvfPZS/cnGuUIwr+xMb/jzBpOQdXTVnbBG6FnWpUthXZCftmaBNiek+qL2
15
+ HYCm4dfxJoBB0SQRyjQcWCk51yf9gGQW5z/53rweGYJAqILknfu9v22/Gd/I/+Uq
16
+ rwxRfmRLXA89RpDYbQgZKm5TfwKBgQDA0zXFugcQ82862CDpXL0fkxB/NF7TA7oG
17
+ puZUEOX/HC2uBzCuC8DpkyR0xORQl+Nw4/ztAy8Xs3r9qkJfPPEBCS1TbYqPGy4w
18
+ gSQXqsUAG5AmcW32pf+m2VxDs40ev0k8dXG/BFHPx9Gxm6wzqW/dn5n0VdQxci1Q
19
+ 5IFF8ZpmwwKBgAKLZqQHiXojnfsr0KTrwd3beiawkFQ8sdwRYCQ10NyxtMhJuTzW
20
+ ocEE9iQ3Kvk59KxQNrYrxB4pKdySDbCQdYQTVs2i2Ydz5EuvOmlqDb6dx+gIS7AX
21
+ y6jhNUvspbDiHQ5qeqo6jjz5NMg/jmyxy6Wms9RTYAAwPw3UbnfYE5ZDAoGAOy+Z
22
+ Tbuv95ABEDrOv1Jr6oklgyX8BSEbtHb+M8eMESYBD229j26kJA26Hu1gdyxn73rL
23
+ Y6Sai9fXZI0iGkGGaB78/qKc6RgasWCyR2FvXn0XXfVrH04MjpYhL9ao9ksYm6og
24
+ 49Tbl79pqe5yiNj1MT2P7+N4YkT9i9rXozRphCkCgYEAgRpz+Q3WMFWk6tjvVANk
25
+ 2sdPlqLUlo6NKPw7PjUnFjuGYJ+ke3FoZU7CekvBZFX+4DABr2Js8ERX9EWglWs+
26
+ rtY7Zw4gM1ki5krgMqa/7P31k536pUhPZDrKBo/fE8Y2SuNDX+k7VwMs/GjxIaEh
27
+ 5d930icHJcI5+3yu8rnRzIc=
28
+ -----END PRIVATE KEY-----
data/test/spec_helper.rb CHANGED
@@ -35,18 +35,20 @@ module SpecUtils
35
35
  # Copied from Minitest. The Rspec output matcher doesn't work very will with
36
36
  # blocks that are throwing exceptions.
37
37
  def capture_io
38
- begin
39
- orig_stdout, orig_stderr = $stdout, $stderr
40
- captured_stdout, captured_stderr = StringIO.new, StringIO.new
41
- $stdout, $stderr = captured_stdout, captured_stderr
38
+ orig_stdout = $stdout
39
+ captured_stdout = StringIO.new
40
+ $stdout = captured_stdout
42
41
 
43
- yield
42
+ orig_stderr = $stderr
43
+ captured_stderr = StringIO.new
44
+ $stderr = captured_stderr
44
45
 
45
- return captured_stdout.string, captured_stderr.string
46
- ensure
47
- $stdout = orig_stdout
48
- $stderr = orig_stderr
49
- end
46
+ yield
47
+
48
+ return captured_stdout.string, captured_stderr.string
49
+ ensure
50
+ $stdout = orig_stdout
51
+ $stderr = orig_stderr
50
52
  end
51
53
  end
52
54
 
@@ -55,5 +57,6 @@ RSpec.configure do |config|
55
57
  config.expect_with :rspec do |c|
56
58
  c.syntax = :expect
57
59
  end
60
+ config.formatter = 'Fuubar'
58
61
  config.include SpecUtils
59
62
  end
@@ -0,0 +1,166 @@
1
+ require 'tmpdir'
2
+ require 'httpclient'
3
+
4
+ require_relative './spec_helper'
5
+
6
+ module Hawkins
7
+ RSpec.describe "Hawkins" do
8
+ context "when running in liveserve mode" do
9
+ let!(:temp_dir) do
10
+ Dir.mktmpdir("hawkins_test")
11
+ end
12
+
13
+ let(:destination) do
14
+ Dir.mkdir(File.join(temp_dir, "_site"))
15
+ File.join(temp_dir, "_site")
16
+ end
17
+
18
+ let(:client) do
19
+ HTTPClient.new
20
+ end
21
+
22
+ let(:standard_opts) do
23
+ {
24
+ "port" => 4000,
25
+ "host" => "localhost",
26
+ "baseurl" => "",
27
+ "detach" => false,
28
+ "source" => temp_dir,
29
+ "destination" => destination,
30
+ "reload_port" => Commands::LiveServe.singleton_class::LIVERELOAD_PORT,
31
+ }
32
+ end
33
+
34
+ before(:each) do
35
+ site = instance_double(Jekyll::Site)
36
+ simple_page = <<-HTML.gsub(/^\s*/, '')
37
+ <!DOCTYPE HTML>
38
+ <html lang="en-US">
39
+ <head>
40
+ <meta charset="UTF-8">
41
+ <title>Hello World</title>
42
+ </head>
43
+ <body>
44
+ <p>Hello! I am a simple web page.</p>
45
+ </body>
46
+ </html>
47
+ HTML
48
+
49
+ File.open(File.join(destination, "hello.html"), 'w') do |f|
50
+ f.write(simple_page)
51
+ end
52
+ allow(Jekyll::Site).to receive(:new).and_return(site)
53
+ end
54
+
55
+ after(:each) do
56
+ capture_io do
57
+ Commands::LiveServe.shutdown
58
+ end
59
+
60
+ while Commands::LiveServe.running?
61
+ sleep(0.1)
62
+ end
63
+
64
+ FileUtils.remove_entry_secure(temp_dir, true)
65
+ end
66
+
67
+ def start_server(opts)
68
+ @thread = Thread.new do
69
+ Commands::LiveServe.start(opts)
70
+ end
71
+
72
+ while !Commands::LiveServe.running?
73
+ sleep(0.1)
74
+ end
75
+ end
76
+
77
+ def serve(opts)
78
+ allow(Jekyll).to receive(:configuration).and_return(opts)
79
+ allow(Jekyll::Commands::Build).to receive(:process)
80
+
81
+ capture_io do
82
+ start_server(opts)
83
+ end
84
+
85
+ opts
86
+ end
87
+
88
+ it "serves livereload.js over HTTP on the default LiveReload port" do
89
+ opts = serve(standard_opts)
90
+ content = client.get_content(
91
+ "http://#{opts['host']}:#{opts['reload_port']}/livereload.js")
92
+ expect(content).to include('LiveReload.on(')
93
+ end
94
+
95
+ it "serves livereload.js over HTTPS" do
96
+ key = File.join(File.dirname(__FILE__), "resources", "test.key")
97
+ cert = File.join(File.dirname(__FILE__), "resources", "test.crt")
98
+
99
+ FileUtils.cp(key, temp_dir)
100
+ FileUtils.cp(cert, temp_dir)
101
+ opts = serve(standard_opts.merge('ssl_cert' => 'test.crt', 'ssl_key' => 'test.key'))
102
+
103
+ client.ssl_config.add_trust_ca(cert)
104
+ content = client.get_content(
105
+ "https://#{opts['host']}:#{opts['reload_port']}/livereload.js")
106
+ expect(content).to include('LiveReload.on(')
107
+ end
108
+
109
+ it "uses wss when SSL options are provided" do
110
+ key = File.join(File.dirname(__FILE__), "resources", "test.key")
111
+ cert = File.join(File.dirname(__FILE__), "resources", "test.crt")
112
+
113
+ FileUtils.cp(key, temp_dir)
114
+ FileUtils.cp(cert, temp_dir)
115
+ opts = serve(standard_opts.merge('ssl_cert' => 'test.crt', 'ssl_key' => 'test.key'))
116
+
117
+ client.ssl_config.add_trust_ca(cert)
118
+ content = client.get_content(
119
+ "https://#{opts['host']}:#{opts['port']}/#{opts['baseurl']}/hello.html")
120
+ expect(content).to include('HAWKINS_LIVERELOAD_PROTOCOL = "wss://";')
121
+ end
122
+
123
+ it "serves nothing else over HTTP on the default LiveReload port" do
124
+ opts = serve(standard_opts)
125
+ res = client.get("http://#{opts['host']}:#{opts['reload_port']}/")
126
+ expect(res.status_code).to eq(400)
127
+ expect(res.content).to include('only serves livereload.js')
128
+ end
129
+
130
+ it "inserts the LiveReload script tags" do
131
+ opts = serve(standard_opts)
132
+ content = client.get_content(
133
+ "http://#{opts['host']}:#{opts['port']}/#{opts['baseurl']}/hello.html")
134
+ expect(content).to include("HAWKINS_LIVERELOAD_PORT = #{opts['reload_port']}")
135
+ expect(content).to include('HAWKINS_LIVERELOAD_PROTOCOL = "ws://";')
136
+ expect(content).to include("livereload.js?snipver=1")
137
+ expect(content).to include("I am a simple web page")
138
+ end
139
+
140
+ it "applies the max and min delay options" do
141
+ opts = serve(standard_opts.merge("max_delay" => "1066", "min_delay" => "3"))
142
+ content = client.get_content(
143
+ "http://#{opts['host']}:#{opts['port']}/#{opts['baseurl']}/hello.html")
144
+ expect(content).to include("&amp;mindelay=3")
145
+ expect(content).to include("&amp;maxdelay=1066")
146
+ end
147
+
148
+ it "inserts a SWF LiveReload when --swf is used" do
149
+ opts = serve(standard_opts.merge("swf" => true))
150
+ host = opts['host']
151
+ port = opts['port']
152
+ base = opts['baseurl']
153
+ content = client.get_content(
154
+ "http://#{host}:#{port}/#{base}/hello.html")
155
+ expect(content).to include(
156
+ "WEB_SOCKET_SWF_LOCATION = \"/__livereload/WebSocketMain.swf")
157
+ expect(content).to include("__livereload/swfobject.js")
158
+ expect(content).to include("__livereload/web_socket.js")
159
+
160
+ res = client.get(
161
+ "http://#{host}:#{port}/#{base}/__livereload/WebSocketMain.swf")
162
+ expect(res.status_code).to eq(200)
163
+ end
164
+ end
165
+ end
166
+ end
data/test/test_post.rb ADDED
@@ -0,0 +1,171 @@
1
+ require_relative './spec_helper'
2
+
3
+ module Hawkins
4
+ RSpec.describe "Hawkins" do
5
+ context "when creating a post" do
6
+ let(:date) do
7
+ Time.now.strftime('%Y-%m-%d')
8
+ end
9
+
10
+ before(:each) do
11
+ site = instance_double(Jekyll::Site)
12
+ allow(Jekyll::Site).to receive(:new).and_return(site)
13
+ allow(site).to receive(:in_source_dir).with("_posts").and_return("/no/thing/_posts")
14
+
15
+ allow(Jekyll).to receive(:configuration).and_return({})
16
+ end
17
+
18
+ def build_expected_path(date, title)
19
+ "_posts/#{date}-#{Jekyll::Utils.slugify(title)}.md"
20
+ end
21
+
22
+ it 'fails on a bad post date' do
23
+ expect do
24
+ Commands::Post.create(["title"], 'date' => 'BAD_DATE')
25
+ end.to raise_error(SystemExit).and output(/Could not convert BAD_DATE/).to_stderr
26
+ end
27
+
28
+ it 'fails on a missing title' do
29
+ expect do
30
+ Commands::Post.create([], {})
31
+ end.to raise_error(SystemExit).and output(/Please provide an argument/).to_stderr
32
+ end
33
+
34
+ # TODO There is a lot of redundancy here. There's got to be a better way.
35
+ # Look at http://betterspecs.org for ideas.
36
+ it 'uses a provided date' do
37
+ title = "1999"
38
+ expected_body = <<-BODY.gsub(/^\s*/, '')
39
+ ---
40
+ title: #{title}
41
+ ---
42
+ BODY
43
+ expected_file = build_expected_path("1999-12-31", title)
44
+
45
+ allow(File).to receive(:exist?).with(/_posts$/).and_return(true)
46
+ allow(File).to receive(:exist?).with(/.md$/).and_return(false)
47
+
48
+ file = double('file')
49
+ allow(File).to receive(:open).with(/#{expected_file}/, 'w').and_yield(file)
50
+ expect(file).to receive(:write).with(/#{expected_body}/)
51
+
52
+ allow(Commands::Post).to receive(:exec).and_return(nil)
53
+
54
+ expect do
55
+ Commands::Post.create([title], "date" => "1999-12-31")
56
+ end.to output(/Wrote/).to_stdout
57
+ end
58
+
59
+ it 'uses today as the default date' do
60
+ title = "Raspberry Beret"
61
+ expected_body = <<-BODY.gsub(/^\s*/, '')
62
+ ---
63
+ title: #{title}
64
+ ---
65
+ BODY
66
+ expected_file = build_expected_path(date, title)
67
+
68
+ allow(File).to receive(:exist?).with(/_posts$/).and_return(true)
69
+ allow(File).to receive(:exist?).with(/.md$/).and_return(false)
70
+
71
+ file = double('file')
72
+ allow(File).to receive(:open).with(/#{expected_file}/, 'w').and_yield(file)
73
+ expect(file).to receive(:write).with(/#{expected_body}/)
74
+
75
+ allow(Commands::Post).to receive(:exec).and_return(nil)
76
+
77
+ expect do
78
+ Commands::Post.create([title], "date" => date)
79
+ end.to output(/Wrote/).to_stdout
80
+ end
81
+
82
+ it 'uses a provided editor' do
83
+ title = "Little Red Corvette"
84
+ expected_file = build_expected_path(date, title)
85
+
86
+ allow(File).to receive(:exist?).with(/_posts$/).and_return(true)
87
+ allow(File).to receive(:exist?).with(/.md$/).and_return(false)
88
+
89
+ file = double('file')
90
+ allow(File).to receive(:open).with(/#{expected_file}/, 'w').and_yield(file)
91
+ expect(file).to receive(:write)
92
+
93
+ allow(Commands::Post).to receive(:exec).with("foo", /#{expected_file}/).and_return(nil)
94
+
95
+ expect do
96
+ Commands::Post.create([title], "editor" => "foo")
97
+ end.to output(/Wrote/).to_stdout
98
+ end
99
+
100
+ it 'uses the editor from the environment' do
101
+ title = "Let's Go Crazy"
102
+ expected_file = build_expected_path(date, title)
103
+
104
+ stub_const("ENV", ENV.to_h.tap { |h| h['VISUAL'] = 'default' })
105
+
106
+ allow(File).to receive(:exist?).with(/_posts$/).and_return(true)
107
+ allow(File).to receive(:exist?).with(/.md$/).and_return(false)
108
+
109
+ file = double('file')
110
+ allow(File).to receive(:open).with(/#{expected_file}/, 'w').and_yield(file)
111
+ expect(file).to receive(:write)
112
+
113
+ allow(Commands::Post).to receive(:exec).with('default', /#{expected_file}/).and_return(nil)
114
+
115
+ expect do
116
+ Commands::Post.create([title], {})
117
+ end.to output(/Wrote/).to_stdout
118
+ end
119
+
120
+ it 'sets correct vim options' do
121
+ title = "When Doves Cry"
122
+ expected_file = build_expected_path(date, title)
123
+
124
+ allow(File).to receive(:exist?).with(/_posts$/).and_return(true)
125
+ allow(File).to receive(:exist?).with(/.md$/).and_return(false)
126
+
127
+ file = double('file')
128
+ allow(File).to receive(:open).with(/#{expected_file}/, 'w').and_yield(file)
129
+ expect(file).to receive(:write).twice
130
+
131
+ %w(gvim vim).each do |editor|
132
+ allow(Commands::Post).to receive(:exec)
133
+ .with(editor, '+', /#{expected_file}/)
134
+ .and_return(nil)
135
+ stub_const("ENV", ENV.to_h.tap { |h| h['VISUAL'] = editor })
136
+ expect do
137
+ Commands::Post.create([title], {})
138
+ end.to output(/Wrote/).to_stdout
139
+ end
140
+ end
141
+
142
+ it 'sets correct emacs options' do
143
+ title = "Purple Rain"
144
+ expected_file = build_expected_path(date, title)
145
+
146
+ allow(File).to receive(:exist?).with(/_posts$/).and_return(true)
147
+ allow(File).to receive(:exist?).with(/.md$/).and_return(false)
148
+
149
+ file = double('file')
150
+ allow(File).to receive(:open).with(/#{expected_file}/, 'w').and_yield(file)
151
+ expect(file).to receive(:write).twice
152
+
153
+ %w(xemacs emacs).each do |editor|
154
+ allow(Commands::Post).to receive(:exec)
155
+ .with(editor, '+3', /#{expected_file}/)
156
+ .and_return(nil)
157
+ stub_const("ENV", ENV.to_h.tap { |h| h['VISUAL'] = editor })
158
+ expect do
159
+ Commands::Post.create([title], {})
160
+ end.to output(/Wrote/).to_stdout
161
+ end
162
+ end
163
+
164
+ xit 'handles a missing _posts directory' do
165
+ end
166
+
167
+ xit 'handles a file name conflict' do
168
+ end
169
+ end
170
+ end
171
+ end
metadata CHANGED
@@ -1,93 +1,65 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hawkins
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Wood
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-15 00:00:00.000000000 Z
11
+ date: 2016-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: guard
14
+ name: jekyll
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.8'
19
+ version: '3.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.8'
26
+ version: '3.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: guard-livereload
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: jekyll
28
+ name: em-websocket
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: '2.5'
33
+ version: '0.5'
48
34
  type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '2.5'
55
- - !ruby/object:Gem::Dependency
56
- name: rack
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
40
+ version: '0.5'
69
41
  - !ruby/object:Gem::Dependency
70
- name: rack-livereload
42
+ name: bundler
71
43
  requirement: !ruby/object:Gem::Requirement
72
44
  requirements:
73
- - - ">="
45
+ - - "~>"
74
46
  - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :runtime
47
+ version: '1.6'
48
+ type: :development
77
49
  prerelease: false
78
50
  version_requirements: !ruby/object:Gem::Requirement
79
51
  requirements:
80
- - - ">="
52
+ - - "~>"
81
53
  - !ruby/object:Gem::Version
82
- version: '0'
54
+ version: '1.6'
83
55
  - !ruby/object:Gem::Dependency
84
- name: safe_yaml
56
+ name: httpclient
85
57
  requirement: !ruby/object:Gem::Requirement
86
58
  requirements:
87
59
  - - ">="
88
60
  - !ruby/object:Gem::Version
89
61
  version: '0'
90
- type: :runtime
62
+ type: :development
91
63
  prerelease: false
92
64
  version_requirements: !ruby/object:Gem::Requirement
93
65
  requirements:
@@ -95,13 +67,13 @@ dependencies:
95
67
  - !ruby/object:Gem::Version
96
68
  version: '0'
97
69
  - !ruby/object:Gem::Dependency
98
- name: stringex
70
+ name: rspec-core
99
71
  requirement: !ruby/object:Gem::Requirement
100
72
  requirements:
101
73
  - - ">="
102
74
  - !ruby/object:Gem::Version
103
75
  version: '0'
104
- type: :runtime
76
+ type: :development
105
77
  prerelease: false
106
78
  version_requirements: !ruby/object:Gem::Requirement
107
79
  requirements:
@@ -109,13 +81,13 @@ dependencies:
109
81
  - !ruby/object:Gem::Version
110
82
  version: '0'
111
83
  - !ruby/object:Gem::Dependency
112
- name: thin
84
+ name: rspec-expectations
113
85
  requirement: !ruby/object:Gem::Requirement
114
86
  requirements:
115
87
  - - ">="
116
88
  - !ruby/object:Gem::Version
117
89
  version: '0'
118
- type: :runtime
90
+ type: :development
119
91
  prerelease: false
120
92
  version_requirements: !ruby/object:Gem::Requirement
121
93
  requirements:
@@ -123,13 +95,13 @@ dependencies:
123
95
  - !ruby/object:Gem::Version
124
96
  version: '0'
125
97
  - !ruby/object:Gem::Dependency
126
- name: thor
98
+ name: rspec-mocks
127
99
  requirement: !ruby/object:Gem::Requirement
128
100
  requirements:
129
101
  - - ">="
130
102
  - !ruby/object:Gem::Version
131
103
  version: '0'
132
- type: :runtime
104
+ type: :development
133
105
  prerelease: false
134
106
  version_requirements: !ruby/object:Gem::Requirement
135
107
  requirements:
@@ -137,21 +109,7 @@ dependencies:
137
109
  - !ruby/object:Gem::Version
138
110
  version: '0'
139
111
  - !ruby/object:Gem::Dependency
140
- name: bundler
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: '1.6'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: '1.6'
153
- - !ruby/object:Gem::Dependency
154
- name: rspec-core
112
+ name: fuubar
155
113
  requirement: !ruby/object:Gem::Requirement
156
114
  requirements:
157
115
  - - ">="
@@ -165,7 +123,7 @@ dependencies:
165
123
  - !ruby/object:Gem::Version
166
124
  version: '0'
167
125
  - !ruby/object:Gem::Dependency
168
- name: rspec-expectations
126
+ name: rake
169
127
  requirement: !ruby/object:Gem::Requirement
170
128
  requirements:
171
129
  - - ">="
@@ -179,21 +137,21 @@ dependencies:
179
137
  - !ruby/object:Gem::Version
180
138
  version: '0'
181
139
  - !ruby/object:Gem::Dependency
182
- name: rspec-mocks
140
+ name: rdoc
183
141
  requirement: !ruby/object:Gem::Requirement
184
142
  requirements:
185
- - - ">="
143
+ - - "~>"
186
144
  - !ruby/object:Gem::Version
187
- version: '0'
145
+ version: '3.12'
188
146
  type: :development
189
147
  prerelease: false
190
148
  version_requirements: !ruby/object:Gem::Requirement
191
149
  requirements:
192
- - - ">="
150
+ - - "~>"
193
151
  - !ruby/object:Gem::Version
194
- version: '0'
152
+ version: '3.12'
195
153
  - !ruby/object:Gem::Dependency
196
- name: rake
154
+ name: pry-byebug
197
155
  requirement: !ruby/object:Gem::Requirement
198
156
  requirements:
199
157
  - - ">="
@@ -206,34 +164,20 @@ dependencies:
206
164
  - - ">="
207
165
  - !ruby/object:Gem::Version
208
166
  version: '0'
209
- - !ruby/object:Gem::Dependency
210
- name: rdoc
211
- requirement: !ruby/object:Gem::Requirement
212
- requirements:
213
- - - "~>"
214
- - !ruby/object:Gem::Version
215
- version: '3.12'
216
- type: :development
217
- prerelease: false
218
- version_requirements: !ruby/object:Gem::Requirement
219
- requirements:
220
- - - "~>"
221
- - !ruby/object:Gem::Version
222
- version: '3.12'
223
167
  - !ruby/object:Gem::Dependency
224
168
  name: rubocop
225
169
  requirement: !ruby/object:Gem::Requirement
226
170
  requirements:
227
171
  - - '='
228
172
  - !ruby/object:Gem::Version
229
- version: 0.24.1
173
+ version: 0.36.0
230
174
  type: :development
231
175
  prerelease: false
232
176
  version_requirements: !ruby/object:Gem::Requirement
233
177
  requirements:
234
178
  - - '='
235
179
  - !ruby/object:Gem::Version
236
- version: 0.24.1
180
+ version: 0.36.0
237
181
  - !ruby/object:Gem::Dependency
238
182
  name: simplecov
239
183
  requirement: !ruby/object:Gem::Requirement
@@ -265,11 +209,19 @@ files:
265
209
  - Rakefile
266
210
  - bin/hawkins
267
211
  - hawkins.gemspec
212
+ - js/WebSocketMain.swf
213
+ - js/livereload.js
214
+ - js/swfobject.js
215
+ - js/web_socket.js
268
216
  - lib/hawkins.rb
269
- - lib/hawkins/cli.rb
270
- - lib/hawkins/guard.rb
271
- - lib/hawkins/isolation.rb
217
+ - lib/hawkins/liveserve.rb
218
+ - lib/hawkins/post.rb
219
+ - lib/hawkins/servlet.rb
272
220
  - lib/hawkins/version.rb
221
+ - lib/hawkins/websockets.rb
222
+ - lib/mime.types
223
+ - test/resources/test.crt
224
+ - test/resources/test.key
273
225
  - test/resources/test_site/_config.yml
274
226
  - test/resources/test_site/_includes/footer.html
275
227
  - test/resources/test_site/_includes/header.html
@@ -280,7 +232,8 @@ files:
280
232
  - test/resources/test_site/assets/hawkins.css
281
233
  - test/resources/test_site/index.html
282
234
  - test/spec_helper.rb
283
- - test/test_hawkins.rb
235
+ - test/test_liveserve.rb
236
+ - test/test_post.rb
284
237
  homepage: http://github.com/awood/hawkins
285
238
  licenses:
286
239
  - MIT
@@ -304,8 +257,10 @@ rubyforge_project:
304
257
  rubygems_version: 2.4.8
305
258
  signing_key:
306
259
  specification_version: 4
307
- summary: A Jekyll extension that adds in Live Reload and page isolation
260
+ summary: A Jekyll extension that adds in Live Reload
308
261
  test_files:
262
+ - test/resources/test.crt
263
+ - test/resources/test.key
309
264
  - test/resources/test_site/_config.yml
310
265
  - test/resources/test_site/_includes/footer.html
311
266
  - test/resources/test_site/_includes/header.html
@@ -316,4 +271,5 @@ test_files:
316
271
  - test/resources/test_site/assets/hawkins.css
317
272
  - test/resources/test_site/index.html
318
273
  - test/spec_helper.rb
319
- - test/test_hawkins.rb
274
+ - test/test_liveserve.rb
275
+ - test/test_post.rb