corrupt 0.3.6 → 0.3.7

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -3,10 +3,11 @@ task :default => 'spec'
3
3
  task :environment do
4
4
  ENV['CORRUPT_ENV'] ||= 'development'
5
5
  begin
6
- require 'corrupt'
6
+ # Try to load from ./vendor first.
7
+ require File.dirname(__FILE__) + '/vendor/corrupt'
7
8
  rescue LoadError
8
- # TODO: This might get moved to /vendor or some shit.
9
- require File.dirname(__FILE__) + '/lib/corrupt'
9
+ # Now try the gem.
10
+ require 'corrupt'
10
11
  end
11
12
  Corrupt.boot!
12
13
  end
@@ -1,4 +1,4 @@
1
- # This is an application model and will get loaded into the
1
+ # This is an example application model and will get loaded into the
2
2
  # global namespace. Corrupt uses DataMapper by default,
3
3
  # however, a model can be any Ruby class.
4
4
  class Page
data/config.ru CHANGED
@@ -13,10 +13,16 @@ use Rack::Static, :urls => static_paths, :root => 'public'
13
13
  ENV['CORRUPT_ENV'] ||= 'production'
14
14
 
15
15
  begin
16
- require 'corrupt'
16
+ # Try to load from ./vendor first.
17
+ require File.join(Dir.pwd, 'vendor', 'corrupt')
17
18
  rescue LoadError
18
- # TODO: This might get moved to /vendor or some shit.
19
- require File.join(File.dirname(__FILE__), 'lib', 'corrupt')
19
+ # Now try the gem.
20
+ begin
21
+ require 'corrupt'
22
+ rescue LoadError
23
+ require 'rubygems'
24
+ require 'corrupt'
25
+ end
20
26
  end
21
27
 
22
28
  Corrupt.boot!
@@ -26,7 +26,7 @@ require 'corrupt/generators'
26
26
  require 'corrupt/framework/controller'
27
27
 
28
28
  module Corrupt
29
- VERSION = '0.3.6'
29
+ VERSION = '0.3.7'
30
30
 
31
31
  # Setup the Corrupt environment. This just calls Corrupt::System.boot!
32
32
  def self.boot!
@@ -40,28 +40,36 @@ module Corrupt
40
40
 
41
41
  private
42
42
 
43
+ # Points to the root of the current Corrupt application.
43
44
  def self.app_root
45
+ # FIXME: This is most certainly wrong. Dir.pwd should probably not be used here.
44
46
  ENV['CORRUPT_APP'] || File.join(Dir.pwd, 'app')
45
47
  end
46
48
 
49
+ # Returns the Corrupt::Config instance.
47
50
  def self.config
48
51
  Corrupt::Config
49
52
  end
50
53
 
54
+ # Path to the application configuration file.
51
55
  def self.config_file
52
56
  ENV['CORRUPT_CONFIG'] || Corrupt.app_root + '/../config/app_config.yml'
53
57
  end
54
58
 
59
+ # The current Corrupt environment (development, production, etc.)
60
+ # Defaults to 'development'.
55
61
  def self.env
56
62
  ENV['CORRUPT_ENV'] || 'development'
57
63
  end
58
64
 
65
+ # Returns the logger instance.
59
66
  def self.log
60
67
  @log ||= Logger.new("#{Corrupt.app_root}/../log/#{Corrupt.env}.log")
61
68
  @log.level = (Corrupt.env == 'production' ? Logger::WARN : Logger::DEBUG)
62
69
  @log
63
70
  end
64
71
 
72
+ # Returns the root path of the Corrupt library.
65
73
  def self.root
66
74
  ENV['CORRUPT_ROOT'] || File.expand_path(File.dirname(__FILE__) + '/..')
67
75
  end
@@ -16,6 +16,7 @@ module Corrupt
16
16
  end
17
17
 
18
18
  # Return the headers for the response.
19
+ # TODO: Save the header hash and allow setting of custom keys.
19
20
  def headers
20
21
  { 'Content-Length' => content.size.to_s,
21
22
  'Content-Type' => 'text/html' }
@@ -32,7 +33,7 @@ module Corrupt
32
33
  [status, headers, content]
33
34
  end
34
35
 
35
- # Set the template file to be rendered.
36
+ # Set the template file to be rendered or return the Corrupt::Template object.
36
37
  def template(file = nil)
37
38
  @template ||= Corrupt::Template.new(file)
38
39
  end
@@ -4,7 +4,6 @@ module Corrupt
4
4
  # Generator to create a new Corrupt application.
5
5
  class App
6
6
 
