Module: Comfy::Admin::Meetalendar::MeetupsControllerLogic

Defined in:
app/models/comfy/admin/meetalendar/meetups_controller_logic.rb

Class Method Summary collapse

Class Method Details

.authorize_meetup(request, callback_path) ⇒ Object



22
23
24
25
26
27
28
29
# File 'app/models/comfy/admin/meetalendar/meetups_controller_logic.rb', line 22

def self.authorize_meetup(request, callback_path)
  meetup_credentials = ::MEETALENDAR_CREDENTIALS_MEETUP

  redirect_url = "https://secure.meetup.com/oauth2/authorize" +
    "?client_id=#{meetup_credentials["client_id"]}" +
    "&response_type=code" +
    "&redirect_uri=#{request.protocol}#{request.host_with_port}#{callback_path.to_s}"
end

.callback(code, request, callback_path) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'app/models/comfy/admin/meetalendar/meetups_controller_logic.rb', line 31

def self.callback(code, request, callback_path)
  meetup_credentials = ::MEETALENDAR_CREDENTIALS_MEETUP

  request_uri = "https://secure.meetup.com/oauth2/access"
  request_query_hash = {"client_id": meetup_credentials["client_id"], "client_secret": meetup_credentials["client_secret"], "grant_type": "authorization_code", "redirect_uri": "#{request.protocol}#{request.host_with_port}#{callback_path.to_s}", "code": "#{code}"}

  client = HTTPClient.new
  begin
    response = JSON.parse(client.post_content(request_uri, request_query_hash))
  rescue => ex
    Rails.logger.error "Failed to authorize Meetup API. Exception in callback: #{ex.message}"
    raise ::ActiveResource::ClientError, "Failed to authorize Meetup API."
  end

  if !response.nil?
    token_store = Google::Auth::Stores::DbTokenStore.new
    token_store.store("meetup", {"auth_id": "meetup", "client_id": meetup_credentials["client_id"], "access_token": response["access_token"], "refresh_token": response["refresh_token"], "scope": "", "expiration_time_millis": response["expires_in"] * 1000}.to_json.to_s)
  end
end

.search_result(parameters, time_now) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'app/models/comfy/admin/meetalendar/meetups_controller_logic.rb', line 51

def self.search_result(parameters, time_now)
  group_params = JSON.parse(parameters.nil? ? {} : parameters)

  request_result = Comfy::Admin::Meetalendar::MeetupsCalendarSyncer.get_path_authorized("/find/groups", group_params.merge({"fields" => "last_event"}))
  groups = request_result.nil? ? {} : request_result

  groups_id_name = groups.map{|g| {id: g["id"].to_i, name: g["name"].to_s, link: g["link"].to_s} }
  group_ids = groups.map{|g| g["id"]}
  request_result = Comfy::Admin::Meetalendar::MeetupsCalendarSyncer.get_path_authorized("/find/upcoming_events", {"page": 200})
  upcoming_events = request_result.nil? ? [] : request_result["events"]

  upcoming_events_of_groups = upcoming_events.select{|e| !e["group"].nil? && group_ids.include?(e["group"]["id"])}

  grouped_upcoming_events = upcoming_events_of_groups.group_by{|e| e["group"]["id"]}
  limited_upcoming_events = Hash[grouped_upcoming_events.map{|k, v| [k, v.select{|e| Time.at(Rational(e["time"], 1000)) > time_now}.sort_by{|e| e["time"]}.take(2)]}].select{|k, v| v.any?}

  found_upcoming_grouped_events = limited_upcoming_events

  last_events = Hash[groups.group_by{|g| g["id"]}.map{|k, v| [k, v.map{|g| g["last_event"]}]}].select{|k, v| v.any?}
  found_last_grouped_events = last_events

  meetup_groups = groups.map{|g| Comfy::Admin::Meetalendar::MeetupGroup.new({"group_id": g["id"], "name": g["name"], "approved_cities": "", "group_link": g["link"]})}

  search_result = Comfy::Admin::Meetalendar::MeetupsControllerLogic::SearchResult.new(groups_id_name, found_upcoming_grouped_events, found_last_grouped_events, meetup_groups)
end