forked from elevation/event_calendar
-
Notifications
You must be signed in to change notification settings - Fork 1
/
event_calendar_generator.rb
62 lines (52 loc) · 2.57 KB
/
event_calendar_generator.rb
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
require File.expand_path(File.dirname(__FILE__) + "/lib/insert_routes.rb")
class EventCalendarGenerator < Rails::Generator::Base
default_options :static_only => false,
:use_jquery => false,
:use_all_day => false,
:use_mootools => false,
:use_asset_pipeline => false
attr_reader :class_name, :view_name
def initialize(args, runtime_options = {})
super
usage if args.length > 0 and args.length < 2
@class_name = (args.shift || "event").underscore
@view_name = (args.shift || "calendar").underscore
end
def manifest
record do |m|
# static files
raise public_folder
m.file "stylesheets.css", "#{public_folder}/stylesheets/event_calendar.css"
script = options[:use_jquery] ? 'jq_javascript.js' : (options[:use_mootools] ? 'mt_javascript.js' : 'javascript.js')
m.file script, "#{public_folder}/javascripts/event_calendar.js"
# MVC and other supporting files
unless options[:static_only]
m.template "model.rb.erb", File.join("app/models", "#{@class_name}.rb")
m.template "controller.rb.erb", File.join("app/controllers", "#{@view_name}_controller.rb")
m.directory File.join("app/views", @view_name)
m.template "view.html.erb", File.join("app/views", @view_name, "index.html.erb")
m.template "helper.rb.erb", File.join("app/helpers", "#{@view_name}_helper.rb")
m.migration_template "migration.rb.erb", "db/migrate", :migration_file_name => "create_#{@class_name.pluralize}"
m.route_name(@view_name, "/#{@view_name}/:year/:month", ":controller => '#{@view_name}', :action => 'index', :requirements => {:year => /\\d{4}/, :month => /\\d{1,2}/}, :year => nil, :month => nil")
end
end
end
protected
def add_options!(opt)
opt.separator ''
opt.separator 'Options:'
opt.on("--static-only",
"Only generate the static files. (stylesheet, javascript, and images)") { |v| options[:static_only] = v }
{ 'jquery' => 'jQuery', 'mootools' => 'MooTools' }.each do |k,v|
opt.on("--use-#{k}",
"Use #{v} template file when generating the javascript.") { |val| options[:"use_#{v}"] = val }
end
opt.on("--use-all-day",
"Include an 'all_day' field on events, and display appropriately.") { |v| options[:use_all_day] = v }
opt.on("--use-asset_pipeline",
"Place js/css in app/assets instead of public") { |v| options[:use_asset_pipeline] = v}
end
def public_folder
options[:use_asset_pipeline] ? "app/assets" : "public"
end
end