| package collection | |
| type Collection []map[string]interface{} | |
| // Where filters the collection by a given key / value pair. | |
| func (c Collection) Where(key string, values ...interface{}) Collection { | |
| var d = make([]map[string]interface{}, 0) | |
| if len(values) < 1 { | |
| for _, value := range c { | |
| if isTrue(value[key]) { | |
| d = append(d, value) | |
| } | |
| } | |
| } else if len(values) < 2 { | |
| for _, value := range c { | |
| if value[key] == values[0] { | |
| d = append(d, value) | |
| } | |
| } | |
| } else if values[0].(string) == "=" { | |
| for _, value := range c { | |
| if value[key] == values[1] { | |
| d = append(d, value) | |
| } | |
| } | |
| } | |
| return d | |
| } | |
| func (c Collection) Length() int { | |
| return len(c) | |
| } | |
| func (c Collection) FirstGet(key string) interface{} { | |
| return c[0][key] | |
| } | |
| func isTrue(a interface{}) bool { | |
| switch a := a.(type) { | |
| case uint: | |
| return a != uint(0) | |
| case uint8: | |
| return a != uint8(0) | |
| case uint16: | |
| return a != uint16(0) | |
| case uint32: | |
| return a != uint32(0) | |
| case uint64: | |
| return a != uint64(0) | |
| case int: | |
| return a != int(0) | |
| case int8: | |
| return a != int8(0) | |
| case int16: | |
| return a != int16(0) | |
| case int32: | |
| return a != int32(0) | |
| case int64: | |
| return a != int64(0) | |
| case float32: | |
| return a != float32(0) | |
| case float64: | |
| return a != float64(0) | |
| case string: | |
| return a != "" | |
| case bool: | |
| return a | |
| default: | |
| return false | |
| } | |
| } | |