Sha256: 945ab98b015004c659bdc029d7e1c582fea17e10eedd704531155d2f9289c885

Contents?: true

Size: 1.45 KB

Versions: 12

Compression:

Stored size: 1.45 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

      # @param pkg2alias [Hash<String,String>]
      # @return [string]
      def qualified_name(pkg2alias = nil)
        prefix + target.qualified_name(pkg2alias)
      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

12 entries across 12 versions & 1 rubygems

Version Path
goon_model_gen-0.4.3 lib/goon_model_gen/golang/modifier.rb
goon_model_gen-0.4.2 lib/goon_model_gen/golang/modifier.rb
goon_model_gen-0.4.1 lib/goon_model_gen/golang/modifier.rb
goon_model_gen-0.4.0 lib/goon_model_gen/golang/modifier.rb
goon_model_gen-0.3.1 lib/goon_model_gen/golang/modifier.rb
goon_model_gen-0.3.0 lib/goon_model_gen/golang/modifier.rb
goon_model_gen-0.2.5 lib/goon_model_gen/golang/modifier.rb
goon_model_gen-0.2.4 lib/goon_model_gen/golang/modifier.rb
goon_model_gen-0.2.3 lib/goon_model_gen/golang/modifier.rb
goon_model_gen-0.2.2 lib/goon_model_gen/golang/modifier.rb
goon_model_gen-0.2.1 lib/goon_model_gen/golang/modifier.rb
goon_model_gen-0.2.0 lib/goon_model_gen/golang/modifier.rb