tagcrumbs 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (183) hide show
  1. data/History.txt +5 -0
  2. data/Manifest.txt +79 -56
  3. data/README.rdoc +9 -1
  4. data/Rakefile +2 -1
  5. data/TODO.txt +0 -7
  6. data/config/website.yml +2 -0
  7. data/examples/filter_new.rb +7 -3
  8. data/examples/placemark_new_suggestions.rb +4 -2
  9. data/examples/request_authorization.rb +1 -1
  10. data/examples/tagcrumbs_find.rb +3 -3
  11. data/examples/user.rb +1 -1
  12. data/lib/console.rb +14 -0
  13. data/lib/tagcrumbs.rb +41 -14
  14. data/lib/tagcrumbs/cli.rb +1 -1
  15. data/lib/tagcrumbs/config_store.rb +3 -3
  16. data/lib/tagcrumbs/core_extensions.rb +19 -0
  17. data/lib/tagcrumbs/parsers/json_parser.rb +7 -3
  18. data/lib/tagcrumbs/proxy.rb +6 -3
  19. data/lib/tagcrumbs/requestor.rb +22 -5
  20. data/lib/tagcrumbs/resources/{array.rb → collection.rb} +8 -7
  21. data/lib/tagcrumbs/resources/models/access_token.rb +8 -0
  22. data/lib/tagcrumbs/resources/models/accessors.rb +17 -3
  23. data/lib/tagcrumbs/resources/models/activity.rb +1 -0
  24. data/lib/tagcrumbs/resources/models/application.rb +9 -0
  25. data/lib/tagcrumbs/resources/models/comment.rb +2 -0
  26. data/lib/tagcrumbs/resources/models/email_recommendation.rb +17 -0
  27. data/lib/tagcrumbs/resources/models/favorite.rb +2 -1
  28. data/lib/tagcrumbs/resources/models/filter.rb +2 -2
  29. data/lib/tagcrumbs/resources/models/flag.rb +3 -0
  30. data/lib/tagcrumbs/resources/models/model.rb +8 -7
  31. data/lib/tagcrumbs/resources/models/paragraph.rb +8 -0
  32. data/lib/tagcrumbs/resources/models/picture.rb +4 -4
  33. data/lib/tagcrumbs/resources/models/place.rb +3 -3
  34. data/lib/tagcrumbs/resources/models/placemark.rb +3 -2
  35. data/lib/tagcrumbs/resources/models/profile.rb +0 -1
  36. data/lib/tagcrumbs/resources/models/profile_link.rb +1 -1
  37. data/lib/tagcrumbs/resources/models/root.rb +3 -3
  38. data/lib/tagcrumbs/resources/models/settings.rb +2 -1
  39. data/lib/tagcrumbs/resources/models/tagcrumb.rb +4 -12
  40. data/lib/tagcrumbs/resources/models/user.rb +27 -6
  41. data/lib/tagcrumbs/resources/models/user_recommendation.rb +1 -1
  42. data/lib/tagcrumbs/resources/resource.rb +4 -4
  43. data/script/console +8 -3
  44. data/spec/fixtures_external/README.rdoc +15 -0
  45. data/spec/fixtures_external/json/access_token.json +11 -0
  46. data/spec/{fixtures → fixtures_external/json}/activity.json +32 -25
  47. data/spec/{fixtures → fixtures_external/json}/address.json +22 -25
  48. data/spec/fixtures_external/json/application.json +13 -0
  49. data/spec/{fixtures → fixtures_external/json}/city.json +2 -11
  50. data/spec/{fixtures → fixtures_external/json}/comment.json +51 -44
  51. data/spec/{fixtures → fixtures_external/json}/country.json +1 -4
  52. data/spec/fixtures_external/json/email_recommendation.json +286 -0
  53. data/spec/{fixtures → fixtures_external/json}/fanship.json +30 -30
  54. data/spec/{fixtures → fixtures_external/json}/favorite.json +45 -47
  55. data/spec/{fixtures → fixtures_external/json}/filter.json +30 -42
  56. data/spec/{fixtures → fixtures_external/json}/friendship.json +30 -30
  57. data/spec/fixtures_external/json/geoname.json +18 -0
  58. data/spec/{fixtures → fixtures_external/json}/link.json +41 -44
  59. data/spec/{fixtures → fixtures_external/json}/location.json +21 -31
  60. data/spec/fixtures_external/json/paragraph.json +12 -0
  61. data/spec/fixtures_external/json/picture.json +129 -0
  62. data/spec/fixtures_external/json/picture_upload.json +9 -0
  63. data/spec/{fixtures → fixtures_external/json}/placemark.json +136 -142
  64. data/spec/fixtures_external/json/placemarks.json +851 -0
  65. data/spec/{fixtures → fixtures_external/json}/profile.json +65 -94
  66. data/spec/fixtures_external/json/profile_link.json +123 -0
  67. data/spec/{fixtures → fixtures_external/json}/root.json +17 -21
  68. data/spec/{fixtures → fixtures_external/json}/settings.json +26 -19
  69. data/spec/{fixtures → fixtures_external/json}/state.json +2 -8
  70. data/spec/{fixtures → fixtures_external/json}/subscription.json +41 -44
  71. data/spec/fixtures_external/json/suggestions.json +302 -0
  72. data/spec/{fixtures → fixtures_external/json}/tag.json +0 -0
  73. data/spec/{fixtures → fixtures_external/json}/user.json +44 -20
  74. data/spec/{fixtures → fixtures_external/json}/user_recommendation.json +52 -55
  75. data/spec/fixtures_external/json/validation_errors.json +6 -0
  76. data/spec/fixtures_external/kml/network_link.kml +24 -0
  77. data/spec/fixtures_external/kml/tagcrumbs.kml +64 -0
  78. data/spec/fixtures_external/rdf/placemark.rdf +56 -0
  79. data/spec/fixtures_external/rss/tagcrumbs.rss +24 -0
  80. data/spec/fixtures_external/xml/access_token.xml +5 -0
  81. data/spec/fixtures_external/xml/activity.xml +62 -0
  82. data/spec/fixtures_external/xml/address.xml +51 -0
  83. data/spec/fixtures_external/xml/application.xml +5 -0
  84. data/spec/fixtures_external/xml/city.xml +27 -0
  85. data/spec/fixtures_external/xml/comment.xml +81 -0
  86. data/spec/fixtures_external/xml/country.xml +10 -0
  87. data/spec/fixtures_external/xml/email_recommendation.xml +78 -0
  88. data/spec/fixtures_external/xml/fanship.xml +49 -0
  89. data/spec/fixtures_external/xml/favorite.xml +97 -0
  90. data/spec/fixtures_external/xml/filter.xml +68 -0
  91. data/spec/fixtures_external/xml/friendship.xml +49 -0
  92. data/spec/fixtures_external/xml/geoname.xml +6 -0
  93. data/spec/fixtures_external/xml/link.xml +78 -0
  94. data/spec/fixtures_external/xml/location.xml +58 -0
  95. data/spec/fixtures_external/xml/paragraph.xml +8 -0
  96. data/spec/fixtures_external/xml/picture.xml +36 -0
  97. data/spec/fixtures_external/xml/picture_upload.xml +153 -0
  98. data/spec/fixtures_external/xml/placemark.xml +54 -0
  99. data/spec/fixtures_external/xml/placemarks.xml +336 -0
  100. data/spec/fixtures_external/xml/profile.xml +77 -0
  101. data/spec/fixtures_external/xml/profile_link.xml +34 -0
  102. data/spec/fixtures_external/xml/root.xml +12 -0
  103. data/spec/fixtures_external/xml/settings.xml +42 -0
  104. data/spec/fixtures_external/xml/state.xml +19 -0
  105. data/spec/fixtures_external/xml/subscription.xml +76 -0
  106. data/spec/fixtures_external/xml/suggestions.xml +106 -0
  107. data/spec/{fixtures → fixtures_external/xml}/tag.xml +2 -2
  108. data/spec/fixtures_external/xml/user.xml +37 -0
  109. data/spec/fixtures_external/xml/user_recommendation.xml +94 -0
  110. data/spec/fixtures_external/xml/validation_errors.xml +5 -0
  111. data/spec/spec_helper.rb +12 -2
  112. data/spec/tagcrumbs/requestor_spec.rb +2 -2
  113. data/spec/tagcrumbs/resources/array_spec.rb +38 -38
  114. data/spec/tagcrumbs/resources/models/access_token_spec.rb +16 -0
  115. data/spec/tagcrumbs/resources/models/accessors_spec.rb +2 -2
  116. data/spec/tagcrumbs/resources/models/activity_spec.rb +5 -1
  117. data/spec/tagcrumbs/resources/models/address_spec.rb +1 -1
  118. data/spec/tagcrumbs/resources/models/application_spec.rb +17 -0
  119. data/spec/tagcrumbs/resources/models/city_spec.rb +2 -5
  120. data/spec/tagcrumbs/resources/models/comment_spec.rb +8 -2
  121. data/spec/tagcrumbs/resources/models/country_spec.rb +2 -4
  122. data/spec/tagcrumbs/resources/models/email_recommendation_spec.rb +31 -0
  123. data/spec/tagcrumbs/resources/models/fanship_spec.rb +1 -1
  124. data/spec/tagcrumbs/resources/models/favorite_spec.rb +5 -1
  125. data/spec/tagcrumbs/resources/models/filter_spec.rb +3 -4
  126. data/spec/tagcrumbs/resources/models/friendship_spec.rb +1 -1
  127. data/spec/tagcrumbs/resources/models/geoname_spec.rb +1 -1
  128. data/spec/tagcrumbs/resources/models/link_spec.rb +1 -1
  129. data/spec/tagcrumbs/resources/models/location_spec.rb +1 -1
  130. data/spec/tagcrumbs/resources/models/model_spec.rb +20 -3
  131. data/spec/tagcrumbs/resources/models/paragraph_spec.rb +21 -0
  132. data/spec/tagcrumbs/resources/models/picture_spec.rb +13 -21
  133. data/spec/tagcrumbs/resources/models/place_spec.rb +3 -3
  134. data/spec/tagcrumbs/resources/models/placemark_spec.rb +11 -9
  135. data/spec/tagcrumbs/resources/models/profile_link_spec.rb +6 -12
  136. data/spec/tagcrumbs/resources/models/profile_spec.rb +5 -12
  137. data/spec/tagcrumbs/resources/models/root_spec.rb +15 -19
  138. data/spec/tagcrumbs/resources/models/settings_spec.rb +3 -1
  139. data/spec/tagcrumbs/resources/models/state_spec.rb +2 -5
  140. data/spec/tagcrumbs/resources/models/subscription_spec.rb +1 -1
  141. data/spec/tagcrumbs/resources/models/suggestions_spec.rb +7 -7
  142. data/spec/tagcrumbs/resources/models/tag_spec.rb +1 -1
  143. data/spec/tagcrumbs/resources/models/tagcrumb_spec.rb +3 -11
  144. data/spec/tagcrumbs/resources/models/user_recommendation_spec.rb +1 -1
  145. data/spec/tagcrumbs/resources/models/user_spec.rb +35 -27
  146. data/spec/tagcrumbs/resources/resource_spec.rb +3 -3
  147. data/spec/tagcrumbs_spec.rb +7 -7
  148. data/tagcrumbs.gemspec +2 -2
  149. metadata +82 -58
  150. data/examples/tagcrumbs_search.rb +0 -7
  151. data/lib/tagcrumbs/validations.rb +0 -301
  152. data/spec/fixtures/activity.xml +0 -66
  153. data/spec/fixtures/address.xml +0 -58
  154. data/spec/fixtures/city.xml +0 -34
  155. data/spec/fixtures/comment.xml +0 -87
  156. data/spec/fixtures/country.xml +0 -13
  157. data/spec/fixtures/fanship.xml +0 -54
  158. data/spec/fixtures/favorite.xml +0 -109
  159. data/spec/fixtures/filter.xml +0 -80
  160. data/spec/fixtures/friendship.xml +0 -54
  161. data/spec/fixtures/geoname.json +0 -18
  162. data/spec/fixtures/geoname.xml +0 -6
  163. data/spec/fixtures/link.xml +0 -88
  164. data/spec/fixtures/location.xml +0 -71
  165. data/spec/fixtures/picture.json +0 -154
  166. data/spec/fixtures/picture.xml +0 -49
  167. data/spec/fixtures/placemark.xml +0 -58
  168. data/spec/fixtures/placemarks.json +0 -887
  169. data/spec/fixtures/placemarks.xml +0 -348
  170. data/spec/fixtures/profile.xml +0 -100
  171. data/spec/fixtures/profile_link.json +0 -156
  172. data/spec/fixtures/profile_link.xml +0 -49
  173. data/spec/fixtures/root.xml +0 -14
  174. data/spec/fixtures/settings.xml +0 -45
  175. data/spec/fixtures/state.xml +0 -23
  176. data/spec/fixtures/subscription.xml +0 -86
  177. data/spec/fixtures/suggestions.json +0 -1877
  178. data/spec/fixtures/suggestions.xml +0 -724
  179. data/spec/fixtures/user.xml +0 -31
  180. data/spec/fixtures/user_recommendation.xml +0 -106
  181. data/spec/fixtures/validation_errors.json +0 -5
  182. data/spec/fixtures/validation_errors.xml +0 -5
  183. data/spec/tagcrumbs/validations_spec.rb +0 -27
