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 }