ianwhite / resources_controller

resources_controller rails plugin: rc makes RESTful controllers fun

This URL has Read+Write access

resources_controller / spec / generate_rake_task.rb
100644 82 lines (69 sloc) 2.247 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
namespace :spec do
  desc "Run rspec's generated specs against RC'd controllers"
  task :generate do
    RAILS_ROOT = File.expand_path("../../..") # relative to the rc Rakefile
    require_activesupport
    
    cd RAILS_ROOT do
      begin
        generate_resource :author
        migrate_up
        make_resources_controller :author
        puts "** Running generated controller specs"
        sh "rake spec:controllers"
      ensure
        migrate_down
        cleanup_resource :author
      end
    end
  end
  
  def require_activesupport
    begin
      require File.join(RAILS_ROOT, 'vendor/rails/activesupport/lib/activesupport')
    rescue Exception
      require 'activesupport'
    end
  end
  
  def migrate_up
    puts "** Migrating up"
    `rake db:migrate`
  end
  
  def migrate_down
    puts "** Migrating down"
    `rake db:migrate VERSION=0`
  end
  
  def generate_resource(name)
    puts "** Generating rspec_scaffold for resource: #{name}"
    `script/generate rspec_scaffold #{name.to_s.classify}`
  end
  
  def make_resources_controller(name)
    plural = name.to_s.pluralize
    
    controller = <<-end_eval
class #{plural.classify.pluralize}Controller < ApplicationController
resources_controller_for :#{plural}
end
end_eval
    
    puts "** Replacing app/controllers/#{plural}_controller.rb with:\n\n#{controller}\n"
    File.open("app/controllers/#{plural}_controller.rb", "w+") {|f| f << controller }
  end
  
  def cleanup_resource(name)
    puts "** Cleaning up generated files for resource: #{name}"
    plural = name.to_s.pluralize
 
    # remove app files
    rm "app/models/#{name}.rb"
    rm "app/controllers/#{plural}_controller.rb"
    rm "app/helpers/#{plural}_helper.rb"
    rm_rf "app/views/#{plural}"
 
    # remove migration
    rm Dir["db/migrate/*_create_#{plural}.rb"]
 
    # revert routes
    routes_rb = File.read("config/routes.rb")
    routes_rb.sub!("\n map.resources :#{plural}\n", '')
    File.open("config/routes.rb", "w+") {|f| f << routes_rb}
 
    # remove spec files
    rm "spec/models/#{name}_spec.rb"
    rm "spec/fixtures/#{plural}.yml"
    rm Dir["spec/controllers/#{plural}*_spec.rb"]
    rm "spec/helpers/#{plural}_helper_spec.rb"
    rm_rf "spec/views/#{plural}"
  end
end