@@ -9,7 +9,6 @@ module Tagcrumbs
9
9
 
10
10
  has_one :user
11
11
  has_one :city, :modifiable => true
12
- has_one :picture
13
12
 
14
13
  has_many :profile_links
15
14
  end
@@ -7,6 +7,6 @@ module Tagcrumbs
7
7
  writeable_attributes :url, :link_type
8
8
  readable_attributes :created_at, :updated_at
9
9
 
10
- has_one :profile
10
+ has_one :user
11
11
  end
12
12
  end
@@ -3,17 +3,17 @@ module Tagcrumbs
3
3
  # It is used as the starting point for many other queries.
4
4
  class Root < Model
5
5
  has_one :you
6
- has_one :location
7
6
 
8
7
  has_many :tagcrumbs
9
- has_many :nearby_tagcrumbs
10
8
  has_many :countries
11
9
 
12
10
  has_many :popular_countries
13
11
  has_many :tags
14
12
  has_many :users
15
13
 
16
- has_many :search
17
14
  has_many :place_search
15
+
16
+ has_many :privacy_policy
17
+ has_many :terms_and_conditions
18
18
  end
19
19
  end
@@ -4,7 +4,8 @@ module Tagcrumbs
4
4
  can_be :updated
5
5
 
6
6
  readable_attributes :created_at, :updated_at
