OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Package gae provides a fakable wrapped interface for the appengine SDK's | 5 // Package gae provides a fakable wrapped interface for the appengine SDK's |
6 // APIs. This means that it's possible to mock all of the supported appengine | 6 // APIs. This means that it's possible to mock all of the supported appengine |
7 // APIs for testing (or potentially implement a different backend for them). | 7 // APIs for testing (or potentially implement a different backend for them). |
8 // | 8 // |
9 // Features | 9 // Features |
10 // | 10 // |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 // | 96 // |
97 // A service defintion lives under the `service` subfolder, and defines the | 97 // A service defintion lives under the `service` subfolder, and defines the |
98 // user-facing interface for a service. Each service has a few common types and | 98 // user-facing interface for a service. Each service has a few common types and |
99 // functions. Common types are: | 99 // functions. Common types are: |
100 // | 100 // |
101 // service.Interface - the main user-friendly service interface. | 101 // service.Interface - the main user-friendly service interface. |
102 // | 102 // |
103 // service.RawInterface - the internal service interface used by service | 103 // service.RawInterface - the internal service interface used by service |
104 // and filter implementations. Note that some services | 104 // and filter implementations. Note that some services |
105 // like Info don't distinguish between the service | 105 // like Info don't distinguish between the service |
106 // interface and the user interface. | 106 // interface and the user interface. This interface is |
| 107 // typically a bit lower level than Interface and |
| 108 // lacks convenience methods. |
107 // | 109 // |
108 // service.Testable - any additional methods that a 'testing' | 110 // service.Testable - any additional methods that a 'testing' |
109 // implementation should provide. It's expected that | 111 // implementation should provide. It's expected that |
110 // tests will cast the RawInterface from GetRaw() to | 112 // tests will cast the RawInterface from GetRaw() to |
111 // Testable in order to access these methods. | 113 // Testable in order to access these methods. |
112 // | 114 // |
113 // service.RawFactory - a function returning a RawInterface | 115 // service.RawFactory - a function returning a RawInterface |
114 // | 116 // |
115 // service.RawFilter - a function returning a new RawInterface based on | 117 // service.RawFilter - a function returning a new RawInterface based on |
116 // the previous filtered interface. Filters chain | 118 // the previous filtered interface. Filters chain |
117 // together to allow behavioral service features | 119 // together to allow behavioral service features |
118 // without needing to agument the underlying service | 120 // without needing to agument the underlying service |
119 // implementations directly. | 121 // implementations directly. |
120 // | 122 // |
121 // And common functions are: | 123 // And common functions are: |
122 // service.Get - Retrieve the current, filtered Interface | 124 // service.Get - Retrieve the current, filtered Interface |
123 // implementation from the context. This is the most | 125 // implementation from the context. This is the most |
124 // frequently used service function by far. | 126 // frequently used service function by far. |
125 // | 127 // |
126 // service.GetRaw - Retrieve the current, filtered RawInterface | 128 // service.GetRaw - Retrieve the current, filtered RawInterface |
127 // implementation from the context. This is less | 129 // implementation from the context. This is less |
128 // frequently used, but can be useful if you want to | 130 // frequently used, but can be useful if you want to |
129 // avoid some of the overhead of the user-friendly | 131 // avoid some of the overhead of the user-friendly |
130 // Interface, which can do sometimes-unnecessary amou
nts | 132 // Interface, which can do sometimes-unnecessary amou
nts |
131 // of reflection or allocation. The RawInterface and | 133 // of reflection or allocation. The RawInterface and |
132 // Interface for a service are fully interchangable a
nd | 134 // Interface for a service are fully interchangable a
nd |
133 // usage of them can be freely mixed in an applicatio
n. | 135 // usage of them can be freely mixed in an applicatio
n. |
134 // | 136 // |
135 // service.AddRawFilters - adds one or more Filters to the context. | 137 // service.AddRawFilters - adds one or more RawFilters to the context. |
136 // | 138 // |
137 // service.SetRawFactory - adds a Factory to the context | 139 // service.SetRawFactory - adds a RawFactory to the context |
138 // | 140 // |
139 // service.SetRaw - adds an implementation of RawInterface to the cont
ext | 141 // service.SetRaw - adds an implementation of RawInterface to the cont
ext |
140 // (shorthand for SetRawFactory, useful for testing) | 142 // (shorthand for SetRawFactory, useful for testing) |
141 // | 143 // |
142 // Implementations | 144 // Implementations |
143 // | 145 // |
144 // The impl subdirectory contains a couple different service implementations, | 146 // The impl subdirectory contains a couple different service implementations, |
145 // depending on your needs. | 147 // depending on your needs. |
146 // | 148 // |
147 // 'prod' is the production (e.g. real appengine-backed) implementation. It | 149 // 'prod' is the production (e.g. real appengine-backed) implementation. It |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 // and the state can be observed to see how many times each API was invoked. | 215 // and the state can be observed to see how many times each API was invoked. |
214 // Since filters stack, we can compare counts from rawCount versus userCount to | 216 // Since filters stack, we can compare counts from rawCount versus userCount to |
215 // see how many calls to the actual real datastore went through, vs. how many | 217 // see how many calls to the actual real datastore went through, vs. how many |
216 // went to memcache, for example. | 218 // went to memcache, for example. |
217 // | 219 // |
218 // Note that Filters apply only to the service.RawInterface. All implementations | 220 // Note that Filters apply only to the service.RawInterface. All implementations |
219 // of service.Interface boil down to calls to service.RawInterface methods, but | 221 // of service.Interface boil down to calls to service.RawInterface methods, but |
220 // it's possible that bad calls to the service.Interface methods could return | 222 // it's possible that bad calls to the service.Interface methods could return |
221 // an error before ever reaching the filters or service implementation. | 223 // an error before ever reaching the filters or service implementation. |
222 package gae | 224 package gae |
OLD | NEW |