calagator 0.0.1.pre1 → 1.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (182) hide show
  1. checksums.yaml +4 -4
  2. data/{LICENSE.txt → MIT-LICENSE.txt} +0 -0
  3. data/README.md +4 -18
  4. data/Rakefile +6 -0
  5. data/app/assets/javascripts/calagator.js +1 -0
  6. data/app/assets/stylesheets/calagator/changes.scss +45 -0
  7. data/app/assets/stylesheets/calagator/errors.css +8 -0
  8. data/app/assets/stylesheets/calagator/forms.scss +148 -2
  9. data/app/assets/stylesheets/calagator/index.scss +21 -0
  10. data/app/assets/stylesheets/calagator/layout.scss +731 -0
  11. data/app/assets/stylesheets/calagator/mobile.scss +196 -0
  12. data/app/assets/stylesheets/calagator/{reset.css → reset.scss} +0 -0
  13. data/app/assets/stylesheets/calagator/typography.scss +225 -0
  14. data/app/assets/stylesheets/calagator/{common.scss → utils.scss} +0 -0
  15. data/app/assets/stylesheets/calagator/variables.scss +21 -0
  16. data/app/controllers/calagator/admin_controller.rb +1 -1
  17. data/app/controllers/calagator/application_controller.rb +3 -3
  18. data/app/controllers/calagator/events_controller.rb +3 -3
  19. data/app/controllers/calagator/site_controller.rb +1 -1
  20. data/app/controllers/calagator/sources_controller.rb +3 -3
  21. data/app/controllers/calagator/venues_controller.rb +4 -4
  22. data/app/controllers/calagator/versions_controller.rb +2 -2
  23. data/app/helpers/calagator/application_helper.rb +0 -3
  24. data/app/helpers/calagator/mapping_helper.rb +9 -8
  25. data/app/models/calagator/event.rb +2 -3
  26. data/app/models/calagator/event/ical_renderer.rb +4 -2
  27. data/app/models/calagator/event/saver.rb +2 -2
  28. data/app/models/calagator/event/search_engine/sql.rb +2 -1
  29. data/app/models/calagator/source.rb +0 -26
  30. data/app/models/calagator/source/importer.rb +1 -1
  31. data/app/models/calagator/source/parser/meetup.rb +2 -2
  32. data/app/models/calagator/venue.rb +0 -2
  33. data/app/models/calagator/venue/geocoder.rb +1 -1
  34. data/app/models/calagator/venue/search_engine/sql.rb +1 -1
  35. data/app/views/calagator/events/_subnav.html.erb +2 -2
  36. data/app/views/calagator/events/show.html.erb +2 -2
  37. data/app/views/calagator/site/_description.html.erb +6 -3
  38. data/app/views/calagator/site/_sidebar_menu.html.erb +13 -0
  39. data/app/views/calagator/site/index.html.erb +1 -0
  40. data/app/views/calagator/sources/index.html.erb +1 -1
  41. data/app/views/calagator/sources/show.html.erb +1 -1
  42. data/app/views/calagator/venues/_subnav.html.erb +1 -1
  43. data/app/views/calagator/venues/show.html.erb +1 -1
  44. data/app/views/layouts/calagator/_after_footer.html.erb +2 -0
  45. data/app/views/layouts/calagator/_content.html.erb +6 -0
  46. data/app/views/layouts/calagator/_footer.html.erb +8 -0
  47. data/app/views/layouts/calagator/_global_search.html.erb +11 -0
  48. data/app/views/layouts/calagator/_header.html.erb +20 -0
  49. data/app/views/layouts/calagator/application.html.erb +9 -64
  50. data/config/routes.rb +16 -16
  51. data/config/spring.rb +1 -0
  52. data/db/development +0 -0
  53. data/db/development.sqlite3 +0 -0
  54. data/db/migrate/20150407014752_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb +14 -0
  55. data/db/migrate/20150407014754_change_collation_for_tag_names.acts_as_taggable_on_engine.rb +9 -0
  56. data/db/schema.rb +2 -8
  57. data/db/seeds.rb +64 -8
  58. data/lib/calagator.rb +42 -2
  59. data/lib/calagator/duplicate_checking/duplicate_finder.rb +1 -1
  60. data/lib/calagator/duplicate_checking/duplicate_squasher.rb +1 -1
  61. data/lib/calagator/engine.rb +12 -22
  62. data/lib/calagator/tag_model_extensions.rb +1 -1
  63. data/lib/calagator/version.rb +1 -1
  64. data/lib/generators/calagator/install_generator.rb +17 -12
  65. data/lib/generators/calagator/templates/config/initializers/01_calagator.rb +89 -0
  66. data/lib/generators/calagator/templates/config/initializers/02_geokit.rb +106 -0
  67. data/lib/tasks/sunspot_reindex_calagator.rake +16 -3
  68. data/lib/tasks/update_counter_caches.rake +3 -3
  69. data/spec/controllers/calagator/events_controller_spec.rb +3 -3
  70. data/spec/controllers/calagator/sources_controller_spec.rb +3 -3
  71. data/spec/controllers/calagator/venues_controller_spec.rb +5 -5
  72. data/spec/dummy/Gemfile +35 -27
  73. data/spec/dummy/README.rdoc +15 -248
  74. data/spec/dummy/Rakefile +1 -2
  75. data/spec/dummy/app/assets/javascripts/application.js +5 -4
  76. data/spec/dummy/app/assets/stylesheets/application.css +6 -4
  77. data/spec/dummy/app/controllers/application_controller.rb +3 -1
  78. data/spec/dummy/app/views/layouts/application.html.erb +2 -2
  79. data/spec/dummy/bin/bundle +3 -0
  80. data/spec/dummy/bin/rails +4 -0
  81. data/spec/dummy/bin/rake +4 -0
  82. data/spec/dummy/bin/setup +29 -0
  83. data/spec/dummy/config.ru +2 -2
  84. data/spec/dummy/config/application.rb +5 -41
  85. data/spec/dummy/config/boot.rb +1 -4
  86. data/spec/dummy/config/database.yml +8 -8
  87. data/spec/dummy/config/environment.rb +3 -3
  88. data/spec/dummy/config/environments/development.rb +22 -18
  89. data/spec/dummy/config/environments/production.rb +46 -34
  90. data/spec/dummy/config/environments/test.rb +19 -14
  91. data/spec/dummy/config/initializers/01_calagator.rb +89 -0
  92. data/spec/dummy/config/initializers/02_geokit.rb +106 -0
  93. data/spec/dummy/config/initializers/assets.rb +11 -0
  94. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  95. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  96. data/spec/dummy/config/initializers/inflections.rb +6 -5
  97. data/spec/dummy/config/initializers/mime_types.rb +0 -1
  98. data/spec/dummy/config/initializers/session_store.rb +1 -6
  99. data/spec/dummy/config/initializers/wrap_parameters.rb +6 -6
  100. data/spec/dummy/config/locales/en.yml +20 -2
  101. data/spec/dummy/config/routes.rb +23 -25
  102. data/spec/dummy/config/secrets.yml +16 -77
  103. data/spec/dummy/config/sunspot.yml +23 -0
  104. data/spec/dummy/db/development.sqlite3 +0 -0
  105. data/spec/dummy/db/schema.rb +31 -30
  106. data/spec/dummy/db/seeds.rb +1 -0
  107. data/spec/dummy/log/development.log +257 -235
  108. data/spec/dummy/public/404.html +54 -13
  109. data/spec/dummy/public/422.html +54 -13
  110. data/spec/dummy/public/500.html +53 -12
  111. data/spec/dummy/public/robots.txt +2 -2
  112. data/spec/dummy/test/test_helper.rb +2 -5
  113. data/spec/factories.rb +0 -54
  114. data/spec/features/admin_auth_spec.rb +2 -2
  115. data/spec/features/admin_lock_event_spec.rb +1 -1
  116. data/spec/features/import_events_from_feed_spec.rb +1 -1
  117. data/spec/helpers/calagator/google_event_export_helper_spec.rb +8 -11
  118. data/spec/helpers/calagator/sources_helper_spec.rb +1 -2
  119. data/spec/helpers/calagator/tags_helper_spec.rb +1 -2
  120. data/spec/models/calagator/event_spec.rb +7 -7
  121. data/spec/models/calagator/source/parser_meetup_spec.rb +3 -3
  122. data/spec/models/calagator/source_spec.rb +0 -29
  123. data/spec/models/calagator/venue_spec.rb +8 -11
  124. data/spec/spec_helper.rb +3 -1
  125. data/spec/support/admin_authentication.rb +2 -0
  126. data/spec/support/assert_dom_equal.rb +26 -0
  127. data/spec/support/paper_trail.rb +7 -0
  128. data/spec/support/rspec-activemodel-mocks_patch.rb +9 -0
  129. metadata +200 -280
  130. data/app/assets/stylesheets/calagator.scss +0 -8
  131. data/app/assets/stylesheets/calagator/datepicker.scss +0 -177
  132. data/app/assets/stylesheets/calagator/theme.css +0 -0
  133. data/app/models/event/search_engine/base.rb +0 -0
  134. data/config/deploy/local.rb +0 -37
  135. data/config/deploy/lucca.rb +0 -33
  136. data/config/initializers/geokit.rb +0 -74
  137. data/config/initializers/search_engine.rb +0 -4
  138. data/config/initializers/set_default_url_host.rb +0 -5
  139. data/db/test.sqlite3 +0 -0
  140. data/lib/generators/calagator/templates/config/calagator.rb +0 -26
  141. data/lib/generators/calagator/templates/config/secrets.yml.sample +0 -83
  142. data/lib/secrets_reader.rb +0 -76
  143. data/spec/dummy/Gemfile.lock +0 -195
  144. data/spec/dummy/app/assets/images/rails.png +0 -0
  145. data/spec/dummy/config/initializers/calagator.rb +0 -26
  146. data/spec/dummy/config/initializers/secret_token.rb +0 -7
  147. data/spec/dummy/db/migrate/20150309023304_create_events.calagator.rb +0 -18
  148. data/spec/dummy/db/migrate/20150309023305_create_venues.calagator.rb +0 -18
  149. data/spec/dummy/db/migrate/20150309023306_create_sources.calagator.rb +0 -17
  150. data/spec/dummy/db/migrate/20150309023307_add_detailed_fields_to_venue.calagator.rb +0 -20
  151. data/spec/dummy/db/migrate/20150309023308_add_end_time_to_events.calagator.rb +0 -10
  152. data/spec/dummy/db/migrate/20150309023309_add_source_id_to_events.calagator.rb +0 -10
  153. data/spec/dummy/db/migrate/20150309023310_add_source_id_to_venues.calagator.rb +0 -11
  154. data/spec/dummy/db/migrate/20150309023311_add_duplicate_of_column_to_venues.calagator.rb +0 -10
  155. data/spec/dummy/db/migrate/20150309023312_add_duplicate_of_column_to_events.calagator.rb +0 -10
  156. data/spec/dummy/db/migrate/20150309023313_change_lat_long_type.calagator.rb +0 -13
  157. data/spec/dummy/db/migrate/20150309023314_add_source_reimport.calagator.rb +0 -10
  158. data/spec/dummy/db/migrate/20150309023315_change_end_time_to_duration.calagator.rb +0 -12
  159. data/spec/dummy/db/migrate/20150309023316_remove_format_type_from_source.calagator.rb +0 -10
  160. data/spec/dummy/db/migrate/20150309023317_create_updates.calagator.rb +0 -16
  161. data/spec/dummy/db/migrate/20150309023318_remove_next_update_from_source.calagator.rb +0 -10
  162. data/spec/dummy/db/migrate/20150309023319_change_duration_to_end_time.calagator.rb +0 -12
  163. data/spec/dummy/db/migrate/20150309023320_create_tags_and_taggings.calagator.rb +0 -29
  164. data/spec/dummy/db/migrate/20150309023321_create_versioned_events.calagator.rb +0 -26
  165. data/spec/dummy/db/migrate/20150309023322_create_versioned_venues.calagator.rb +0 -33
  166. data/spec/dummy/db/migrate/20150309023323_add_rrule_to_events.calagator.rb +0 -16
  167. data/spec/dummy/db/migrate/20150309023324_create_versions.calagator.rb +0 -19
  168. data/spec/dummy/db/migrate/20150309023325_add_closed_flag_to_venues.calagator.rb +0 -10
  169. data/spec/dummy/db/migrate/20150309023326_add_wifi_flag_to_venues.calagator.rb +0 -10
  170. data/spec/dummy/db/migrate/20150309023327_add_access_notes_to_venues.calagator.rb +0 -10
  171. data/spec/dummy/db/migrate/20150309023328_add_events_count_to_venues.calagator.rb +0 -9
  172. data/spec/dummy/db/migrate/20150309023329_add_venue_details_to_events.calagator.rb +0 -10
  173. data/spec/dummy/db/migrate/20150309023330_acts_as_taggable_on_migration.calagator.rb +0 -51
  174. data/spec/dummy/db/migrate/20150309023331_cleanup.calagator.rb +0 -15
  175. data/spec/dummy/db/migrate/20150309023332_specify_venues_latitude_and_longitude_precision.calagator.rb +0 -12
  176. data/spec/dummy/db/migrate/20150309023333_remove_updates.calagator.rb +0 -14
  177. data/spec/dummy/db/migrate/20150309023334_add_locked_status_to_events.calagator.rb +0 -6
  178. data/spec/dummy/db/test.sqlite3 +0 -0
  179. data/spec/dummy/doc/README_FOR_APP +0 -2
  180. data/spec/dummy/script/rails +0 -6
  181. data/spec/dummy/test/performance/browsing_test.rb +0 -12
  182. data/spec/lib/secrets_reader_spec.rb +0 -65