7
- writeable_attributes :locale, :unit_system, :notification_fan, :notification_recommendation, :newsletter, :facebook_new_placemark_feed,
7
+ writeable_attributes :locale, :unit_system, :notification_fan, :notification_recommendation, :notification_subscription,
8
+ :timezone, :newsletter, :facebook_new_placemark_feed,
8
9
  :facebook_new_favorite_feed, :facebook_new_comment_feed
9
10
 
10
11
 
@@ -9,24 +9,16 @@ module Tagcrumbs
9
9
  :tags, # comma separates tag list
10
10
  :tagcrumb_type, # Placemarks, Favorite or both?
11
11
  :city, :state, :country, :middle_of_nowhere, # filter by the place hierarchy
12
- :within, # within a certain radius
13
- :latitude, :longitude, # per default within is the current location, can be overwritten with latitude and longitude
12
+ :range, # within a certain radius
13
+ :latitude, :longitude, # per default range refers to the current location, can be overwritten with latitude and longitude
14
14
  :bbox, # everything between a bounding box
15
15
  :since, :until, # filter by time
16
16
  :per_page, :page, :sort, :order # filter options
17
17
  )
18
18
 
19
- Array.load(Tagcrumbs.root.tagcrumbs_url, typecast_and_validate_query_parameters(args))
19
+ Collection.load(Tagcrumbs.root.tagcrumbs_url, typecast_and_validate_query_parameters(args))
20
20
  end
