linner 0.3.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ef15c34cce7a178f1dccea701490a4ebd35f098e
4
- data.tar.gz: c1005af018772e5356d511df2dcda0ed4b20f28f
3
+ metadata.gz: 1405e56164fa3e063cb261e068fbf055a372f045
4
+ data.tar.gz: e8ab5ae97989aaf34ee36b20c6d42d228303c2bc
5
5
  SHA512:
6
- metadata.gz: f0027951a49e9b5b3b634988aa318b6d75cb25d69510e0bf30a9207f3e6b972692694736fc2df85163baafd31e2a2cb6575f2cd0d429ba53bedcf8cf65cb2c93
7
- data.tar.gz: 9372867370f3d80267dd95792426ef83bc7c6ff7df11fa15d9d05297c3bf6e308473def78f5dbe30290b64fa99b57c13ada21f90c5d79e1f1c8072d2ea770b0f
6
+ metadata.gz: 38565bd77a0e75239fdf1efd0ad0badcda82528023eb3805052a5c96d1d66f35991d24f7888f9affb71bb707e583b07e082047fdfd36ec30da5394a1e9d7df16
7
+ data.tar.gz: e0193e30d872c5c4289799b63c9e6dd37f5239ca7eb2fd149185d6d45f89fabb43e3dcf6c8d361852298c50cb9288883ae4637fcbb9374bc2db07053d9e60c94
data/CHANGELOG CHANGED
@@ -1,3 +1,6 @@
1
+ v 0.3.1
2
+ - add `livereload` support
3
+
1
4
  v 0.3.0
2
5
  - add `compass` support
3
6
  - cache now supports `styles`
@@ -2,6 +2,7 @@ require "linner/version"
2
2
  require "linner/command"
3
3
  require "linner/asset"
4
4
  require "linner/helper"
5
+ require "linner/reactor"
5
6
  require "linner/wrapper"
6
7
  require "linner/template"
7
8
  require "linner/notifier"
@@ -39,9 +39,16 @@ module Linner
39
39
  end
40
40
  @proc.call
41
41
 
42
- Listen.to! env.app_folder, env.vendor_folder, env.test_folder do |modified, added, removed|
42
+ Listen.to env.app_folder, env.vendor_folder, env.test_folder do |modified, added, removed|
43
43
  @proc.call
44
44
  end
45
+
46
+ @reactor = Reactor.supervise_as(:reactor).actors.first
47
+ Listen.to env.public_folder, relative_path: true do |modified, added, removed|
48
+ @reactor.reload_browser(modified + added + removed)
49
+ end
50
+
51
+ sleep
45
52
  end
46
53
 
47
54
  desc "clean", "clean assets"
@@ -0,0 +1,84 @@
1
+ require "reel"
2
+ require "json"
3
+
4
+ module Linner
5
+ class Reactor < Reel::Server
6
+ include Celluloid
7
+
8
+ attr_accessor :clients
9
+
10
+ def initialize(host = "127.0.0.1", port = 35729)
11
+ @clients = []
12
+ super(host, port, &method(:on_connection))
13
+ end
14
+
15
+ def on_connection(connection)
16
+ while request = connection.request
17
+ case request
18
+ when Reel::Request
19
+ route_request connection, request
20
+ when Reel::WebSocket
21
+ route_websocket request
22
+ end
23
+ end
24
+ end
25
+
26
+ def route_request(connection, request)
27
+ if request.url.start_with? "/livereload.js"
28
+ return connection.respond :ok, File.read(File.join(File.dirname(__FILE__), "../../vendor", "livereload.js"))
29
+ end
30
+
31
+ path = File.join(Linner.environment.public_folder, request.url[1..-1])
32
+ if File.exist?(path)
33
+ content_type = case File.extname(path)
34
+ when '.css' then 'text/css'
35
+ when '.js' then 'application/ecmascript'
36
+ when '.gif' then 'image/gif'
37
+ when '.jpeg', '.jpg' then 'image/jpeg'
38
+ when '.png' then 'image/png'
39
+ else; 'text/plain'
40
+ end
41
+ return connection.respond :ok, {"Content_Type" => content_type, "Content_Length" => File.size(path)}, File.read(path)
42
+ end
43
+
44
+ connection.respond :not_found, "Not found"
45
+ end
46
+
47
+ def route_websocket(socket)
48
+ socket << JSON.generate({
49
+ :command => 'hello',
50
+ :protocols => ['http://livereload.com/protocols/official-7'],
51
+ :serverName => 'reel-livereload'
52
+ })
53
+ if socket.url == "/livereload"
54
+ @clients << Client.new(socket)
55
+ else
56
+ socket.close
57
+ end
58
+ end
59
+
60
+ def reload_browser(paths = [])
61
+ paths.each do |path|
62
+ @clients.each {|c| c.notify_asset_change path }
63
+ end
64
+ end
65
+
66
+ class Client
67
+ include Celluloid
68
+
69
+ def initialize(socket)
70
+ @socket = socket
71
+ end
72
+
73
+ def notify_asset_change(path)
74
+ data = {
75
+ :path => path,
76
+ :command => 'reload',
77
+ :liveCSS => true
78
+ }
79
+ @socket << JSON.generate(data)
80
+ rescue
81
+ end
82
+ end
83
+ end
84
+ end
@@ -1,3 +1,3 @@
1
1
  module Linner
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -18,10 +18,12 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.add_dependency "reel", "~> 0.3"
21
22
  spec.add_dependency "thor", "~> 0.18"
22
23
  spec.add_dependency "tilt", "~> 1.4"
23
24
  spec.add_dependency "sass", "~> 3.2"
24
25
  spec.add_dependency "listen", "~> 1.2"
26
+ spec.add_dependency "nio4r", "~> 0.5.0"
25
27
  spec.add_dependency "uglifier", "~> 2.1"
26
28
  spec.add_dependency "compass", "~> 0.12.2"
27
29
  spec.add_dependency "multi_json", "~> 1.7"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: linner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Saito
@@ -10,6 +10,20 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2013-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: reel
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '0.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '0.3'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: thor
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +80,20 @@ dependencies:
66
80
  - - ~>
67
81
  - !ruby/object:Gem::Version
68
82
  version: '1.2'
83
+ - !ruby/object:Gem::Dependency
84
+ name: nio4r
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 0.5.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 0.5.0
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: uglifier
71
99
  requirement: !ruby/object:Gem::Requirement
@@ -216,6 +244,7 @@ files:
216
244
  - lib/linner/environment.rb
217
245
  - lib/linner/helper.rb
218
246
  - lib/linner/notifier.rb
247
+ - lib/linner/reactor.rb
219
248
  - lib/linner/template.rb
220
249
  - lib/linner/templates/app/images/.gitkeep
221
250
  - lib/linner/templates/app/scripts/app.coffee