platform 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (480) hide show
  1. data/.gitignore +21 -0
  2. data/.rspec +2 -0
  3. data/Gemfile +14 -0
  4. data/Gemfile.lock +191 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.rdoc +5 -0
  7. data/Rakefile +37 -0
  8. data/app/assets/images/platform/.gitkeep +0 -0
  9. data/app/assets/images/platform/accept.png +0 -0
  10. data/app/assets/images/platform/action_tab_bkgd.gif +0 -0
  11. data/app/assets/images/platform/action_tab_white_bkgd.gif +0 -0
  12. data/app/assets/images/platform/add.png +0 -0
  13. data/app/assets/images/platform/apps/app_icon.gif +0 -0
  14. data/app/assets/images/platform/apps/app_logo.gif +0 -0
  15. data/app/assets/images/platform/arrow_down.gif +0 -0
  16. data/app/assets/images/platform/arrow_down.png +0 -0
  17. data/app/assets/images/platform/arrow_down_grey.png +0 -0
  18. data/app/assets/images/platform/arrow_right.gif +0 -0
  19. data/app/assets/images/platform/arrow_up.png +0 -0
  20. data/app/assets/images/platform/arrow_up_grey.png +0 -0
  21. data/app/assets/images/platform/bullet_go.png +0 -0
  22. data/app/assets/images/platform/buttons.png +0 -0
  23. data/app/assets/images/platform/cancel.png +0 -0
  24. data/app/assets/images/platform/clipboard_icon.gif +0 -0
  25. data/app/assets/images/platform/close.gif +0 -0
  26. data/app/assets/images/platform/cross.png +0 -0
  27. data/app/assets/images/platform/default_app_icon.gif +0 -0
  28. data/app/assets/images/platform/default_app_logo.gif +0 -0
  29. data/app/assets/images/platform/delete.png +0 -0
  30. data/app/assets/images/platform/disk.png +0 -0
  31. data/app/assets/images/platform/exclamation.png +0 -0
  32. data/app/assets/images/platform/eye.png +0 -0
  33. data/app/assets/images/platform/eye_not.png +0 -0
  34. data/app/assets/images/platform/field_sprite.gif +0 -0
  35. data/app/assets/images/platform/find.png +0 -0
  36. data/app/assets/images/platform/globe.gif +0 -0
  37. data/app/assets/images/platform/help.png +0 -0
  38. data/app/assets/images/platform/help/app_reg.png +0 -0
  39. data/app/assets/images/platform/help/app_reg_ext.png +0 -0
  40. data/app/assets/images/platform/help/app_reg_web.png +0 -0
  41. data/app/assets/images/platform/help/auth_desktop.png +0 -0
  42. data/app/assets/images/platform/help/auth_iframe.png +0 -0
  43. data/app/assets/images/platform/help/auth_iphone.png +0 -0
  44. data/app/assets/images/platform/help/auth_web.png +0 -0
  45. data/app/assets/images/platform/help/authorize.png +0 -0
  46. data/app/assets/images/platform/help/ext.png +0 -0
  47. data/app/assets/images/platform/help/login.png +0 -0
  48. data/app/assets/images/platform/help/login_desktop.png +0 -0
  49. data/app/assets/images/platform/help/login_iphone.png +0 -0
  50. data/app/assets/images/platform/help/login_web.png +0 -0
  51. data/app/assets/images/platform/help2.png +0 -0
  52. data/app/assets/images/platform/information.png +0 -0
  53. data/app/assets/images/platform/keyboard.png +0 -0
  54. data/app/assets/images/platform/language_selector_arrow.gif +0 -0
  55. data/app/assets/images/platform/left_quote.png +0 -0
  56. data/app/assets/images/platform/lightning.png +0 -0
  57. data/app/assets/images/platform/loading.gif +0 -0
  58. data/app/assets/images/platform/loading2.gif +0 -0
  59. data/app/assets/images/platform/loading3.gif +0 -0
  60. data/app/assets/images/platform/loading_animation.gif +0 -0
  61. data/app/assets/images/platform/loading_large.gif +0 -0
  62. data/app/assets/images/platform/lock.png +0 -0
  63. data/app/assets/images/platform/lock_add.png +0 -0
  64. data/app/assets/images/platform/lock_delete.png +0 -0
  65. data/app/assets/images/platform/lock_open.png +0 -0
  66. data/app/assets/images/platform/medals/bronze.png +0 -0
  67. data/app/assets/images/platform/medals/gold.png +0 -0
  68. data/app/assets/images/platform/medals/runner.png +0 -0
  69. data/app/assets/images/platform/medals/silver.png +0 -0
  70. data/app/assets/images/platform/minus_node.png +0 -0
  71. data/app/assets/images/platform/oauth/perm_tile.gif +0 -0
  72. data/app/assets/images/platform/oauth/right_grey.png +0 -0
  73. data/app/assets/images/platform/pencil.png +0 -0
  74. data/app/assets/images/platform/photo_silhouette.gif +0 -0
  75. data/app/assets/images/platform/pixel.gif +0 -0
  76. data/app/assets/images/platform/platform.png +0 -0
  77. data/app/assets/images/platform/platform2.png +0 -0
  78. data/app/assets/images/platform/platform3.png +0 -0
  79. data/app/assets/images/platform/platform4.png +0 -0
  80. data/app/assets/images/platform/platform5.png +0 -0
  81. data/app/assets/images/platform/plus.png +0 -0
  82. data/app/assets/images/platform/plus_node.png +0 -0
  83. data/app/assets/images/platform/random.png +0 -0
  84. data/app/assets/images/platform/random2.png +0 -0
  85. data/app/assets/images/platform/rating_star0.png +0 -0
  86. data/app/assets/images/platform/rating_star05.png +0 -0
  87. data/app/assets/images/platform/rating_star1.png +0 -0
  88. data/app/assets/images/platform/rating_stars.gif +0 -0
  89. data/app/assets/images/platform/rating_stars.psd +0 -0
  90. data/app/assets/images/platform/reply.png +0 -0
  91. data/app/assets/images/platform/right_quote.png +0 -0
  92. data/app/assets/images/platform/rotating_world.gif +0 -0
  93. data/app/assets/images/platform/script.png +0 -0
  94. data/app/assets/images/platform/script_edit.png +0 -0
  95. data/app/assets/images/platform/script_gear.png +0 -0
  96. data/app/assets/images/platform/site_sprite.gif +0 -0
  97. data/app/assets/images/platform/spinner.gif +0 -0
  98. data/app/assets/images/platform/star.png +0 -0
  99. data/app/assets/images/platform/table_edit.png +0 -0
  100. data/app/assets/images/platform/table_gear.png +0 -0
  101. data/app/assets/images/platform/table_multiple.png +0 -0
  102. data/app/assets/images/platform/thumb_down.png +0 -0
  103. data/app/assets/images/platform/thumb_up.png +0 -0
  104. data/app/assets/images/platform/top_left_stem.png +0 -0
  105. data/app/assets/images/platform/top_right_stem.png +0 -0
  106. data/app/assets/images/platform/translate_icn.gif +0 -0
  107. data/app/assets/images/platform/treeview/diffDoc.gif +0 -0
  108. data/app/assets/images/platform/treeview/diffFolder.gif +0 -0
  109. data/app/assets/images/platform/treeview/ftv2blank.gif +0 -0
  110. data/app/assets/images/platform/treeview/ftv2doc.gif +0 -0
  111. data/app/assets/images/platform/treeview/ftv2folderclosed.gif +0 -0
  112. data/app/assets/images/platform/treeview/ftv2folderopen.gif +0 -0
  113. data/app/assets/images/platform/treeview/ftv2lastnode.gif +0 -0
  114. data/app/assets/images/platform/treeview/ftv2link.gif +0 -0
  115. data/app/assets/images/platform/treeview/ftv2mlastnode.gif +0 -0
  116. data/app/assets/images/platform/treeview/ftv2mnode.gif +0 -0
  117. data/app/assets/images/platform/treeview/ftv2node.gif +0 -0
  118. data/app/assets/images/platform/treeview/ftv2plastnode.gif +0 -0
  119. data/app/assets/images/platform/treeview/ftv2pnode.gif +0 -0
  120. data/app/assets/images/platform/treeview/ftv2vertline.gif +0 -0
  121. data/app/assets/images/platform/wizard.png +0 -0
  122. data/app/assets/images/platform/world_link.png +0 -0
  123. data/app/assets/javascripts/platform/api_explorer.js +628 -0
  124. data/app/assets/javascripts/platform/application.js +9 -0
  125. data/app/assets/javascripts/platform/ftiens4.js +1197 -0
  126. data/app/assets/javascripts/platform/jsdk.js +539 -0
  127. data/app/assets/javascripts/platform/platform.js +447 -0
  128. data/app/assets/javascripts/platform/shortcut.js +223 -0
  129. data/app/assets/javascripts/platform/ua.js +147 -0
  130. data/app/assets/stylesheets/platform/api_explorer.css.scss +140 -0
  131. data/app/assets/stylesheets/platform/application.css.scss +6 -0
  132. data/app/assets/stylesheets/platform/components.css.scss +208 -0
  133. data/app/assets/stylesheets/platform/layout.css.scss +119 -0
  134. data/app/assets/stylesheets/platform/oauth.css +51 -0
  135. data/app/assets/stylesheets/platform/platform.css.scss +311 -0
  136. data/app/controllers/platform/admin/apps_controller.rb +99 -0
  137. data/app/controllers/platform/admin/base_controller.rb +60 -0
  138. data/app/controllers/platform/admin/categories_controller.rb +132 -0
  139. data/app/controllers/platform/admin/clientsdk_controller.rb +30 -0
  140. data/app/controllers/platform/admin/developers_controller.rb +30 -0
  141. data/app/controllers/platform/admin/exceptions_controller.rb +30 -0
  142. data/app/controllers/platform/admin/forum_controller.rb +34 -0
  143. data/app/controllers/platform/admin/metrics_controller.rb +42 -0
  144. data/app/controllers/platform/api/apps_controller.rb +40 -0
  145. data/app/controllers/platform/api/base_controller.rb +541 -0
  146. data/app/controllers/platform/apps_controller.rb +142 -0
  147. data/app/controllers/platform/base_controller.rb +127 -0
  148. data/app/controllers/platform/developer/api_explorer_controller.rb +56 -0
  149. data/app/controllers/platform/developer/apps_controller.rb +161 -0
  150. data/app/controllers/platform/developer/base_controller.rb +51 -0
  151. data/app/controllers/platform/developer/blog_controller.rb +29 -0
  152. data/app/controllers/platform/developer/dashboard_controller.rb +63 -0
  153. data/app/controllers/platform/developer/forum_controller.rb +85 -0
  154. data/app/controllers/platform/developer/help_controller.rb +113 -0
  155. data/app/controllers/platform/developer/info_controller.rb +41 -0
  156. data/app/controllers/platform/developer/registration_controller.rb +39 -0
  157. data/app/controllers/platform/developer/resources_controller.rb +30 -0
  158. data/app/controllers/platform/forum_controller.rb +74 -0
  159. data/app/controllers/platform/oauth_controller.rb +421 -0
  160. data/app/controllers/platform/ratings_controller.rb +61 -0
  161. data/app/helpers/platform/admin/categories_helper.rb +54 -0
  162. data/app/helpers/platform/apps_helper.rb +26 -0
  163. data/app/helpers/platform/developer/dashboard_helper.rb +42 -0
  164. data/app/helpers/platform/developer/help_helper.rb +45 -0
  165. data/app/helpers/platform_helper.rb +26 -0
  166. data/app/models/platform/application.rb +394 -0
  167. data/app/models/platform/application_category.rb +34 -0
  168. data/app/models/platform/application_developer.rb +30 -0
  169. data/app/models/platform/application_filter.rb +30 -0
  170. data/app/models/platform/application_log.rb +32 -0
  171. data/app/models/platform/application_log_filter.rb +34 -0
  172. data/app/models/platform/application_metric.rb +58 -0
  173. data/app/models/platform/application_metric_filter.rb +34 -0
  174. data/app/models/platform/application_permission.rb +30 -0
  175. data/app/models/platform/application_permission_filter.rb +30 -0
  176. data/app/models/platform/application_usage_metric.rb +58 -0
  177. data/app/models/platform/application_usage_metric_filter.rb +34 -0
  178. data/app/models/platform/application_user.rb +45 -0
  179. data/app/models/platform/application_user_filter.rb +34 -0
  180. data/app/models/platform/base_filter.rb +46 -0
  181. data/app/models/platform/category.rb +64 -0
  182. data/app/models/platform/daily_application_metric.rb +31 -0
  183. data/app/models/platform/developer.rb +45 -0
  184. data/app/models/platform/developer_filter.rb +26 -0
  185. data/app/models/platform/forum_message.rb +35 -0
  186. data/app/models/platform/forum_message_filter.rb +26 -0
  187. data/app/models/platform/forum_topic.rb +38 -0
  188. data/app/models/platform/forum_topic_filter.rb +26 -0
  189. data/app/models/platform/logged_exception.rb +290 -0
  190. data/app/models/platform/logged_exception_filter.rb +58 -0
  191. data/app/models/platform/media/image.rb +26 -0
  192. data/app/models/platform/media/media.rb +58 -0
  193. data/app/models/platform/monthly_application_metric.rb +31 -0
  194. data/app/models/platform/oauth/access_token.rb +57 -0
  195. data/app/models/platform/oauth/client_token.rb +38 -0
  196. data/app/models/platform/oauth/oauth_model_methods.rb +41 -0
  197. data/app/models/platform/oauth/oauth_token.rb +57 -0
  198. data/app/models/platform/oauth/oauth_token_filter.rb +34 -0
  199. data/app/models/platform/oauth/refresh_token.rb +47 -0
  200. data/app/models/platform/oauth/request_token.rb +50 -0
  201. data/app/models/platform/permission.rb +27 -0
  202. data/app/models/platform/rating.rb +43 -0
  203. data/app/models/platform/rating_filter.rb +30 -0
  204. data/app/models/platform/rollup_log.rb +27 -0
  205. data/app/models/platform/rollup_log_filter.rb +30 -0
  206. data/app/models/platform/total_application_metric.rb +40 -0
  207. data/app/models/platform/weekly_application_metric.rb +31 -0
  208. data/app/views/platform/admin/apps/_categories.html.erb +17 -0
  209. data/app/views/platform/admin/apps/_categories_scripts.html.erb +17 -0
  210. data/app/views/platform/admin/apps/_tabs.html.erb +25 -0
  211. data/app/views/platform/admin/apps/index.html.erb +32 -0
  212. data/app/views/platform/admin/apps/permissions.html.erb +7 -0
  213. data/app/views/platform/admin/apps/ratings.html.erb +7 -0
  214. data/app/views/platform/admin/apps/tokens.html.erb +18 -0
  215. data/app/views/platform/admin/apps/users.html.erb +7 -0
  216. data/app/views/platform/admin/apps/view.html.erb +170 -0
  217. data/app/views/platform/admin/categories/_tabs.html.erb +22 -0
  218. data/app/views/platform/admin/categories/category_assigner.html.erb +9 -0
  219. data/app/views/platform/admin/categories/category_assigner_tree.html.erb +81 -0
  220. data/app/views/platform/admin/categories/index.html.erb +106 -0
  221. data/app/views/platform/admin/categories/items.html.erb +153 -0
  222. data/app/views/platform/admin/categories/lb_update_application_category.html.erb +54 -0
  223. data/app/views/platform/admin/categories/lb_update_category.html.erb +64 -0
  224. data/app/views/platform/admin/categories/tree.html.erb +64 -0
  225. data/app/views/platform/admin/clientsdk/index.html.erb +89 -0
  226. data/app/views/platform/admin/common/_footer.html.erb +1 -0
  227. data/app/views/platform/admin/common/_header.html.erb +32 -0
  228. data/app/views/platform/admin/common/_lightbox_buttons.html.erb +5 -0
  229. data/app/views/platform/admin/common/_paginator.html.erb +20 -0
  230. data/app/views/platform/admin/developers/_tabs.html.erb +22 -0
  231. data/app/views/platform/admin/developers/index.html.erb +7 -0
  232. data/app/views/platform/admin/exceptions/_tabs.html.erb +22 -0
  233. data/app/views/platform/admin/exceptions/index.html.erb +7 -0
  234. data/app/views/platform/admin/forum/_tabs.html.erb +22 -0
  235. data/app/views/platform/admin/forum/index.html.erb +7 -0
  236. data/app/views/platform/admin/forum/messages.html.erb +7 -0
  237. data/app/views/platform/admin/metrics/_tabs.html.erb +25 -0
  238. data/app/views/platform/admin/metrics/application_log.html.erb +7 -0
  239. data/app/views/platform/admin/metrics/index.html.erb +9 -0
  240. data/app/views/platform/admin/metrics/rollup_log.html.erb +7 -0
  241. data/app/views/platform/admin/metrics/usage.html.erb +7 -0
  242. data/app/views/platform/apps/_actions_module.html.erb +3 -0
  243. data/app/views/platform/apps/_app_footer.html.erb +8 -0
  244. data/app/views/platform/apps/_app_header.html.erb +25 -0
  245. data/app/views/platform/apps/_apps_module.html.erb +42 -0
  246. data/app/views/platform/apps/_authorize_form.html.erb +11 -0
  247. data/app/views/platform/apps/_categories_module.html.erb +11 -0
  248. data/app/views/platform/apps/_featured_apps_module.html.erb +40 -0
  249. data/app/views/platform/apps/_left.html.erb +20 -0
  250. data/app/views/platform/apps/_monthly_users_module.html.erb +8 -0
  251. data/app/views/platform/apps/_paginator.html.erb +13 -0
  252. data/app/views/platform/apps/_rank_module.html.erb +18 -0
  253. data/app/views/platform/apps/_search_apps_module.html.erb +35 -0
  254. data/app/views/platform/apps/canvas_app.html.erb +15 -0
  255. data/app/views/platform/apps/index.html.erb +86 -0
  256. data/app/views/platform/apps/view.html.erb +71 -0
  257. data/app/views/platform/apps/xd.html.erb +11 -0
  258. data/app/views/platform/common/_footer.html.erb +1 -0
  259. data/app/views/platform/common/_header.html.erb +4 -0
  260. data/app/views/platform/common/_paginator.html.erb +32 -0
  261. data/app/views/platform/common/_scripts.html.erb +7 -0
  262. data/app/views/platform/common/_user_login.html.erb +11 -0
  263. data/app/views/platform/developer/api_explorer/history.html.erb +31 -0
  264. data/app/views/platform/developer/api_explorer/index.html.erb +134 -0
  265. data/app/views/platform/developer/api_explorer/oauth_lander.html.erb +4 -0
  266. data/app/views/platform/developer/api_explorer/options.html.erb +44 -0
  267. data/app/views/platform/developer/apps/_form.html.erb +340 -0
  268. data/app/views/platform/developer/apps/create_version.html.erb +19 -0
  269. data/app/views/platform/developer/apps/edit.html.erb +21 -0
  270. data/app/views/platform/developer/apps/index.html.erb +375 -0
  271. data/app/views/platform/developer/apps/new.html.erb +20 -0
  272. data/app/views/platform/developer/blog/index.html.erb +7 -0
  273. data/app/views/platform/developer/common/_footer.html.erb +1 -0
  274. data/app/views/platform/developer/common/_header.html.erb +34 -0
  275. data/app/views/platform/developer/dashboard/_apps_info.html.erb +84 -0
  276. data/app/views/platform/developer/dashboard/_discussions.html.erb +68 -0
  277. data/app/views/platform/developer/dashboard/_header.html.erb +12 -0
  278. data/app/views/platform/developer/dashboard/_reviews.html.erb +53 -0
  279. data/app/views/platform/developer/dashboard/_statistics.html.erb +105 -0
  280. data/app/views/platform/developer/dashboard/index.html.erb +85 -0
  281. data/app/views/platform/developer/dashboard/settings.html.erb +23 -0
  282. data/app/views/platform/developer/forum/_message.html.erb +17 -0
  283. data/app/views/platform/developer/forum/_messages.html.erb +14 -0
  284. data/app/views/platform/developer/forum/_new_message.html.erb +28 -0
  285. data/app/views/platform/developer/forum/_new_topic.html.erb +39 -0
  286. data/app/views/platform/developer/forum/index.html.erb +89 -0
  287. data/app/views/platform/developer/forum/topic.html.erb +28 -0
  288. data/app/views/platform/developer/help/_footer.html.erb +4 -0
  289. data/app/views/platform/developer/help/_header.html.erb +95 -0
  290. data/app/views/platform/developer/help/_navigation.html.erb +99 -0
  291. data/app/views/platform/developer/help/api.html.erb +120 -0
  292. data/app/views/platform/developer/help/credits.html.erb +77 -0
  293. data/app/views/platform/developer/help/index.html.erb +19 -0
  294. data/app/views/platform/developer/help/license.html.erb +586 -0
  295. data/app/views/platform/developer/help/oauth_app_login.html.erb +177 -0
  296. data/app/views/platform/developer/help/oauth_client_side.html.erb +264 -0
  297. data/app/views/platform/developer/help/oauth_desktop.html.erb +191 -0
  298. data/app/views/platform/developer/help/oauth_extensions.html.erb +342 -0
  299. data/app/views/platform/developer/help/oauth_intro.html.erb +371 -0
  300. data/app/views/platform/developer/help/oauth_mobile.html.erb +292 -0
  301. data/app/views/platform/developer/help/oauth_server_side.html.erb +603 -0
  302. data/app/views/platform/developer/help/oauth_trusted_client.html.erb +202 -0
  303. data/app/views/platform/developer/help/reference.html.erb +42 -0
  304. data/app/views/platform/developer/help/sdk_ios.html.erb +31 -0
  305. data/app/views/platform/developer/help/sdk_js.html.erb +202 -0
  306. data/app/views/platform/developer/info/_basic_info.html.erb +74 -0
  307. data/app/views/platform/developer/info/_header.html.erb +12 -0
  308. data/app/views/platform/developer/info/index.html.erb +23 -0
  309. data/app/views/platform/developer/registration/index.html.erb +134 -0
  310. data/app/views/platform/developer/resources/index.html.erb +23 -0
  311. data/app/views/platform/forum/_message.html.erb +17 -0
  312. data/app/views/platform/forum/_messages.html.erb +14 -0
  313. data/app/views/platform/forum/_new_message.html.erb +26 -0
  314. data/app/views/platform/forum/_new_topic.html.erb +38 -0
  315. data/app/views/platform/forum/_topic.html.erb +18 -0
  316. data/app/views/platform/forum/_topics.html.erb +74 -0
  317. data/app/views/platform/login/index.html.erb +31 -0
  318. data/app/views/platform/login/register.html.erb +55 -0
  319. data/app/views/platform/oauth/_authorization_box.html.erb +75 -0
  320. data/app/views/platform/oauth/_authorization_popup.html.erb +38 -0
  321. data/app/views/platform/oauth/_authorize_form.html.erb +11 -0
  322. data/app/views/platform/oauth/auth_failed.html.erb +0 -0
  323. data/app/views/platform/oauth/auth_success.html.erb +0 -0
  324. data/app/views/platform/oauth/authorize_desktop.html.erb +76 -0
  325. data/app/views/platform/oauth/authorize_failure_iframe.html.erb +1 -0
  326. data/app/views/platform/oauth/authorize_failure_mobile.html.erb +24 -0
  327. data/app/views/platform/oauth/authorize_failure_popup.html.erb +24 -0
  328. data/app/views/platform/oauth/authorize_failure_web.html.erb +1 -0
  329. data/app/views/platform/oauth/authorize_iframe.html.erb +16 -0
  330. data/app/views/platform/oauth/authorize_mobile.html.erb +1 -0
  331. data/app/views/platform/oauth/authorize_popup.html.erb +1 -0
  332. data/app/views/platform/oauth/authorize_success_iframe.html.erb +1 -0
  333. data/app/views/platform/oauth/authorize_success_mobile.html.erb +24 -0
  334. data/app/views/platform/oauth/authorize_success_popup.html.erb +24 -0
  335. data/app/views/platform/oauth/authorize_success_web.html.erb +1 -0
  336. data/app/views/platform/oauth/authorize_web.html.erb +3 -0
  337. data/app/views/platform/oauth/xd.html.erb +13 -0
  338. data/app/views/platform/ratings/_list.html.erb +30 -0
  339. data/app/views/platform/ratings/_new.html.erb +70 -0
  340. data/app/views/platform/ratings/_rating.html.erb +17 -0
  341. data/config/platform/config.yml +133 -0
  342. data/config/platform/data/default_applications.yml +39 -0
  343. data/config/platform/data/default_categories.yml +56 -0
  344. data/config/platform/data/default_permissions.yml +0 -0
  345. data/config/platform/site/features.yml +66 -0
  346. data/config/routes.rb +59 -0
  347. data/db/migrate/20110602232141_create_platform_tables.rb +262 -0
  348. data/docs/Classes.graffle +7315 -0
  349. data/docs/Classes.pdf +0 -0
  350. data/lib/generators/platform/platform_generator.rb +56 -0
  351. data/lib/generators/platform/templates/db/create_platform_tables.rb +262 -0
  352. data/lib/generators/platform/templates/layouts/platform.html.erb +49 -0
  353. data/lib/generators/platform/templates/layouts/platform_admin.html.erb +60 -0
  354. data/lib/platform.rb +6 -0
  355. data/lib/platform/api/already_jsoned_string.rb +9 -0
  356. data/lib/platform/api/proxy.rb +45 -0
  357. data/lib/platform/api/proxy/base.rb +62 -0
  358. data/lib/platform/cache.rb +78 -0
  359. data/lib/platform/config.rb +666 -0
  360. data/lib/platform/engine.rb +5 -0
  361. data/lib/platform/exception.rb +27 -0
  362. data/lib/platform/extensions/action_controller_extension.rb +65 -0
  363. data/lib/platform/extensions/action_view_extension.rb +168 -0
  364. data/lib/platform/extensions/object_extension.rb +51 -0
  365. data/lib/platform/helper.rb +33 -0
  366. data/lib/platform/logger.rb +62 -0
  367. data/lib/platform/railtie.rb +52 -0
  368. data/lib/platform/random_password_generator.rb +76 -0
  369. data/lib/platform/simple_string_permissions.rb +40 -0
  370. data/lib/platform/version.rb +3 -0
  371. data/lib/tasks/platform.rake +119 -0
  372. data/platform.gemspec +45 -0
  373. data/script/rails +6 -0
  374. data/spec/config/config_spec.rb +10 -0
  375. data/spec/dummy_app.rb +52 -0
  376. data/spec/models/application_spec.rb +53 -0
  377. data/spec/models/developer_spec.rb +23 -0
  378. data/spec/spec_helper.rb +29 -0
  379. data/test/dummy/Rakefile +7 -0
  380. data/test/dummy/app/assets/javascripts/application.js +7 -0
  381. data/test/dummy/app/assets/stylesheets/admin.css +200 -0
  382. data/test/dummy/app/assets/stylesheets/application.css +47 -0
  383. data/test/dummy/app/assets/stylesheets/components.css.scss +211 -0
  384. data/test/dummy/app/assets/stylesheets/layout.css.scss +143 -0
  385. data/test/dummy/app/controllers/admin/admins_controller.rb +7 -0
  386. data/test/dummy/app/controllers/admin/base_controller.rb +12 -0
  387. data/test/dummy/app/controllers/admin/bookmarks_controller.rb +7 -0
  388. data/test/dummy/app/controllers/admin/users_controller.rb +19 -0
  389. data/test/dummy/app/controllers/api/base_controller.rb +5 -0
  390. data/test/dummy/app/controllers/api/bookmarks_controller.rb +35 -0
  391. data/test/dummy/app/controllers/api/users_controller.rb +19 -0
  392. data/test/dummy/app/controllers/application_controller.rb +31 -0
  393. data/test/dummy/app/controllers/home_controller.rb +7 -0
  394. data/test/dummy/app/controllers/login_controller.rb +65 -0
  395. data/test/dummy/app/helpers/application_helper.rb +9 -0
  396. data/test/dummy/app/helpers/home_helper.rb +2 -0
  397. data/test/dummy/app/mailers/.gitkeep +0 -0
  398. data/test/dummy/app/models/.gitkeep +0 -0
  399. data/test/dummy/app/models/admin.rb +4 -0
  400. data/test/dummy/app/models/admin_filter.rb +7 -0
  401. data/test/dummy/app/models/bookmark.rb +7 -0
  402. data/test/dummy/app/models/user.rb +34 -0
  403. data/test/dummy/app/views/admin/admins/index.html.erb +7 -0
  404. data/test/dummy/app/views/admin/bookmarks/index.html.erb +5 -0
  405. data/test/dummy/app/views/admin/users/index.html.erb +10 -0
  406. data/test/dummy/app/views/demo/index.rhtml +108 -0
  407. data/test/dummy/app/views/demo/tokens.rhtml +35 -0
  408. data/test/dummy/app/views/home/index.html.erb +43 -0
  409. data/test/dummy/app/views/layouts/_footer.html.erb +16 -0
  410. data/test/dummy/app/views/layouts/_header.html.erb +22 -0
  411. data/test/dummy/app/views/layouts/admin.html.erb +97 -0
  412. data/test/dummy/app/views/layouts/application.html.erb +25 -0
  413. data/test/dummy/app/views/layouts/minimal.html.erb +37 -0
  414. data/test/dummy/app/views/layouts/popup.html.erb +43 -0
  415. data/test/dummy/app/views/login/index.html.erb +34 -0
  416. data/test/dummy/app/views/login/register.html.erb +51 -0
  417. data/test/dummy/config.ru +4 -0
  418. data/test/dummy/config/application.rb +51 -0
  419. data/test/dummy/config/boot.rb +10 -0
  420. data/test/dummy/config/database.yml +25 -0
  421. data/test/dummy/config/environment.rb +5 -0
  422. data/test/dummy/config/environments/development.rb +30 -0
  423. data/test/dummy/config/environments/production.rb +60 -0
  424. data/test/dummy/config/environments/test.rb +42 -0
  425. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  426. data/test/dummy/config/initializers/inflections.rb +10 -0
  427. data/test/dummy/config/initializers/mime_types.rb +5 -0
  428. data/test/dummy/config/initializers/secret_token.rb +7 -0
  429. data/test/dummy/config/initializers/session_store.rb +8 -0
  430. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  431. data/test/dummy/config/locales/en.yml +5 -0
  432. data/test/dummy/config/platform/api/0/bookmark.yml +18 -0
  433. data/test/dummy/config/platform/api/0/user.yml +17 -0
  434. data/test/dummy/config/platform/api/1/bookmark.yml +58 -0
  435. data/test/dummy/config/platform/api/1/user.yml +36 -0
  436. data/test/dummy/config/platform/config.yml +135 -0
  437. data/test/dummy/config/platform/data/default_applications.yml +39 -0
  438. data/test/dummy/config/platform/data/default_categories.yml +56 -0
  439. data/test/dummy/config/platform/data/default_permissions.yml +0 -0
  440. data/test/dummy/config/platform/site/features.yml +66 -0
  441. data/test/dummy/config/platform/site/sample_apps.yml +100 -0
  442. data/test/dummy/config/routes.rb +30 -0
  443. data/test/dummy/config/tr8n/config.yml +247 -0
  444. data/test/dummy/config/tr8n/data/ip_locations.csv +93460 -0
  445. data/test/dummy/config/tr8n/rules/default_date_rules.yml +20 -0
  446. data/test/dummy/config/tr8n/rules/default_gender_list_rules.yml +82 -0
  447. data/test/dummy/config/tr8n/rules/default_gender_rules.yml +20 -0
  448. data/test/dummy/config/tr8n/rules/default_language_cases.yml +272 -0
  449. data/test/dummy/config/tr8n/rules/default_list_rules.yml +19 -0
  450. data/test/dummy/config/tr8n/rules/default_numeric_rules.yml +42 -0
  451. data/test/dummy/config/tr8n/rules/default_value_rules.yml +18 -0
  452. data/test/dummy/config/tr8n/site/default_glossary.yml +18 -0
  453. data/test/dummy/config/tr8n/site/default_languages.yml +1591 -0
  454. data/test/dummy/config/tr8n/site/features.yml +111 -0
  455. data/test/dummy/config/tr8n/site/shortcuts.yml +55 -0
  456. data/test/dummy/config/tr8n/site/sitemap.json +42 -0
  457. data/test/dummy/config/tr8n/tokens/data.yml +19 -0
  458. data/test/dummy/config/tr8n/tokens/decorations.yml +19 -0
  459. data/test/dummy/config/will_filter/config.yml +99 -0
  460. data/test/dummy/db/migrate/20101207014543_create_users.rb +23 -0
  461. data/test/dummy/db/migrate/20110113223509_create_admins.rb +15 -0
  462. data/test/dummy/db/migrate/20110930041143_create_will_filter_filters.rb +15 -0
  463. data/test/dummy/db/migrate/20110930041150_create_tr8n_tables.rb +350 -0
  464. data/test/dummy/db/migrate/20111004075531_create_platform_tables.rb +262 -0
  465. data/test/dummy/db/migrate/20111012055603_create_bookmarks.rb +10 -0
  466. data/test/dummy/db/schema.rb +683 -0
  467. data/test/dummy/lib/assets/.gitkeep +0 -0
  468. data/test/dummy/lib/platform/api/bookmark_proxy_0.rb +12 -0
  469. data/test/dummy/lib/platform/api/bookmark_proxy_1.rb +12 -0
  470. data/test/dummy/lib/platform/api/user_proxy_0.rb +12 -0
  471. data/test/dummy/lib/platform/api/user_proxy_1.rb +12 -0
  472. data/test/dummy/log/.gitkeep +0 -0
  473. data/test/dummy/public/404.html +26 -0
  474. data/test/dummy/public/422.html +26 -0
  475. data/test/dummy/public/500.html +26 -0
  476. data/test/dummy/public/favicon.ico +0 -0
  477. data/test/dummy/script/rails +6 -0
  478. data/test/dummy/test/fixtures/documents.yml +11 -0
  479. data/test/dummy/test/unit/document_test.rb +7 -0
  480. metadata +886 -0
