diff --git a/Gemfile.lock b/Gemfile.lock index 6ba7f3484..7c12a7e14 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -86,7 +86,7 @@ GEM railties (>= 3.0.0) faker (1.1.2) i18n (~> 0.5) - faraday (0.8.6) + faraday (0.8.7) multipart-post (~> 1.1) faye-websocket (0.4.7) eventmachine (>= 0.12.0) @@ -108,7 +108,7 @@ GEM execjs (>= 1.2.9) sprockets (>= 2.0.3) tilt - hashie (1.2.0) + hashie (2.0.5) hike (1.2.3) http_parser.rb (0.5.3) httpauth (0.2.0) @@ -129,8 +129,8 @@ GEM jquery-rails railties (>= 3.1.0) json (1.7.7) - jwt (0.1.5) - multi_json (>= 1.0) + jwt (0.1.8) + multi_json (>= 1.5) launchy (2.2.0) addressable (~> 2.3) listen (0.7.3) @@ -151,10 +151,10 @@ GEM jwt (~> 0.1.4) multi_json (~> 1.0) rack (~> 1.2) - omniauth (1.1.3) - hashie (~> 1.2) + omniauth (1.1.4) + hashie (>= 1.2, < 3) rack - omniauth-meetup (0.0.6) + omniauth-meetup (0.0.7) omniauth (~> 1.0) omniauth-oauth2 (~> 1.0) omniauth-oauth2 (1.1.1) diff --git a/README.markdown b/README.markdown index 5a4c9651b..e65db2721 100644 --- a/README.markdown +++ b/README.markdown @@ -96,7 +96,7 @@ PORT=3000 With the `.env` file in place, simply run `foreman start` in your Bridge Troll directory instead of starting with `rails server`. #### Historical Meetup Importing -To import historical data from the SF Ruby Meetup group, use the rake task `rake meetup:import`. This requires you set up a MEETUP_API_KEY in your local environment, which you can find on Meetup at http://www.meetup.com/meetup_api/key/. +To import historical data from Meetup, use the rake task `rake meetup:import`. This requires you set up a MEETUP_API_KEY in your local environment, which you can find on Meetup at http://www.meetup.com/meetup_api/key/. #### Meetup OAuth To test authenticating with Meetup using your localhost server, you need to [register a new OAuth Consumer at Meetup](http://www.meetup.com/meetup_api/oauth_consumers/). diff --git a/app/models/event.rb b/app/models/event.rb index 1de5df971..1bcb56c0f 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -1,3 +1,5 @@ +require 'meetups' + class Event < ActiveRecord::Base after_initialize :set_defaults after_save :reorder_waitlist! @@ -46,6 +48,13 @@ def historical? meetup_volunteer_event_id || meetup_student_event_id end + def meetup_url meetup_event_id + return nil unless historical? + + meetup_group_url = MeetupEventInfo.url_for_event(meetup_event_id) + "http://#{meetup_group_url}/events/#{meetup_event_id}/" + end + def at_limit? if student_rsvp_limit student_rsvps.count >= student_rsvp_limit diff --git a/app/services/meetup_importer.rb b/app/services/meetup_importer.rb index 9bdfea045..72c6b8833 100644 --- a/app/services/meetup_importer.rb +++ b/app/services/meetup_importer.rb @@ -49,11 +49,16 @@ def assert_valid_response url, response_json return false end - def import + def all_meetup_events + MEETUP_EVENTS.values.flatten + end + + def import group = nil return unless assert_key_exists - MEETUP_EVENTS.each_with_index do |event_data, index| - puts "Importing event #{index+1} of #{MEETUP_EVENTS.length} (students: #{event_data[:student_event_id]}, volunteers: #{event_data[:volunteer_event_id]})" + events = group ? MEETUP_EVENTS[group] : all_meetup_events + events.each_with_index do |event_data, index| + puts "Importing event #{index+1} of #{events.length} (students: #{event_data[:student_event_id]}, volunteers: #{event_data[:volunteer_event_id]})" import_student_and_volunteer_event(event_data) end end @@ -61,7 +66,7 @@ def import def import_single student_event_id return unless assert_key_exists - event_data = MEETUP_EVENTS.select { |event| event[:student_event_id] == student_event_id.to_i }.first + event_data = all_meetup_events.find { |event| event[:student_event_id] == student_event_id.to_i } raise "No event data found for #{student_event_id}" unless event_data.present? puts "Importing event (students: #{event_data[:student_event_id]}, volunteers: #{event_data[:volunteer_event_id]})" @@ -143,11 +148,11 @@ def keep_rsvp?(rsvp, role) end end - def dump_events + def dump_events group = :sf start_milis = DateTime.parse('2009-06-01').to_i * 1000 - puts "Fetching first set of results..." + puts "Fetching first set of results for #{group}..." event_jsons = get_api_response_for('/2/events', { - group_id: 134063, + group_id: MEETUP_GROUP_IDS[group], time: "#{start_milis},", status: 'past' })['results'] diff --git a/app/services/meetups.rb b/app/services/meetups.rb index 2dd89d96a..d1f9d85d5 100644 --- a/app/services/meetups.rb +++ b/app/services/meetups.rb @@ -1,208 +1,249 @@ # encoding: UTF-8 -MEETUP_EVENTS = [ - { - name: 'Ruby on Rails Outreach Workshop', - volunteer_event_id: 10527868, - student_event_id: 10377288 - }, - { - name: 'Ruby on Rails Outreach Workshop Installfest', - volunteer_event_id: 10826791, - student_event_id: 10804417 - }, - { - name: 'Ruby on Rails Outreach Workshop Workshop', - volunteer_event_id: 10827608, - student_event_id: 10804438 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 11307647, - student_event_id: 11298801 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 12605400, - student_event_id: 12605445 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 13311831, - student_event_id: 13358016 - }, - #{ - # name: 'Ruby on Rails Outreach Workshop for Women', - # volunteer_event_id: , - # student_event_id: 14701678 - #}, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 14835957, - student_event_id: 14836042 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 15493534, - student_event_id: 15493602 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 16001929, - student_event_id: 16004702 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 16002033, - student_event_id: 16002166 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 16605173, - student_event_id: 16605044 - }, - # crazy eventbrite event - #{ - # name: 'Ruby on Rails Outreach Workshop for Women', - # volunteer_event_id: 17132464, - # student_event_id: - #}, - # spanish language workshop - no student - #{ - # name: 'RailsBridge Taller en Español Reunión de Voluntarios', - # volunteer_event_id: 17514882, - # student_event_id: - #}, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 17398873, - student_event_id: 17398633 - }, - { - name: 'RailsBridge Taller en Español Reunión de Voluntarios', - volunteer_event_id: 26110471, - student_event_id: 24061891 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 28060961, - student_event_id: 28059391 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 29442521, - student_event_id: 29387411 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 33543532, - student_event_id: 33540222 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 39213292, - student_event_id: 39212752 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 40498612, - student_event_id: 40498202 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 47101662, - student_event_id: 47101182 - }, - # first front end workshop - students + vols registered together - #{ - # name: 'Ruby on Rails Outreach Workshop for Women', - # volunteer_event_id: , - # student_event_id: 52502132 - #}, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 55424432, - student_event_id: 55417492 - }, - { - name: 'RailsBridge Outreach for Women Workshop: Learn the Front End!', - volunteer_event_id: 58304492, - student_event_id: 58297582 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 60258512, - student_event_id: 60258772 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 62909402, - student_event_id: 62910382 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 67302992, - student_event_id: 67298252 - }, - { - name: 'San Mateo RailsBridge Workshop for Women', - volunteer_event_id: 69755072, - student_event_id: 69860482 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 70892652, - student_event_id: 70895602 - }, - { - name: 'Ruby for Beginners', - volunteer_event_id: 78272032, - student_event_id: 78271272 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 83965572, - student_event_id: 83962272 - }, - # bad description, they copied the 'ruby for beginners' one - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 84256812, - student_event_id: 84256362 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 87955632, - student_event_id: 87954222 - }, - { - name: 'RailsBridge Workshop for Women ft. new intermediate Rails curriculum', - volunteer_event_id: 90076102, - student_event_id: 90071112 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 94140732, - student_event_id: 94140352 - }, - { - name: 'RailsBridge Outreach for Women Workshop: Learn the Front End!', - volunteer_event_id: 97768552, - student_event_id: 97765412 - }, - { - name: 'Intermediate RailsBridge Workshop for Women', - volunteer_event_id: 95925742, - student_event_id: 95923212 - }, - { - name: 'Ruby on Rails Outreach Workshop for Women', - volunteer_event_id: 99758052, - student_event_id: 99743792 - }, - { - name: 'RailsBridge Workshop w Black Founders Beginner and Intermediate Levels', - volunteer_event_id: 106082842, - student_event_id: 104829002 - } +module MeetupEventInfo + module_function + + def url_for_event meetup_event_id + MEETUP_EVENTS.each do |group, events| + if events.find { |event| [event[:student_event_id], event[:volunteer_event_id]].include?(meetup_event_id) } + return MEETUP_GROUP_URLS[group] + end + end + return nil + end +end + +MEETUP_GROUP_URLS = { + sf: 'www.sfruby.info', + sv: 'www.meetup.com/silicon-valley-ruby' +} + +MEETUP_GROUP_IDS = { + sf: 134063, + sv: 437842 +} + +MEETUP_EVENTS = {} + +MEETUP_EVENTS[:sf] = [ + { + name: 'Ruby on Rails Outreach Workshop', + volunteer_event_id: 10527868, + student_event_id: 10377288 + }, + { + name: 'Ruby on Rails Outreach Workshop Installfest', + volunteer_event_id: 10826791, + student_event_id: 10804417 + }, + { + name: 'Ruby on Rails Outreach Workshop Workshop', + volunteer_event_id: 10827608, + student_event_id: 10804438 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 11307647, + student_event_id: 11298801 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 12605400, + student_event_id: 12605445 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 13311831, + student_event_id: 13358016 + }, + #{ + # name: 'Ruby on Rails Outreach Workshop for Women', + # volunteer_event_id: , + # student_event_id: 14701678 + #}, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 14835957, + student_event_id: 14836042 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 15493534, + student_event_id: 15493602 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 16001929, + student_event_id: 16004702 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 16002033, + student_event_id: 16002166 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 16605173, + student_event_id: 16605044 + }, + # crazy eventbrite event + #{ + # name: 'Ruby on Rails Outreach Workshop for Women', + # volunteer_event_id: 17132464, + # student_event_id: + #}, + # spanish language workshop - no student + #{ + # name: 'RailsBridge Taller en Español Reunión de Voluntarios', + # volunteer_event_id: 17514882, + # student_event_id: + #}, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 17398873, + student_event_id: 17398633 + }, + { + name: 'RailsBridge Taller en Español Reunión de Voluntarios', + volunteer_event_id: 26110471, + student_event_id: 24061891 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 28060961, + student_event_id: 28059391 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 29442521, + student_event_id: 29387411 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 33543532, + student_event_id: 33540222 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 39213292, + student_event_id: 39212752 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 40498612, + student_event_id: 40498202 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 47101662, + student_event_id: 47101182 + }, + # first front end workshop - students + vols registered together + #{ + # name: 'Ruby on Rails Outreach Workshop for Women', + # volunteer_event_id: , + # student_event_id: 52502132 + #}, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 55424432, + student_event_id: 55417492 + }, + { + name: 'RailsBridge Outreach for Women Workshop: Learn the Front End!', + volunteer_event_id: 58304492, + student_event_id: 58297582 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 60258512, + student_event_id: 60258772 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 62909402, + student_event_id: 62910382 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 67302992, + student_event_id: 67298252 + }, + { + name: 'San Mateo RailsBridge Workshop for Women', + volunteer_event_id: 69755072, + student_event_id: 69860482 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 70892652, + student_event_id: 70895602 + }, + { + name: 'Ruby for Beginners', + volunteer_event_id: 78272032, + student_event_id: 78271272 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 83965572, + student_event_id: 83962272 + }, + # bad description, they copied the 'ruby for beginners' one + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 84256812, + student_event_id: 84256362 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 87955632, + student_event_id: 87954222 + }, + { + name: 'RailsBridge Workshop for Women ft. new intermediate Rails curriculum', + volunteer_event_id: 90076102, + student_event_id: 90071112 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 94140732, + student_event_id: 94140352 + }, + { + name: 'RailsBridge Outreach for Women Workshop: Learn the Front End!', + volunteer_event_id: 97768552, + student_event_id: 97765412 + }, + { + name: 'Intermediate RailsBridge Workshop for Women', + volunteer_event_id: 95925742, + student_event_id: 95923212 + }, + { + name: 'Ruby on Rails Outreach Workshop for Women', + volunteer_event_id: 99758052, + student_event_id: 99743792 + }, + { + name: 'RailsBridge Workshop w Black Founders Beginner and Intermediate Levels', + volunteer_event_id: 106082842, + student_event_id: 104829002 + } ] + +MEETUP_EVENTS[:sv] = [ + { + name: "RailsBridge at Outright", + student_event_id: 106648522, + volunteer_event_id: 106653212 + }, +# second Outright workshop occurred here, but had checkins on bridgetroll proper (http://www.bridgetroll.org/events/39) + +# TODO: uncomment and import this google workshop sometime after it occurs (2013-07-12) +#{ +# name: "RailsBridge Ruby on Rails Workshop for Women", +# student_event_id: 120215942, +# volunteer_event_id: 120218002 +#}, +] \ No newline at end of file diff --git a/app/views/devise/mailer/confirmation_instructions.html.erb b/app/views/devise/mailer/confirmation_instructions.html.erb index a6783fd62..4f5b72d9e 100644 --- a/app/views/devise/mailer/confirmation_instructions.html.erb +++ b/app/views/devise/mailer/confirmation_instructions.html.erb @@ -10,7 +10,7 @@

