Class: Trusty::Omniauth::ProviderMapper
- Inherits:
-
Object
- Object
- Trusty::Omniauth::ProviderMapper
- Includes:
- MappingHelpers
- Defined in:
- lib/trusty/omniauth/provider_mapper.rb
Instance Attribute Summary collapse
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#provider_attributes ⇒ Object
readonly
Returns the value of attribute provider_attributes.
-
#provider_identity ⇒ Object
readonly
Returns the value of attribute provider_identity.
-
#provider_name ⇒ Object
readonly
Returns the value of attribute provider_name.
-
#provider_user ⇒ Object
readonly
Returns the value of attribute provider_user.
Instance Method Summary collapse
-
#attributes(*filter_attribute_names) ⇒ Object
General ######.
-
#build_identity(attributes = {}, options = {}) ⇒ Object
Option :relation - pass in relation to build Identity from.
-
#build_user(attributes = {}, options = {}) ⇒ Object
Option :relation - pass in relation to build Identity from.
-
#find_identities_for_user(user) ⇒ Object
Query existing.
- #identities_exist? ⇒ Boolean
-
#initialize(provider_attributes, options = {}) ⇒ ProviderMapper
constructor
provider_attributes = OmniAuth data options = - :user_model = User model class - :user_relation = Relation to create new User on (optional, to call #build method on) - :user_attributes = Hash of attributes to merge into user_attributes - :user_attributes_names = Array of attribute names to copy from Omniauth data (default: User.column_names) - :user_required_criteria = Hash of criteria to use to find users, and also to merge into attributes - :user_identifiers = Array of column names that identify a model uniquely with omniauth data - :identity_model = Identity model class - :identity_attributes = Hash of attributes to merge into identity_attributes - :identity_attribute_names = Array of attribute names to copy from Omniauth data (default: Identity.column_names) - :identity_required_criteria = Hash of criteria to use to find identities, and also to merge into attributes - :identity_identifiers = Array of column names that identify a model uniquely with omniauth data - :skip_raw_info (default: false) = Boolean whether to exclude OmniAuth “extra” data in identity_attributes - :skip_nils (default: true) = Boolean whether to remove attributes with nil values.
-
#matched_identities ⇒ Object
Matched identities based on omniauth unique identifiers (provider, uid).
-
#matched_users ⇒ Object
Matched users based on omniauth unique identifiers (email).
- #multiple_identities? ⇒ Boolean
- #multiple_users? ⇒ Boolean
- #single_identity ⇒ Object
- #single_identity? ⇒ Boolean
- #single_user ⇒ Object
- #single_user? ⇒ Boolean
- #update_identity!(identity) ⇒ Object
- #users_exist? ⇒ Boolean
Methods included from MappingHelpers
Constructor Details
#initialize(provider_attributes, options = {}) ⇒ ProviderMapper
provider_attributes = OmniAuth data options =
-
:user_model = User model class
-
:user_relation = Relation to create new User on (optional, to call #build method on)
-
:user_attributes = Hash of attributes to merge into user_attributes
-
:user_attributes_names = Array of attribute names to copy from Omniauth data (default: User.column_names)
-
:user_required_criteria = Hash of criteria to use to find users, and also to merge into attributes
-
:user_identifiers = Array of column names that identify a model uniquely with omniauth data
-
:identity_model = Identity model class
-
:identity_attributes = Hash of attributes to merge into identity_attributes
-
:identity_attribute_names = Array of attribute names to copy from Omniauth data (default: Identity.column_names)
-
:identity_required_criteria = Hash of criteria to use to find identities, and also to merge into attributes
-
:identity_identifiers = Array of column names that identify a model uniquely with omniauth data
-
:skip_raw_info (default: false) = Boolean whether to exclude OmniAuth “extra” data in identity_attributes
-
:skip_nils (default: true) = Boolean whether to remove attributes with nil values
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 27 def initialize(provider_attributes, = {}) @provider_attributes = provider_attributes.with_indifferent_access @provider_name = provider_attributes['provider'] @options = { :user_attributes => {}, :identity_attributes => {}, :skip_raw_info => false, :skip_nils => true }.merge() @provider_identity = ModelMapper.new(self, :model => @options[:identity_model], :relation => @options[:identity_relation], :attributes => @options[:identity_attributes], :attribute_names => @options[:identity_attribute_names], :unique_identifiers => @options[:identity_identifiers] || [:provider, :uid], :required_criteria => @options[:identity_required_criteria] ) @provider_user = ModelMapper.new(self, :model => @options[:user_model], :relation => @options[:user_relation], :attributes => @options[:user_attributes], :attribute_names => @options[:user_attribute_names], :unique_identifiers => @options[:user_identifiers] || [:email], :required_criteria => @options[:user_required_criteria] ) end |
Instance Attribute Details
#options ⇒ Object (readonly)
Returns the value of attribute options.
9 10 11 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 9 def @options end |
#provider_attributes ⇒ Object (readonly)
Returns the value of attribute provider_attributes.
9 10 11 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 9 def provider_attributes @provider_attributes end |
#provider_identity ⇒ Object (readonly)
Returns the value of attribute provider_identity.
10 11 12 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 10 def provider_identity @provider_identity end |
#provider_name ⇒ Object (readonly)
Returns the value of attribute provider_name.
9 10 11 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 9 def provider_name @provider_name end |
#provider_user ⇒ Object (readonly)
Returns the value of attribute provider_user.
10 11 12 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 10 def provider_user @provider_user end |
Instance Method Details
#attributes(*filter_attribute_names) ⇒ Object
General ######
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 123 def attributes(*filter_attribute_names) unless @attributes name = clean(info['name']) { info.values_at('first_name', 'last_name').join(' ').strip } first_name = clean(info['first_name']) { name.split(/\s+/, 2).first } last_name = clean(info['last_name']) { name.split(/\s+/, 2).last } urls = info.fetch('urls', {}) @attributes = { :provider => provider_name, :uid => clean(provider_attributes['uid']), :name => name, :company => info['company'] || raw_info['company'], :email => clean(info['email'], :downcase, :strip), :verified => !!first_for(raw_info, %w{verified_email email_verified verified confirmed verified_account}), :username => clean(info['nickname']), :first_name => first_name, :middle_name => clean(info['middle_name']), :last_name => last_name, :phone => clean(info['phone'] || raw_info['sms_number']), :image_url => info['image'], :profile_url => first_for(urls, %w{profile public_profile GitHub}) || first_for(raw_info, %w{url blog}), :token_type => clean(credentials['token_type']), :token => clean(credentials['token']), :secret => clean(credentials['secret']), :refresh_token => clean(credentials['refresh_token']), :expires => credentials['expires'] == true, :expires_at => (Time.at(credentials['expires_at']) rescue nil), :raw_info => provider_attributes['extra'].except('access_token').as_json, # extra :location => info['location'] || raw_info['location'], :time_zone => info['time_zone'] || Time.zone.name, :locale => info['locale'] || I18n.locale }.with_indifferent_access @attributes.reject!{|_,value| value.nil?} if [:skip_nils] @attributes.delete(:raw_info) if [:skip_raw_info] end if filter_attribute_names.any? @attributes.slice(*filter_attribute_names) else @attributes.dup end end |
#build_identity(attributes = {}, options = {}) ⇒ Object
Option :relation - pass in relation to build Identity from
113 114 115 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 113 def build_identity(attributes = {}, = {}) @provider_identity.build_record(attributes, ) end |
#build_user(attributes = {}, options = {}) ⇒ Object
Option :relation - pass in relation to build Identity from
106 107 108 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 106 def build_user(attributes = {}, = {}) @provider_user.build_record(attributes, ) end |
#find_identities_for_user(user) ⇒ Object
Query existing
57 58 59 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 57 def find_identities_for_user(user) @provider_identity.find_records(user_id: user.id) end |
#identities_exist? ⇒ Boolean
66 67 68 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 66 def identities_exist? matched_identities.any? end |
#matched_identities ⇒ Object
Matched identities based on omniauth unique identifiers (provider, uid)
62 63 64 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 62 def matched_identities @matched_identities ||= @provider_identity.find_records end |
#matched_users ⇒ Object
Matched users based on omniauth unique identifiers (email)
79 80 81 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 79 def matched_users @matched_users ||= @provider_user.find_records end |
#multiple_identities? ⇒ Boolean
74 75 76 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 74 def multiple_identities? matched_identities.size > 1 end |
#multiple_users? ⇒ Boolean
91 92 93 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 91 def multiple_users? matched_users.size > 1 end |
#single_identity ⇒ Object
99 100 101 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 99 def single_identity @single_identity ||= matched_identities.first if single_identity? end |
#single_identity? ⇒ Boolean
70 71 72 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 70 def single_identity? matched_identities.size == 1 end |
#single_user ⇒ Object
95 96 97 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 95 def single_user @single_user ||= matched_users.first if single_user? end |
#single_user? ⇒ Boolean
87 88 89 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 87 def single_user? matched_users.size == 1 end |
#update_identity!(identity) ⇒ Object
117 118 119 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 117 def update_identity!(identity) @provider_identity.update_record!(identity) end |
#users_exist? ⇒ Boolean
83 84 85 |
# File 'lib/trusty/omniauth/provider_mapper.rb', line 83 def users_exist? matched_users.any? end |