Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 40da221

Browse files
authored
Merge branch 'develop' into master
2 parents 4cb4bea + 2b85e8d commit 40da221

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+1113
-1224
lines changed

.travis.yml

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ go:
44
- 1.4
55
- 1.5
66
- 1.6
7+
- 1.7
8+
- 1.8
79
- tip
810

911
os:
@@ -12,34 +14,42 @@ os:
1214

1315
sudo: false
1416

17+
branches:
18+
only:
19+
- master
20+
- develop
21+
1522
services:
1623
# github.com/revel/revel/cache
1724
- memcache
1825
- redis-server
1926

2027
before_install:
2128
# TRAVIS_OS_NAME - linux and osx
22-
- 'if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update && brew install memcached redis; fi'
23-
- 'if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then nohup /usr/local/opt/memcached/bin/memcached & fi'
24-
- 'if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then nohup redis-server /usr/local/etc/redis.conf & fi'
29+
- echo $TRAVIS_OS_NAME
30+
- |
31+
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
32+
brew update && brew install memcached redis && brew services start redis && brew services start memcached
33+
fi
34+
- redis-server --daemonize yes
35+
- redis-cli info
2536

2637
install:
2738
# Setting environments variables
2839
- export PATH=$PATH:$HOME/gopath/bin
2940
- export REVEL_BRANCH="develop"
3041
- 'if [[ "$TRAVIS_BRANCH" == "master" ]]; then export REVEL_BRANCH="master"; fi'
3142
- 'echo "Travis branch: $TRAVIS_BRANCH, Revel dependency branch: $REVEL_BRANCH"'
32-
- go get -v github.com/revel/revel/...
33-
- rm -rf ../config
3443
- git clone -b $REVEL_BRANCH git://github.com/revel/modules ../modules/
3544
- git clone -b $REVEL_BRANCH git://github.com/revel/cmd ../cmd/
3645
- git clone -b $REVEL_BRANCH git://github.com/revel/config ../config/
3746
- git clone -b $REVEL_BRANCH git://github.com/revel/cron ../cron/
38-
- git clone git://github.com/revel/samples ../samples/
47+
- git clone -b $REVEL_BRANCH git://github.com/revel/examples ../examples/
48+
- go get -v github.com/revel/revel/...
3949
- go get -v github.com/revel/cmd/revel
4050

4151
script:
42-
- go test -v github.com/revel/revel...
52+
- go test -v github.com/revel/revel/...
4353

4454
# Ensure the new-app flow works (plus the other commands).
4555
- revel version
@@ -51,18 +61,10 @@ script:
5161
- revel package my/testapp
5262
- revel package my/testapp prod
5363

54-
# Build & run the sample apps
55-
- revel test github.com/revel/samples/booking
56-
- revel test github.com/revel/samples/chat
57-
- revel test github.com/revel/samples/facebook-oauth2
58-
- revel test github.com/revel/samples/twitter-oauth
59-
- revel test github.com/revel/samples/validation
60-
- revel test github.com/revel/samples/upload
61-
6264
# Commented out persona test sample, since persona.org gonna be shutdown.
6365
# Also http://personatestuser.org becomes non-responsive most of the time.
6466
# https://wiki.mozilla.org/Identity/Persona_Shutdown_Guidelines_for_Reliers
65-
# - revel test github.com/revel/samples/persona
67+
# - revel test github.com/revel/examples/persona
6668

6769
matrix:
6870
allow_failures:

binder.go

Lines changed: 53 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
// Copyright (c) 2012-2016 The Revel Framework Authors, All rights reserved.
2+
// Revel Framework source code and usage is governed by a MIT style
3+
// license that can be found in the LICENSE file.
4+
15
package revel
26