21
-
22
- # Use a fulltext search to find Tagcrumbs.
23
- # This is different from "finding" by filter criteria
24
- def self.search(args={})
25
- args.assert_valid_keys(:q, :from, :l, :w, :page, :per_page)
26
-
27
- Array.load(Tagcrumbs.root.search_url, typecast_and_validate_query_parameters(args))
28
- end
29
-
21
+
30
22
 
31
23
  def self.typecast_and_validate_query_parameters(args)
32
24
  query_args = {}
@@ -1,13 +1,19 @@
1
1
  module Tagcrumbs
2
2
  # The main actor in the webservice.
3
3
  class User < Model
4
- readable_attributes :username, :created_at, :updated_at
4
+ can_be :created
5
5
 
6
+ writeable_attributes :username, :password, :password_confirmation, :email, :openid_identifier, :facebook_uid
7
+
8
+ readable_attributes :created_at
9
+
6
10
  has_one :profile
7
11
  has_one :picture
8
12
  has_one :settings
9
13
  has_one :location
10
14
  has_one :suggestions
15
+ has_one :access_token # only directly after the user was created
16
+ has_one :friendship # only if friend of current user
11
17
 
12
18
  has_many :tagcrumbs
13
19
  has_many :placemarks
@@ -59,8 +65,7 @@ module Tagcrumbs
59
65
 
60
66
  # The friendship with a specific user
61
67
  def friendship_with(user)
