Class: Ginny::Func

Inherits:
Object
  • Object
show all
Defined in:
lib/ginny/models/func.rb

Overview

Used to generate a method.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializevoid



28
29
30
31
# File 'lib/ginny/models/func.rb', line 28

def initialize()
  self.params = []
  self.modules = []
end

Instance Attribute Details

#bodyString

String to write into the body of the function.

Returns:

  • (String)


19
20
21
# File 'lib/ginny/models/func.rb', line 19

def body
  @body
end

#descriptionString

Description of the function. Markdown is supported.

Returns:

  • (String)


13
14
15
# File 'lib/ginny/models/func.rb', line 13

def description
  @description
end

#modulesString

List of modules to declare the function inside of.

Returns:

  • (String)


22
23
24
# File 'lib/ginny/models/func.rb', line 22

def modules
  @modules
end

#nameString

Name of the function.

Returns:

  • (String)


10
11
12
# File 'lib/ginny/models/func.rb', line 10

def name
  @name
end

#paramsArray<Param>

An array of Params.

Returns:



25
26
27
# File 'lib/ginny/models/func.rb', line 25

def params
  @params
end

#return_typeString

Return type of the function.

Returns:

  • (String)


16
17
18
# File 'lib/ginny/models/func.rb', line 16

def return_type
  @return_type
end

Class Method Details

.create(args = {}) ⇒ Ginny::Func

Constructor for a Func. Use create, not new.

Parameters:

  • args (Hash<Symbol>) (defaults to: {})

Returns:



37
38
39
40
41
42
43
44
45
46
# File 'lib/ginny/models/func.rb', line 37

def self.create(args = {})
  f = Ginny::Func.new()
  f.name        = args[:name]
  f.description = args[:description]
  f.return_type = args[:return_type]
  f.body        = args[:body]
  f.modules     = args[:modules] unless args[:modules].nil?
  f.params      = Ginny::Param.from_array(args[:params]) if args[:params]&.is_a?(Array)
  return f
end

Instance Method Details

#renderString

Return generated code as a string.

Returns:

  • (String)


51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/ginny/models/func.rb', line 51

def render()
  # return self.render_compact() if self.body.nil? && self.params.length == 0
  parts = []
  parts << self.render_description()
  parts << self.params.map(&:render_doc).join("\n") unless self.params.length == 0
  parts << self.render_return_type()
  parts << "def " + self.name + self.render_params()
  parts << self.body.indent(2) unless self.body.nil?
  parts << "end"

  body = parts.compact.join("\n").gsub(/(\s+)$/, "")

  return Ginny.mod(body, self.modules) if self.modules.length > 0
  return body
end

#render_descriptionString

Returns:

  • (String)


83
84
85
# File 'lib/ginny/models/func.rb', line 83

def render_description()
  return (self.description&.length&.positive? ? self.description.comment.strip : nil)
end

#render_paramsString

Returns:

  • (String)


68
69
70
71
72
73
74
# File 'lib/ginny/models/func.rb', line 68

def render_params()
  return "()" if self.params.length == 0
  # if self.params.length >= 5
  #   return "(\n" + self.params.map(&:render).join(",\n").indent(2) + "\n)"
  # end
  return "(" + self.params.map(&:render).join(", ") + ")"
end

#render_return_typeString

Returns:

  • (String)


77
78
79
80
# File 'lib/ginny/models/func.rb', line 77

def render_return_type
  type = self.return_type.nil? ? "void" : self.return_type
  return "# @return [#{type}]"
end