Sha256: 0b37d1aef4b50108e3378adfad2aaa0fedd68acfdf86174d1989cc9a15d02b90

Contents?: true

Size: 1.19 KB

Versions: 2

Compression:

Stored size: 1.19 KB

Contents

require "goon_model_gen"

module GoonModelGen
  module Golang
    class Field
      attr_reader :name, :type_name
      attr_reader :tags # Hash<string,Array[string]> ex. for datastore, validate, json, etc...
      attr_reader :goon_id # true/false
      attr_reader :type
      attr_accessor :struct
      attr_accessor :prepare_method
      attr_accessor :unique

      def initialize(name, type_name, tags, goon_id: false)
        @name, @type_name = name, type_name
        @tags = tags || {}
        @goon_id = goon_id
      end

      # @param pkgs [Packages]
      def resolve(pkgs)
        @type = pkgs.type_for(type_name) || raise("#{type_name.inspect} not found for #{struct.qualified_name}.#{name}")
      end

      def tags_string
        tags.keys.sort.map do |key|
          val = tags[key]
          vals = val.is_a?(Array) ? val.join(',') : val.to_s
          vals.empty? ? nil : "#{key}:\"#{vals}\""
        end.compact.join(' ')
      end

      # @param pkg [Package]
      # @return [string]
      def definition_in(pkg)
        type_exp =
          (type.package.path == pkg.path) ? type.name : type.qualified_name
        "#{ name } #{ type_exp } `#{ tags_string }`"
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
goon_model_gen-0.1.3 lib/goon_model_gen/golang/field.rb
goon_model_gen-0.1.2 lib/goon_model_gen/golang/field.rb