calagator 0.0.1.pre1

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 (384) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +23 -0
  3. data/README.md +75 -0
  4. data/Rakefile +12 -0
  5. data/app/assets/images/confused-alligator-sm.png +0 -0
  6. data/app/assets/images/disk.png +0 -0
  7. data/app/assets/images/edit.png +0 -0
  8. data/app/assets/images/external_sites/epdx.png +0 -0
  9. data/app/assets/images/external_sites/external.gif +0 -0
  10. data/app/assets/images/external_sites/facebook.png +0 -0
  11. data/app/assets/images/external_sites/foursquare.png +0 -0
  12. data/app/assets/images/external_sites/gowalla.png +0 -0
  13. data/app/assets/images/external_sites/lanyrd.png +0 -0
  14. data/app/assets/images/external_sites/meetup.png +0 -0
  15. data/app/assets/images/external_sites/plancast.png +0 -0
  16. data/app/assets/images/external_sites/shizzow.png +0 -0
  17. data/app/assets/images/external_sites/upcoming.png +0 -0
  18. data/app/assets/images/external_sites/yelp.png +0 -0
  19. data/app/assets/images/feed.png +0 -0
  20. data/app/assets/images/heart.png +0 -0
  21. data/app/assets/images/icon_ical.gif +0 -0
  22. data/app/assets/images/information.png +0 -0
  23. data/app/assets/images/nav_marker.gif +0 -0
  24. data/app/assets/images/nav_marker.png +0 -0
  25. data/app/assets/images/plus.png +0 -0
  26. data/app/assets/images/redx.png +0 -0
  27. data/app/assets/images/site-icon.png +0 -0
  28. data/app/assets/images/spinner.gif +0 -0
  29. data/app/assets/images/star.png +0 -0
  30. data/app/assets/images/subnav_marker.gif +0 -0
  31. data/app/assets/images/subnav_marker.png +0 -0
  32. data/app/assets/images/tag_blue.png +0 -0
  33. data/app/assets/images/tag_icons/angular.png +0 -0
  34. data/app/assets/images/tag_icons/beer.png +0 -0
  35. data/app/assets/images/tag_icons/bitcoin.png +0 -0
  36. data/app/assets/images/tag_icons/free.png +0 -0
  37. data/app/assets/images/tag_icons/golang.png +0 -0
  38. data/app/assets/images/tag_icons/html.png +0 -0
  39. data/app/assets/images/tag_icons/javascript.png +0 -0
  40. data/app/assets/images/tag_icons/linux.png +0 -0
  41. data/app/assets/images/tag_icons/php.png +0 -0
  42. data/app/assets/images/tag_icons/pizza.png +0 -0
  43. data/app/assets/images/tag_icons/python.png +0 -0
  44. data/app/assets/images/tag_icons/rails.png +0 -0
  45. data/app/assets/images/tag_icons/ruby.png +0 -0
  46. data/app/assets/images/tag_icons/sass.png +0 -0
  47. data/app/assets/images/tag_icons/swift.png +0 -0
  48. data/app/assets/images/transmit_blue.png +0 -0
  49. data/app/assets/images/weekday_background.gif +0 -0
  50. data/app/assets/javascripts/calagator.js +18 -0
  51. data/app/assets/javascripts/calagator/forms.js +60 -0
  52. data/app/assets/stylesheets/calagator.scss +8 -0
  53. data/app/assets/stylesheets/calagator/common.scss +14 -0
  54. data/app/assets/stylesheets/calagator/datepicker.scss +177 -0
  55. data/app/assets/stylesheets/calagator/errors.css +110 -0
  56. data/app/assets/stylesheets/calagator/forms.scss +4 -0
  57. data/app/assets/stylesheets/calagator/reset.css +40 -0
  58. data/app/assets/stylesheets/calagator/theme.css +0 -0
  59. data/app/controllers/calagator/admin_controller.rb +27 -0
  60. data/app/controllers/calagator/application_controller.rb +82 -0
  61. data/app/controllers/calagator/events_controller.rb +171 -0
  62. data/app/controllers/calagator/site_controller.rb +35 -0
  63. data/app/controllers/calagator/sources_controller.rb +94 -0
  64. data/app/controllers/calagator/venues_controller.rb +133 -0
  65. data/app/controllers/calagator/versions_controller.rb +20 -0
  66. data/app/helpers/calagator/application_helper.rb +128 -0
  67. data/app/helpers/calagator/events_helper.rb +184 -0
  68. data/app/helpers/calagator/google_event_export_helper.rb +67 -0
  69. data/app/helpers/calagator/mapping_helper.rb +103 -0
  70. data/app/helpers/calagator/sources_helper.rb +10 -0
  71. data/app/helpers/calagator/tags_helper.rb +42 -0
  72. data/app/helpers/calagator/time_range_helper.rb +166 -0
  73. data/app/models/calagator/event.rb +246 -0
  74. data/app/models/calagator/event/cloner.rb +39 -0
  75. data/app/models/calagator/event/ical_renderer.rb +155 -0
  76. data/app/models/calagator/event/overview.rb +45 -0
  77. data/app/models/calagator/event/saver.rb +58 -0
  78. data/app/models/calagator/event/search.rb +72 -0
  79. data/app/models/calagator/event/search_engine.rb +28 -0
  80. data/app/models/calagator/event/search_engine/apache_sunspot.rb +106 -0
  81. data/app/models/calagator/event/search_engine/sql.rb +107 -0
  82. data/app/models/calagator/source.rb +115 -0
  83. data/app/models/calagator/source/importer.rb +46 -0
  84. data/app/models/calagator/source/parser.rb +128 -0
  85. data/app/models/calagator/source/parser/facebook.rb +67 -0
  86. data/app/models/calagator/source/parser/hcal.rb +108 -0
  87. data/app/models/calagator/source/parser/http_authentication_required_error.rb +6 -0
  88. data/app/models/calagator/source/parser/ical.rb +186 -0
  89. data/app/models/calagator/source/parser/meetup.rb +72 -0
  90. data/app/models/calagator/source/parser/not_found.rb +9 -0
  91. data/app/models/calagator/source/parser/plancast.rb +59 -0
  92. data/app/models/calagator/venue.rb +161 -0
  93. data/app/models/calagator/venue/geocoder.rb +51 -0
  94. data/app/models/calagator/venue/search.rb +63 -0
  95. data/app/models/calagator/venue/search_engine.rb +24 -0
  96. data/app/models/calagator/venue/search_engine/apache_sunspot.rb +85 -0
  97. data/app/models/calagator/venue/search_engine/sql.rb +68 -0
  98. data/app/models/event/search_engine/base.rb +0 -0
  99. data/app/observers/calagator/cache_observer.rb +37 -0
  100. data/app/views/calagator/admin/events.html.erb +28 -0
  101. data/app/views/calagator/admin/index.html.erb +8 -0
  102. data/app/views/calagator/events/_feed_item.html.erb +62 -0
  103. data/app/views/calagator/events/_form.html.erb +63 -0
  104. data/app/views/calagator/events/_gcal_reminder.html.erb +1 -0
  105. data/app/views/calagator/events/_hcal.html.erb +41 -0
  106. data/app/views/calagator/events/_item.html.erb +120 -0
  107. data/app/views/calagator/events/_list.html.erb +30 -0
  108. data/app/views/calagator/events/_list_item.html.erb +37 -0
  109. data/app/views/calagator/events/_search_section.html.erb +15 -0
  110. data/app/views/calagator/events/_subnav.html.erb +13 -0
  111. data/app/views/calagator/events/_table.html.erb +74 -0
  112. data/app/views/calagator/events/duplicates.html.erb +58 -0
  113. data/app/views/calagator/events/edit.html.erb +3 -0
  114. data/app/views/calagator/events/index.atom.builder +32 -0
  115. data/app/views/calagator/events/index.html.erb +51 -0
  116. data/app/views/calagator/events/index.kml.erb +20 -0
  117. data/app/views/calagator/events/new.html.erb +7 -0
  118. data/app/views/calagator/events/search.html.erb +25 -0
  119. data/app/views/calagator/events/show.html.erb +81 -0
  120. data/app/views/calagator/site/_appropriateness_message.html.erb +15 -0
  121. data/app/views/calagator/site/_description.html.erb +3 -0
  122. data/app/views/calagator/site/about.html.erb +7 -0
  123. data/app/views/calagator/site/defunct.html.erb +15 -0
  124. data/app/views/calagator/site/export.html.erb +4 -0
  125. data/app/views/calagator/site/index.html.erb +40 -0
  126. data/app/views/calagator/site/opensearch.xml.builder +8 -0
  127. data/app/views/calagator/sources/_subnav.html.erb +0 -0
  128. data/app/views/calagator/sources/edit.html.erb +12 -0
  129. data/app/views/calagator/sources/import.html.erb +10 -0
  130. data/app/views/calagator/sources/index.html.erb +22 -0
  131. data/app/views/calagator/sources/new.html.erb +32 -0
  132. data/app/views/calagator/sources/show.html.erb +16 -0
  133. data/app/views/calagator/venues/_form.html.erb +57 -0
  134. data/app/views/calagator/venues/_subnav.html.erb +10 -0
  135. data/app/views/calagator/venues/duplicates.html.erb +65 -0
  136. data/app/views/calagator/venues/edit.html.erb +3 -0
  137. data/app/views/calagator/venues/index.html.erb +93 -0
  138. data/app/views/calagator/venues/index.kml.erb +15 -0
  139. data/app/views/calagator/venues/map.html.erb +4 -0
  140. data/app/views/calagator/venues/new.html.erb +5 -0
  141. data/app/views/calagator/venues/show.html.erb +113 -0
  142. data/app/views/calagator/versions/_chooser.html.erb +28 -0
  143. data/app/views/calagator/versions/_edit_with_chooser.html.erb +16 -0
  144. data/app/views/layouts/calagator/application.html.erb +110 -0
  145. data/config/deploy/local.rb +37 -0
  146. data/config/deploy/lucca.rb +33 -0
  147. data/config/initializers/dates.rb +7 -0
  148. data/config/initializers/formtastic.rb +82 -0
  149. data/config/initializers/geokit.rb +74 -0
  150. data/config/initializers/ics_renderer.rb +6 -0
  151. data/config/initializers/load_tag_model_extensions.rb +3 -0
  152. data/config/initializers/mime_types.rb +9 -0
  153. data/config/initializers/observers.rb +1 -0
  154. data/config/initializers/search_engine.rb +4 -0
  155. data/config/initializers/set_default_url_host.rb +5 -0
  156. data/config/initializers/time_get_zone.rb +8 -0
  157. data/config/locales/en.yml +5 -0
  158. data/config/routes.rb +55 -0
  159. data/config/secrets.yml.blag +75 -0
  160. data/config/sunspot.yml +23 -0
  161. data/db/development.sqlite3 +0 -0
  162. data/db/development.sqlite3.bak +0 -0
  163. data/db/development.sqlite3.old +0 -0
  164. data/db/development~20111112@110950.sqlite3 +0 -0
  165. data/db/migrate/001_create_events.rb +17 -0
  166. data/db/migrate/002_create_venues.rb +17 -0
  167. data/db/migrate/003_create_sources.rb +16 -0
  168. data/db/migrate/004_add_detailed_fields_to_venue.rb +19 -0
  169. data/db/migrate/005_add_end_time_to_events.rb +9 -0
  170. data/db/migrate/006_add_source_id_to_events.rb +9 -0
  171. data/db/migrate/008_add_source_id_to_venues.rb +10 -0
  172. data/db/migrate/009_add_duplicate_of_column_to_venues.rb +9 -0
  173. data/db/migrate/010_add_duplicate_of_column_to_events.rb +9 -0
  174. data/db/migrate/011_change_lat_long_type.rb +12 -0
  175. data/db/migrate/012_add_source_reimport.rb +9 -0
  176. data/db/migrate/013_change_end_time_to_duration.rb +11 -0
  177. data/db/migrate/014_remove_format_type_from_source.rb +9 -0
  178. data/db/migrate/015_create_updates.rb +15 -0
  179. data/db/migrate/016_remove_next_update_from_source.rb +9 -0
  180. data/db/migrate/20080705163959_change_duration_to_end_time.rb +11 -0
  181. data/db/migrate/20080705164959_create_tags_and_taggings.rb +28 -0
  182. data/db/migrate/20081011181519_create_versioned_events.rb +25 -0
  183. data/db/migrate/20081011193124_create_versioned_venues.rb +32 -0
  184. data/db/migrate/20081115190515_add_rrule_to_events.rb +15 -0
  185. data/db/migrate/20090912082129_create_versions.rb +18 -0
  186. data/db/migrate/20110219205156_add_closed_flag_to_venues.rb +9 -0
  187. data/db/migrate/20110220001008_add_wifi_flag_to_venues.rb +9 -0
  188. data/db/migrate/20110220011427_add_access_notes_to_venues.rb +9 -0
  189. data/db/migrate/20110220031117_add_events_count_to_venues.rb +8 -0
  190. data/db/migrate/20110604174521_add_venue_details_to_events.rb +9 -0
  191. data/db/migrate/20110717231316_acts_as_taggable_on_migration.rb +50 -0
  192. data/db/migrate/20120709092821_cleanup.rb +14 -0
  193. data/db/migrate/20120831234448_specify_venues_latitude_and_longitude_precision.rb +11 -0
  194. data/db/migrate/20150206085809_remove_updates.rb +13 -0
  195. data/db/migrate/20150207231355_add_locked_status_to_events.rb +5 -0
  196. data/db/production.sqlite3 +0 -0
  197. data/db/schema.rb +102 -0
  198. data/db/seeds.rb +16 -0
  199. data/db/test.sqlite3 +0 -0
  200. data/db/test2.sqlite3 +0 -0
  201. data/lib/calagator.rb +30 -0
  202. data/lib/calagator/blacklist_validator.rb +69 -0
  203. data/lib/calagator/decode_html_entities_hack.rb +33 -0
  204. data/lib/calagator/duplicate_checking.rb +133 -0
  205. data/lib/calagator/duplicate_checking/controller_actions.rb +38 -0
  206. data/lib/calagator/duplicate_checking/duplicate_finder.rb +83 -0
  207. data/lib/calagator/duplicate_checking/duplicate_squasher.rb +74 -0
  208. data/lib/calagator/engine.rb +30 -0
  209. data/lib/calagator/strip_whitespace.rb +19 -0
  210. data/lib/calagator/tag_model_extensions.rb +104 -0
  211. data/lib/calagator/url_prefixer.rb +9 -0
  212. data/lib/calagator/version.rb +3 -0
  213. data/lib/generators/calagator/install_generator.rb +39 -0
  214. data/lib/generators/calagator/templates/config/calagator.rb +26 -0
  215. data/lib/generators/calagator/templates/config/secrets.yml.sample +83 -0
  216. data/lib/secrets_reader.rb +76 -0
  217. data/lib/tasks/spec_db.rake +53 -0
  218. data/lib/tasks/sunspot_reindex_calagator.rake +6 -0
  219. data/lib/tasks/sunspot_solr_restart_enhancements.rake +19 -0
  220. data/lib/tasks/update_counter_caches.rake +13 -0
  221. data/lib/templates/erb/scaffold/_form.html.erb +11 -0
  222. data/lib/theme_reader.rb +17 -0
  223. data/lib/wait_for_solr.rb +25 -0
  224. data/spec/controllers/calagator/application_controller_spec.rb +47 -0
  225. data/spec/controllers/calagator/events_controller_spec.rb +794 -0
  226. data/spec/controllers/calagator/site_controller_spec.rb +59 -0
  227. data/spec/controllers/calagator/sources_controller_spec.rb +439 -0
  228. data/spec/controllers/calagator/venues_controller_spec.rb +319 -0
  229. data/spec/controllers/calagator/versions_controller_spec.rb +82 -0
  230. data/spec/controllers/squash_many_duplicates_examples.rb +49 -0
  231. data/spec/dummy/Gemfile +39 -0
  232. data/spec/dummy/Gemfile.lock +195 -0
  233. data/spec/dummy/README.rdoc +261 -0
  234. data/spec/dummy/Rakefile +7 -0
  235. data/spec/dummy/app/assets/images/rails.png +0 -0
  236. data/spec/dummy/app/assets/javascripts/application.js +16 -0
  237. data/spec/dummy/app/assets/stylesheets/application.css +14 -0
  238. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  239. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  240. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  241. data/spec/dummy/config.ru +4 -0
  242. data/spec/dummy/config/application.rb +62 -0
  243. data/spec/dummy/config/boot.rb +6 -0
  244. data/spec/dummy/config/database.yml +25 -0
  245. data/spec/dummy/config/environment.rb +5 -0
  246. data/spec/dummy/config/environments/development.rb +37 -0
  247. data/spec/dummy/config/environments/production.rb +67 -0
  248. data/spec/dummy/config/environments/test.rb +37 -0
  249. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  250. data/spec/dummy/config/initializers/calagator.rb +26 -0
  251. data/spec/dummy/config/initializers/inflections.rb +15 -0
  252. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  253. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  254. data/spec/dummy/config/initializers/session_store.rb +8 -0
  255. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  256. data/spec/dummy/config/locales/en.yml +5 -0
  257. data/spec/dummy/config/routes.rb +59 -0
  258. data/spec/dummy/config/secrets.yml +83 -0
  259. data/spec/dummy/db/development.sqlite3 +0 -0
  260. data/spec/dummy/db/migrate/20150309023304_create_events.calagator.rb +18 -0
  261. data/spec/dummy/db/migrate/20150309023305_create_venues.calagator.rb +18 -0
  262. data/spec/dummy/db/migrate/20150309023306_create_sources.calagator.rb +17 -0
  263. data/spec/dummy/db/migrate/20150309023307_add_detailed_fields_to_venue.calagator.rb +20 -0
  264. data/spec/dummy/db/migrate/20150309023308_add_end_time_to_events.calagator.rb +10 -0
  265. data/spec/dummy/db/migrate/20150309023309_add_source_id_to_events.calagator.rb +10 -0
  266. data/spec/dummy/db/migrate/20150309023310_add_source_id_to_venues.calagator.rb +11 -0
  267. data/spec/dummy/db/migrate/20150309023311_add_duplicate_of_column_to_venues.calagator.rb +10 -0
  268. data/spec/dummy/db/migrate/20150309023312_add_duplicate_of_column_to_events.calagator.rb +10 -0
  269. data/spec/dummy/db/migrate/20150309023313_change_lat_long_type.calagator.rb +13 -0
  270. data/spec/dummy/db/migrate/20150309023314_add_source_reimport.calagator.rb +10 -0
  271. data/spec/dummy/db/migrate/20150309023315_change_end_time_to_duration.calagator.rb +12 -0
  272. data/spec/dummy/db/migrate/20150309023316_remove_format_type_from_source.calagator.rb +10 -0
  273. data/spec/dummy/db/migrate/20150309023317_create_updates.calagator.rb +16 -0
  274. data/spec/dummy/db/migrate/20150309023318_remove_next_update_from_source.calagator.rb +10 -0
  275. data/spec/dummy/db/migrate/20150309023319_change_duration_to_end_time.calagator.rb +12 -0
  276. data/spec/dummy/db/migrate/20150309023320_create_tags_and_taggings.calagator.rb +29 -0
  277. data/spec/dummy/db/migrate/20150309023321_create_versioned_events.calagator.rb +26 -0
  278. data/spec/dummy/db/migrate/20150309023322_create_versioned_venues.calagator.rb +33 -0
  279. data/spec/dummy/db/migrate/20150309023323_add_rrule_to_events.calagator.rb +16 -0
  280. data/spec/dummy/db/migrate/20150309023324_create_versions.calagator.rb +19 -0
  281. data/spec/dummy/db/migrate/20150309023325_add_closed_flag_to_venues.calagator.rb +10 -0
  282. data/spec/dummy/db/migrate/20150309023326_add_wifi_flag_to_venues.calagator.rb +10 -0
  283. data/spec/dummy/db/migrate/20150309023327_add_access_notes_to_venues.calagator.rb +10 -0
  284. data/spec/dummy/db/migrate/20150309023328_add_events_count_to_venues.calagator.rb +9 -0
  285. data/spec/dummy/db/migrate/20150309023329_add_venue_details_to_events.calagator.rb +10 -0
  286. data/spec/dummy/db/migrate/20150309023330_acts_as_taggable_on_migration.calagator.rb +51 -0
  287. data/spec/dummy/db/migrate/20150309023331_cleanup.calagator.rb +15 -0
  288. data/spec/dummy/db/migrate/20150309023332_specify_venues_latitude_and_longitude_precision.calagator.rb +12 -0
  289. data/spec/dummy/db/migrate/20150309023333_remove_updates.calagator.rb +14 -0
  290. data/spec/dummy/db/migrate/20150309023334_add_locked_status_to_events.calagator.rb +6 -0
  291. data/spec/dummy/db/schema.rb +95 -0
  292. data/spec/dummy/db/seeds.rb +7 -0
  293. data/spec/dummy/db/test.sqlite3 +0 -0
  294. data/spec/dummy/doc/README_FOR_APP +2 -0
  295. data/spec/dummy/log/development.log +273 -0
  296. data/spec/dummy/public/404.html +26 -0
  297. data/spec/dummy/public/422.html +26 -0
  298. data/spec/dummy/public/500.html +25 -0
  299. data/spec/dummy/public/favicon.ico +0 -0
  300. data/spec/dummy/public/robots.txt +5 -0
  301. data/spec/dummy/script/rails +6 -0
  302. data/spec/dummy/test/performance/browsing_test.rb +12 -0
  303. data/spec/dummy/test/test_helper.rb +13 -0
  304. data/spec/factories.rb +93 -0
  305. data/spec/features/add_event_spec.rb +99 -0
  306. data/spec/features/add_venue_spec.rb +34 -0
  307. data/spec/features/admin_auth_spec.rb +22 -0
  308. data/spec/features/admin_lock_event_spec.rb +41 -0
  309. data/spec/features/import_events_from_feed_spec.rb +43 -0
  310. data/spec/features/managing_event_spec.rb +111 -0
  311. data/spec/features/managing_venue_spec.rb +71 -0
  312. data/spec/features/search_event_spec.rb +27 -0
  313. data/spec/helpers/calagator/application_helper_spec.rb +82 -0
  314. data/spec/helpers/calagator/events_helper_spec.rb +172 -0
  315. data/spec/helpers/calagator/google_event_export_helper_spec.rb +70 -0
  316. data/spec/helpers/calagator/sources_helper_spec.rb +12 -0
  317. data/spec/helpers/calagator/tags_helper_spec.rb +85 -0
  318. data/spec/helpers/calagator/time_range_helper_spec.rb +59 -0
  319. data/spec/lib/calagator/blacklist_validator_spec.rb +65 -0
  320. data/spec/lib/calagator/decode_html_entities_hack_spec.rb +54 -0
  321. data/spec/lib/calagator/settings_spec.rb +20 -0
  322. data/spec/lib/calagator/url_prefixer_spec.rb +33 -0
  323. data/spec/lib/secrets_reader_spec.rb +65 -0
  324. data/spec/models/calagator/event/cloner_spec.rb +43 -0
  325. data/spec/models/calagator/event/overview_spec.rb +79 -0
  326. data/spec/models/calagator/event/search_spec.rb +103 -0
  327. data/spec/models/calagator/event_search_spec.rb +149 -0
  328. data/spec/models/calagator/event_spec.rb +859 -0
  329. data/spec/models/calagator/source/parser_facebook_spec.rb +73 -0
  330. data/spec/models/calagator/source/parser_hcal_spec.rb +69 -0
  331. data/spec/models/calagator/source/parser_ical_non_standard_spec.rb +91 -0
  332. data/spec/models/calagator/source/parser_ical_spec.rb +322 -0
  333. data/spec/models/calagator/source/parser_meetup_spec.rb +69 -0
  334. data/spec/models/calagator/source/parser_plancast_spec.rb +53 -0
  335. data/spec/models/calagator/source/parser_spec.rb +238 -0
  336. data/spec/models/calagator/source_spec.rb +135 -0
  337. data/spec/models/calagator/venue/search_spec.rb +92 -0
  338. data/spec/models/calagator/venue_search_spec.rb +124 -0
  339. data/spec/models/calagator/venue_spec.rb +346 -0
  340. data/spec/models/tag_spec.rb +35 -0
  341. data/spec/rails_helper.rb +39 -0
  342. data/spec/spec_helper.rb +140 -0
  343. data/spec/support/disable_geocoding.rb +1 -0
  344. data/spec/support/http_samples.rb +5 -0
  345. data/spec/support/samples/facebook.json +23 -0
  346. data/spec/support/samples/hcal_basic.xml +6 -0
  347. data/spec/support/samples/hcal_dup_event_dup_venue.xml +13 -0
  348. data/spec/support/samples/hcal_event_duplicates_fixture.xml +13 -0
  349. data/spec/support/samples/hcal_event_wo_lat_and_long.xml +14 -0
  350. data/spec/support/samples/hcal_multiple.xml +16 -0
  351. data/spec/support/samples/hcal_same_event_twice_with_different_venues.xml +12 -0
  352. data/spec/support/samples/hcal_single.xml +8 -0
  353. data/spec/support/samples/hcal_two_identical_events.xml +14 -0
  354. data/spec/support/samples/hcal_upcoming_v1.html +412 -0
  355. data/spec/support/samples/hcal_upcoming_v2.html +749 -0
  356. data/spec/support/samples/hcal_upcoming_v3.html +685 -0
  357. data/spec/support/samples/hcal_upcoming_v4.html +761 -0
  358. data/spec/support/samples/ical_apple.ics +22 -0
  359. data/spec/support/samples/ical_apple_v3.ics +37 -0
  360. data/spec/support/samples/ical_basic.ics +15 -0
  361. data/spec/support/samples/ical_basic_with_duration.ics +16 -0
  362. data/spec/support/samples/ical_event_with_squashed_venue.ics +12 -0
  363. data/spec/support/samples/ical_eventful_many.ics +504 -0
  364. data/spec/support/samples/ical_gmt.ics +12 -0
  365. data/spec/support/samples/ical_google.ics +786 -0
  366. data/spec/support/samples/ical_multiple_calendars.ics +111 -0
  367. data/spec/support/samples/ical_upcoming.ics +36 -0
  368. data/spec/support/samples/ical_upcoming_many.ics +682 -0
  369. data/spec/support/samples/ical_upcoming_v2.ics +43 -0
  370. data/spec/support/samples/ical_z.ics +10 -0
  371. data/spec/support/samples/meetup.ics +16 -0
  372. data/spec/support/samples/meetup.json +31 -0
  373. data/spec/support/samples/plancast.ics +59 -0
  374. data/spec/support/samples/plancast.json +51 -0
  375. data/spec/support/samples/plancast_with_missing_venue.json +39 -0
  376. data/spec/support/samples/upcoming_v1.xml +8 -0
  377. data/spec/support/samples/upcoming_v2_with_invalid_utc_dates.xml +8 -0
  378. data/spec/support/time_convenience_methods.rb +8 -0
  379. data/spec/support/time_zones.rb +12 -0
  380. data/spec/support/url_helpers.rb +5 -0
  381. data/spec/support/wait_for_ajax.rb +15 -0
  382. data/spec/support/webmock.rb +8 -0
  383. data/spec/travis_spec.rb +7 -0
  384. metadata +1194 -0