@@ -26,9 +26,9 @@ protected
26
26
  def self.require_admin(options = {})
27
27
  http_basic_authenticate_with(
28
28
  options.reverse_merge(
29
- :name => SECRETS.admin_username,
30
- :password => SECRETS.admin_password,
31
- :if => Proc.new { SECRETS.admin_username && SECRETS.admin_password }
29
+ :name => Calagator.admin_username,
30
+ :password => Calagator.admin_password,
31
+ :if => Proc.new { Calagator.admin_username && Calagator.admin_password }
32
32
  )
33
33
  )
34
34
  end
@@ -2,7 +2,7 @@ require "calagator/duplicate_checking/controller_actions"
2
2
 
3
3
  module Calagator
4
4
 
5
- class EventsController < ApplicationController
5
+ class EventsController < Calagator::ApplicationController
6
6
  # Provides #duplicates and #squash_many_duplicates
7
7
  include DuplicateChecking::ControllerActions
8
8
  require_admin only: [:duplicates, :squash_many_duplicates]
@@ -39,7 +39,7 @@ class EventsController < ApplicationController
39
39
  # GET /events/new
40
40
  # GET /events/new.xml
41
41
  def new
42
- @event = Event.new(params[:event])
42
+ @event = Event.new(params.permit![:event])
43
43
  end
