active_reloader 0.0.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.
@@ -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: []