@@ -0,0 +1,9 @@
1
+ class AddEndTimeToEvents < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :events, :end_time, :timestamp
4
+ end
5
+
6
+ def self.down
7
+ remove_column :events, :end_time
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ class AddSourceIdToEvents < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :events, :source_id, :integer
4
+ end
5
+
6
+ def self.down
7
+ remove_column :events, :source_id
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ class AddSourceIdToVenues < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :venues, :source_id, :integer
4
+ end
5
+
6
+ def self.down
7
+ remove_column :venues, :source_id
8
+ end
9
+ end
10
+
@@ -0,0 +1,9 @@
1
+ class AddDuplicateOfColumnToVenues < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :venues, :duplicate_of_id, :integer
4
+ end
5
+
6
+ def self.down
7
+ remove_column :venues, :duplicate_of_id
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ class AddDuplicateOfColumnToEvents < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :events, :duplicate_of_id, :integer
4
+ end
5
+
6
+ def self.down
7
+ remove_column :events, :duplicate_of_id
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ class ChangeLatLongType < ActiveRecord::Migration
2
+ def self.up
3
+ # :decimal is more precise than :float, and we need that for lat/long.
4
+ change_column :venues, :latitude, :decimal, :precision => 15, :scale => 10
5
+ change_column :venues, :longitude, :decimal, :precision => 15, :scale => 10
6
+ end
7
+
8
+ def self.down
9
+ change_column :venues, :latitude, :float
10
+ change_column :venues, :longitude, :float
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ class AddSourceReimport < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :sources, :reimport, :boolean
4
+ end
5
+
6
+ def self.down
7
+ remove_column :sources, :reimport
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ class ChangeEndTimeToDuration < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :events, :duration, :integer
4
+ remove_column :events, :end_time
5
+ end
6
+
7
+ def self.down
8
+ add_column :events, :end_time, :datetime
9
+ remove_column :events, :duration
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ class RemoveFormatTypeFromSource < ActiveRecord::Migration
2
+ def self.up
3
+ remove_column :sources, :format_type
4
+ end
5
+
6
+ def self.down
7
+ add_column :sources, :format_type, :string
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ class CreateUpdates < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :updates do |t|
4
+ t.integer "source_id"
5
+ t.text "status"
6
+ t.timestamps
7
+ end
8
+ add_column :sources, :next_update, :datetime
9
+ end
10
+
11
+ def self.down
12
+ remove_column :sources, :next_update
13
+ drop_table :updates
14
+ end
15
+ end
@@ -0,0 +1,9 @@
1
+ class RemoveNextUpdateFromSource < ActiveRecord::Migration
2
+ def self.up
3
+ remove_column :sources, :next_update
4
+ end
5
+
6
+ def self.down
7
+ add_column :sources, :next_update, :datetime
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ class ChangeDurationToEndTime < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :events, :end_time, :datetime
4
+ remove_column :events, :duration
5
+ end
6
+
7
+ def self.down
8
+ add_column :events, :duration, :integer
9
+ remove_column :events, :end_time
10
+ end
11
+ end
@@ -0,0 +1,28 @@
1
+
2
+ # A migration to add tables for Tag and Tagging. This file is automatically generated and added to your app if you run the tagging generator included with has_many_polymorphs.
3
+
4
+ class CreateTagsAndTaggings < ActiveRecord::Migration
5
+
6
+ # Add the new tables.
7
+ def self.up
8
+ create_table :tags do |t|
9
+ t.column :name, :string, :null => false
10
+ end
11
+ add_index :tags, :name, :unique => true
12
+
13
+ create_table :taggings do |t|
14
+ t.column :tag_id, :integer, :null => false
15
+ t.column :taggable_id, :integer, :null => false
16
+ t.column :taggable_type, :string, :null => false
17
+ # t.column :position, :integer # Uncomment this if you need to use <tt>acts_as_list</tt>.
18
+ end
19
+ add_index :taggings, [:tag_id, :taggable_id, :taggable_type], :unique => true
20
+ end
21
+
22
+ # Remove the tables.
23
+ def self.down
24
+ drop_table :tags
25
+ drop_table :taggings
26
+ end
27
+
28
+ end
@@ -0,0 +1,25 @@
1
+ class CreateVersionedEvents < ActiveRecord::Migration
2
+ # NOTE: This migration's contents have been commented-out because they relied
3
+ # on the old +acts_as_versioned+ plugin that has since replaced with the
4
+ # +papertrail+ plugin.
5
+
6
+ def self.up
7
+ ### Event.create_versioned_table do |t|
8
+ ### t.string "title"
9
+ ### t.text "description"
10
+ ### t.datetime "start_time"
11
+ ### t.string "url"
12
+ ### t.datetime "created_at"
13
+ ### t.datetime "updated_at"
14
+ ### t.integer "venue_id"
15
+ ### t.integer "source_id"
16
+ ### t.integer "duplicate_of_id"
17
+ ### t.datetime "end_time"
18
+ ### t.integer "version"
19
+ ### end
20
+ end
21
+
22
+ def self.down
23
+ ### Event.drop_versioned_table
24
+ end
25
+ end
@@ -0,0 +1,32 @@
1
+ class CreateVersionedVenues < ActiveRecord::Migration
2
+ # NOTE: This migration's contents have been commented-out because they relied
3
+ # on the old +acts_as_versioned+ plugin that we've since replaced with the
4
+ # +papertrail+ plugin.
5
+ #
6
+ def self.up
7
+ ### Venue.create_versioned_table do |t|
8
+ ### t.string "title"
9
+ ### t.text "description"
10
+ ### t.string "address"
11
+ ### t.string "url"
12
+ ### t.datetime "created_at"
13
+ ### t.datetime "updated_at"
14
+ ### t.string "street_address"
15
+ ### t.string "locality"
16
+ ### t.string "region"
17
+ ### t.string "postal_code"
18
+ ### t.string "country"
19
+ ### t.decimal "latitude"
20
+ ### t.decimal "longitude"
21
+ ### t.string "email"
22
+ ### t.string "telephone"
23
+ ### t.integer "source_id"
24
+ ### t.integer "duplicate_of_id"
25
+ ### t.integer "version"
26
+ ### end
27
+ end
28
+
29
+ def self.down
30
+ ### Venue.drop_versioned_table
31
+ end
32
+ end
@@ -0,0 +1,15 @@
1
+ class AddRruleToEvents < ActiveRecord::Migration
2
+ # NOTE: Some of this migration's contents have been commented-out because
3
+ # they used tables created for the old +acts_as_versioned+ plugin that has
4
+ # since replaced with the +papertrail+ plugin.
5
+
6
+ def self.up
7
+ add_column :events, :rrule, :string
8
+ ### add_column :event_versions, :rrule, :string
9
+ end
10
+
11
+ def self.down
12
+ remove_column :events, :rrule
13
+ ### remove_column :event_versions, :rrule
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ class CreateVersions < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :versions do |t|
4
+ t.string :item_type, :null => false
5
+ t.integer :item_id, :null => false
6
+ t.string :event, :null => false
7
+ t.string :whodunnit
8
+ t.text :object
9
+ t.datetime :created_at
10
+ end
11
+ add_index :versions, [:item_type, :item_id]
12
+ end
13
+
14
+ def self.down
15
+ remove_index :versions, [:item_type, :item_id]
16
+ drop_table :versions
17
+ end
18
+ end
@@ -0,0 +1,9 @@
1
+ class AddClosedFlagToVenues < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :venues, :closed, :boolean, :default => false
4
+ end
5
+
6
+ def self.down
7
+ remove_column :venues, :closed
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ class AddWifiFlagToVenues < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :venues, :wifi, :boolean, :default => false
4
+ end
5
+
6
+ def self.down
7
+ remove_column :venues, :wifi
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ class AddAccessNotesToVenues < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :venues, :access_notes, :text
4
+ end
5
+
6
+ def self.down
7
+ remove_column :venues, :access_notes
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ class AddEventsCountToVenues < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :venues, :events_count, :integer
4
+ end
5
+ def self.down
6
+ remove_column :venues, :events_count
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ class AddVenueDetailsToEvents < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :events, :venue_details, :text
4
+ end
5
+
6
+ def self.down
7
+ remove_column :events, :venue_details
8
+ end
9
+ end
@@ -0,0 +1,50 @@
1
+ class ActsAsTaggableOnMigration < ActiveRecord::Migration
2
+ def self.up
3
+ # We already have a Tag model with a name
4
+ # create_table :tags do |t|
5
+ # t.string :name
6
+ # end
7
+
8
+ # We already have a Taggings model with tag_id, taggable_id and taggable_type
9
+ # so we'll just add the tagger, context, and created_at columns.
10
+ add_column :taggings, :tagger_id, :integer
11
+ add_column :taggings, :tagger_type, :string
12
+ add_column :taggings, :context, :string
13
+ add_column :taggings, :created_at, :datetime
14
+
15
+ # We need to set the context on all existing tags to "tags" for them to be recognized
16
+ execute "UPDATE taggings SET context='tags' WHERE context IS NULL"
17
+
18
+ # create_table :taggings do |t|
19
+ # t.references :tag
20
+
21
+ # # You should make sure that the column created is
22
+ # # long enough to store the required class names.
23
+ # t.references :taggable, :polymorphic => true
24
+ # t.references :tagger, :polymorphic => true
25
+
26
+ # t.string :context
27
+
28
+ # t.datetime :created_at
29
+ # end
30
+
31
+ remove_index :taggings, :column => ["tag_id", "taggable_id", "taggable_type"]
32
+ add_index :taggings, :tag_id
33
+ add_index :taggings, [:taggable_id, :taggable_type, :context]
34
+ end
35
+
36
+ def self.down
37
+ remove_index :taggings, :tag_id
38
+ remove_index :taggings, :column => [:taggable_id, :taggable_type, :context]
39
+
40
+ remove_column :taggings, :tagger_id
41
+ remove_column :taggings, :tagger_type
42
+ remove_column :taggings, :context
43
+ remove_column :taggings, :created_at
44
+
45
+ add_index "taggings", ["tag_id", "taggable_id", "taggable_type"], :name => "index_taggings_on_tag_id_and_taggable_id_and_taggable_type", :unique => true
46
+
47
+ # drop_table :taggings
48
+ # drop_table :tags
49
+ end
50
+ end
@@ -0,0 +1,14 @@
1
+ class Cleanup < ActiveRecord::Migration
2
+ # Remove obsolete tables and columns that may have been left behind by other migrations.
3
+ def self.up
4
+ if ActiveRecord::Base.connection.columns('venues').map(&:name).include?("version")
5
+ remove_column :venues, :version
6
+ end
7
+
8
+ %w[event_versions venue_versions].each do |table|
9
+ if ActiveRecord::Base.connection.tables.include?(table)
10
+ drop_table table
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ class SpecifyVenuesLatitudeAndLongitudePrecision < ActiveRecord::Migration
2
+ def up
3
+ change_column :venues, :latitude, :decimal, :precision => 7, :scale => 4
4
+ change_column :venues, :longitude, :decimal, :precision => 7, :scale => 4
5
+ end
6
+
7
+ def down
8
+ change_column :venues, :latitude, :decimal
9
+ change_column :venues, :longitude, :decimal
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ class RemoveUpdates < ActiveRecord::Migration
2
+ def up
3
+ drop_table :updates
4
+ end
5
+
6
+ def down
7
+ create_table :updates do |t|
8
+ t.integer "source_id"
9
+ t.text "status"
10
+ t.timestamps
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ class AddLockedStatusToEvents < ActiveRecord::Migration
2
+ def change
3
+ add_column :events, :locked, :boolean, :default => false
4
+ end
5
+ end
Binary file
@@ -0,0 +1,102 @@
1
+ # encoding: UTF-8
2
+ # This file is auto-generated from the current state of the database. Instead
3
+ # of editing this file, please use the migrations feature of Active Record to
4
+ # incrementally modify your database, and then regenerate this schema definition.
5
+ #
6
+ # Note that this schema.rb definition is the authoritative source for your
7
+ # database schema. If you need to create the application database on another
8
+ # system, you should be using db:schema:load, not running all the migrations
9
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
11
+ #
12
+ # It's strongly recommended to check this file into your version control system.
13
+
14
+ ActiveRecord::Schema.define(:version => 20120831234448) do
15
+
16
+ create_table "events", :force => true do |t|
17
+ t.string "title"
18
+ t.text "description"
19
+ t.datetime "start_time"
20
+ t.string "url"
21
+ t.datetime "created_at"
22
+ t.datetime "updated_at"
23
+ t.integer "venue_id"
24
+ t.integer "source_id"
25
+ t.integer "duplicate_of_id"
26
+ t.datetime "end_time"
27
+ t.integer "version"
28
+ t.string "rrule"
29
+ t.text "venue_details"
30
+ end
31
+
32
+ create_table "sources", :force => true do |t|
33
+ t.string "title"
34
+ t.string "url"
35
+ t.datetime "imported_at"
36
+ t.datetime "created_at"
37
+ t.datetime "updated_at"
38
+ t.boolean "reimport"
39
+ end
40
+
41
+ create_table "taggings", :force => true do |t|
42
+ t.integer "tag_id", :null => false
43
+ t.integer "taggable_id", :null => false
44
+ t.string "taggable_type", :null => false
45
+ t.integer "tagger_id"
46
+ t.string "tagger_type"
47
+ t.string "context"
48
+ t.datetime "created_at"
49
+ end
50
+
51
+ add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id"
52
+ add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context"
53
+
54
+ create_table "tags", :force => true do |t|
55
+ t.string "name", :null => false
56
+ end
57
+
58
+ add_index "tags", ["name"], :name => "index_tags_on_name", :unique => true
59
+
60
+ create_table "updates", :force => true do |t|
61
+ t.integer "source_id"
62
+ t.text "status"
63
+ t.datetime "created_at"
64
+ t.datetime "updated_at"
65
+ end
66
+
67
+ create_table "venues", :force => true do |t|
68
+ t.string "title"
69
+ t.text "description"
70
+ t.string "address"
71
+ t.string "url"
72
+ t.datetime "created_at"
73
+ t.datetime "updated_at"
74
+ t.string "street_address"
75
+ t.string "locality"
76
+ t.string "region"
77
+ t.string "postal_code"
78
+ t.string "country"
79
+ t.decimal "latitude", :precision => 7, :scale => 4
80
+ t.decimal "longitude", :precision => 7, :scale => 4
81
+ t.string "email"
82
+ t.string "telephone"
83
+ t.integer "source_id"
84
+ t.integer "duplicate_of_id"
85
+ t.boolean "closed", :default => false
86
+ t.boolean "wifi", :default => false
87
+ t.text "access_notes"
88
+ t.integer "events_count"
89
+ end
90
+
91
+ create_table "versions", :force => true do |t|
92
+ t.string "item_type", :null => false
93
+ t.integer "item_id", :null => false
94
+ t.string "event", :null => false
95
+ t.string "whodunnit"
96
+ t.text "object"
97
+ t.datetime "created_at"
98
+ end
99
+
100
+ add_index "versions", ["item_type", "item_id"], :name => "index_versions_on_item_type_and_item_id"
101
+
102
+ end