-
Notifications
You must be signed in to change notification settings - Fork 21.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added Rails::Info to catalog assorted information about a Rails appli…
…cation's environment git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2882 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
- Loading branch information
1 parent
8a8b472
commit 1f6b09f
Showing
3 changed files
with
145 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
module Rails | ||
module Info | ||
mattr_accessor :properties | ||
@@properties = [] | ||
|
||
class << self #:nodoc: | ||
def property(name, value = nil) | ||
value ||= yield | ||
properties << [name, value] if value | ||
rescue Exception | ||
end | ||
|
||
def components | ||
%w(active_record action_pack action_web_service | ||
action_mailer active_support) | ||
end | ||
|
||
def component_version(component) | ||
require "#{component}/version" | ||
"#{component.classify}::Version::STRING".constantize | ||
end | ||
|
||
def edge_rails_revision | ||
svn_info[/^Revision: (\d+)/, 1] || 'unknown' | ||
end | ||
|
||
protected | ||
def svn_info | ||
Dir.chdir("#{RAILS_ROOT}/vendor/rails") do | ||
IO.popen('svn info') { |f| f.read } | ||
end | ||
end | ||
end | ||
|
||
# The Ruby version and platform, e.g. "1.8.2 (powerpc-darwin8.2.0)". | ||
property 'Ruby version', "#{RUBY_VERSION} (#{RUBY_PLATFORM})" | ||
|
||
# The RubyGems version, if it's installed. | ||
property 'RubyGems version' do | ||
Gem::RubyGemsVersion | ||
end | ||
|
||
# Versions of each Rails component (Active Record, Action Pack, | ||
# Action Web Service, Action Mailer, and Active Support). | ||
components.each do |component| | ||
property "#{component.titlecase} version" do | ||
component_version(component) | ||
end | ||
end | ||
|
||
# The Rails SVN revision, if it's checked out into vendor/rails. | ||
property 'Edge Rails revision' do | ||
edge_rails_revision | ||
end | ||
|
||
# The current Rails environment (development, test, or production). | ||
property 'Environment' do | ||
RAILS_ENV | ||
end | ||
|
||
# The name of the database adapter for the current environment. | ||
property 'Database adapter' do | ||
ActiveRecord::Base.configurations[RAILS_ENV]['adapter'] | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
$:.unshift File.dirname(__FILE__) + "/../lib" | ||
$:.unshift File.dirname(__FILE__) + "/../../activesupport/lib" | ||
|
||
require 'test/unit' | ||
require 'active_support' | ||
require 'info' | ||
|
||
class << Rails::Info | ||
protected | ||
def svn_info | ||
<<-EOS | ||
Path: . | ||
URL: http://www.rubyonrails.com/svn/rails/trunk | ||
Repository UUID: 5ecf4fe2-1ee6-0310-87b1-e25e094e27de | ||
Revision: 2881 | ||
Node Kind: directory | ||
Schedule: normal | ||
Last Changed Author: sam | ||
Last Changed Rev: 2881 | ||
Last Changed Date: 2005-11-04 21:04:41 -0600 (Fri, 04 Nov 2005) | ||
Properties Last Updated: 2005-10-28 19:30:00 -0500 (Fri, 28 Oct 2005) | ||
EOS | ||
end | ||
end | ||
|
||
class InfoTest < Test::Unit::TestCase | ||
def test_edge_rails_revision_extracted_from_svn_info | ||
assert_equal '2881', Rails::Info.edge_rails_revision | ||
end | ||
|
||
def test_property_with_block_swallows_exceptions_and_ignores_property | ||
assert_nothing_raised do | ||
Rails::Info.module_eval do | ||
property('Bogus') {raise} | ||
end | ||
end | ||
assert !property_defined?('Bogus') | ||
end | ||
|
||
def test_property_with_string | ||
Rails::Info.module_eval do | ||
property 'Hello', 'World' | ||
end | ||
assert_property 'Hello', 'World' | ||
end | ||
|
||
def test_property_with_block | ||
Rails::Info.module_eval do | ||
property('Goodbye') {'World'} | ||
end | ||
assert_property 'Goodbye', 'World' | ||
end | ||
|
||
def test_component_version | ||
assert_property 'Active Support version', ActiveSupport::Version::STRING | ||
end | ||
|
||
protected | ||
def property_names | ||
Rails::Info.properties.map {|(name, )| name} | ||
end | ||
|
||
def property_value(property_name) | ||
Rails::Info.properties.find {|(name, )| property_name == name}.last | ||
end | ||
|
||
def property_defined?(property_name) | ||
property_names.include? property_name | ||
end | ||
|
||
def assert_property(property_name, value) | ||
raise "Property #{property_name.inspect} not defined" unless | ||
property_defined? property_name | ||
assert_equal value, property_value(property_name) | ||
end | ||
end |