Class: GoonModelGen::Builder::ConverterBuilder

Inherits:
AbstractBuilder show all
Defined in:
lib/goon_model_gen/builder/converter_builder.rb

Instance Attribute Summary collapse

Attributes inherited from AbstractBuilder

#base_package_path, #config, #package_suffix

Instance Method Summary collapse

Methods inherited from AbstractBuilder

#build_sentences, #build_sentences_with, #method_to_template_for, #method_to_template_map, #templates_for

Constructor Details

#initialize(config, loader, packages) ⇒ ConverterBuilder

Returns a new instance of ConverterBuilder.

Parameters:



21
22
23
24
25
26
# File 'lib/goon_model_gen/builder/converter_builder.rb', line 21

def initialize(config, loader, packages)
  super(config, config.converter_package_path)
  @package_suffix = "_conv"
  @loader = loader
  @packages = packages
end

Instance Attribute Details

#loaderObject (readonly)

Returns the value of attribute loader.



15
16
17
# File 'lib/goon_model_gen/builder/converter_builder.rb', line 15

def loader
  @loader
end

#packagesObject (readonly)

Returns the value of attribute packages.



16
17
18
# File 'lib/goon_model_gen/builder/converter_builder.rb', line 16

def packages
  @packages
end

Instance Method Details

#build(conv_file_paths) ⇒ Object

Parameters:

  • conv_file_path (Array<String>)


29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/goon_model_gen/builder/converter_builder.rb', line 29

def build(conv_file_paths)
  Golang::Packages.new.tap do |pkgs|
    build_sentences = []
    conv_file_paths.each do |conv_file_path|
      conf_file = loader.process(conv_file_path)
      procs = build_package(pkgs, conf_file)
      build_sentences.concat(procs)
    end
    resolve_type_names(pkgs)
    build_sentences.each(&:call)
  end
end

#build_package(pkgs, conv_file) ⇒ Array<Proc>

Parameters:

Returns:

  • (Array<Proc>)


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/goon_model_gen/builder/converter_builder.rb', line 45

def build_package(pkgs, conv_file)
  procs = []
  pkgs.new_package(conv_file.converter_package_path).tap do |pkg|
    {
      'converter/payload' => conv_file.payload_convs,
      'converter/result' => conv_file.result_convs,
    }.each do |template_dir, convs|
      convs.each do |conv|
        conv_type = pkg.new_combination_type(conv.name).tap do |t|
          m = conv.model
          g = conv.gen_type
          t.add(:model, m.name, m.package_path, m.package_base_path)
          t.add(:gen_type, g.name, g.package_path, g.package_base_path)
          t.memo['base_conv_func'] = (m.ordinary_name == g.ordinary_name) ? "#{m.ordinary_name}ToResult" : "#{m.ordinary_name}To#{g.ordinary_name}"
          t.memo['slice_conv_func'] = (m.ordinary_name == g.ordinary_name) ? "#{m.ordinary_name}SliceToResultSlice" : "#{m.ordinary_name}SliceTo#{g.ordinary_name}Slice"
          t.memo['mappings'] = conv.mappings
          unless conv.model.slice_with_ptr.nil?
            t.memo['model_slice_with_ptr'] = conv.model.slice_with_ptr
          end
        end
        procs << Proc.new{ build_sentences_with(template_dir, conv_type, nil) }
      end
    end
  end
  return procs
end

#resolve_type_names(pkgs) ⇒ Object

Parameters:



73
74
75
# File 'lib/goon_model_gen/builder/converter_builder.rb', line 73

def resolve_type_names(pkgs)
  pkgs.resolve_type_names(Golang::DatastorePackageFactory.new(config.package_alias_map).packages.dup.add(packages))
end