Class: Shaf::Generator::Controller

Inherits:
Base
  • Object
show all
Defined in:
lib/shaf/generator/controller.rb

Instance Attribute Summary

Attributes inherited from Base

#args

Instance Method Summary collapse

Methods inherited from Base

identifier, inherited, #initialize, #read_template, #render, #template_dir, usage, #write_output

Constructor Details

This class inherits a constructor from Shaf::Generator::Base

Instance Method Details



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/shaf/generator/controller.rb', line 70

def add_link_to_root
  file = "api/serializers/root_serializer.rb"
  unless File.exist? file
    puts "Warning: file '#{file}' does not exist. "\
      "Not adding any link to the #{plural_name} collection"
  end
  added = false
  content = []
  File.readlines(file).reverse.each do |line|
    if match = !added && line.match(/^(\s*)link /)
      content.unshift link_content("#{match[1]}")
      added = true
    end
    content.unshift(line)
  end
  File.open(file, 'w') { |f| f.puts content }
  puts "Modified:   #{file}"
end

#callObject



8
9
10
11
12
13
14
15
16
17
# File 'lib/shaf/generator/controller.rb', line 8

def call
  if name.empty?
    raise Command::ArgumentError,
      "Please provide a controller name when using the controller generator!"
  end

  create_controller
  create_integration_spec
  add_link_to_root
end

#create_controllerObject



47
48
49
50
# File 'lib/shaf/generator/controller.rb', line 47

def create_controller
  content = render(template, opts)
  write_output(target, content)
end

#create_integration_specObject



52
53
54
55
# File 'lib/shaf/generator/controller.rb', line 52

def create_integration_spec
  content = render(spec_template, opts)
  write_output(spec_target, content)
end


89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/shaf/generator/controller.rb', line 89

def link_content(indentation = "")
  "\n    # Auto generated doc:  \n    # Link to the collection of \#{plural_name}.  \n    # Method: GET  \n    # Example:\n    # ```\n    # curl -H \"Accept: application/json\" \\\\\n    #      -H \"Authorization: abcdef\" \\\\\n    #      /\#{plural_name}/5\n    #```\n    link :\#{plural_name}, \#{plural_name}_uri\n  EOS\nend\n".split("\n").map { |line| "#{indentation}#{line}" }

#nameObject



19
20
21
# File 'lib/shaf/generator/controller.rb', line 19

def name
  args.first || ""
end

#optsObject



57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/shaf/generator/controller.rb', line 57

def opts
  {
    name: name,
    plural_name: plural_name,
    serializer_class_name: "#{name.capitalize}Serializer",
    model_class_name: name.capitalize,
    controller_class_name: "#{plural_name.capitalize}Controller",
    policy_class_name: "#{name.capitalize}Policy",
    policy_file: "policies/#{name}_policy",
    params: params
  }
end

#paramsObject



23
24
25
# File 'lib/shaf/generator/controller.rb', line 23

def params
  args[1..-1].map { |param| param.split(':')}
end

#plural_nameObject



27
28
29
# File 'lib/shaf/generator/controller.rb', line 27

def plural_name
  Utils::pluralize(name)
end

#spec_targetObject



43
44
45
# File 'lib/shaf/generator/controller.rb', line 43

def spec_target
  "spec/integration/#{plural_name}_controller_spec.rb"
end

#spec_templateObject



35
36
37
# File 'lib/shaf/generator/controller.rb', line 35

def spec_template
  'spec/integration_spec.rb'
end

#targetObject



39
40
41
# File 'lib/shaf/generator/controller.rb', line 39

def target
  "api/controllers/#{plural_name}_controller.rb"
end

#templateObject



31
32
33
# File 'lib/shaf/generator/controller.rb', line 31

def template
  'api/controller.rb'
end