37
import (
@@ -39,7 +43,7 @@ type Binder struct {
3943
Unbind func(output map[string]string, name string, val interface{})
4044
}
4145

42-
// An adapter for easily making one-key-value binders.
46+
// ValueBinder is adapter for easily making one-key-value binders.
4347
func ValueBinder(f func(value string, typ reflect.Type) reflect.Value) func(*Params, string, reflect.Type) reflect.Value {
4448
return func(params *Params, name string, typ reflect.Type) reflect.Value {
4549
vals, ok := params.Values[name]
@@ -50,11 +54,13 @@ func ValueBinder(f func(value string, typ reflect.Type) reflect.Value) func(*Par
5054
}
5155
}
5256

57+
// Revel's default date and time constants
5358
const (
54-
DEFAULT_DATE_FORMAT = "2006-01-02"
55-
DEFAULT_DATETIME_FORMAT = "2006-01-02 15:04"
59+
DefaultDateFormat = "2006-01-02"
60+
DefaultDateTimeFormat = "2006-01-02 15:04"
5661
)
5762

63+
// Binders type and kind definition
5864
var (
5965
// These are the lookups to find a Binder for any type of data.
6066
// The most specific binder found will be used (Type before Kind)
@@ -134,19 +140,11 @@ var (
134140
},
135141
}
136142

137-
// Booleans support a couple different value formats:
138-
// "true" and "false"
139-
// "on" and "" (a checkbox)
140-
// "1" and "0" (why not)
143+
// Booleans support a various value formats,
144+
// refer `revel.Atob` method.
141145
BoolBinder = Binder{
142146
Bind: ValueBinder(func(val string, typ reflect.Type) reflect.Value {
143-
v := strings.TrimSpace(strings.ToLower(val))
144-
switch v {
145-
case "true", "on", "1":
146-
return reflect.ValueOf(true)
147-
}
148-
// Return false by default.
149-
return reflect.ValueOf(false)
147+
return reflect.ValueOf(Atob(val))
150148
}),
151149
Unbind: func(output map[string]string, name string, val interface{}) {
152150
output[name] = fmt.Sprintf("%t", val)
@@ -195,46 +193,6 @@ var (
195193
}
196194
)
197195

198-
// Sadly, the binder lookups can not be declared initialized -- that results in
199-
// an "initialization loop" compile error.
200-
func init() {
201-
KindBinders[reflect.Int] = IntBinder
202-
KindBinders[reflect.Int8] = IntBinder
203-
KindBinders[reflect.Int16] = IntBinder
204-
KindBinders[reflect.Int32] = IntBinder
205-
KindBinders[reflect.Int64] = IntBinder
206-
207-
KindBinders[reflect.Uint] = UintBinder
208-
KindBinders[reflect.Uint8] = UintBinder
209-
KindBinders[reflect.Uint16] = UintBinder
210-
KindBinders[reflect.Uint32] = UintBinder
211-
KindBinders[reflect.Uint64] = UintBinder
212-
213-
KindBinders[reflect.Float32] = FloatBinder
214-
KindBinders[reflect.Float64] = FloatBinder
215-
216-
KindBinders[reflect.String] = StringBinder
217-
KindBinders[reflect.Bool] = BoolBinder
218-
KindBinders[reflect.Slice] = Binder{bindSlice, unbindSlice}
219-
KindBinders[reflect.Struct] = Binder{bindStruct, unbindStruct}
220-
KindBinders[reflect.Ptr] = PointerBinder
221-
KindBinders[reflect.Map] = MapBinder
222-
223-
TypeBinders[reflect.TypeOf(time.Time{})] = TimeBinder
224-
225-
// Uploads
226-
TypeBinders[reflect.TypeOf(&os.File{})] = Binder{bindFile, nil}
227-
TypeBinders[reflect.TypeOf([]byte{})] = Binder{bindByteArray, nil}
228-
TypeBinders[reflect.TypeOf((*io.Reader)(nil)).Elem()] = Binder{bindReadSeeker, nil}
229-
TypeBinders[reflect.TypeOf((*io.ReadSeeker)(nil)).Elem()] = Binder{bindReadSeeker, nil}
230-
231-
OnAppStart(func() {
232-
DateTimeFormat = Config.StringDefault("format.datetime", DEFAULT_DATETIME_FORMAT)
233-
DateFormat = Config.StringDefault("format.date", DEFAULT_DATE_FORMAT)
234-
TimeFormats = append(TimeFormats, DateTimeFormat, DateFormat)
235-
})
236-
}
237-
238196
// Used to keep track of the index for individual keyvalues.
239197
type sliceValue struct {
240198
index int // Index extracted from brackets. If -1, no index was provided.
@@ -334,7 +292,7 @@ func unbindSlice(output map[string]string, name string, val interface{}) {
334292
func bindStruct(params *Params, name string, typ reflect.Type) reflect.Value {
335293
result := reflect.New(typ).Elem()
336294
fieldValues := make(map[string]reflect.Value)
337-
for key, _ := range params.Values {
295+
for key := range params.Values {
338296
if !strings.HasPrefix(key, name+".") {
339297
continue
340298
}
@@ -511,3 +469,43 @@ func binderForType(typ reflect.Type) (Binder, bool) {
511469
}
512470
return binder, true
513471
}
472+
473+
// Sadly, the binder lookups can not be declared initialized -- that results in
474+
// an "initialization loop" compile error.
475+
func init() {
476+
KindBinders[reflect.Int] = IntBinder
477+
KindBinders[reflect.Int8] = IntBinder
478+
KindBinders[reflect.Int16] = IntBinder
479+
KindBinders[reflect.Int32] = IntBinder
480+
KindBinders[reflect.Int64] = IntBinder
481+
482+
KindBinders[reflect.Uint] = UintBinder
483+
KindBinders[reflect.Uint8] = UintBinder
484+
KindBinders[reflect.Uint16] = UintBinder
485+
KindBinders[reflect.Uint32] = UintBinder
486+
KindBinders[reflect.Uint64] = UintBinder
487+
488+
KindBinders[reflect.Float32] = FloatBinder
489+
KindBinders[reflect.Float64] = FloatBinder
490+
491+
KindBinders[reflect.String] = StringBinder
492+
KindBinders[reflect.Bool] = BoolBinder
493+
KindBinders[reflect.Slice] = Binder{bindSlice, unbindSlice}
494+
KindBinders[reflect.Struct] = Binder{bindStruct, unbindStruct}
495+
KindBinders[reflect.Ptr] = PointerBinder
496+
KindBinders[reflect.Map] = MapBinder
497+
498+
TypeBinders[reflect.TypeOf(time.Time{})] = TimeBinder
499+
500+
// Uploads
501+
TypeBinders[reflect.TypeOf(&os.File{})] = Binder{bindFile, nil}
502+
TypeBinders[reflect.TypeOf([]byte{})] = Binder{bindByteArray, nil}
503+
TypeBinders[reflect.TypeOf((*io.Reader)(nil)).Elem()] = Binder{bindReadSeeker, nil}
504+
TypeBinders[reflect.TypeOf((*io.ReadSeeker)(nil)).Elem()] = Binder{bindReadSeeker, nil}
505+
506+
OnAppStart(func() {
507+
DateTimeFormat = Config.StringDefault("format.datetime", DefaultDateTimeFormat)
508+
DateFormat = Config.StringDefault("format.date", DefaultDateFormat)
509+
TimeFormats = append(TimeFormats, DateTimeFormat, DateFormat)
510+
})
511+
}

0 commit comments

Comments
 (0)