hawkins 0.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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