github.com/fredbi/git-chglog@v0.0.0-20190706071416-d35c598eac81/cmd/git-chglog/processor_factory.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"net/url"
     6  
     7  	chglog "github.com/fredbi/git-chglog"
     8  )
     9  
    10  // ProcessorFactory ...
    11  type ProcessorFactory struct {
    12  	hostRegistry map[string]string
    13  }
    14  
    15  // NewProcessorFactory ...
    16  func NewProcessorFactory() *ProcessorFactory {
    17  	return &ProcessorFactory{
    18  		hostRegistry: map[string]string{
    19  			"github":    "github.com",
    20  			"gitlab":    "gitlab.com",
    21  			"bitbucket": "bitbucket.org",
    22  		},
    23  	}
    24  }
    25  
    26  // Create ...
    27  func (factory *ProcessorFactory) Create(config *Config) (chglog.Processor, error) {
    28  	obj, err := url.Parse(config.Info.RepositoryURL)
    29  	if err != nil {
    30  		return nil, err
    31  	}
    32  
    33  	host := obj.Host
    34  
    35  	if config.Style != "" {
    36  		if styleHost, ok := factory.hostRegistry[config.Style]; ok {
    37  			host = styleHost
    38  		}
    39  	}
    40  
    41  	switch host {
    42  	case "github.com":
    43  		return &chglog.GitHubProcessor{
    44  			Host: fmt.Sprintf("%s://%s", obj.Scheme, obj.Host),
    45  		}, nil
    46  	case "gitlab.com":
    47  		return &chglog.GitLabProcessor{
    48  			Host: fmt.Sprintf("%s://%s", obj.Scheme, obj.Host),
    49  		}, nil
    50  	case "bitbucket.org":
    51  		return &chglog.BitbucketProcessor{
    52  			Host: fmt.Sprintf("%s://%s", obj.Scheme, obj.Host),
    53  		}, nil
    54  	default:
    55  		return nil, nil
    56  	}
    57  }