Sha256: c7d26207b1ea0f73da4dfc97309061f37829fdab1bccf39df394e5c4c6a48ed9

Contents?: true

Size: 1.35 KB

Versions: 4

Compression:

Stored size: 1.35 KB

Contents

require "goon_model_gen"

require "goon_model_gen/golang/type"

module GoonModelGen
  module Golang
    class Modifier < Type
      attr_reader :prefix, :target_name
      attr_reader :target
      def initialize(prefix, target)
        @prefix = prefix
        case target
        when Type
          @target = target
          @target_name = target.name
        else
          @target = nil
          @target_name = target.to_s
        end
      end

      def package
        target.package
      end

      def name
        prefix + target.name
      end

      def qualified_name
        prefix + target.qualified_name
      end

      # @param pkgs [Packages]
      def resolve(pkgs)
        return if target
        @target = pkgs.type_for(target_name) || raise("#{target_name.inspect} not found")
      end

      PATTERN = /\A\*|\A\[\d*\]/

      class << self
        # @param s [String]
        # @return [Proc]
        def parse(s)
          parts = parse_expression(s)
          t = yield(parts.shift)
          return nil unless t
          parts.each do |part|
            t = new(part, t)
          end
          t
        end

        # @param s [String]
        # @return [Array<String>]
        def parse_expression(s)
          m = s.match(PATTERN)
          m.nil? ? [s] : parse_expression(s.sub(PATTERN, '')) + [m[0]]
        end

      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/modifier.rb
goon_model_gen-0.1.2 lib/goon_model_gen/golang/modifier.rb
goon_model_gen-0.1.1 lib/goon_model_gen/golang/modifier.rb
goon_model_gen-0.1.0 lib/goon_model_gen/golang/modifier.rb