Sha256: abb3f2febd160b5195a248da92b720fd20f19397a50bc0e7198949985f2b3739

Contents?: true

Size: 1.86 KB

Versions: 4

Compression:

Stored size: 1.86 KB

Contents

require "goon_model_gen"

require "goon_model_gen/golang/struct"
require "goon_model_gen/golang/enum"
require "goon_model_gen/golang/named_slice"
require "goon_model_gen/golang/file"

module GoonModelGen
  module Golang
    class Package
      attr_reader :path
      attr_reader :types
      attr_reader :files

      # @param path [String]
      def initialize(path)
        @path = path
        @types = []
        @files = []
      end

      def basename
        @basename ||= path ? ::File.basename(path, '.*') : nil
      end

      def name
        @name ||= basename ? basename.gsub(/[\-\_]/, '').downcase : nil
      end

      def add(type)
        types.push(type)
        type.package = self
      end

      def new_struct(name)
        Struct.new(name).tap{|s| add(s) }
      end

      # @param name [string]
      # @param base_type [String]
      # @param map [Hash<Object,Hash>] elements of enum from YAML
      # @return [Enum]
      def new_enum(name, base_type, map)
        Enum.new(name, base_type, map).tap{|s| add(s) }
      end

      # @param name [string]
      # @param base_type_name [String]
      # @return [Slice]
      def new_named_slice(name, base_type_name)
        NamedSlice.new(name, "[]#{base_type_name}").tap{|s| add(s) }
      end

      # @param name [string]
      # @return [File]
      def find_or_new_file(name)
        files.detect{|f| f.name == name} || new_file(name)
      end

      # @param name [string]
      # @return [File]
      def new_file(name)
        File.new(self, name).tap do |f|
          files.push(f)
        end
      end

      # @return [Hash<String,Type>]
      def name_to_type_map
        @name_to_type_map ||= types.each_with_object({}) do |t,d|
          d[t.name] = t
        end
      end

      # @param name [string]
      # @param [Type]
      def lookup(name)
        name_to_type_map[name]
      end

    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
goon_model_gen-0.1.3 lib/goon_model_gen/golang/package.rb
goon_model_gen-0.1.2 lib/goon_model_gen/golang/package.rb
goon_model_gen-0.1.1 lib/goon_model_gen/golang/package.rb
goon_model_gen-0.1.0 lib/goon_model_gen/golang/package.rb