Class: RESTRack::Generator

Inherits:
Object show all
Defined in:
lib/restrack/generator.rb

Constant Summary collapse

TEMPLATE =
{
  :service                => 'loader.rb.erb',
  :rackup                 => 'config.ru.erb',
  :constants              => 'constants.yaml.erb',
  :controller             => 'controller.rb.erb',
  :descendant_controller  => 'descendant_controller.rb.erb',
  :hooks                  => 'hooks.rb.erb',
  :gemfile                => 'Gemfile.erb'
}

Class Method Summary collapse

Class Method Details

.generate_asynchronous_service(name) ⇒ Object

Generate a new RESTRack service that uses EventMachine. This can only be used with web servers that use or support EventMachine (Thin, Rainbows).



80
81
82
83
84
# File 'lib/restrack/generator.rb', line 80

def generate_asynchronous_service(name)
  @async = true
  generate_service(name)
  @async = nil
end

.generate_controller(name) ⇒ Object

Generate controller file



22
23
24
25
26
27
28
# File 'lib/restrack/generator.rb', line 22

def generate_controller(name)
  template = get_template_for( :controller )
  resultant_string = template.result( get_binding_for_controller( name ) )
  File.open("#{base_dir}/controllers/#{name}_controller.rb", 'w') {|f| f.puts resultant_string }
  # Generate view folder for controller
  FileUtils.makedirs("#{base_dir}/views/#{name}")
end

.generate_descendant_controller(name, parent) ⇒ Object

Generate controller file the descends from specified parent, to enable grouping of controller types and/or overarching functionality.



32
33
34
35
36
37
38
# File 'lib/restrack/generator.rb', line 32

def generate_descendant_controller(name, parent)
  template = get_template_for( :descendant_controller )
  resultant_string = template.result( get_binding_for_descendant_controller( name, parent ) )
  File.open("#{base_dir}/controllers/#{name}_controller.rb", 'w') {|f| f.puts resultant_string }
  # Generate view folder for controller
  FileUtils.makedirs("#{base_dir}/views/#{name}")
end

.generate_service(name) ⇒ Object

The guts for generating a new RESTRack service. The loader.rb template will create a RESTRack::WebService or RESTRack::AsyncWebService based on the value of @async.



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
# File 'lib/restrack/generator.rb', line 43

def generate_service(name)
  FileUtils.makedirs("#{name}/config")
  FileUtils.makedirs("#{name}/controllers")
  FileUtils.makedirs("#{name}/models")
  FileUtils.makedirs("#{name}/test")
  FileUtils.makedirs("#{name}/views")

  template = get_template_for( :service )
  resultant_string = template.result( get_binding_for_service( name ) )
  File.open("#{name}/loader.rb", 'w') {|f| f.puts resultant_string }

  template = get_template_for( :rackup )
  resultant_string = template.result( get_binding_for_service( name ) )
  File.open("#{name}/config.ru", 'w') {|f| f.puts resultant_string }

  template = get_template_for( :constants )
  resultant_string = template.result( get_binding_for_service( name ) )
  File.open("#{name}/config/constants.yaml", 'w') {|f| f.puts resultant_string }

  template = get_template_for( :hooks )
  resultant_string = template.result( get_binding_for_service( name ) )
  File.open("#{name}/hooks.rb", 'w') {|f| f.puts resultant_string }

  # Added following lines to generate 'Gemfile' automatically.
  template = get_template_for( :gemfile )
  resultant_string = template.result( get_binding_for_service( name ) )
  File.open("#{name}/Gemfile", 'w') {|f| f.puts resultant_string }
end

.generate_synchronous_service(name) ⇒ Object

Generate a new RESTRack service. This does not use EventMachine and can be used with any Rack supported web server.



73
74
75
76
77
# File 'lib/restrack/generator.rb', line 73

def generate_synchronous_service(name)
  @async = false
  generate_service(name)
  @async = nil
end