- P.S. Once you're confirmed, go to the Account page to link to your SF Ruby Meetup account (if you have one). + P.S. Once you're confirmed, go to the Account page to link to your Meetup account (if you have one). This will import your RailsBridge attendance history.

\ No newline at end of file diff --git a/app/views/devise/registrations/edit.html.erb b/app/views/devise/registrations/edit.html.erb index f42590cce..8c3bad1f5 100644 --- a/app/views/devise/registrations/edit.html.erb +++ b/app/views/devise/registrations/edit.html.erb @@ -49,7 +49,7 @@ <%= label_tag :meetup_id, 'Associated Meetup Account' %> <% if resource.meetup_id %> Currently associated - with <%= link_to "Meetup user #{resource.meetup_id}.", "https://www.meetup.com/members/#{resource.meetup_id}/" %>

+ with <%= link_to "Meetup user #{resource.meetup_id}.", "http://www.meetup.com/members/#{resource.meetup_id}/" %>

<% else %>

You haven't connected your Meetup.com account yet! :(

Connect your Meetup.com account to import information about past workshops you have attended.

diff --git a/app/views/events/_event.html.erb b/app/views/events/_event.html.erb index 946992f72..41dc1f85e 100644 --- a/app/views/events/_event.html.erb +++ b/app/views/events/_event.html.erb @@ -1,10 +1,10 @@ <%= link_to event.title, event %> <% if event.meetup_student_event_id %> - <%= link_to "[S]", "http://www.sfruby.info/events/#{event.meetup_student_event_id}/", class: 'meetup-link' %> + <%= link_to "[S]", event.meetup_url(event.meetup_student_event_id), class: 'meetup-link' %> <% end %> <% if event.meetup_volunteer_event_id %> - <%= link_to "[V]", "http://www.sfruby.info/events/#{event.meetup_volunteer_event_id}/", class: 'meetup-link' %> + <%= link_to "[V]", event.meetup_url(event.meetup_volunteer_event_id), class: 'meetup-link' %> <% end %> diff --git a/app/views/shared/_rsvps.html.erb b/app/views/shared/_rsvps.html.erb index 94e9cbef5..eeec52523 100644 --- a/app/views/shared/_rsvps.html.erb +++ b/app/views/shared/_rsvps.html.erb @@ -14,10 +14,10 @@ <%= link_to event.title, event %> <% if event.meetup_student_event_id %> - <%= link_to "[Student Meetup]", "http://www.sfruby.info/events/#{event.meetup_student_event_id}/", class: 'meetup-link' %> + <%= link_to "[S]", event.meetup_url(event.meetup_student_event_id), class: 'meetup-link' %> <% end %> <% if event.meetup_volunteer_event_id %> - <%= link_to "[Volunteer Meetup]", "http://www.sfruby.info/events/#{event.meetup_volunteer_event_id}/", class: 'meetup-link' %> + <%= link_to "[V]", event.meetup_url(event.meetup_volunteer_event_id), class: 'meetup-link' %> <% end %> <%= formatted_session_date(event.event_sessions.first) %> diff --git a/app/views/users/_meetup_prompt.html.erb b/app/views/users/_meetup_prompt.html.erb index b67fd1e99..158efb11b 100644 --- a/app/views/users/_meetup_prompt.html.erb +++ b/app/views/users/_meetup_prompt.html.erb @@ -2,7 +2,7 @@ <% if meetup_prompt %>
<%= button_to '×'.html_safe, meetup_prompt.path, remote: true, method: :delete, class: 'close', data: {dismiss: 'alert'} %> - Connect your SF Ruby Meetup account to import information about past SF workshops you have attended. + Connect your Meetup account to import information about past workshops you have attended. <%= link_to 'Connect to Meetup.com', "/auth/meetup", class: 'btn' %>
<% end %> \ No newline at end of file diff --git a/app/views/users/index.html.erb b/app/views/users/index.html.erb index 760032df3..a6e89d8ed 100644 --- a/app/views/users/index.html.erb +++ b/app/views/users/index.html.erb @@ -15,7 +15,7 @@ <% @users.each do |user| %> <%= link_to user.full_name, user.profile_path %> - <% if user.meetup_id %><%= link_to user.meetup_id, "http://www.sfruby.info/members/#{user.meetup_id}/" %><% end %> + <% if user.meetup_id %><%= link_to user.meetup_id, "http://www.meetup.com/members/#{user.meetup_id}/" %><% end %> <% attendance = @attendances[user.class.name.to_sym][user.id] %> <%= attendance[Role::STUDENT.id] %> <%= attendance[Role::VOLUNTEER.id] %> diff --git a/lib/tasks/meetup_import.rake b/lib/tasks/meetup_import.rake index 42dd6436c..9505bd9b6 100644 --- a/lib/tasks/meetup_import.rake +++ b/lib/tasks/meetup_import.rake @@ -1,7 +1,7 @@ namespace :meetup do desc "Import things from meetup.com" - task :import => :environment do - MeetupImporter.new.import + task :import, [:group] => :environment do |t, args| + MeetupImporter.new.import(args[:group] ? args[:group].to_sym : nil) end desc "Import a single event (by student id) from meetup.com" @@ -10,7 +10,7 @@ namespace :meetup do end desc "Dump json for all the events" - task :dump_events => :environment do - MeetupImporter.new.dump_events + task :dump_events, [:group] => :environment do |t, args| + MeetupImporter.new.dump_events(args[:group] ? args[:group].to_sym : :sf) end end \ No newline at end of file