File: | lib/WWW/Google/Contacts/Types.pm |
Coverage: | 100.0% |
line | stmt | bran | cond | sub | pod | time | code |
---|---|---|---|---|---|---|---|
1 | package WWW::Google::Contacts::Types; | ||||||
2 | |||||||
3 | 12 | 327 | use MooseX::Types -declare => | ||||
4 | [ qw( | ||||||
5 | Category | ||||||
6 | Name | ||||||
7 | PhoneNumber ArrayRefOfPhoneNumber | ||||||
8 | Email ArrayRefOfEmail | ||||||
9 | IM ArrayRefOfIM | ||||||
10 | Organization ArrayRefOfOrganization | ||||||
11 | PostalAddress ArrayRefOfPostalAddress | ||||||
12 | CalendarLink ArrayRefOfCalendarLink | ||||||
13 | Birthday | ||||||
14 | ContactEvent ArrayRefOfContactEvent | ||||||
15 | ExternalId ArrayRefOfExternalId | ||||||
16 | Gender | ||||||
17 | GroupMembership ArrayRefOfGroupMembership | ||||||
18 | Hobby ArrayRefOfHobby | ||||||
19 | Jot ArrayRefOfJot | ||||||
20 | Language ArrayRefOfLanguage | ||||||
21 | Priority | ||||||
22 | Sensitivity | ||||||
23 | Relation ArrayRefOfRelation | ||||||
24 | UserDefined ArrayRefOfUserDefined | ||||||
25 | Website ArrayRefOfWebsite | ||||||
26 | Photo | ||||||
27 | Group | ||||||
28 | 12 12 | 89 34 | ) ]; | ||||
29 | |||||||
30 | 12 12 12 | 152 41 108 | use MooseX::Types::Moose qw(Str HashRef ArrayRef Any Undef Bool); | ||||
31 | |||||||
32 | 12 12 12 | 194 51 206 | use WWW::Google::Contacts::Type::Category; | ||||
33 | 12 12 12 | 229 50 217 | use WWW::Google::Contacts::Type::Name; | ||||
34 | 12 12 12 | 378 51 204 | use WWW::Google::Contacts::Type::PhoneNumber; | ||||
35 | 12 12 12 | 149 41 81 | use WWW::Google::Contacts::Type::PhoneNumber; | ||||
36 | 12 12 12 | 200 51 214 | use WWW::Google::Contacts::Type::Email; | ||||
37 | 12 12 12 | 143 46 80 | use WWW::Google::Contacts::Type::Email; | ||||
38 | 12 12 12 | 195 46 202 | use WWW::Google::Contacts::Type::IM; | ||||
39 | 12 12 12 | 229 50 213 | use WWW::Google::Contacts::Type::Organization; | ||||
40 | 12 12 12 | 223 55 239 | use WWW::Google::Contacts::Type::PostalAddress; | ||||
41 | 12 12 12 | 235 49 220 | use WWW::Google::Contacts::Type::Birthday; | ||||
42 | 12 12 12 | 238 50 242 | use WWW::Google::Contacts::Type::CalendarLink; | ||||
43 | |||||||
44 | 12 12 12 | 271 54 209 | use WWW::Google::Contacts::Type::ContactEvent; | ||||
45 | 12 12 12 | 225 49 212 | use WWW::Google::Contacts::Type::ExternalId; | ||||
46 | 12 12 12 | 282 52 239 | use WWW::Google::Contacts::Type::Gender; | ||||
47 | 12 12 12 | 226 53 215 | use WWW::Google::Contacts::Type::GroupMembership; | ||||
48 | 12 12 12 | 225 45 210 | use WWW::Google::Contacts::Type::Hobby; | ||||
49 | 12 12 12 | 231 51 210 | use WWW::Google::Contacts::Type::Jot; | ||||
50 | 12 12 12 | 225 48 211 | use WWW::Google::Contacts::Type::Language; | ||||
51 | 12 12 12 | 248 47 207 | use WWW::Google::Contacts::Type::Priority; | ||||
52 | 12 12 12 | 222 959 210 | use WWW::Google::Contacts::Type::Relation; | ||||
53 | 12 12 12 | 227 50 211 | use WWW::Google::Contacts::Type::UserDefined; | ||||
54 | 12 12 12 | 224 49 208 | use WWW::Google::Contacts::Type::Website; | ||||
55 | |||||||
56 | class_type Group, | ||||||
57 | { class => 'WWW::Google::Contacts::Group' }; | ||||||
58 | |||||||
59 | coerce Group, | ||||||
60 | from HashRef, | ||||||
61 | via { require WWW::Google::Contacts::Group; WWW::Google::Contacts::Group->new( $_ ) }; | ||||||
62 | |||||||
63 | class_type Category, | ||||||
64 | { class => 'WWW::Google::Contacts::Type::Category' }; | ||||||
65 | |||||||
66 | coerce Category, | ||||||
67 | from Any, | ||||||
68 | via { | ||||||
69 | WWW::Google::Contacts::Type::Category->new( | ||||||
70 | type => 'http://schemas.google.com/g/2005#kind', | ||||||
71 | term => 'http://schemas.google.com/contact/2008#contact' | ||||||
72 | ); | ||||||
73 | }; | ||||||
74 | |||||||
75 | class_type Name, | ||||||
76 | { class => 'WWW::Google::Contacts::Type::Name' }; | ||||||
77 | |||||||
78 | coerce Name, | ||||||
79 | from Str, | ||||||
80 | via { WWW::Google::Contacts::Type::Name->new( full_name => $_ ) }, | ||||||
81 | from Any, | ||||||
82 | via { WWW::Google::Contacts::Type::Name->new( $_ || {} ) }; | ||||||
83 | |||||||
84 | class_type PhoneNumber, | ||||||
85 | { class => 'WWW::Google::Contacts::Type::PhoneNumber' }; | ||||||
86 | |||||||
87 | coerce PhoneNumber, | ||||||
88 | from HashRef, | ||||||
89 | via { WWW::Google::Contacts::Type::PhoneNumber->new( $_ ) }, | ||||||
90 | from Str, | ||||||
91 | via { WWW::Google::Contacts::Type::PhoneNumber->new( type => "mobile", value => $_ ) }; | ||||||
92 | |||||||
93 | subtype ArrayRefOfPhoneNumber, | ||||||
94 | as ArrayRef[ PhoneNumber ]; | ||||||
95 | |||||||
96 | coerce ArrayRefOfPhoneNumber, | ||||||
97 | from ArrayRef, | ||||||
98 | via { return [ map { to_PhoneNumber( $_ ) } @{ $_ } ] }, | ||||||
99 | from Any, | ||||||
100 | via { return [ to_PhoneNumber( $_ ) ] }; | ||||||
101 | |||||||
102 | class_type Email, | ||||||
103 | { class => 'WWW::Google::Contacts::Type::Email' }; | ||||||
104 | |||||||
105 | coerce Email, | ||||||
106 | from HashRef, | ||||||
107 | via { WWW::Google::Contacts::Type::Email->new( $_ ) }, | ||||||
108 | from Str, | ||||||
109 | via { WWW::Google::Contacts::Type::Email->new( type => "home", value => $_ ) }; | ||||||
110 | |||||||
111 | subtype ArrayRefOfEmail, | ||||||
112 | as ArrayRef[ Email ]; | ||||||
113 | |||||||
114 | coerce ArrayRefOfEmail, | ||||||
115 | from ArrayRef, | ||||||
116 | via { [ map { to_Email( $_ ) } @{ $_ } ] }, | ||||||
117 | from Any, | ||||||
118 | via { [ to_Email( $_ ) ] }; | ||||||
119 | |||||||
120 | class_type IM, | ||||||
121 | { class => 'WWW::Google::Contacts::Type::IM' }; | ||||||
122 | |||||||
123 | coerce IM, | ||||||
124 | from HashRef, | ||||||
125 | via { WWW::Google::Contacts::Type::IM->new( $_ ) }, | ||||||
126 | from Str, | ||||||
127 | via { WWW::Google::Contacts::Type::IM->new( value => $_ ) }; | ||||||
128 | |||||||
129 | subtype ArrayRefOfIM, | ||||||
130 | as ArrayRef[ IM ]; | ||||||
131 | |||||||
132 | coerce ArrayRefOfIM, | ||||||
133 | from ArrayRef, | ||||||
134 | via { [ map { to_IM( $_ ) } @{ $_ } ] }, | ||||||
135 | from Any, | ||||||
136 | via { [ to_IM( $_ ) ] }; | ||||||
137 | |||||||
138 | class_type Organization, | ||||||
139 | { class => 'WWW::Google::Contacts::Type::Organization' }; | ||||||
140 | |||||||
141 | coerce Organization, | ||||||
142 | from HashRef, | ||||||
143 | via { WWW::Google::Contacts::Type::Organization->new( $_ ) }, | ||||||
144 | from Str, | ||||||
145 | via { WWW::Google::Contacts::Type::Organization->new( type => "work", name => $_ ) }; | ||||||
146 | |||||||
147 | subtype ArrayRefOfOrganization, | ||||||
148 | as ArrayRef[ Organization ]; | ||||||
149 | |||||||
150 | coerce ArrayRefOfOrganization, | ||||||
151 | from ArrayRef, | ||||||
152 | via { [ map { to_Organization( $_ ) } @{ $_ } ] }, | ||||||
153 | from Any, | ||||||
154 | via { [ to_Organization( $_ ) ] }; | ||||||
155 | |||||||
156 | class_type PostalAddress, | ||||||
157 | { class => 'WWW::Google::Contacts::Type::PostalAddress' }; | ||||||
158 | |||||||
159 | coerce PostalAddress, | ||||||
160 | from HashRef, | ||||||
161 | via { WWW::Google::Contacts::Type::PostalAddress->new( $_ ) }, | ||||||
162 | from Str, | ||||||
163 | via { WWW::Google::Contacts::Type::PostalAddress->new( type => "work", formatted => $_ ) }; | ||||||
164 | |||||||
165 | subtype ArrayRefOfPostalAddress, | ||||||
166 | as ArrayRef[ PostalAddress ]; | ||||||
167 | |||||||
168 | coerce ArrayRefOfPostalAddress, | ||||||
169 | from ArrayRef, | ||||||
170 | via { [ map { to_PostalAddress( $_ ) } @{ $_ } ] }, | ||||||
171 | from Any, | ||||||
172 | via { [ to_PostalAddress( $_ ) ] }; | ||||||
173 | |||||||
174 | class_type Birthday, | ||||||
175 | { class => 'WWW::Google::Contacts::Type::Birthday' }; | ||||||
176 | |||||||
177 | coerce Birthday, | ||||||
178 | from Str, | ||||||
179 | via { WWW::Google::Contacts::Type::Birthday->new( when => $_ ) }, | ||||||
180 | from HashRef, | ||||||
181 | via { WWW::Google::Contacts::Type::Birthday->new( $_ ) }; | ||||||
182 | |||||||
183 | class_type CalendarLink, | ||||||
184 | { class => 'WWW::Google::Contacts::Type::CalendarLink' }; | ||||||
185 | |||||||
186 | coerce CalendarLink, | ||||||
187 | from HashRef, | ||||||
188 | via { WWW::Google::Contacts::Type::CalendarLink->new( $_ ) }, | ||||||
189 | from Str, | ||||||
190 | via { WWW::Google::Contacts::Type::CalendarLink->new( type => "home", href => $_ ) }; | ||||||
191 | |||||||
192 | subtype ArrayRefOfCalendarLink, | ||||||
193 | as ArrayRef[ CalendarLink ]; | ||||||
194 | |||||||
195 | coerce ArrayRefOfCalendarLink, | ||||||
196 | from ArrayRef, | ||||||
197 | via { [ map { to_CalendarLink( $_ ) } @{ $_ } ] }, | ||||||
198 | from Any, | ||||||
199 | via { [ to_CalendarLink( $_ ) ] }; | ||||||
200 | |||||||
201 | class_type ContactEvent, | ||||||
202 | { class => 'WWW::Google::Contacts::Type::ContactEvent' }; | ||||||
203 | |||||||
204 | coerce ContactEvent, | ||||||
205 | from HashRef, | ||||||
206 | via { WWW::Google::Contacts::Type::ContactEvent->new( $_ ) }; | ||||||
207 | |||||||
208 | subtype ArrayRefOfContactEvent, | ||||||
209 | as ArrayRef[ ContactEvent ]; | ||||||
210 | |||||||
211 | coerce ArrayRefOfContactEvent, | ||||||
212 | from ArrayRef, | ||||||
213 | via { [ map { to_ContactEvent( $_ ) } @{ $_ } ] }, | ||||||
214 | from Any, | ||||||
215 | via { [ to_ContactEvent( $_ ) ] }; | ||||||
216 | |||||||
217 | class_type ExternalId, | ||||||
218 | { class => 'WWW::Google::Contacts::Type::ExternalId' }; | ||||||
219 | |||||||
220 | coerce ExternalId, | ||||||
221 | from HashRef, | ||||||
222 | via { WWW::Google::Contacts::Type::ExternalId->new( $_ ) }; | ||||||
223 | |||||||
224 | subtype ArrayRefOfExternalId, | ||||||
225 | as ArrayRef[ ExternalId ]; | ||||||
226 | |||||||
227 | coerce ArrayRefOfExternalId, | ||||||
228 | from ArrayRef, | ||||||
229 | via { [ map { to_ExternalId( $_ ) } @{ $_ } ] }, | ||||||
230 | from Any, | ||||||
231 | via { [ to_ExternalId( $_ ) ] }; | ||||||
232 | |||||||
233 | class_type Gender, | ||||||
234 | { class => 'WWW::Google::Contacts::Type::Gender' }; | ||||||
235 | |||||||
236 | coerce Gender, | ||||||
237 | from Str, | ||||||
238 | via { WWW::Google::Contacts::Type::Gender->new( value => $_ ) }; | ||||||
239 | |||||||
240 | class_type GroupMembership, | ||||||
241 | { class => 'WWW::Google::Contacts::Type::GroupMembership' }; | ||||||
242 | |||||||
243 | coerce GroupMembership, | ||||||
244 | from HashRef, | ||||||
245 | via { WWW::Google::Contacts::Type::GroupMembership->new( $_ ) }, | ||||||
246 | from Str, | ||||||
247 | via { WWW::Google::Contacts::Type::GroupMembership->new( href => $_ ) }, | ||||||
248 | from Group, | ||||||
249 | via { WWW::Google::Contacts::Type::GroupMembership->new( href => $_->id ) }; | ||||||
250 | |||||||
251 | subtype ArrayRefOfGroupMembership, | ||||||
252 | as ArrayRef[ GroupMembership ]; | ||||||
253 | |||||||
254 | coerce ArrayRefOfGroupMembership, | ||||||
255 | from ArrayRef, | ||||||
256 | via { [ map { to_GroupMembership( $_ ) } @{ $_ } ] }, | ||||||
257 | from Any, | ||||||
258 | via { [ to_GroupMembership( $_ ) ] }; | ||||||
259 | |||||||
260 | class_type Hobby, | ||||||
261 | { class => 'WWW::Google::Contacts::Type::Hobby' }; | ||||||
262 | |||||||
263 | coerce Hobby, | ||||||
264 | from HashRef, | ||||||
265 | via { WWW::Google::Contacts::Type::Hobby->new( $_ ) }, | ||||||
266 | from Str, | ||||||
267 | via { WWW::Google::Contacts::Type::Hobby->new( value => $_ ) }; | ||||||
268 | |||||||
269 | subtype ArrayRefOfHobby, | ||||||
270 | as ArrayRef[ Hobby ]; | ||||||
271 | |||||||
272 | coerce ArrayRefOfHobby, | ||||||
273 | from ArrayRef, | ||||||
274 | via { [ map { to_Hobby( $_ ) } @{ $_ } ] }, | ||||||
275 | from Any, | ||||||
276 | via { [ to_Hobby( $_ ) ] }; | ||||||
277 | |||||||
278 | class_type Jot, | ||||||
279 | { class => 'WWW::Google::Contacts::Type::Jot' }; | ||||||
280 | |||||||
281 | coerce Jot, | ||||||
282 | from HashRef, | ||||||
283 | via { WWW::Google::Contacts::Type::Jot->new( $_ ) }, | ||||||
284 | from Str, | ||||||
285 | via { WWW::Google::Contacts::Type::Jot->new( type => "home", value => $_ ) }; | ||||||
286 | |||||||
287 | subtype ArrayRefOfJot, | ||||||
288 | as ArrayRef[ Jot ]; | ||||||
289 | |||||||
290 | coerce ArrayRefOfJot, | ||||||
291 | from ArrayRef, | ||||||
292 | via { [ map { to_Jot( $_ ) } @{ $_ } ] }, | ||||||
293 | from Any, | ||||||
294 | via { [ to_Jot( $_ ) ] }; | ||||||
295 | |||||||
296 | class_type Language, | ||||||
297 | { class => 'WWW::Google::Contacts::Type::Language' }; | ||||||
298 | |||||||
299 | coerce Language, | ||||||
300 | from HashRef, | ||||||
301 | via { WWW::Google::Contacts::Type::Language->new( $_ ) }, | ||||||
302 | from Str, | ||||||
303 | via { WWW::Google::Contacts::Type::Language->new( value => $_ ) }; | ||||||
304 | |||||||
305 | subtype ArrayRefOfLanguage, | ||||||
306 | as ArrayRef[ Language ]; | ||||||
307 | |||||||
308 | coerce ArrayRefOfLanguage, | ||||||
309 | from ArrayRef, | ||||||
310 | via { [ map { to_Language( $_ ) } @{ $_ } ] }, | ||||||
311 | from Any, | ||||||
312 | via { [ to_Language( $_ ) ] }; | ||||||
313 | |||||||
314 | class_type Priority, | ||||||
315 | { class => 'WWW::Google::Contacts::Type::Priority' }; | ||||||
316 | |||||||
317 | coerce Priority, | ||||||
318 | from Str, | ||||||
319 | via { WWW::Google::Contacts::Type::Priority->new( type => $_ ) }; | ||||||
320 | |||||||
321 | class_type Relation, | ||||||
322 | { class => 'WWW::Google::Contacts::Type::Relation' }; | ||||||
323 | |||||||
324 | coerce Relation, | ||||||
325 | from HashRef, | ||||||
326 | via { WWW::Google::Contacts::Type::Relation->new( $_ ) }; | ||||||
327 | |||||||
328 | subtype ArrayRefOfRelation, | ||||||
329 | as ArrayRef[ Relation ]; | ||||||
330 | |||||||
331 | coerce ArrayRefOfRelation, | ||||||
332 | from ArrayRef, | ||||||
333 | via { [ map { to_Relation( $_ ) } @{ $_ } ] }, | ||||||
334 | from Any, | ||||||
335 | via { [ to_Relation( $_ ) ] }; | ||||||
336 | |||||||
337 | class_type UserDefined, | ||||||
338 | { class => 'WWW::Google::Contacts::Type::UserDefined' }; | ||||||
339 | |||||||
340 | coerce UserDefined, | ||||||
341 | from HashRef, | ||||||
342 | via { WWW::Google::Contacts::Type::UserDefined->new( $_ ) }; | ||||||
343 | |||||||
344 | subtype ArrayRefOfUserDefined, | ||||||
345 | as ArrayRef[ UserDefined ]; | ||||||
346 | |||||||
347 | coerce ArrayRefOfUserDefined, | ||||||
348 | from ArrayRef, | ||||||
349 | via { [ map { to_UserDefined( $_ ) } @{ $_ } ] }, | ||||||
350 | from HashRef, | ||||||
351 | via { | ||||||
352 | my $ref = $_; | ||||||
353 | return [ to_UserDefined( $ref ) ] if ( defined $ref->{ key } ); | ||||||
354 | [ map { to_UserDefined({ key => $_, value => $ref->{ $_ }{ value } }) } keys %{ $ref } ] | ||||||
355 | }, | ||||||
356 | from Any, | ||||||
357 | via { [ to_UserDefined( $_ ) ] }; | ||||||
358 | |||||||
359 | class_type Website, | ||||||
360 | { class => 'WWW::Google::Contacts::Type::Website' }; | ||||||
361 | |||||||
362 | coerce Website, | ||||||
363 | from HashRef, | ||||||
364 | via { WWW::Google::Contacts::Type::Website->new( $_ ) }, | ||||||
365 | from Str, | ||||||
366 | via { WWW::Google::Contacts::Type::Website->new( type => "home", value => $_ ) }; | ||||||
367 | |||||||
368 | subtype ArrayRefOfWebsite, | ||||||
369 | as ArrayRef[ Website ]; | ||||||
370 | |||||||
371 | coerce ArrayRefOfWebsite, | ||||||
372 | from ArrayRef, | ||||||
373 | via { [ map { to_Website( $_ ) } @{ $_ } ] }, | ||||||
374 | from Any, | ||||||
375 | via { [ to_Website( $_ ) ] }; | ||||||
376 | |||||||
377 | class_type Photo, | ||||||
378 | { class => 'WWW::Google::Contacts::Photo' }; | ||||||
379 | |||||||
380 | coerce Photo, | ||||||
381 | from HashRef, | ||||||
382 | via { require WWW::Google::Contacts::Photo; WWW::Google::Contacts::Photo->new( $_ ) }; |