Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class User < ApplicationRecord
- has_one: :calendar
- devise :database_authenticatable, :registerable,
- :recoverable, :rememberable, :trackable, :validatable,
- :omniauthable, :omniauth_providers => [:google_oauth2]
- def self.from_omniauth(access_token)
- data = access_token.info
- user = User.where(:email => data["email"]).first
- unless user
- password = Devise.friendly_token[0,20]
- user = User.create(name: data["name"], email: data["email"],
- password: password, password_confirmation: password
- )
- end
- user
- end
- def self.find_for_google_oauth2(oauth, signed_in_resource=nil)
- credentials = oauth.credentials
- data = oauth.info
- user = User.where(email: data["email"]).first
- unless user
- user = User.create(
- first_name: data["first_name"],
- last_name: data["first_name"],
- picture: data["image"],
- email: data["email"],
- password: Devise.friendly_token[0,20],
- token: credentials.token,
- refresh_token: credentials.refresh_token)
- end
- @calendar = user.get_google_calendars
- user
- end
- end
- class Event < ApplicationRecord
- belongs_to: :calendar #calendar belogns to user, a calendar can have many events
- end
- class Calendar < ApplicationRecord
- has_many: :events, dependent: :destroy #calendar belogns to user, a calendar can have many events
- belongs_to: :user, dependent: :destroy
- def get_google_calendars
- url = "https://www.googleapis.com/calendar/v3/users/me/calendarList?access_token=#{token}"
- response = open(url)
- json = JSON.parse(response.read)
- calendars = json["items"]
- calendars.each { |cal| get_events_for_calendar(cal) }
- end
- def get_events_for_calendar(cal)
- url = "https://www.googleapis.com/calendar/v3/calendars/#{cal["id"]}/events?access_token=#{token}"
- response = open(url)
- json = JSON.parse(response.read)
- my_events = json["items"]
- my_events.each do |event|
- name = event["summary"] || "no name"
- creator = event["creator"] ? event["creator"]["email"] : nil
- start = event["start"] ? event["start"]["dateTime"] : nil
- status = event["status"] || nil
- link = event["htmlLink"] || nil
- calendar = cal["summary"] || nil
- events.create(name: name,
- creator: creator,
- status: status,
- start: start,
- link: link,
- calendar: calendar
- )
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement