active_reloader 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,10 @@
1
+ <!Doctype html>
2
+ <html>
3
+ <head>
4
+ <title>ActiveReloader</title>
5
+ <script type="text/javascript" src="/javascripts/jquery-1.11.2.js"></script>
6
+ <script type="text/javascript" src="/javascripts/active_reloader_main.js"></script>
7
+ </head>
8
+ <body>
9
+ </body>
10
+ </html>
@@ -0,0 +1,2 @@
1
+ require ::File.expand_path('../lib/active_reloader/server',__FILE__)
2
+ run ActiveReloader::Server.start
@@ -0,0 +1,21 @@
1
+ require "active_reloader/version"
2
+ require "active_reloader/server"
3
+ require "active_reloader/railtie"
4
+ require "active_reloader/engine"
5
+ require "active_reloader/configuration"
6
+
7
+ module ActiveReloader
8
+ end
9
+
10
+ # Code to run active_reloader server
11
+ if (defined?(Rails::Server) && Rails.env.development?)
12
+ Thread.new do
13
+ server_script_path = File.expand_path("../../config.ru", __FILE__)
14
+ port = Rails::Server.new.options[:Port] + 1
15
+ ActiveReloader::Server.port = port
16
+ `rackup '#{server_script_path}' -p #{port} -E none`
17
+ end
18
+ File.write(File.expand_path("../../app/assets/javascripts/active_reloader.js", __FILE__), "//= require active_reloader_initializer");
19
+ else
20
+ File.write(File.expand_path("../../app/assets/javascripts/active_reloader.js", __FILE__), "");
21
+ end
@@ -0,0 +1,22 @@
1
+ module ActiveReloader
2
+ class Configuration
3
+
4
+ @@paths = ["app"]
5
+
6
+ def self.paths=(value)
7
+ @@paths = value
8
+ end
9
+
10
+ def self.paths
11
+ if @@paths.is_a?(String)
12
+ @@paths = [@@paths]
13
+ end
14
+ @@paths
15
+ end
16
+
17
+ def self.update(&block)
18
+ yield self
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveReloader
2
+ class Engine < Rails::Engine
3
+ end
4
+ end
@@ -0,0 +1,65 @@
1
+ require 'json'
2
+ require 'find'
3
+ require 'time'
4
+ module ActiveReloader
5
+ class FileSystem
6
+ def initialize(request)
7
+ @request = request
8
+ end
9
+
10
+ def notify
11
+ _notify
12
+ end
13
+
14
+ private
15
+
16
+ def _notify
17
+ response = {"status" => 0}
18
+ watched_directories = []
19
+
20
+ rails_root = @request.params["rails_root"]
21
+ paths = @request.params["paths"]
22
+
23
+ paths.split(",").each do |path|
24
+ watched_directories << "#{rails_root}/#{path}"
25
+ end
26
+
27
+ file_paths = []
28
+ change_found = false
29
+
30
+ # Time.now.to_i gives us time in UTC
31
+ start_time = Time.now.to_i
32
+ end_time = start_time + 25
33
+
34
+ Find.find(*watched_directories) do |path|
35
+ if (FileTest.file?(path) && File.basename(path)[0] != ".")
36
+ # File.mtime gives us time in local time zone. We will convert it to UTC using to_i method on Time
37
+ file_mtime = Time.parse(File.mtime(path).to_s).to_i
38
+ if (file_mtime > start_time)
39
+ change_found = true
40
+ break
41
+ end
42
+ file_paths << path
43
+ end
44
+ end
45
+
46
+ while(Time.now.to_i < end_time && change_found == false)
47
+ file_paths.each do |path|
48
+ file_mtime = Time.parse(File.mtime(path).to_s).to_i
49
+ if (file_mtime > start_time)
50
+ change_found = true
51
+ break
52
+ end
53
+ end
54
+ end
55
+
56
+ if (change_found)
57
+ response["status"] = 1
58
+ end
59
+
60
+ [response.to_json]
61
+
62
+ end
63
+
64
+ end
65
+ end
@@ -0,0 +1,7 @@
1
+ module ActiveReloader
2
+ class Railtie < Rails::Railtie
3
+ initializer "active_reloader.configuration" do |app|
4
+ FileUtils.rm_rf("#{Rails.application.root}/tmp/cache/assets") if Rails.env.development?
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,43 @@
1
+ require "active_reloader/file_system"
2
+ module ActiveReloader
3
+ class Server
4
+ def self.start
5
+ builder = Rack::Builder.new do
6
+ map '/' do
7
+ html_response = File.read(File.expand_path("../../../app/html/iframe.html", __FILE__))
8
+ run Proc.new { [200, {"Content-Type" => "text/html"}, [html_response]] }
9
+ end
10
+
11
+ map '/check_for_changes' do
12
+ run Proc.new { |env|
13
+ req = Rack::Request.new(env)
14
+ json = ActiveReloader::FileSystem.new(req).notify
15
+ [200, {"Content-Type" => "application/json"}, json]
16
+ }
17
+ end
18
+
19
+ map '/javascripts/jquery-1.11.2.js' do
20
+ js_code = File.read(File.expand_path("../../../app/assets/javascripts/jquery-1.11.2.js", __FILE__))
21
+ run Proc.new { [200, {"Content-Type" => "text/javascript"}, [js_code]] }
22
+ end
23
+
24
+ map '/javascripts/active_reloader_main.js' do
25
+ js_code = File.read(File.expand_path("../../../app/assets/javascripts/active_reloader_main.js", __FILE__))
26
+ run Proc.new { [200, {"Content-Type" => "text/javascript"}, [js_code]] }
27
+ end
28
+ end
29
+ end
30
+
31
+ def self.port=(value)
32
+ @@port = value
33
+ end
34
+
35
+ def self.port
36
+ @@port
37
+ end
38
+
39
+ def self.url
40
+ "http://localhost:#{@@port}"
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,3 @@
1
+ module ActiveReloader
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_reloader
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Imran Latif
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: A Rails gem that reloads browser as soon as you do some changes in your
42
+ Rails app. We as web developers are sometimes bounded in Change -> Switch to Browser
43
+ -> Refresh -> Change cycle. This really hurts productivity. This gem will help you
44
+ in breaking this cumbersome routine and your browser will be refreshed automatically
45
+ whenever it detects any change in Rails code thus freeing you from that manually
46
+ updating browser and hence resulting in increased productivity.
47
+ email:
48
+ - ilatif.bwp@gmail.com
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - ".gitignore"
54
+ - Gemfile
55
+ - LICENSE
56
+ - LICENSE.txt
57
+ - README.md
58
+ - Rakefile
59
+ - active_reloader.gemspec
60
+ - app/assets/javascripts/active_reloader.js
61
+ - app/assets/javascripts/active_reloader_initializer.js.erb
62
+ - app/assets/javascripts/active_reloader_main.js
63
+ - app/assets/javascripts/jquery-1.11.2.js
64
+ - app/html/iframe.html
65
+ - config.ru
66
+ - lib/active_reloader.rb
67
+ - lib/active_reloader/configuration.rb
68
+ - lib/active_reloader/engine.rb
69
+ - lib/active_reloader/file_system.rb
70
+ - lib/active_reloader/railtie.rb
71
+ - lib/active_reloader/server.rb
72
+ - lib/active_reloader/version.rb
73
+ homepage: ''
74
+ licenses:
75
+ - MIT
76
+ metadata: {}
77
+ post_install_message:
78
+ rdoc_options: []
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ requirements: []
92
+ rubyforge_project:
93
+ rubygems_version: 2.2.2
94
+ signing_key:
95
+ specification_version: 4
96
+ summary: A Rails gem that reloads browser as soon as you do some changes in your Rails
97
+ app.
98
+ test_files: []