Class: GoaModelGen::Generator
- Inherits:
-
Object
- Object
- GoaModelGen::Generator
- Defined in:
- lib/goa_model_gen/generator.rb
Constant Summary collapse
- GO_BASE_PATH =
File.('../templates/base.go.erb', __FILE__)
- PACKAGE_FOR_IMPORT =
{ "datastore" => "google.golang.org/appengine/datastore", }
- COLORS =
{ blue: "\e[34m", clear: "\e[0m", }
Instance Attribute Summary collapse
-
#config ⇒ Object
readonly
These are used in templates.
-
#force ⇒ Object
Returns the value of attribute force.
-
#keep_editable ⇒ Object
Returns the value of attribute keep_editable.
-
#skip ⇒ Object
Returns the value of attribute skip.
-
#source_file ⇒ Object
Returns the value of attribute source_file.
-
#thor ⇒ Object
Returns the value of attribute thor.
Instance Method Summary collapse
- #clear_dependencies ⇒ Object
- #dependencies ⇒ Object
- #generate(template_path, variables = {}) ⇒ Object
- #gofmt(content) ⇒ Object
- #golang_helper ⇒ Object
- #import(alias_or_package, package_or_nil = nil) ⇒ Object
-
#initialize(config) ⇒ Generator
constructor
A new instance of Generator.
- #package(name = nil) ⇒ Object
- #process(temp_path_to_dest_path) ⇒ Object
- #run(template_path, output_path, variables = {}, &block) ⇒ Object
- #user_editable(value: true) ⇒ Object
- #user_editable? ⇒ Boolean
Constructor Details
#initialize(config) ⇒ Generator
Returns a new instance of Generator.
18 19 20 21 22 23 |
# File 'lib/goa_model_gen/generator.rb', line 18 def initialize(config) @config = config @user_editable = false @force = false @skip = false end |
Instance Attribute Details
#config ⇒ Object (readonly)
These are used in templates
12 13 14 |
# File 'lib/goa_model_gen/generator.rb', line 12 def config @config end |
#force ⇒ Object
Returns the value of attribute force.
15 16 17 |
# File 'lib/goa_model_gen/generator.rb', line 15 def force @force end |
#keep_editable ⇒ Object
Returns the value of attribute keep_editable.
16 17 18 |
# File 'lib/goa_model_gen/generator.rb', line 16 def keep_editable @keep_editable end |
#skip ⇒ Object
Returns the value of attribute skip.
15 16 17 |
# File 'lib/goa_model_gen/generator.rb', line 15 def skip @skip end |
#source_file ⇒ Object
Returns the value of attribute source_file.
14 15 16 |
# File 'lib/goa_model_gen/generator.rb', line 14 def source_file @source_file end |
#thor ⇒ Object
Returns the value of attribute thor.
13 14 15 |
# File 'lib/goa_model_gen/generator.rb', line 13 def thor @thor end |
Instance Method Details
#clear_dependencies ⇒ Object
41 42 43 |
# File 'lib/goa_model_gen/generator.rb', line 41 def clear_dependencies @dependencies = nil end |
#dependencies ⇒ Object
37 38 39 |
# File 'lib/goa_model_gen/generator.rb', line 37 def dependencies @dependencies ||= {} end |
#generate(template_path, variables = {}) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/goa_model_gen/generator.rb', line 68 def generate(template_path, variables = {}) clear_dependencies user_editable(value: false) abs_path = File.('../' + template_path, __FILE__) erb = ERB.new(File.read(abs_path), nil, "-") erb.filename = abs_path variables.each do |key, val| define_singleton_method(key){ val } end body = erb.result(binding).strip raise "No package given in #{abs_path}" if package.blank? base = ERB.new(File.read(GO_BASE_PATH), nil, "-") base.filename = GO_BASE_PATH r = base.result(binding).strip << "\n" r = gofmt(r) unless config.gofmt_disabled return r end |
#gofmt(content) ⇒ Object
91 92 93 94 95 96 97 98 |
# File 'lib/goa_model_gen/generator.rb', line 91 def gofmt(content) # https://docs.ruby-lang.org/ja/2.5.0/class/IO.html#S_POPEN return IO.popen("gofmt", "r+") do |io| io.puts(content) io.close_write io.read end end |
#golang_helper ⇒ Object
25 26 27 |
# File 'lib/goa_model_gen/generator.rb', line 25 def golang_helper @golang_helper ||= GolangHelper.new end |
#import(alias_or_package, package_or_nil = nil) ⇒ Object
45 46 47 48 49 50 51 52 53 |
# File 'lib/goa_model_gen/generator.rb', line 45 def import(alias_or_package, package_or_nil = nil) package = package_or_nil || alias_or_package new_alias = package_or_nil ? alias_or_package.to_s : nil if dependencies.key?(package) old_alias = dependencies[package] raise "Conflict alias #{old_alias.inspect} and #{new_alias.inspect}" if old_alias != new_alias end dependencies[package] ||= new_alias end |
#package(name = nil) ⇒ Object
29 30 31 32 33 34 35 |
# File 'lib/goa_model_gen/generator.rb', line 29 def package(name = nil) if name @package = name else @package end end |
#process(temp_path_to_dest_path) ⇒ Object
117 118 119 |
# File 'lib/goa_model_gen/generator.rb', line 117 def process(temp_path_to_dest_path) temp_path_to_dest_path.each{|src, dest| run(src, dest) } end |
#run(template_path, output_path, variables = {}, &block) ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/goa_model_gen/generator.rb', line 105 def run(template_path, output_path, variables = {}, &block) content = generate(template_path, variables, &block) if user_editable? && keep_editable && File.exist?(output_path) $stderr.puts("%sKEEP%s %s" % [COLORS[:blue], COLORS[:clear], output_path]) return end = {skip: skip, force: force} thor.create_file(output_path, content, ) end |
#user_editable(value: true) ⇒ Object
55 56 57 |
# File 'lib/goa_model_gen/generator.rb', line 55 def user_editable(value: true) @user_editable = value end |
#user_editable? ⇒ Boolean
58 59 60 |
# File 'lib/goa_model_gen/generator.rb', line 58 def user_editable? @user_editable end |