62
- f = Friendship.new
63
- f.reload("/#{self.username}/friends/#{user}")
68
+ f = Friendship.load("/#{self.username}/friends/#{user}")
64
69
  rescue Net::HTTPServerException => error
65
70
  f.requestor.response.code == '404' ? nil : (raise error) # not found
66
71
  end
@@ -83,9 +88,9 @@ module Tagcrumbs
83
88
  end
84
89
 
85
90
 
86
- # Search a User by name or email
87
- def self.search(q, args={})
88
- Array.load(Tagcrumbs.root.users_url, args.merge(:u => q))
91
+ # Search Users by many different criterias
92
+ def self.search(args={})
93
+ Collection.load(Tagcrumbs.root.users_url, args)
89
94
  end
90
95
 
91
96
  # Load a User by its username
@@ -97,5 +102,21 @@ module Tagcrumbs
97
102
  self.username
98
103
  end
99
104
 
105
+ # Custom create method as the AccessToken has to be fetched and the configuration must be updated
106
+ def create
107
+ if super && access_token.is_a?(AccessToken)
108
+ Tagcrumbs.options[:access_token] = access_token.token
109
+ Tagcrumbs.options[:access_secret] = access_token.secret
110
+
111
+ true
112
+ else
113
+ false
114
+ end
115
+ end
116
+
117
+ def create_url
118
+ Tagcrumbs.root.users_url # has to be overwritten, cannot be based on the current_user
119
+ end
120
+
100
121
  end
101
122
  end
@@ -1,7 +1,7 @@
1
1
  module Tagcrumbs
2
2
  # A Recommendation of a Placemark between two Users
3
3
  class UserRecommendation < Model
4
- can_be :created
4
+ can_be :created, :destroyed
5
5
 
6
6
  readable_attributes :created_at, :updated_at
7
7
  writeable_attributes :message
@@ -29,9 +29,9 @@ module Tagcrumbs
29
29
  end
30
30
 
31
31
  # Reset the Resource, reload the data from the web and initialize it again from the document
32
- def reload(url = nil)
33
- self.requestor.get(url || resource_url)
34
- initialize_from_document(requestor.response.body, requestor.response_format)
32
+ def reload(url = nil, parameters = {})
33
+ self.requestor.get(url || resource_url, parameters)
34
+ initialize_from_document(requestor.response.plain_body, requestor.response_format)
35
35
  true
36
36
  end
37
37
 
@@ -47,7 +47,7 @@ module Tagcrumbs
47
47
  requestor = Requestor.new(requestor_options)
48
48
  requestor.get(path, query_string)
49
49
 
50
- resource = new_from_document(requestor.response.body, requestor.response_format)
50
+ resource = new_from_document(requestor.response.plain_body, requestor.response_format)
51
51
  end
52
52
 
53
53
  # Create a new Resource from a document.
@@ -2,9 +2,14 @@
2
2
  # File: script/console
3
3
  irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
4
 
5
+ ENV['TC_ENV'] = ARGV.last
5
6
  libs = " -r irb/completion"
6
- # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
- # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
7
+
8
8
  libs << " -r #{File.dirname(__FILE__) + '/../lib/tagcrumbs.rb'}"
9
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/console.rb'}"
10
+
11
+
9
12
  puts "Loading tagcrumbs gem"
10
- exec "#{irb} #{libs} --simple-prompt"
13
+
14
+ exec "#{irb} #{libs} --simple-prompt"
15
+
@@ -0,0 +1,15 @@
1
+ = Tagcrumbs Fixtures
2
+
3
+ == DESCRIPTION:
4
+
5
+ This repository contains fixtures of various representations of Tagcrumbs API resources.
6
+
7
+ The fixtures are used to unit-test the official Tagcrumbs Ruby Gem and you can use them to test your own library as well. You can just download the files or include this repository as a git submodule so that you can update the fixtures from time to time. We will push out a new version of the fixtures when we change the output of the API, making it easy for you to test your own library against the new version of the API.
8
+
9
+ You can find out more information about the Tagcrumbs API on http://wiki.tagcrumbs.com/developers.
10
+
11
+ == WEBSITES:
12
+
13
+ * http://www.tagcrumbs.com/
14
+ * http://wiki.tagcrumbs.com/developers
15
+ * http://github.com/tagcrumbs/fixtures
@@ -0,0 +1,11 @@
1
+ {
2
+ "token": {
3
+ "token": {
4
+ "$": "TOKEN"
5
+ },
6
+ "secret": {
7
+ "$": "SECRET"
8
+ },
9
+ "@type": "AccessToken"
10
+ }
11
+ }
@@ -8,26 +8,36 @@
8
8
  "event_type": {
9
9
  "$": "create"
10
10
  },