44
44
 
45
45
  # GET /events/1/edit
@@ -60,7 +60,7 @@ class EventsController < ApplicationController
60
60
  end
61
61
 
62
62
  def create_or_update
63
- saver = Event::Saver.new(@event, params)
63
+ saver = Event::Saver.new(@event, params.permit!)
64
64
  respond_to do |format|
65
65
  if saver.save
66
66
  format.html {
@@ -1,6 +1,6 @@
1
1
  module Calagator
2
2
 
3
- class SiteController < ApplicationController
3
+ class SiteController < Calagator::ApplicationController
4
4
  # Raise exception, mostly for confirming that exception_notification works
5
5
  def omfg
6
6
  raise ArgumentError, "OMFG"
@@ -1,10 +1,10 @@
1
1
  module Calagator
2
2
 
3
- class SourcesController < ApplicationController
3
+ class SourcesController < Calagator::ApplicationController
4
4
  # POST /import
5
5
  # POST /import.xml
6
6
  def import
7
- @importer = Source::Importer.new(params[:source])
7
+ @importer = Source::Importer.new(params.permit![:source])
8
8
  respond_to do |format|
9
9
  if @importer.import
10
10
  format.html { redirect_to events_path, flash: { success: render_to_string(layout: false) } }
@@ -67,7 +67,7 @@ class SourcesController < ApplicationController
67
67
 
68
68
  def create_or_update
69
69
  respond_to do |format|
70
- if @source.update_attributes(params[:source])
70
+ if @source.update_attributes(params.permit![:source])
71
71
  format.html { redirect_to @source, notice: 'Source was successfully saved.' }
72
72
  format.xml { render xml: @source, status: :created, location: @source }
73
73
  else
@@ -2,7 +2,7 @@ require "calagator/duplicate_checking/controller_actions"
2
2
 
3
3
  module Calagator
4
4
 
5
- class VenuesController < ApplicationController
5
+ class VenuesController < Calagator::ApplicationController
6
6
  # Provides #duplicates and #squash_many_duplicates
7
7
  include DuplicateChecking::ControllerActions
8
8
  require_admin only: [:duplicates, :squash_many_duplicates]
@@ -10,7 +10,7 @@ class VenuesController < ApplicationController
10
10
  # GET /venues
11
11
  # GET /venues.xml
12
12
  def index
13
- @search = Venue::Search.new(params)
13
+ @search = Venue::Search.new(params.permit!)
14
14
  @venues = @search.venues
15
15
 
16
16
  respond_to do |format|
@@ -42,7 +42,7 @@ class VenuesController < ApplicationController
42
42
  # GET /venues/1
43
43
  # GET /venues/1.xml
44
44
  def show
45
- @venue = Venue.find(params[:id], include: :source)
45
+ @venue = Venue.find(params[:id])
46
46
 
47
47
  return redirect_to @venue.duplicate_of if @venue.duplicate?
48
48
 
@@ -85,7 +85,7 @@ class VenuesController < ApplicationController
85
85
  end
86
86
 
87
87
  def create_or_update
88
- @venue.attributes = params[:venue]
88
+ @venue.attributes = params.permit![:venue] || {}
89
89
  respond_to do |format|
90
90
  if !evil_robot? && @venue.save
91
91
  format.html { redirect_to from_event || @venue, flash: { success: "Venue was successfully saved." } }
@@ -1,8 +1,8 @@
1
1
  module Calagator
2
2
 
3
- class VersionsController < ApplicationController
3
+ class VersionsController < Calagator::ApplicationController
4
4
  def edit
5
- @version = Version.find(params[:id])
5
+ @version = PaperTrail::Version.find(params[:id])
6
6
  @record = @version.next.try(:reify) || @version.item || @version.reify
7
7
 
8
8
  singular = @record.class.name.singularize.underscore.split("/").last
@@ -116,9 +116,6 @@ module ApplicationHelper
116
116
  ].compact.join(" ")
