module Ak

Attributes

env[RW]
root[RW]

Public Class Methods

version() click to toggle source
# File lib/ak/version.rb, line 2
def self.version
  '0.0.1'
end

Public Instance Methods

registry() click to toggle source
# File lib/ak.rb, line 183
def registry
  @registry ||= Registry.new
end
reload(path, **options) click to toggle source
# File lib/ak.rb, line 140
def reload(path, **options)
  registry.load(path, options.merge(require: false))
end
reload_folders(*paths) click to toggle source
# File lib/ak.rb, line 150
def reload_folders(*paths)
  get_files paths do |file|
    reload file, options
  end
end
require(path, **options) click to toggle source
Calls superclass method
# File lib/ak.rb, line 128
def require(path, **options)
  return super path unless development?
  registry.load(path, options.merge(require: true))
end
require_folders(*paths) click to toggle source
# File lib/ak.rb, line 144
def require_folders(*paths)
  get_files paths do |file|
    require_relative file
  end
end
require_relative(path, **options) click to toggle source
Calls superclass method
# File lib/ak.rb, line 133
def require_relative(path, **options)
  return super path unless development?
  caller_path = File.dirname(caller_locations.first.path)
  path = File.expand_path(path, caller_path)
  registry.load(path, options.merge(require: true))
end
start() click to toggle source
# File lib/ak.rb, line 156
def start
  return unless development?

  dirs = registry.files.map { |file| File.dirname(file.name) }.uniq
  filewatcher = Filewatcher.new(dirs)

  Thread.new(filewatcher) do |filewatcher|
    filewatcher.watch do |filename, event| 
      begin
        puts "\n\n#{event.capitalize} #{filename.gsub("#{root}/", '')}\n\n"

        file = registry.find_by(:name, filename)

        if file
          file.load              if event == :created
          file.reload            if event == :updated
          file.unload_and_reload if event == :deleted
        else
          require(filename)
        end
      rescue Exception => e
        puts "\nError on event #{event}:\n#{'=' * 20}\n#{e}\n"
      end
    end
  end
end

Private Instance Methods

development?() click to toggle source
# File lib/ak.rb, line 194
def development?
  env == 'development'
end
get_files(paths) { |file| ... } click to toggle source
# File lib/ak.rb, line 189
def get_files(paths)
  pattern = paths.map { |path| "#{Ak.root}/#{path}/**/*" }
  Dir[*pattern].each { |file| yield(file) } 
end