11
+ "application": {
12
+ "@xlink:href": "http://www.tagcrumbs.com/applications/3.json",
13
+ "name": {
14
+ "$": "Tagcrumbs Gem"
15
+ },
16
+ "@type": "Application",
17
+ "url": {
18
+ "$": "http://www.tagcrumbs.com"
19
+ }
20
+ },
11
21
  "user": {
12
22
  "tagcrumbs_fans": {
13
23
  "@xlink:href": "http://www.tagcrumbs.com/sascha/fans/tagcrumbs.json",
14
- "@type": "array"
24
+ "@type": "Collection"
15
25
  },
16
26
  "tags": {
17
27
  "@xlink:href": "http://www.tagcrumbs.com/sascha/tags.json",
18
- "@type": "array"
28
+ "@type": "Collection"
19
29
  },
20
30
  "activities": {
21
31
  "@xlink:href": "http://www.tagcrumbs.com/sascha/activities.json",
22
- "@type": "array"
32
+ "@type": "Collection"
23
33
  },
24
34
  "tagcrumbs": {
25
35
  "@xlink:href": "http://www.tagcrumbs.com/sascha/tagcrumbs.json",
26
- "@type": "array"
36
+ "@type": "Collection"
27
37
  },
28
38
  "subscriptions": {
29
39
  "@xlink:href": "http://www.tagcrumbs.com/sascha/subscriptions.json",
30
- "@type": "array"
40
+ "@type": "Collection"
31
41
  },
32
42
  "profile": {
33
43
  "@xlink:href": "http://www.tagcrumbs.com/sascha/profile.json",
@@ -39,7 +49,7 @@
39
49
  "@xlink:href": "http://www.tagcrumbs.com/sascha.json",
40
50
  "places": {
41
51
  "@xlink:href": "http://www.tagcrumbs.com/sascha/places.json",
42
- "@type": "array"
52
+ "@type": "Collection"
43
53
  },
44
54
  "picture": {
45
55
  "@xlink:href": "http://www.tagcrumbs.com/sascha/profile/picture.json",
@@ -47,15 +57,15 @@
47
57
  },
48
58
  "comments": {
49
59
  "@xlink:href": "http://www.tagcrumbs.com/sascha/comments.json",
50
- "@type": "array"
60
+ "@type": "Collection"
51
61
  },
52
62
  "fanships": {
53
63
  "@xlink:href": "http://www.tagcrumbs.com/sascha/fans.json",
54
- "@type": "array"
64
+ "@type": "Collection"
55
65
  },
56
66
  "favorites": {
57
67
  "@xlink:href": "http://www.tagcrumbs.com/sascha/favorites.json",
58
- "@type": "array"
68
+ "@type": "Collection"
59
69
  },
60
70
  "settings": {
61
71
  "@xlink:href": "http://www.tagcrumbs.com/sascha/settings.json",
@@ -67,16 +77,16 @@
67
77
  },
68
78
  "placemarks": {
69
79
  "@xlink:href": "http://www.tagcrumbs.com/sascha/placemarks.json",
70
- "@type": "array"
80
+ "@type": "Collection"
71
81
  },
72
82
  "@type": "User",
73
83
  "profile_links": {
74
84
  "@xlink:href": "http://www.tagcrumbs.com/sascha/profile/links.json",
75
- "@type": "array"
85
+ "@type": "Collection"
76
86
  },
77
87
  "links": {
78
88
  "@xlink:href": "http://www.tagcrumbs.com/sascha/links.json",
79
- "@type": "array"
89
+ "@type": "Collection"
80
90
  },
81
91
  "suggestions": {
82
92
  "@xlink:href": "http://www.tagcrumbs.com/sascha/tagcrumbs/suggestions.json",
@@ -88,27 +98,27 @@
88
98
  },
89
99
  "flags": {
90
100
  "@xlink:href": "http://www.tagcrumbs.com/sascha/flags.json",
91
- "@type": "array"
101
+ "@type": "Collection"
92
102
  },
93
103
  "filters": {
94
104
  "@xlink:href": "http://www.tagcrumbs.com/sascha/filters.json",
95
- "@type": "array"
105
+ "@type": "Collection"
96
106
  },
97
107
  "tagcrumbs_friends": {
98
108
  "@xlink:href": "http://www.tagcrumbs.com/sascha/friends/tagcrumbs.json",
99
- "@type": "array"
109
+ "@type": "Collection"
100
110
  },
101
111
  "received_recommendations": {
102
- "@xlink:href": "http://www.tagcrumbs.com/sascha/recommendations/received.json",
103
- "@type": "array"
112
+ "@xlink:href": "http://www.tagcrumbs.com/sascha/received_recommendations.json",
113
+ "@type": "Collection"
104
114
  },
105
115
  "recommendations": {
106
116
  "@xlink:href": "http://www.tagcrumbs.com/sascha/recommendations.json",
107
- "@type": "array"
117
+ "@type": "Collection"
108
118
  },
109
119
  "friendships": {
110
120
  "@xlink:href": "http://www.tagcrumbs.com/sascha/friends.json",
111
- "@type": "array"
121
+ "@type": "Collection"
112
122
  }
113
123
  },
114
124
  "@type": "Activity",
@@ -151,7 +161,7 @@
151
161
  "@xlink:href": "http://www.tagcrumbs.com/sascha/placemarks/placemark-name.json",
152
162
  "comments": {
153
163
  "@xlink:href": "http://www.tagcrumbs.com/sascha/placemarks/placemark-name/comments.json",
154
- "@type": "array"
164
+ "@type": "Collection"
155
165
  },
156
166
  "longitude": {
157
167
  "@type": "float",
@@ -161,9 +171,6 @@
161
171
  "@type": "timestamp",
162
172
  "$": "2009-06-08T16:00:15+02:00"
163
173
  },
164
- "permalink": {
165
- "$": "placemark-name"
166
- },
167
174
  "notes": {
168
175
  "$": "PLACEMARK NOTES"
169
176
  },
@@ -177,7 +184,7 @@
177
184
  "@type": "Placemark",
178
185
  "links": {
179
186
  "@xlink:href": "http://www.tagcrumbs.com/sascha/placemarks/placemark-name/links.json",
180
- "@type": "array"
187
+ "@type": "Collection"
181
188
  },
182
189
  "private": {
183
190
  "@type": "boolean",
@@ -192,7 +199,7 @@
192
199
  },
193
200
  "recommendations": {
194
201
  "@xlink:href": "http://www.tagcrumbs.com/sascha/placemarks/placemark-name/recommendations.json",
195
- "@type": "array"
202
+ "@type": "Collection"
196
203
  },
197
204
  "updated_at": {
198
205
  "@type": "timestamp",
@@ -12,7 +12,7 @@
12
12
  "@xlink:href": "http://www.tagcrumbs.com/sascha/placemarks/placemark-name.json",
13
13
  "comments": {
14
14
  "@xlink:href": "http://www.tagcrumbs.com/sascha/placemarks/placemark-name/comments.json",
15
- "@type": "array"
15
+ "@type": "Collection"
16
16
  },
17
17
  "longitude": {
18
18
  "@type": "float",
@@ -22,32 +22,29 @@
22
22
  "@type": "timestamp",
23
23
  "$": "2009-06-07T13:52:10+02:00"
24
24
  },
25
- "permalink": {
26
- "$": "placemark-name"
27
- },
28
25
  "notes": {
29
26
  "$": "PLACEMARK NOTES"
30
27
  },
31
28
  "user": {
32
29
  "tagcrumbs_fans": {
33
30
  "@xlink:href": "http://www.tagcrumbs.com/sascha/fans/tagcrumbs.json",
34
- "@type": "array"
31
+ "@type": "Collection"
35
32
  },
36
33
  "tags": {
37
34
  "@xlink:href": "http://www.tagcrumbs.com/sascha/tags.json",
38
- "@type": "array"
35
+ "@type": "Collection"
39
36
  },
40
37
  "activities": {
41
38
  "@xlink:href": "http://www.tagcrumbs.com/sascha/activities.json",
42
- "@type": "array"
39
+ "@type": "Collection"
43
40
  },
44
41
  "tagcrumbs": {
45
42
  "@xlink:href": "http://www.tagcrumbs.com/sascha/tagcrumbs.json",
46
- "@type": "array"
43
+ "@type": "Collection"
47
44
  },
48
45
  "subscriptions": {
49
46
  "@xlink:href": "http://www.tagcrumbs.com/sascha/subscriptions.json",
50
- "@type": "array"
47
+ "@type": "Collection"
51
48
  },
52
49
  "profile": {
53
50
  "@xlink:href": "http://www.tagcrumbs.com/sascha/profile.json",
@@ -59,7 +56,7 @@
59
56
  "@xlink:href": "http://www.tagcrumbs.com/sascha.json",
60
57
  "places": {
61
58
  "@xlink:href": "http://www.tagcrumbs.com/sascha/places.json",
62
- "@type": "array"
59
+ "@type": "Collection"
63
60
  },
64
61
  "picture": {
65
62
  "@xlink:href": "http://www.tagcrumbs.com/sascha/profile/picture.json",
@@ -67,15 +64,15 @@
67
64
  },
68
65
  "comments": {
69
66
  "@xlink:href": "http://www.tagcrumbs.com/sascha/comments.json",
70
- "@type": "array"
67
+ "@type": "Collection"
71
68
  },
72
69
  "fanships": {
73
70
  "@xlink:href": "http://www.tagcrumbs.com/sascha/fans.json",
74
- "@type": "array"
71
+ "@type": "Collection"
75
72
  },
76
73
  "favorites": {
77
74
  "@xlink:href": "http://www.tagcrumbs.com/sascha/favorites.json",
78
- "@type": "array"
75
+ "@type": "Collection"
79
76
  },
80
77
  "settings": {
81
78
  "@xlink:href": "http://www.tagcrumbs.com/sascha/settings.json",
@@ -87,16 +84,16 @@
87
84
  },
88
85
  "placemarks": {
89
86
  "@xlink:href": "http://www.tagcrumbs.com/sascha/placemarks.json",
90
- "@type": "array"
87
+ "@type": "Collection"
91
88
  },
92
89
  "@type": "User",
93
90
  "profile_links": {
94
91
  "@xlink:href": "http://www.tagcrumbs.com/sascha/profile/links.json",
95
- "@type": "array"
92
+ "@type": "Collection"
96
93
  },
97
94
  "links": {
98
95
  "@xlink:href": "http://www.tagcrumbs.com/sascha/links.json",
99
- "@type": "array"
96
+ "@type": "Collection"
100
97
  },
101
98
  "suggestions": {
102
99
  "@xlink:href": "http://www.tagcrumbs.com/sascha/tagcrumbs/suggestions.json",
@@ -108,27 +105,27 @@
108
105
  },
109
106
  "flags": {
110
107
  "@xlink:href": "http://www.tagcrumbs.com/sascha/flags.json",
111
- "@type": "array"
108
+ "@type": "Collection"
112
109
  },
113
110
  "filters": {
114
111
  "@xlink:href": "http://www.tagcrumbs.com/sascha/filters.json",
115
- "@type": "array"
112
+ "@type": "Collection"
116
113
  },
117
114
  "tagcrumbs_friends": {
118
115
  "@xlink:href": "http://www.tagcrumbs.com/sascha/friends/tagcrumbs.json",
119
- "@type": "array"
116
+ "@type": "Collection"
120
117
  },
121
118
  "received_recommendations": {
122
- "@xlink:href": "http://www.tagcrumbs.com/sascha/recommendations/received.json",
123
- "@type": "array"
119
+ "@xlink:href": "http://www.tagcrumbs.com/sascha/received_recommendations.json",
120
+ "@type": "Collection"
124
121
  },
125
122
  "recommendations": {
126
123
  "@xlink:href": "http://www.tagcrumbs.com/sascha/recommendations.json",
127
- "@type": "array"
124
+ "@type": "Collection"
128
125
  },
129
126
  "friendships": {
130
127
  "@xlink:href": "http://www.tagcrumbs.com/sascha/friends.json",
131
- "@type": "array"
128
+ "@type": "Collection"
132
129
  }
133
130
  },
134
131
  "name": {
@@ -137,7 +134,7 @@
137
134
  "@type": "Placemark",
138
135
  "links": {
139
136
  "@xlink:href": "http://www.tagcrumbs.com/sascha/placemarks/placemark-name/links.json",
140
- "@type": "array"
137
+ "@type": "Collection"
141
138
  },
142
139
  "private": {
143
140
  "@type": "boolean",
@@ -152,7 +149,7 @@
152
149
  },
153
150
  "recommendations": {
154
151
  "@xlink:href": "http://www.tagcrumbs.com/sascha/placemarks/placemark-name/recommendations.json",
155
- "@type": "array"
152
+ "@type": "Collection"
156
153
  },
157
154
  "updated_at": {
158
155
  "@type": "timestamp",