117
117
  end
118
118
 
119
- # String name of the mobile preference cookie's name, e.g. "calagator_mobile".
120
- MOBILE_COOKIE_NAME = "#{SECRETS.session_name}_mobile"
121
-
122
119
  # CGI escape a string-like object. The issue is that CGI::escape fails if used on a RailsXss SafeBuffer: https://github.com/rails/rails_xss/issues/8
123
120
  def cgi_escape(data)
124
121
  return CGI::escape(data.to_str)
@@ -2,15 +2,15 @@ module Calagator
2
2
 
3
3
  module MappingHelper
4
4
  def map_provider
5
- (SECRETS.mapping && SECRETS.mapping["provider"]) || 'stamen'
5
+ Calagator.mapping_provider || 'stamen'
6
6
  end
7
7
 
8
8
  def map_tiles
9
- (SECRETS.mapping && SECRETS.mapping["tiles"]) || 'terrain'
9
+ Calagator.mapping_tiles || 'terrain'
10
10
  end
11
11
 
12
12
  def leaflet_js
13
- Rails.env.production? ? ["https://d591zijq8zntj.cloudfront.net/leaflet-0.6.4/leaflet.js"] : ["leaflet"]
13
+ Rails.env.production? ? ["http://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.3/leaflet.js"] : ["leaflet"]
14
14
  end
