public
Description: ActiveWarehouse for Rails - Implement data warehouses with Rails
Homepage: http://activewarehouse.rubyforge.org/
Clone URL: git://github.com/aeden/activewarehouse.git
activewarehouse / Rakefile
100644 166 lines (140 sloc) 4.977 kb
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
120
121
122
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
require 'rake'
require 'rake/testtask'
require 'rake/rdoctask'
require 'rake/gempackagetask'
require 'rake/contrib/rubyforgepublisher'
require 'spec/version'
require 'spec/rake/spectask'
 
require File.join(File.dirname(__FILE__), 'lib/active_warehouse', 'version')
 
module AW
  PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
  PKG_NAME = 'activewarehouse'
  PKG_VERSION = ActiveWarehouse::VERSION::STRING + PKG_BUILD
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
  PKG_DESTINATION = ENV["PKG_DESTINATION"] || "../#{PKG_NAME}"
end
 
desc 'Default: run tests and specs.'
task :default => [:test, :spec]
 
desc 'Test the active_warehouse plugin.'
Rake::TestTask.new(:test) do |t|
  t.libs << 'lib'
  t.pattern = 'test/**/*_test.rb'
  t.verbose = true
end
 
desc "Run all specs"
Spec::Rake::SpecTask.new do |t|
  t.spec_files = FileList['spec/**/*_spec.rb']
  t.spec_opts = ['--options', 'spec/spec.opts']
  unless ENV['NO_RCOV']
    t.rcov = true
    t.rcov_dir = '../doc/output/coverage'
    t.rcov_opts = ['--exclude', 'spec\/spec,bin\/spec,examples,\/var\/lib\/gems,\/Library\/Ruby,\.autotest']
  end
end
 
namespace :rcov do
  desc 'Measures test coverage'
  task :test do
    rm_f 'coverage.data'
    mkdir 'coverage' unless File.exist?('coverage')
    rcov = "rcov --aggregate coverage.data --text-summary -Ilib"
    system("#{rcov} test/*_test.rb")
    system("open coverage/index.html") if PLATFORM['darwin']
  end
end
 
desc 'Generate documentation for the active_warehouse plugin.'
Rake::RDocTask.new(:rdoc) do |rdoc|
  rdoc.rdoc_dir = 'rdoc'
  rdoc.title = 'ActiveWarehouse'
  rdoc.options << '--line-numbers' << '--inline-source'
  rdoc.rdoc_files.include('README')
  rdoc.rdoc_files.include('lib/**/*.rb')
end
 
# Gem Spec
module AW
  def self.package_files(package_prefix)
    FileList[
      "#{package_prefix}[a-zA-Z]*.rb",
      "#{package_prefix}README",
      "#{package_prefix}TODO",
      "#{package_prefix}Rakefile",
      "#{package_prefix}db/**/*",
      "#{package_prefix}doc/**/*",
      "#{package_prefix}generators/**/*",
      "#{package_prefix}lib/**/*",
      "#{package_prefix}tasks/**/*"
    ] - [ "#{package_prefix}test" ]
  end
 
  def self.spec(package_prefix = '')
    Gem::Specification.new do |s|
      s.name = 'activewarehouse'
      s.version = AW::PKG_VERSION
      s.summary = "Build data warehouses with Rails."
      s.description = <<-EOF
ActiveWarehouse extends Rails to provide functionality specific for building data warehouses.
EOF
 
      s.add_dependency('rake', '>= 0.8.3')
      s.add_dependency('fastercsv', '>= 1.1.0')
      s.add_dependency('activesupport', '>= 2.1.0')
      s.add_dependency('activerecord', '>= 2.1.0')
      s.add_dependency('actionpack', '>= 2.1.0')
      s.add_dependency('rails_sql_views', '>= 0.1.0')
      s.add_dependency('adapter_extensions', '>= 0.1.0')
 
      s.rdoc_options << '--exclude' << '.'
      s.has_rdoc = false
 
      s.files = package_files(package_prefix).to_a.delete_if {|f| f.include?('.svn')}
      s.require_path = 'lib'
 
      #s.bindir = "bin" # Use these for applications.
      #s.executables = []
      #s.default_executable = ""
 
      s.author = "Anthony Eden"
      s.email = "anthonyeden@gmail.com"
      s.homepage = "http://activewarehouse.rubyforge.org"
      s.rubyforge_project = "activewarehouse"
    end
  end
end
 
Rake::GemPackageTask.new(AW.spec) do |pkg|
  pkg.gem_spec = AW.spec
  pkg.need_tar = true
  pkg.need_zip = true
end
 
desc "Generate code statistics"
task :lines do
  lines, codelines, total_lines, total_codelines = 0, 0, 0, 0
 
  for file_name in FileList["lib/**/*.rb"]
    next if file_name =~ /vendor/
    f = File.open(file_name)
 
    while line = f.gets
      lines += 1
      next if line =~ /^\s*$/
      next if line =~ /^\s*#/
      codelines += 1
    end
    puts "L: #{sprintf("%4d", lines)}, LOC #{sprintf("%4d", codelines)} | #{file_name}"
 
    total_lines += lines
    total_codelines += codelines
 
    lines, codelines = 0, 0
  end
 
  puts "Total: Lines #{total_lines}, LOC #{total_codelines}"
end
 
desc "Publish the release files to RubyForge."
task :release => [ :package ] do
  `rubyforge login`
 
  for ext in %w( gem tgz zip )
    release_command = "rubyforge add_release activewarehouse #{AW::PKG_NAME} 'REL #{AW::PKG_VERSION}' pkg/#{AW::PKG_NAME}-#{AW::PKG_VERSION}.#{ext}"
    puts release_command
    system(release_command)
  end
end
 
desc "Publish the API documentation"
task :pdoc => [:rdoc] do
  Rake::SshDirPublisher.new("aeden@rubyforge.org", "/var/www/gforge-projects/activewarehouse/rdoc", "rdoc").upload
end
 
desc "Reinstall the gem from a local package copy"
task :reinstall => [:package] do
  windows = RUBY_PLATFORM =~ /mswin/
  sudo = windows ? '' : 'sudo'
  gem = windows ? 'gem.bat' : 'gem'
  `#{sudo} #{gem} uninstall #{AW::PKG_NAME} -x`
  `#{sudo} #{gem} install pkg/#{AW::PKG_NAME}-#{AW::PKG_VERSION}`
end