7
- # A list of directories to create when making a new application.
8
7
  DIRS = [
9
8
  'app',
10
9
  'app/controllers',
@@ -28,7 +27,6 @@ module Corrupt
28
27
  'tmp',
29
28
  ]
30
29
 
31
- # A list of files to copy for a new application.
32
30
  FILES = [
33
31
  'config.ru',
34
32
  'Rakefile',
@@ -68,6 +66,8 @@ module Corrupt
68
66
 
69
67
  private
70
68
 
69
+ # This method is responsible for running the generator methods
70
+ # (creating directories, copying files, etc.).
71
71
  def setup_app!
72
72
  Dir.mkdir(@path) unless File.exists?(@path)
73
73
  create_directories
@@ -76,12 +76,14 @@ module Corrupt
76
76
  $stdout.puts "Application created in: #{@path}"
77
77
  end
78
78
 
79
+ # Create a directory for each entry in +DIRS+.
79
80
  def create_directories
80
81
  DIRS.each do |dir|
81
82
  Dir.mkdir(File.join(@path, dir))
82
83
  end
83
84
  end
84
85
 
86
+ # Copy each +FILES+ entry, preserving the path.
85
87
  def copy_files
86
88
  FILES.each do |file|
87
89
  base_file = File.expand_path(File.join(Corrupt.root, file))
@@ -8,15 +8,15 @@ module Corrupt
8
8
  # route.map '/path', :controller => 'Kickass', :action => 'take_names'
9
9
  # end
10
10
  def initialize(&block)
11
- @@routes = []
11
+ @@routes = {}
12
12
  yield self if block_given?
13
13
  end
14
14
 
15
15
  # Maps incoming URLs to a controller and action.
16
16
  # TODO: Maybe change the routes storage to a hash like:
17
17
  # @@routes[path] # => options
18
- def map(path, options)
19
- @@routes << [path, options]
18
+ def map(path, options = {})
19
+ @@routes[path] = options
20
20
  end
21
21
 
22
22
  # Return the configured routes.
@@ -24,17 +24,16 @@ module Corrupt
24
24
  @@routes
25
25
  end
26
26
 
27
- # Dispatch a request to a controller and action.
27
+ # Dispatch an incoming request +path+ to a controller and action.
28
28
  def self.dispatch(path)
29
- route = @@routes.select { |route| route[0] == path }.flatten
30
- # FIXME: This could probably be handled a little better.
31
- if route.empty?
32
- Exceptions.new.four_oh_four
33
- else
34
- response = route[1] # 2nd element is the controller/action hash.
29
+ response = routes[path]
30
+ if response
35
31
  Corrupt::Controller.const_get(response[:controller]).new.send(response[:action])
32
+ else
33
+ Exceptions.new.four_oh_four
36
34
  end
37
35
  end
38
- end
36
+
37
+ end # Router
39
38
 
40
39
  end # Corrupt
@@ -21,10 +21,12 @@ module Corrupt
21
21
 
22
22
  private
23
23
 
24
+ # Setup the Corrupt::Config instance.
24
25
  def load_app_config
25
26
  Corrupt::Config.setup(Corrupt.config_file)
26
27
  end
27
28
 
29
+ # Load any application controllers.
28
30
  def load_controllers
29
31
  app_controller = "#{Corrupt.app_root}/controllers/app_controller.rb"
30
32
  controllers = Dir["#{Corrupt.app_root}/controllers/*.rb"].sort
@@ -36,6 +38,7 @@ module Corrupt
36
38
  end
37
39
  end
38
40
 
41
+ # Load any application models.
39
42
  def load_models
40
43
  models = Dir["#{Corrupt.app_root}/models/*.rb"].sort
41
44
  models.each do |model|
@@ -43,10 +46,13 @@ module Corrupt
43
46
  end
44
47
  end
45
48
 
49
+ # Load the application <tt>/config/routes.rb</tt>.
46
50
  def prepare_router
47
- load File.expand_path(File.dirname(Corrupt.app_root) + '/config/routes.rb')
51
+ load File.expand_path(Corrupt.app_root + '/../config/routes.rb')
48
52
  end
49
53
 
54
+ # Setup the database connection.
55
+ # TODO: This should only be ran if the application uses a database.
50
56
  def setup_database
51
57
  database = File.join(Corrupt.app_root, '..', Corrupt::Config['database'])
52
58
  DataMapper.setup(:default, "sqlite3:///#{database}")
@@ -7,6 +7,13 @@ describe Router do
7
7
 
8
8
  it 'should store the configured routes' do
9
9
  @router.map '/', :controller => 'Main', :action => 'index'
10
- Router.routes.size.should == 1
10
+ @router.map '/kickass', :controller => 'Kickass', :action => 'take_names'
11
+ Router.routes.size.should == 2
12
+ end
13
+
14
+ it 'should respond to either /main or /main/' do
15
+ @router.map '/main', :controller => 'Main', :action => 'index'
16
+ get('/main')[0].should == 200
17
+ get('/main/')[0].should == 200
11
18
  end
12
19
  end
@@ -1,11 +1,15 @@
1
1
  require 'rubygems'
2
2
  require 'spec'
3
3
 
4
+ # TODO: This is kinda convoluted and stupid. Should just stick to one path for the specs.
4
5
  begin
5
- require 'corrupt'
6
+ require File.dirname(__FILE__) + '/../lib/corrupt'
6
7
  rescue LoadError
7
- # TODO: Might move this to /vendor or some shit.
8
- require File.expand_path(File.dirname(__FILE__) + '/../lib/corrupt')
8
+ begin
9
+ require File.dirname(__FILE__) + '/../vendor/corrupt/corrupt'
10
+ rescue LoadError
11
+ require 'corrupt'
12
+ end
9
13
  end
10
14
 
11
15
  ENV['CORRUPT_ENV'] = 'test'
@@ -0,0 +1,21 @@
1
+ require 'fileutils'
2
+
3
+ namespace :corrupt do
4
+ task :vendor_env do
5
+ @destination = 'vendor/corrupt'
6
+ @vendor_dir = File.dirname(__FILE__) + '/../vendor'
7
+ end
8
+
9
+ task :clean_vendor => [ :vendor_env ] do
10
+ FileUtils.rm_r(@destination) if File.exists?(@destination)
11
+ end
12
+
13
+ desc 'Freeze the Corrupt gem into ./vendor'
14
+ task :freeze => [ :clean_vendor ] do
15
+ `gem unpack corrupt --target #{@vendor_dir}`
16
+ FileUtils.mv(Dir['vendor/corrupt-*'].first, @destination)
17
+ end
18
+
19
+ desc 'Un-freeze the Corrupt gem (remove ./vendor/corrupt/)'
20
+ task :unfreeze => [ :clean_vendor ]
21
+ end
@@ -0,0 +1,48 @@
1
+ APP_ROOT = File.join(File.dirname(__FILE__), '..')
2
+
3
+ desc 'Generate API documentation'
4
+ task :doc do
5
+ Rake::Task['doc:api'].invoke
6
+ end
7
+
8
+ namespace :doc do
9
+ task :setup_rdoc do
10
+ @file_list = FileList[ "#{File.join(APP_ROOT, 'README')}",
11
+ "#{APP_ROOT}/app/**/*.rb",
12
+ "#{APP_ROOT}/lib/**/*.rb" ]
13
+ # Substitute APP_ROOT with a dot. Makes for a better index in the generated docs.
14
+ @files = @file_list.collect {|f| f.gsub(/#{APP_ROOT}/, '.')}
15
+ @options = %W[
16
+ --all
17
+ --inline-source
18
+ --line-numbers
19
+ --op #{File.join(APP_ROOT, 'doc', 'api')}
20
+ --title 'Corrupt API Documentation'
21
+ ]
22
+ # Generate a diagram, yes/no?
23
+ @options << '-d' if RUBY_PLATFORM !~ /win32/ && `which dot` =~ /\/dot/ && !ENV['NODOT']
24
+ end
25
+
26
+ task :api => [:setup_rdoc] do
27
+ run_rdoc(@options, @files)
28
+ end
29
+
30
+ desc 'Remove generated API documentation'
31
+ task :clear do
32
+ sh "rm -rf #{File.join(APP_ROOT, 'doc', 'api')}"
33
+ end
34
+
35
+ desc 'Rebuild API documentation'
36
+ task :rebuild do
37
+ Rake::Task['doc:clear'].invoke
38
+ Rake::Task['doc:api'].invoke
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ def run_rdoc(options, files)
45
+ options = options.join(' ') if options.is_a? Array
46
+ files = files.join(' ') if files.is_a? Array
47
+ sh "rdoc #{options} #{files}"
48
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: corrupt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.3.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dale Campbell
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-04-18 00:00:00 -05:00
12
+ date: 2009-04-19 00:00:00 -05:00
13
13
  default_executable: corrupt
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -86,6 +86,8 @@ files:
86
86
  - spec/spec.opts
87
87
  - spec/spec_helper.rb
88
88
  - tasks/app.rake
89
+ - tasks/corrupt.rake
90
+ - tasks/doc.rake
89
91
  - tasks/gem.rake
90
92
  - tasks/notes.rake
91
93
  - tasks/spec.rake