15
15
 
16
16
  def map_provider_dependencies
@@ -19,10 +19,10 @@ module MappingHelper
19
19
  "mapbox" => ["https://api.tiles.mapbox.com/mapbox.js/v1.3.1/mapbox.standalone.js"],
20
20
  "esri" => ["http://cdn-geoweb.s3.amazonaws.com/esri-leaflet/0.0.1-beta.5/esri-leaflet.js"],
21
21
  "google" => [
22
- "https://maps.googleapis.com/maps/api/js?key=#{SECRETS.mapping && SECRETS.mapping["google_maps_api_key"]}&sensor=false",
23
- "leaflet_google_layer",
24
- ],
25
- }[map_provider]
22
+ "https://maps.googleapis.com/maps/api/js?key=#{Calagator.mapping_google_maps_api_key}&sensor=false",
23
+ "leaflet_google_layer"
24
+ ]
25
+ }[map_provider] || []
26
26
  end
27
27
 
28
28
  def mapping_js_includes
@@ -58,7 +58,8 @@ module MappingHelper
58
58
 
59
59
  var venueIcon = L.AwesomeMarkers.icon({
60
60
  icon: 'star',
61
- color: '#{SECRETS.mapping['marker_color']}'
61
+ prefix: 'fa',
62
+ markerColor: '#{Calagator.mapping_marker_color}'
62
63
  })
