summaryrefslogtreecommitdiff
path: root/rake_tasks/gem.rake
blob: 9f0b4620c84b7d6f6c16896dd9517ba10584dec6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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
require 'rake/gempackagetask.rb'

def gemspec
  Gem::Specification.new do |s|
    # Basic Information
    s.name = s.rubyforge_project = 'coderay'
    s.version = '0'

    s.platform = Gem::Platform::RUBY
    s.required_ruby_version = '>= 1.8.2'
    s.requirements = []
    s.date = Time.now.strftime '%Y-%m-%d'
    s.has_rdoc = true
    s.rdoc_options = '-SNw2', '-mlib/README', '-a', '-t CodeRay Documentation'
    s.extra_rdoc_files = EXTRA_FILES.in('./')

    # Description
    s.summary = <<-EOF
  CodeRay is a fast syntax highlighter engine for many languages.
    EOF
    s.description = <<-EOF
  CodeRay is a Ruby library for syntax highlighting.
  I try to make CodeRay easy to use and intuitive, but at the same time
  fully featured, complete, fast and efficient.

  Usage is simple:
    require 'coderay'
    code = 'some %q(weird (Ruby) can\'t shock) me!'
    puts CodeRay.scan(code, :ruby).html
    EOF

    # Files
    s.require_path = 'lib'
    # s.autorequire = 'coderay'
    s.executables = [ 'coderay', 'coderay_stylesheet' ]

    s.files = nil  # defined later

    # Credits
    s.author = 'murphy'
    s.email = 'murphy@rubychan.de'
    s.homepage = 'http://coderay.rubychan.de'
  end
end

namespace :gem do

  gemtask = Rake::GemPackageTask.new(gemspec) do |pkg|
    pkg.need_zip = true
    pkg.need_tar = true
  end

  desc 'Create the gem again'
  task :make => [:make_gemspec, :clean, :gem, :prepare_server]

  desc 'Delete previously created Gems'
  task :clean do
    Dir['pkg/*.gem'].each { |g| rm g }
  end

  desc 'Find out the current CodeRay version'
  task :get_version do
    unless $version
      $: << './lib'
      require 'coderay'
      $version = CodeRay::VERSION
    end
    puts 'Current Version: %s' % $version
    if $version[/.0$/]
      sh 'svn up --ignore-externals'
      $version << '.' << (`svn info`[/Revision: (\d+)/,1])
    end
  end

  task :make_gemspec => :get_version do
    candidates = Dir['./lib/**/*.rb'] +
      Dir['./demo/*.rb'] +
      #    Dir['./bin/*'] +
      #    Dir['./demo/bench/*'] +
      #    Dir['./test/*'] +
      %w( ./lib/README ./LICENSE)
    s = gemtask.gem_spec
    s.files = candidates #.delete_if { |item| item[/(?:CVS|rdoc)|~$/] }
    gemtask.version = s.version = $version
  end

  GEMDIR = 'gem_server/gems'
  task :prepare_server => :get_version do
    $gemfile = "coderay-#$version.gem"
    Dir[GEMDIR + '/*.gem'].each { |g| rm g }
    cp "pkg/#$gemfile", GEMDIR
    system 'gem generate_index -d gem_server'
  end

  desc 'Upload gemfile to ' + FTP_DOMAIN
  task :upload => :make do
    gn 'Uploading gem:'
    cYcnus_ftp do |ftp|
      Dir.chdir 'gem_server' do
        uploader = uploader_for ftp
        ftp.chdir FTP_CODERAY_DIR
        %w(yaml).each(&uploader)
        Dir.chdir 'gems' do
          ftp.chdir 'gems'
          uploader.call $gemfile
        end
      end
    end
    gn 'Gem successfully uploaded.'
  end

  desc 'Build the Gem and install it locally'
  task :install => :make do
    system "gem install --no-rdoc pkg/#{$gemfile}"
  end

end

task :gem => 'gem:make'