module Spring
### WHY SPRING VENDORS A JSON
LIBRARY ###
Spring
is designed to be able to run outside of bundler. Ruby has a built-in “json” library, which we could use. However if we require that, and somebody has a different (perhaps newer) version of the json gem in their Gemfile, it will never get used since we already required the older version of the json library from the stdlib. Therefore, we are vendoring a json library for our own use in order to not interfere.
Some parts adapted from golang.org/src/pkg/json/decode.go and golang.org/src/pkg/utf8/utf8.go
Constants
- IGNORE_SIGNALS
- ORIGINAL_ENV
- STOP_TIMEOUT
- VERSION
Attributes
application_root[RW]
commands[R]
quiet[W]
watch_interval[RW]
watch_method[R]
watcher[W]
Public Class Methods
after_fork(&block)
click to toggle source
# File lib/spring/configuration.rb, line 31 def after_fork(&block) after_fork_callbacks << block end
after_fork_callbacks()
click to toggle source
# File lib/spring/configuration.rb, line 27 def after_fork_callbacks @after_fork_callbacks ||= [] end
application_root_path()
click to toggle source
# File lib/spring/configuration.rb, line 39 def application_root_path @application_root_path ||= begin if application_root path = Pathname.new(File.expand_path(application_root)) else path = project_root_path end raise MissingApplication.new(path) unless path.join("config/application.rb").exist? path end end
command(name)
click to toggle source
# File lib/spring/commands.rb, line 19 def self.command(name) commands.fetch name end
command?(name)
click to toggle source
# File lib/spring/commands.rb, line 15 def self.command?(name) commands.include? name end
failsafe_thread() { || ... }
click to toggle source
# File lib/spring/failsafe_thread.rb, line 5 def failsafe_thread Thread.new { begin yield rescue end } end
gemfile()
click to toggle source
# File lib/spring/configuration.rb, line 8 def gemfile require "bundler" if /\s1.9.[0-9]/ === Bundler.ruby_scope.gsub(/[\/\s]+/,'') Pathname.new(ENV["BUNDLE_GEMFILE"] || "Gemfile").expand_path else Bundler.default_gemfile end end
gemfile_lock()
click to toggle source
# File lib/spring/configuration.rb, line 18 def gemfile_lock case gemfile.to_s when /\bgems\.rb\z/ gemfile.sub_ext('.locked') else gemfile.sub_ext('.lock') end end
project_root_path()
click to toggle source
# File lib/spring/configuration.rb, line 52 def project_root_path @project_root_path ||= find_project_root(Pathname.new(File.expand_path(Dir.pwd))) end
quiet()
click to toggle source
# File lib/spring/configuration.rb, line 56 def quiet @quiet || ENV.key?('SPRING_QUIET') end
register_command(name, command = nil)
click to toggle source
# File lib/spring/commands.rb, line 11 def self.register_command(name, command = nil) commands[name] = CommandWrapper.new(name, command) end
verify_environment()
click to toggle source
# File lib/spring/configuration.rb, line 35 def verify_environment application_root_path end
watch(*items)
click to toggle source
# File lib/spring/watcher.rb, line 27 def self.watch(*items) watcher.add(*items) end
watch_method=(method)
click to toggle source
# File lib/spring/watcher.rb, line 11 def self.watch_method=(method) if method.is_a?(Class) @watch_method = method else require "spring/watcher/#{method}" @watch_method = Watcher.const_get(method.to_s.gsub(/(^.|_.)/) { $1[-1].upcase }) end end
watcher()
click to toggle source
# File lib/spring/watcher.rb, line 23 def self.watcher @watcher ||= watch_method.new(Spring.application_root_path, watch_interval) end
Private Class Methods
find_project_root(current_dir)
click to toggle source
# File lib/spring/configuration.rb, line 62 def find_project_root(current_dir) if current_dir.join(gemfile).exist? current_dir elsif current_dir.root? raise UnknownProject.new(Dir.pwd) else find_project_root(current_dir.parent) end end