63
64
 
64
65
  var markers = [#{markers.join(", ")}];
@@ -36,8 +36,6 @@ module Calagator
36
36
  class Event < ActiveRecord::Base
37
37
  self.table_name = "events"
38
38
 
39
- attr_protected
40
-
41
39
  has_paper_trail
42
40
  acts_as_taggable
43
41
 
@@ -100,7 +98,7 @@ class Event < ActiveRecord::Base
100
98
  when 'name'
101
99
  order('lower(events.title), start_time')
102
100
  when 'venue'
103
- includes(:venue).order('lower(venues.title), start_time')
101
+ includes(:venue).order('lower(venues.title), start_time').references(:venues)
104
102
  else # when 'date', nil
105
103
  order('start_time')
106
104
  end
@@ -144,6 +142,7 @@ class Event < ActiveRecord::Base
144
142
 
145
143
  def time_for(value)
146
144
  value = value.join(' ') if value.kind_of?(Array)
145
+ value = value.to_s if value.kind_of?(Date)
147
146
  value = Time.zone.parse(value) if value.kind_of?(String) # this will throw ArgumentError if invalid
148
147
  value
149
148
  end
@@ -10,6 +10,8 @@
10
10
  # Example:
11
11
  # ics1 = Event::IcalRenderer.render(myevent)
12
12
  # ics2 = Event::IcalRenderer.render(myevents, url_helper: -> (event) { event_url(event) })
13
+ require "loofah/helpers"
14
+
13
15
  module Calagator
14
16
 
15
17
  class Event < ActiveRecord::Base
@@ -128,10 +130,10 @@ class Event < ActiveRecord::Base
128
130
  def sequence
129
131
  # Set the iCalendar SEQUENCE, which should be increased each time an
130
132
  # event is updated. If an admin needs to forcefully increment the
131
- # SEQUENCE for all events, they can edit the "config/secrets.yml"
133
+ # SEQUENCE for all events, they can edit the "config/initializers/calagator.rb"
132
134
  # file and set the "icalendar_sequence_offset" value to something
133
135
  # greater than 0.
134
- (SECRETS.icalendar_sequence_offset || 0) + event.versions.count
136
+ (Calagator.icalendar_sequence_offset || 0) + event.versions.count
135
137
  end
136
138
 
137
139
  def dtstamp
@@ -3,7 +3,7 @@ module Calagator
3
3
  class Event < ActiveRecord::Base
4
4
  class Saver < Struct.new(:event, :params, :failure)
5
5
  def save
6
- event.attributes = params[:event]
6
+ event.attributes = params[:event] || {}
7
7
  event.venue = find_or_initialize_venue
8
8
  event.start_time = [ params[:start_date], params[:start_time] ]
9
9
  event.end_time = [ params[:end_date], params[:end_time] ]
@@ -23,7 +23,7 @@ class Event < ActiveRecord::Base
23
23
  if params[:event] && params[:event][:venue_id].present?
24
24
  Venue.find(params[:event][:venue_id]).progenitor
25
25
  else
26
- Venue.find_or_initialize_by_title(params[:venue_name]).progenitor
26
+ Venue.find_or_initialize_by(title: params[:venue_name]).progenitor
27
27
  end
28
28
  end
29
29
 
@@ -50,11 +50,12 @@ class Event < ActiveRecord::Base
50
50
  def base
51
51
  column_names = Event.column_names.map { |name| "events.#{name}"}
52
52
  column_names << "venues.id"
53
- @scope = Event.scoped
53
+ @scope = Event.all
54
54
  .group(column_names)
55
55
  .joins("LEFT OUTER JOIN taggings on taggings.taggable_id = events.id AND taggings.taggable_type LIKE '%Event'")
56
56
  .joins("LEFT OUTER JOIN tags ON tags.id = taggings.tag_id")
57
57
  .includes(:venue)
58
+ .references(:venues, :tags)
58
59
  self
59
60
  end
60
61
 
@@ -25,8 +25,6 @@ module Calagator
25
25
  class Source < ActiveRecord::Base
26
26
  self.table_name = "sources"
27
27
 
28
- attr_protected
29
-
30
28
  validate :assert_url
31
29
 
32
30
  has_many :events, :dependent => :destroy
@@ -39,30 +37,6 @@ class Source < ActiveRecord::Base
39
37
  xss_foliate
40
38
  include DecodeHtmlEntitiesHack
41
39
 
42
- # Return a newly-created or existing Source record matching the given
43
- # attributes. The +attrs+ hash is the same format as used when calling
44
- # Source::new.
45
- #
46
- # This method is intended to supplement the import process by providing a
47
- # single Source record for each unique URL, thus when multiple people import
48
- # the same URL, there will only be one Source record.
49
- #
50
- # The :reimport flag is given special handling: If the original Source record
51
- # has this set to true, it will never be set back to false by this method.
52
- # The intent behind this is that if one person wants this Source reimported,
53
- # the reimporting shouldn't be disabled by someone else manually importing it
54
- # without setting the reimport flag. If someone really wants to turn off
55
- # reimporting, they should edit the source.
56
- def self.find_or_create_from(attrs={})
57
- return new(attrs) unless attrs[:url]
58
-
59
- source = find_or_create_by_url(attrs[:url])
60
- source.reimport = true if attrs.delete(:reimport)
61
- source.attributes = attrs
62
- source.save if source.changed?
63
- source
64
- end
65
-
66
40
  # Create events for this source. Returns the events created. URL must be set
67
41
  # for this source for this to work.
68
42
  def create_events!(opts={})
@@ -3,7 +3,7 @@ module Calagator
3
3
  class Source < ActiveRecord::Base
4
4
  class Importer < Struct.new(:source, :events)
5
5
  def initialize params
6
- self.source = Source.find_or_create_from(params)
6
+ self.source = Source.find_or_create_by(params)
7
7
  end
8
8
 
9
9
  def import
@@ -5,7 +5,7 @@ class Source::Parser::Meetup < Source::Parser
5
5
  self.url_pattern = %r{^http://(?:www\.)?meetup\.com/[^/]+/events/([^/]+)/?}
6
6
 
7
7
  def to_events
8
- return fallback unless SECRETS.meetup_api_key.present?
8
+ return fallback unless Calagator.meetup_api_key.present?
9
9
  return unless data = get_data
10
10
  event = Event.new({
11
11
  source: opts[:source],
@@ -36,7 +36,7 @@ class Source::Parser::Meetup < Source::Parser
36
36
  [
37
37
  "https://api.meetup.com/2/event/#{event_id}",
38
38
  {
39
- key: SECRETS.meetup_api_key,
39
+ key: Calagator.meetup_api_key,
40
40
  sign: 'true'
41
41
  }
42
42
  ]
@@ -39,8 +39,6 @@ module Calagator
39
39
  class Venue < ActiveRecord::Base
40
40
  self.table_name = "venues"
41
41
 
42
- attr_protected
43
-
44
42
  include StripWhitespace
45
43
 
46
44
  has_paper_trail
@@ -14,7 +14,7 @@ class Venue < ActiveRecord::Base
14
14
  def geocode
15
15
  return true unless should_geocode?
16
16
 
17
- self.geo = GeoKit::Geocoders::MultiGeocoder.geocode(venue.geocode_address)
17
+ self.geo = Geokit::Geocoders::MultiGeocoder.geocode(venue.geocode_address)
18
18
  if geo.success
19
19
  venue.latitude = geo.lat
20
20
  venue.longitude = geo.lng
@@ -17,7 +17,7 @@ class Venue < ActiveRecord::Base
17
17
 
18
18
  def base
19
19
  column_names = Venue.column_names.map { |name| "venues.#{name}" }
20
- @scope = Venue.scoped
20
+ @scope = Venue.all
21
21
  .group(column_names)
22
22
  .joins("LEFT OUTER JOIN taggings on taggings.taggable_id = venues.id AND taggings.taggable_type LIKE '%Venue'")
23
23
  .joins("LEFT OUTER JOIN tags ON tags.id = taggings.tag_id")
@@ -1,12 +1,12 @@
1
1
  <div id="events_subnav" class="subnav">
2
2
  <ul class="clearfix">
3
- <li><%= link_to 'Browse Events', root_url,
3
+ <li><%= link_to 'Browse events', root_url,
4
4
  :class => subnav_class_for("site", "index") %>
5
5
  </li>
6
6
  <li><%= link_to 'Add an event', new_event_url,
7
7
  :class => subnav_class_for("events", "new") %>
8
8
  </li>
9
- <li><%= link_to 'Import event(s)', new_source_url,
9
+ <li><%= link_to 'Import events', new_source_url,
10
10
  :class => subnav_class_for("sources", "new") %>
11
11
  </li>
12
12
  </ul>
@@ -43,7 +43,7 @@
43
43
  <li><%= link_to "Google Calendar", google_event_export_link(@event), :id => "google_calendar_export", :target => "_blank" %></li>
44
44
  <li><%= link_to 'iCalendar file', "#{event_url(@event)}.ics" %></li>
45
45
  <li>
46
- <%= link_to_function 'hCalendar markup', '$("#hcal_field").toggle()' %>
46
+ <a href="#" onclick="$('#hcal_field').toggle(); return false">hCalendar markup</a>
47
47
  <div id="hcal_field" style="display: none;">
48
48
  <%= text_area_tag 'hCalendar',
49
49
  h(
@@ -67,7 +67,7 @@
67
67
  <%= link_to "edit", edit_event_url(@event) %>,
68
68
  <%= link_to "clone", clone_event_url(@event) %>,
69
69
  or
70
- <%= link_to "delete", event_url(@event), :method => :delete, :confirm => "Are you sure?" %>
70
+ <%= link_to "delete", event_url(@event), method: :delete, data: { confirm: "Are you sure?" } %>
71
71
  this event.
72
72
  </p>
73
73
  <% end %>
@@ -1,3 +1,6 @@
1
- <p class="replace-this-text">
2
- Describe your site in: <code>themes/YOUR_THEME/views/site/_description.html.erb</code>
3
- </p>
1
+ <div class='replace-this-text'>
2
+ <h2>Hi there.</h2>
3
+ <p>
4
+ Describe your site in: <code>app/views/calagator/site/_description.html.erb</code>
5
+ </p>
6
+ </div>
@@ -0,0 +1,13 @@
1
+ <h4>Get Started</h4>
2
+ <ul>
3
+ <li><%= link_to "Find local events", about_url(anchor: "find_local_events") %></li>
4
+ <li><%= link_to "Share local events", about_url(anchor: "share_local_events") %></li>
5
+ <li><%= link_to "Get involved", about_url(anchor: "get_involved") %></li>
6
+ <li><%= link_to "Find out about us", about_url %></li>
7
+ </ul>
8
+
9
+ <h4>Subscribe To</h4>
10
+ <ul>
11
+ <li><%= link_to "iCalendar feed", icalendar_feed_link %></li>
12
+ <li><%= link_to "Atom feed", atom_feed_link %></li>
13
+ </ul>
@@ -5,6 +5,7 @@
5
5
  <div id="homepage_sidebar">
6
6
  <div id="project_description">
7
7
  <%= render :partial => "description" %>
8
+ <%= render :partial => "sidebar_menu" %>
8
9
  </div>
9
10
 
10
11
  <% if @overview.tags.present? %>
@@ -10,7 +10,7 @@
10
10
  <tr class="<%= cycle 'odd', 'even' %>">
11
11
  <td>
12
12
  <%= link_to 'Show', source %> |
13
- <%= link_to 'Destroy', source, :confirm => 'Are you sure?', :method => :delete %>
13
+ <%= link_to 'Destroy', source, method: :delete, data: {confirm: 'Are you sure?' } %>
14
14
  </td>
15
15
  <td><%= source_url_link source %></td>
16
16
  </tr>
@@ -13,4 +13,4 @@
13
13
  </p>
14
14
 
15
15
  <%= link_to 'Back', sources_path %> |
16
- <%= link_to 'Destroy', @source, :confirm => 'Are you sure?', :method => :delete %>
16
+ <%= link_to 'Destroy', @source, method: :delete, data: { confirm: 'Are you sure?' } %>
@@ -1,6 +1,6 @@
1
1
  <div id="venues_subnav" class="subnav">
2
2
  <ul class="clearfix">
3
- <li><%= link_to 'Browse venues', venues_url,
3
+ <li><%= link_to 'Browse venues', venues_url,
4
4
  :class => subnav_class_for("venues", "index") %>
5
5
  </li>
6
6
  <li><%= link_to 'Add a venue', new_venue_url,