@@ -0,0 +1,539 @@
1
+ /*!
2
+ * Platform JavaScript SDK
3
+ * Copyright 2011, Ian McDaniel, Platform Inc.
4
+ * For all api documentation:
5
+ * http://dev.geni.com
6
+ */
7
+
8
+
9
+ ;(function(){
10
+
11
+ // The Platform namespace
12
+ var Platform = {
13
+
14
+ // current version
15
+ Version: '0.2.0',
16
+
17
+ _appid : null,
18
+ _status : null, // unknown, authorized or unauthorized
19
+ _logging : false,
20
+ _cookies : false,
21
+ _access_token :null,
22
+ _host : 'http://geni.com',
23
+ _url: {
24
+ api : '/api',
25
+ status : '/oauth/status',
26
+ connect : '/oauth/authorize',
27
+ disconnect: '/oauth/deauthorize',
28
+ logout : '/oauth/logout'
29
+ },
30
+
31
+ // creates a quick and dirty unique id for use in callbacks
32
+ uuid:function() {
33
+ return 'g' + (((1+Math.random())*0x10000)|0).toString(16).substring(1);
34
+ },
35
+
36
+ // log messages for debugging, off by default
37
+ log:function() {
38
+ if(this._logging) {
39
+ var args = Array.prototype.slice.call(arguments, 0) || [];
40
+ if (window.console) window.console.log.apply(window.console,args);
41
+ if (Platform.Event) Platform.Event.trigger.apply(Platform.Event,['log'].concat(args));
42
+ }
43
+ },
44
+
45
+ // Initialize the Platform SDK library
46
+ // The best place to put this code is right before the closing </body> tag
47
+ //
48
+ // Platform.init({
49
+ // appId : 'YOUR APP KEY', // app id or app key
50
+ // access_token : 'YOUR ACCESS TOKEN', // set the access token if you already have it
51
+ // host : 'http://sandbox.geni.com', // change host if needed
52
+ // cookies : true, // enable cookies to allow the server to access the session
53
+ // logging : true // enable log messages to help in debugging
54
+ // });
55
+ //
56
+ init:function(opts,cb) {
57
+ opts || (opts = {});
58
+ if(!opts.app_id) {
59
+ return Platform.log('Platform Javascript SDK requires an Application ID');
60
+ }
61
+ this._appid = opts.app_id;
62
+
63
+ // authorize app if we already have an access token
64
+ if(opts.access_token) {
65
+ this._access_token = opts.access_token;
66
+ this._status = "authorized";
67
+ }
68
+
69
+ this._logging = (window.location.toString().indexOf('geni_debug=1') > 0) || opts.logging || this._logging;
70
+ this._cookies = opts.cookies || this._cookies;
71
+ this._host = opts.host || this._host;
72
+ return this;
73
+ }
74
+
75
+ }
76
+
77
+
78
+ // Helper methods to make things easier
79
+ Platform.Util = {
80
+
81
+ // Extend an object with all the properties of the passed object
82
+ extend:function extend(destination, source) {
83
+ for (var property in source)
84
+ destination[property] = source[property];
85
+ return destination;
86
+ },
87
+
88
+ // Create a URL-encoded query string from an object
89
+ encodeQueryString:function(obj,prefix){
90
+ var str = [];
91
+ for(var p in obj) str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
92
+ return str.join("&");
93
+ },
94
+
95
+ // Parses a query string and returns an object composed of key/value pairs
96
+ decodeQueryString:function(qs){
97
+ var
98
+ obj = {},
99
+ segments = qs.split('&'),
100
+ kv;
101
+ for (var i=0; i<segments.length; i++) {
102
+ kv = segments[i].split('=', 2);
103
+ if (kv && kv[0]) {
104
+ obj[decodeURIComponent(kv[0])] = decodeURIComponent(kv[1]);
105
+ }
106
+ }
107
+ return obj;
108
+ }
109
+
110
+ }
111
+
112
+
113
+ // Platform custom events. You may 'bind' or 'unbind' a callback function to an event;
114
+ // 'triggering'-ing an event fires all callbacks in succession.
115
+ //
116
+ // function showStatus(status){
117
+ // alert(status)
118
+ // }
119
+ // Platform.Event.bind('auth:statusChange', showStatus);
120
+ // Platform.Event.trigger('auth:statuschange','authorized');
121
+ // Platform.Event.unbind('auth:statusChange', showStatus);
122
+ //
123
+ Platform.Event = {
124
+
125
+ _events:{},
126
+
127
+ // Bind an event, specified by a string name, 'event', to a callback, 'cb', function.
128
+ bind: function(event, cb){
129
+ this._events[event] = this._events[event] || [];
130
+ this._events[event].push(cb);
131
+ },
132
+
133
+ // Remove one or many callbacks. If callback is null, all
134
+ // callbacks for the event wil be removed.
135
+ unbind: function(event, cb){
136
+ if(event in this._events === false) return;
137
+ this._events[event].splice(this._events[event].indexOf(cb), 1);
138
+ if(!cb) delete this._events[event];
139
+ },
140
+
141
+ // Trigger an event, firing all bound callbacks. Callbacks are passed the
142
+ // same arguments as 'trigger' is, apart from the event name.
143
+ trigger: function(event){
144
+ if( event in this._events === false ) return;
145
+ for(var i = 0; i < this._events[event].length; i++){
146
+ this._events[event][i].apply(this, Array.prototype.slice.call(arguments, 1))
147
+ }
148
+ }
149
+
150
+ }
151
+
152
+ // APIs for making requests against Platform's Server.
153
+ // All request types take the same arguments; url, parameters and a callback.
154
+ //
155
+
156
+ Platform.Request = {
157
+
158
+
159
+ callbacks : {},
160
+
161
+ // Standard JSONP request
162
+ //
163
+ // Platform.Request.jsonp(url[, paramerters, callback])
164
+ //
165
+ jsonp:function(url,params,cb) {
166
+ var
167
+ self = this,
168
+ script = document.createElement('script'),
169
+ uuid = Platform.uuid(),
170
+ params = Platform.Util.extend((params||{}),{callback:'Platform.Request.callbacks.' + uuid}),
171
+ url = url + (url.indexOf('?')>-1 ? '&' : '?') + Platform.Util.encodeQueryString(params);
172
+
173
+ this.callbacks[uuid] = function(data) {
174
+ if(data.error) {
175
+ Platform.log([data.error,data.error_description].join(' : '));
176
+ }
177
+ if(cb) cb(data);
178
+ delete self.callbacks[uuid];
179
+ }
180
+ script.src = url;
181
+ document.getElementsByTagName('head')[0].appendChild(script);
182
+ },
183
+
184
+ // Same as a jsonp request but with an access token for oauth authentication
185
+ //
186
+ // Platform.Request.oauth(url[, paramerters, callback])
187
+ //
188
+ oauth:function(url,params,cb) {
189
+ params || (params = {});
190
+ if(Platform._access_token) {
191
+ Platform.Util.extend(params,{access_token:Platform._access_token});
192
+ } else {
193
+ Platform.log('Platform.Request.oauth() called without an access token.');
194
+ }
195
+ this.jsonp(url,params,cb);
196
+ },
197
+
198
+ // Opens a popup window with the given url and places it at the
199
+ // center of the current window. Used for app authentication. Should only
200
+ // be called on a user event like a click as many browsers block popups
201
+ // if not initiated by a user.
202
+ //
203
+ // Platform.Request.popup(url[, paramerters, callback])
204
+ //
205
+ popup: function(url,params,cb) {
206
+ this.registerXDHandler();
207
+ // figure out where the center is
208
+ var
209
+ screenX = typeof window.screenX != 'undefined' ? window.screenX : window.screenLeft,
210
+ screenY = typeof window.screenY != 'undefined' ? window.screenY : window.screenTop,
211
+ outerWidth = typeof window.outerWidth != 'undefined' ? window.outerWidth : document.documentElement.clientWidth,
212
+ outerHeight = typeof window.outerHeight != 'undefined' ? window.outerHeight : (document.documentElement.clientHeight - 22),
213
+ width = params.width || 600,
214
+ height = params.height || 400,
215
+ left = parseInt(screenX + ((outerWidth - width) / 2), 10),
216
+ top = parseInt(screenY + ((outerHeight - height) / 2.5), 10),
217
+ features = (
218
+ 'width=' + width +
219
+ ',height=' + height +
220
+ ',left=' + left +
221
+ ',top=' + top
222
+ );
223
+ var
224
+ uuid = Platform.uuid(),
225
+ params = Platform.Util.extend((params||{}),{
226
+ callback : uuid,
227
+ display : 'popup',
228
+ origin : this._origin()
229
+ }),
230
+ url = url + (url.indexOf('?')>-1 ? '&' : '?') + Platform.Util.encodeQueryString(params);
231
+ var win = window.open(url,uuid,features);
232
+ this.callbacks[uuid] = function(data) {
233
+ if(cb) cb(data,win);
234
+ delete Platform.Request.callbacks[uuid];
235
+ }
236
+ },
237
+
238
+ // Creates and inserts a hidden iframe with the given url then removes
239
+ // the iframe from the DOM
240
+ //
241
+ // Platform.Request.hidden(url[, paramerters, callback])
242
+ //
243
+ hidden:function(url,params,cb) {
244
+ this.registerXDHandler();
245
+ var
246
+ iframe = document.createElement('iframe'),
247
+ uuid = Platform.uuid(),
248
+ params = Platform.Util.extend((params||{}),{
249
+ callback : uuid,
250
+ display : 'hidden',
251
+ origin : this._origin()
252
+ }),
253
+ url = url + (url.indexOf('?')>-1 ? '&' : '?') + Platform.Util.encodeQueryString(params);
254
+
255
+ iframe.style.display = "none";
256
+ this.callbacks[uuid] = function(data) {
257
+ if(cb) cb(data);
258
+ delete Platform.Request.callbacks[uuid];
259
+ iframe.parentNode.removeChild(iframe);
260
+ }
261
+ iframe.src = url;
262
+ document.getElementsByTagName('body')[0].appendChild(iframe);
263
+ },
264
+
265
+
266
+ // Make sure we're listening to the onMessage event
267
+ registerXDHandler:function() {
268
+ if(this.xd_registered) return;
269
+ var
270
+ self=Platform.Request,
271
+ fn = function(e){Platform.Request.onMessage(e)}
272
+ window.addEventListener
273
+ ? window.addEventListener('message', fn, false)
274
+ : window.attachEvent('onmessage', fn);
275
+ this.xd_registered = true;
276
+ },
277
+
278
+ // handles message events sent via postMessage, and fires the appropriate callback
279
+ onMessage:function(e) {
280
+ var data = {};
281
+ if (e.data && typeof e.data == 'string') {
282
+ data = Platform.Util.decodeQueryString(e.data);
283
+ }
284
+
285
+ if(data.error) {
286
+ Platform.log(data.error,data.error_description);
287
+ }
288
+
289
+ if(data.callback) {
290
+ var cb = this.callbacks[data.callback];
291
+ if(cb) {
292
+ cb(data);
293
+ delete this.callbacks[data.callback];
294
+ }
295
+ }
296
+ },
297
+
298
+ // get the origin of the page
299
+ _origin: function() {
300
+ return (window.location.protocol + '//' + window.location.host)
301
+ }
302
+
303
+
304
+
305
+ }
306
+
307
+
308
+
309
+
310
+ // Authentication
311
+
312
+
313
+ Platform.Auth = {
314
+
315
+ // Returns the current authentication status of the user from the server, and provides
316
+ // an access token if the user is logged into Platform and has authorized the app.
317
+ //
318
+ // Platform.Auth.getStatus(function(response){
319
+ // if(response.status == 'authorized') {
320
+ // // User is logged in and has authorized the app
321
+ // }
322
+ // })
323
+ //
324
+ // The status returned in the response will be either 'authorized', user is logged in
325
+ // and has authorized the app, 'unauthorized', user is logged in but has not authorized
326
+ // the app and 'unknown', user is not logged in.
327
+
328
+ getStatus:function(cb) {
329
+ if(!Platform._appid) {
330
+ return Platform.log('Platform.Auth.getStatus() called without an app id');
331
+ }
332
+ var url = Platform._host + Platform._url.status;
333
+ Platform.Request.hidden(url,{client_id:Platform._appid},function(data){
334
+ Platform.Auth.setStatus(data);
335
+ if(cb) cb(data);
336
+ });
337
+ },
338
+
339
+ // Launches the authorization window to connect to Platform and if successful returns an
340
+ // access token.
341
+ //
342
+ // Platform.Auth.connect(function(response){
343
+ // if(response.status == 'authorized') {
344
+ // // User is logged in and has authorized the app
345
+ // }
346
+ // })
347
+ //
348
+
349
+ connect:function(cb) {
350
+ if(!Platform._appid) {
351
+ return Platform.log('Platform.Auth.connect() called without an app id.');
352
+ }
353
+ if(!Platform._access_token) {
354
+ var url = Platform._host + Platform._url.connect,
355
+ params = {
356
+ response_type : 'token',
357
+ client_id : Platform._appid
358
+ };
359
+ Platform.Request.popup(url,params,function(data,win){
360
+ Platform.Auth.setStatus(data);
361
+ if(win) win.close();
362
+ if(cb) cb(data);
363
+ });
364
+ } else {
365
+ Platform.log('Platform.Auth.connect() called when user is already connected.');
366
+ if(cb) cb();
367
+ }
368
+ },
369
+
370
+ // Revokes your apps authorization access
371
+ //
372
+ // Platform.Auth.disconnect(function(){
373
+ // // App authorization has been revoked
374
+ // })
375
+ //
376
+ disconnect:function(cb) {
377
+ if(!Platform._appid) {
378
+ return Platform.log('Platform.Auth.disconnect() called without an app id.');
379
+ }
380
+ var url = Platform._host + Platform._url.disconnect;
381
+ Platform.Request.jsonp(url,{client_id:Platform._appid},function(r){
382
+ Platform.Auth.setStatus(null);
383
+ if(cb) cb(r);
384
+ })
385
+ },
386
+
387
+
388
+ // Logs the user out of Platform
389
+ //
390
+ // Platform.Auth.logout(function(){
391
+ // // App authorization has been revoked
392
+ // })
393
+ //
394
+ logout:function(cb) {
395
+ if(!Platform._appid) {
396
+ return Platform.log('Platform.Auth.logout called() without an app id.');
397
+ }
398
+ var url = Platform._host + Platform._url.logout;
399
+ Platform.Request.jsonp(url,{client_id:Platform._appid},function(r){
400
+ Platform.Auth.setStatus(null);
401
+ if(cb) cb(r);
402
+ });
403
+ },
404
+
405
+ // Determines the correct status ('unknown', 'unauthorized' or 'authorized') and
406
+ // sets the access token if authorization is approved.
407
+ setStatus:function(data) {
408
+ data || (data = {});
409
+ if(data.access_token) {
410
+ Platform._access_token = data.access_token;
411
+ Platform.Cookie('geni'+Platform._appid, Platform._access_token);
412
+ data.status = "authorized";
413
+ } else {
414
+ Platform._access_token = null;
415
+ Platform.Cookie('geni'+Platform._appid, null);
416
+ data.status = data.status || "unknown";
417
+ }
418
+ if(Platform._status != data.status) {
419
+ Platform.Event.trigger('auth:statusChange',data.status);
420
+ }
421
+ return (Platform._status = data.status);
422
+ }
423
+
424
+ }
425
+
426
+
427
+
428
+ // Make API calls to Platform's Servers
429
+ //
430
+ // The API strives to provide consistent access to Platform’s data. IDs are embedded before
431
+ // the action so the urls read more like a sentence. To get all profile 1’s tree matches
432
+ // you would request
433
+ //
434
+ // Platform.api('/profile-1/tree-matches',function(data){
435
+ // // returns a list of tree matches for profile with id 1
436
+ // })
437
+ //
438
+ // Omitting the ids in urls implies the action should be applied to the current user’s data.
439
+ // For example,
440
+ //
441
+ // Platform.api('/profile',function(data) {
442
+ // // returns current user's profile data
443
+ // })
444
+ //
445
+ // will return the profile information for the logged in user. Parameters can optionally be
446
+ // passed in as the second argument:
447
+ //
448
+ // Platform.api('/profile-101',{fields:'first_name,last_name'},function(data) {
449
+ // // only returns first and last name of profile with id 101
450
+ // })
451
+ //
452
+ // Visit htp://dev.geni.com for more detailed documentation.
453
+ //
454
+ Platform.Api = {
455
+
456
+ // Makes an oauth jsonp request to Platform's servers for data.
457
+ //
458
+ // Platform.Api.get('/user',function(data){
459
+ // // do something awesome with Platform data
460
+ // })
461
+ //
462
+ get:function(path,params,cb) {
463
+ if(typeof params == 'function') {
464
+ cb = params;
465
+ params = {};
466
+ }
467
+ params || (params = {});
468
+ if(params.method) {
469
+ params['_method'] = params.method;
470
+ delete params.method;
471
+ }
472
+ path = Platform._host + Platform._url.api + "/" + path.replace(/^\//,'');
473
+
474
+ Platform.Request.oauth(path, params, cb);
475
+ },
476
+
477
+
478
+ // Makes an oauth jsonp request to Platform's servers to save data. All jsonp
479
+ // requests use a GET method but we can get around this by adding a
480
+ // _method=post parameter to our request.
481
+ //
482
+ // Platform.Api.post(function(data){
483
+ // // Add awesome data to Platform
484
+ // })
485
+ //
486
+ post:function(path,params,cb) {
487
+ params = Platform.Util.extend({'_method':'post'},params || {});
488
+ this.get(path,params,cb);
489
+ }
490
+
491
+ }
492
+
493
+
494
+
495
+
496
+ // Cookies
497
+ // Helper function to get/set browser cookies so an application's server can have access
498
+ // to the access token.
499
+ //
500
+ Platform.Cookie = function (key, value, options) {
501
+ if(!Platform._cookies) return;
502
+ if (arguments.length > 1 && String(value) !== "[object Object]") {
503
+ options = Platform.Util.extend({}, options);
504
+ if (value === null || value === undefined) options.expires = -1;
505
+ if (typeof options.expires === 'number') {
506
+ var days = options.expires, t = options.expires = new Date();
507
+ t.setDate(t.getDate() + days);
508
+ }
509
+ value = String(value);
510
+ return (document.cookie = [
511
+ encodeURIComponent(key), '=',
512
+ options.raw ? value : encodeURIComponent(value),
513
+ options.expires ? '; expires=' + options.expires.toUTCString() : '',
514
+ options.path ? '; path=' + options.path : '',
515
+ options.domain ? '; domain=' + options.domain : '',
516
+ options.secure ? '; secure' : ''
517
+ ].join(''));
518
+ }
519
+ options = value || {};
520
+ var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent;
521
+ return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null;
522
+ }
523
+
524
+
525
+
526
+
527
+ // shortcuts to make things easier
528
+
529
+ window.Platform = window.$g = Platform.Util.extend(Platform,{
530
+ getStatus : Platform.Auth.getStatus,
531
+ connect : Platform.Auth.connect,
532
+ disconnect : Platform.Auth.disconnect,
533
+ logout : Platform.Auth.logout,
534
+ api : Platform.Api.get //most api calls are gets
535
+ });
536
+
537
+ }).call(this);
538
+
539
+