linner 0.3.0 → 0.3.1

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