crnixon / thor_tasks

My set of personal Thor scripts.

This URL has Read+Write access

thor_tasks / ramaze.thor
100644 67 lines (54 sloc) 1.612 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
# module: ramaze
 
class Ramaze < Thor
  desc "setup PROJECT_NAME", "Setup a new Ramaze project."
  def setup(project_name)
    require 'yaml'
    require 'erb'
    
    snake_case = project_name.gsub(/\B[A-Z]/, '_\&').downcase
    camel_case = project_name.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
    
    FileUtils.mkdir_p snake_case
    
    Dir.chdir(snake_case) do
      %w(system public templates test test).each do |dir|
        FileUtils.mkdir_p dir
      end
    
      @files = YAML::load(
        ERB.new(File.read(__FILE__).split('__END__').last).result(binding)
      )
    
      @files.each do |name, contents|
        File.open(name, "w") do |f|
          f.puts contents
        end
      end
    end
  end
end
__END__
config.ru: |
  $:.push(File.dirname(__FILE__) + '/system')
  require <%= snake_case.inspect %>
 
  Ramaze.trait[:essentials].delete Ramaze::Adapter
  Ramaze.start!
  run Ramaze::Adapter::Base
start.rb: |
  #!/usr/bin/env ruby
  require File.dirname(__FILE__) + '/system/<%= snake_case %>'
  Ramaze.start :adapter => :webrick, :port => 7000
system/<%= snake_case %>.rb: |
  require 'rubygems'
  require 'ramaze'
  
  module <%= camel_case %>
    DIR = File.join(File.dirname(__FILE__), '..') unless defined?(DIR)
    
    class << self
      def dir(subdir = '')
        File.join(DIR, subdir)
      end
      
      def env
        ENV['RACK_ENV'] || 'development'
      end
 
      def setup
        Ramaze::Global.view_root = dir('templates')
        acquire dir('system/<%= snake_case %>/*')
      end
    end
  end
  
  <%= camel_case %>.setup