Rakefile 5.2 KB
Newer Older
1
require 'rake/testtask'
D
David Heinemeier Hansson 已提交
2
require 'rake/rdoctask'
3
require 'rake/gempackagetask'
4 5
require 'rake/contrib/sshpublisher'

6
require File.join(File.dirname(__FILE__), 'lib', 'active_support', 'version')
7 8 9

PKG_BUILD     = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
PKG_NAME      = 'activesupport'
10
PKG_VERSION   = ActiveSupport::VERSION::STRING + PKG_BUILD
11
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
12

13 14 15 16 17
RELEASE_NAME  = "REL #{PKG_VERSION}"

RUBY_FORGE_PROJECT = "activesupport"
RUBY_FORGE_USER    = "webster132"

18 19
task :default => :test
Rake::TestTask.new { |t| 
20
  t.libs << "test"
21
  t.pattern = 'test/**/*_test.rb'
22
  t.verbose = true
23
  t.warning = true
24
}
25 26 27 28

# Create compressed packages
dist_dirs = [ "lib", "test"]

D
David Heinemeier Hansson 已提交
29 30 31 32 33
# Genereate the RDoc documentation

Rake::RDocTask.new { |rdoc|
  rdoc.rdoc_dir = 'doc'
  rdoc.title    = "Active Support -- Utility classes and standard library extensions from Rails"
D
David Heinemeier Hansson 已提交
34
  rdoc.options << '--line-numbers' << '--inline-source'
35
  rdoc.options << '--charset' << 'utf-8'
J
Jeremy Kemper 已提交
36
  rdoc.template = ENV['template'] ? "#{ENV['template']}.rb" : '../doc/template/horo'
D
David Heinemeier Hansson 已提交
37 38
  rdoc.rdoc_files.include('README', 'CHANGELOG')
  rdoc.rdoc_files.include('lib/active_support.rb')
39 40
  rdoc.rdoc_files.include('lib/active_support/**/*.rb')
  rdoc.rdoc_files.exclude('lib/active_support/vendor/*')
D
David Heinemeier Hansson 已提交
41 42
}

43
spec = Gem::Specification.new do |s|
44
  s.platform = Gem::Platform::RUBY
45 46
  s.name = PKG_NAME
  s.version = PKG_VERSION
47 48
  s.summary = "Support and utility classes used by the Rails framework."
  s.description = %q{Utility library which carries commonly used classes and goodies from the Rails framework}
49

S
Scott Barron 已提交
50
  s.files = [ "CHANGELOG", "README" ] + Dir.glob( "lib/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
51 52 53 54 55
  s.require_path = 'lib'
  s.has_rdoc = true

  s.author = "David Heinemeier Hansson"
  s.email = "david@loudthinking.com"
56
  s.homepage = "http://www.rubyonrails.org"
57 58 59 60 61 62 63 64 65 66 67
  s.rubyforge_project = "activesupport"
end

Rake::GemPackageTask.new(spec) do |p|
  p.gem_spec = spec
  p.need_tar = true
  p.need_zip = true
end

desc "Publish the beta gem"
task :pgem => [:package] do
D
David Heinemeier Hansson 已提交
68
  Rake::SshFilePublisher.new("gems.rubyonrails.org", "/u/sites/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
69
  `ssh gems.rubyonrails.org '/u/sites/gems/gemupdate.sh'`
70
end
71 72 73

desc "Publish the API documentation"
task :pdoc => [:rdoc] do 
74
  Rake::SshDirPublisher.new("wrath.rubyonrails.org", "public_html/as", "doc").upload
75
end
76 77

desc "Publish the release files to RubyForge."
78
task :release => [ :package ] do
79
  require 'rubyforge'
J
Jeremy Kemper 已提交
80
  require 'rake/contrib/rubyforgepublisher'
81

82 83 84 85 86
  packages = %w( gem tgz zip ).collect{ |ext| "pkg/#{PKG_NAME}-#{PKG_VERSION}.#{ext}" }

  rubyforge = RubyForge.new
  rubyforge.login
  rubyforge.add_release(PKG_NAME, PKG_NAME, "REL #{PKG_VERSION}", *packages)
87
end
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121


require 'lib/active_support/values/time_zone'

namespace :tzinfo do
  desc "Update bundled tzinfo gem. Only copies the subset of classes and definitions required to support Rails time zone features."
  task :update => ['tzinfo:copy_classes', 'tzinfo:copy_definitions'] do
    Rake::Task['tzinfo:cleanup_tmp'].invoke
  end
  
  task :unpack_gem do
    mkdir_p "tmp"
    cd "tmp"
    sh "gem unpack --version #{ENV['VERSION'] || "'> 0'"} tzinfo"
    cd ".."
  end
  
  task :copy_classes => :unpack_gem do
    mkdir_p "#{destination_path}/tzinfo"
    cp "#{tmp_path}/lib/tzinfo.rb", destination_path
    comment_requires_for_excluded_classes!('tzinfo.rb')
    files = FileList["#{tmp_path}/lib/tzinfo/*.rb"]
    files.each do |file|
      filename = File.basename(file)
      unless excluded_classes.include? filename.sub(/.rb$/, '')
        cp "#{tmp_path}/lib/tzinfo/#{filename}", "#{destination_path}/tzinfo"
        comment_requires_for_excluded_classes!("tzinfo/#{filename}")
      end
    end
  end
  
  task :copy_definitions => :unpack_gem do
    definitions_path = "#{destination_path}/tzinfo/definitions/"
    mkdir_p definitions_path
122
    ActiveSupport::TimeZone::MAPPING.values.each do |zone|
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
      subdir = nil
      if /\// === zone
        subdir = zone.sub(/\w+$/, '')
        mkdir_p "#{definitions_path}/#{subdir}"
      end
      cp "#{tmp_path}/lib/tzinfo/definitions/#{zone}.rb", "#{definitions_path}/#{subdir}"
    end
  end

  task :cleanup_tmp do
    rm_rf "tmp"
  end
  
  def comment_requires_for_excluded_classes!(file)
    lines = open("#{destination_path}/#{file}") {|f| f.readlines}
    updated = false
    
    new_lines = []
    lines.each do |line|
      if Regexp.new("require 'tzinfo/(#{excluded_classes.join('|')})'") === line
        updated = true
        new_lines << "# #{line}"
      else
        new_lines << line
      end
    end
    
    if updated
      open("#{destination_path}/#{file}", "w") {|f| f.write(new_lines.join)}
    end
  end
  
  def version
    ENV['VERSION'] ||= get_unpacked_version
  end
  
  def get_unpacked_version
    m = (FileList["tmp/tzinfo-*"].to_s.match /\d+\.\d+\.\d+/)
    m ? m[0] : raise(LoadError, "TZInfo gem must be installed locally. `gem install tzinfo` and try again")
  end
  
  def tmp_path
    "tmp/tzinfo-#{version}"
  end
  
  def destination_path
    "lib/active_support/vendor/tzinfo-#{version}"
  end
  
  def excluded_classes
173
    %w(country country_index_definition country_info country_timezone timezone_index_definition timezone_proxy tzdataparser)
174
  end
175
end