class Aerogel::Reloader
Attributes
action[RW]
files[RW]
group[RW]
opts[RW]
Public Class Methods
new( app, files, opts = {}, &blk )
click to toggle source
Use as middleware:
# single file use Aerogel::Reloader, "file1.rb" { load 'file1.rb' } # list of files use Aerogel::Reloader, ["file1.rb", "file2.rb"] do |files| files.each{|f| load f } end # dynamic list of files use Aerogel::Reloader, ->(){ Dir.glob["*.rb"] } do |files| files.each{|f| load f} end # named groups of files use Aerogel::Reloader, "routes/*.rb", group: :routes do |files| files.each{|f| load f } end # adding observer on a named group use Aerogel::Reloader, :routes, before: true do |files| # do more stuff before group :routes is reloaded end Valid options are: :group => name group of files :before => if true invoke action block before group is reloaded :after => if true invoke action block after group is reloaded
# File lib/aerogel/core/reloader.rb, line 39 def initialize( app, files, opts = {}, &blk ) @app = app if files.is_a? Symbol @group = files @files = nil else @files = files @group = opts[:group] end @opts = opts @action = blk @file_list = file_list( @files ) if @files @signature = signature( @file_list ) if @file_list Aerogel::Reloader.reloaders << self end
reloaders()
click to toggle source
# File lib/aerogel/core/reloader.rb, line 60 def self.reloaders @reloaders ||= [] end
Public Instance Methods
call( env )
click to toggle source
# File lib/aerogel/core/reloader.rb, line 55 def call( env ) check! @app.call( env ) end
Private Instance Methods
check!()
click to toggle source
Checks if files are changed and reloads if so.
# File lib/aerogel/core/reloader.rb, line 68 def check! return unless @files @file_list = file_list( @files ) new_signature = signature( @file_list ) if @signature != new_signature # reload file list puts "* Aerogel::Reloader reloading: #{@file_list}, group: #{@group}" if @group # invoke :before group actions Aerogel::Reloader.reloaders.select{|r| r.group == @group && r.opts[:before] }.each do |r| r.action.call @file_list end end @action.call @file_list @signature = new_signature if @group # invoke :after group actions Aerogel::Reloader.reloaders.select{|r| r.group == @group && r.opts[:after] }.each do |r| r.action.call @file_list end end end end
file_list( files )
click to toggle source
Re-calculates file list
# File lib/aerogel/core/reloader.rb, line 94 def file_list( files ) case files when String [files] when Array files when Proc files.call # result should respond to #each else [] end end
signature( file_list )
click to toggle source
# File lib/aerogel/core/reloader.rb, line 107 def signature( file_list ) sig = [] file_list.each do |filename| sig << File.mtime(filename).to_i end sig.sort end