Skip to content

Commit 5489e33

Browse files
author
Dean Karn
authored
Merge pull request #1 from go-playground/group-logic-update
Group function update
2 parents 0f492d1 + 1f52ae4 commit 5489e33

File tree

3 files changed

+33
-21
lines changed

3 files changed

+33
-21
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
##Pure
22
<img align="right" src="https://raw.githubusercontent.com/go-playground/pure/master/logo.png">
3-
![Project status](https://img.shields.io/badge/version-3.1.1-green.svg)
3+
![Project status](https://img.shields.io/badge/version-4.0.0-green.svg)
44
[![Build Status](https://semaphoreci.com/api/v1/joeybloggs/pure/branches/master/badge.svg)](https://semaphoreci.com/joeybloggs/pure)
55
[![Coverage Status](https://coveralls.io/repos/github/go-playground/pure/badge.svg?branch=master)](https://coveralls.io/github/go-playground/pure?branch=master)
66
[![Go Report Card](https://goreportcard.com/badge/github.com/go-playground/pure)](https://goreportcard.com/report/github.com/go-playground/pure)

group.go

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import (
99
// IRouteGroup interface for router group
1010
type IRouteGroup interface {
1111
IRoutes
12-
Group(prefix string, middleware ...Middleware) IRouteGroup
12+
GroupWithNone(prefix string) IRouteGroup
13+
GroupWithMore(prefix string, middleware ...Middleware) IRouteGroup
14+
Group(prefix string) IRouteGroup
1315
}
1416

1517
// IRoutes interface for routes
@@ -140,31 +142,41 @@ func (g *routeGroup) Match(methods []string, path string, h http.HandlerFunc) {
140142
}
141143
}
142144

143-
// Group creates a new sub router with prefix. It inherits all properties from
144-
// the parent. Passing middleware overrides parent middleware but still keeps
145-
// the root level middleware intact.
146-
func (g *routeGroup) Group(prefix string, middleware ...Middleware) IRouteGroup {
145+
// GroupWithNone creates a new sub router with specified prefix and no middleware attached.
146+
func (g *routeGroup) GroupWithNone(prefix string) IRouteGroup {
147147

148-
rg := &routeGroup{
149-
prefix: g.prefix + prefix,
150-
pure: g.pure,
148+
return &routeGroup{
149+
prefix: g.prefix + prefix,
150+
pure: g.pure,
151+
middleware: make([]Middleware, 0),
151152
}
153+
}
152154

153-
if len(middleware) == 0 {
154-
rg.middleware = make([]Middleware, len(g.middleware)+len(middleware))
155-
copy(rg.middleware, g.middleware)
156-
157-
return rg
158-
}
155+
// GroupWithMore creates a new sub router with specified prefix, retains existing middleware and adds new middleware.
156+
func (g *routeGroup) GroupWithMore(prefix string, middleware ...Middleware) IRouteGroup {
159157

160-
if middleware[0] == nil {
161-
rg.middleware = make([]Middleware, 0)
162-
return rg
158+
rg := &routeGroup{
159+
prefix: g.prefix + prefix,
160+
pure: g.pure,
161+
middleware: make([]Middleware, len(middleware)),
163162
}
164163

165-
rg.middleware = make([]Middleware, len(middleware))
166164
copy(rg.middleware, g.pure.middleware)
167165
rg.Use(middleware...)
168166

169167
return rg
170168
}
169+
170+
// Group creates a new sub router with specified prefix and retains existing middleware.
171+
func (g *routeGroup) Group(prefix string) IRouteGroup {
172+
173+
rg := &routeGroup{
174+
prefix: g.prefix + prefix,
175+
pure: g.pure,
176+
middleware: make([]Middleware, len(g.middleware)),
177+
}
178+
179+
copy(rg.middleware, g.middleware)
180+
181+
return rg
182+
}

group_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func TestUseAndGroup(t *testing.T) {
6767
}
6868
}
6969

70-
sh := p.Group("/superheros", logger2)
70+
sh := p.GroupWithMore("/superheros", logger2)
7171
sh.Get("/", fn)
7272
sh.Get("/list/", fn)
7373

@@ -97,7 +97,7 @@ func TestUseAndGroup(t *testing.T) {
9797

9898
log = ""
9999

100-
g2 := p.Group("/admins", nil)
100+
g2 := p.GroupWithNone("/admins")
101101
g2.Get("/", fn)
102102
g2.Get("/list/", fn)
103103

0 commit comments

Comments
 (0)