trusty 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/trusty/omniauth/model_mapper.rb +15 -10
- data/lib/trusty/omniauth/provider_mapper.rb +31 -29
- data/lib/trusty/version.rb +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 59c014a94c8849d629bc952a1b2ff92501fba0ee
|
4
|
+
data.tar.gz: 780f15a4e4cb6edc59d50f7da54effb81f994e72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 897b8770ae13243c1be08704619fb6ba8f90e56827d3823ff153140f8b011ef1e3ca36f99bc1b8ba7ed01ee76a8a8ba7dba89ad2e64736164b25aa97d7a03538
|
7
|
+
data.tar.gz: 591cf24333b58f913babbd3473d9a5fa3de3b1b3311dc5d84c7ea8468a0d7c01480ff918b6490fc84e8643992b19fd68bf39039947960c1d32d1abf69b890325
|
@@ -6,7 +6,7 @@ module Trusty
|
|
6
6
|
include MappingHelpers
|
7
7
|
|
8
8
|
attr_reader :unique_identifiers, :required_criteria
|
9
|
-
|
9
|
+
|
10
10
|
def initialize(provider, options = {})
|
11
11
|
@provider = provider
|
12
12
|
@options = options
|
@@ -14,32 +14,37 @@ module Trusty
|
|
14
14
|
@unique_identifiers = @options.fetch(:unique_identifiers, []).map(&:to_s)
|
15
15
|
@required_criteria = stringify_keys @options.fetch(:required_criteria, {})
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
def model
|
19
19
|
@options[:model]
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def attribute_names
|
23
23
|
# Remove required_criteria so that existing attributes are skipped
|
24
24
|
@attribute_names ||= (@options[:attribute_names] || column_names).map(&:to_s) - required_criteria.keys
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
def attributes(*filter_attribute_names)
|
28
28
|
@attributes ||= @provider.attributes(*attribute_names).merge(stringify_keys @options[:attributes]).merge(required_criteria)
|
29
|
-
|
29
|
+
|
30
30
|
if filter_attribute_names.any?
|
31
31
|
@attributes.slice(*filter_attribute_names)
|
32
32
|
else
|
33
33
|
@attributes.dup
|
34
34
|
end
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
def build_record(additional_attributes = {})
|
38
38
|
model.new(attributes.merge(required_criteria).merge(additional_attributes), without_protection: true)
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
def find_records(additional_criteria = {})
|
42
|
-
|
42
|
+
unique_identifier_attributes = attributes(*unique_identifiers)
|
43
|
+
empty_attributes = unique_identifiers - unique_identifier_attributes.keys
|
44
|
+
|
45
|
+
raise "Missing unique attribute: #{empty_attributes.join(', ')}" if empty_attributes.any?
|
46
|
+
|
47
|
+
conditions = model.where( unique_identifier_attributes )
|
43
48
|
conditions = conditions.where(additional_criteria) unless additional_criteria.empty?
|
44
49
|
conditions.where(required_criteria)
|
45
50
|
end
|
@@ -51,7 +56,7 @@ module Trusty
|
|
51
56
|
record.update_attributes!(attributes, without_protection: true)
|
52
57
|
end
|
53
58
|
end
|
54
|
-
|
59
|
+
|
55
60
|
def column_names
|
56
61
|
@column_names ||= if model.respond_to? :column_names
|
57
62
|
model.column_names.map(&:to_sym)
|
@@ -68,4 +73,4 @@ module Trusty
|
|
68
73
|
end
|
69
74
|
end
|
70
75
|
end
|
71
|
-
end
|
76
|
+
end
|
@@ -5,20 +5,22 @@ module Trusty
|
|
5
5
|
module Omniauth
|
6
6
|
class ProviderMapper
|
7
7
|
include MappingHelpers
|
8
|
-
|
8
|
+
|
9
9
|
attr_reader :provider_name, :provider_attributes, :options
|
10
10
|
attr_reader :provider_identity, :provider_user
|
11
|
-
|
11
|
+
|
12
12
|
# provider_attributes = OmniAuth data
|
13
|
-
# options =
|
13
|
+
# options =
|
14
14
|
# - :user_model = User model
|
15
15
|
# - :user_attributes = Hash of attributes to merge into user_attributes
|
16
16
|
# - :user_attributes_names = Array of attribute names to copy from Omniauth data (default: User.column_names)
|
17
|
+
# - :user_required_criteria = Hash of criteria to use to find users, and also to merge into attributes
|
18
|
+
# - :user_identifiers = Array of column names that identify a model uniquely with omniauth data
|
17
19
|
# - :identity_model = Identity model
|
18
20
|
# - :identity_attributes = Hash of attributes to merge into identity_attributes
|
19
21
|
# - :identity_attribute_names = Array of attribute names to copy from Omniauth data (default: Identity.column_names)
|
20
22
|
# - :identity_required_criteria = Hash of criteria to use to find identities, and also to merge into attributes
|
21
|
-
# - :
|
23
|
+
# - :identity_identifiers = Array of column names that identify a model uniquely with omniauth data
|
22
24
|
# - :skip_raw_info (default: false) = Boolean whether to exclude OmniAuth "extra" data in identity_attributes[:raw_info]
|
23
25
|
# - :skip_nils (default: true) = Boolean whether to remove attributes with nil values
|
24
26
|
def initialize(provider_attributes, options = {})
|
@@ -30,28 +32,29 @@ module Trusty
|
|
30
32
|
:skip_raw_info => false,
|
31
33
|
:skip_nils => true
|
32
34
|
}.merge(options)
|
33
|
-
|
35
|
+
|
34
36
|
@provider_identity = ModelMapper.new(self,
|
35
|
-
:model => @options[:identity_model] || Identity,
|
37
|
+
:model => @options[:identity_model] || ::Identity,
|
36
38
|
:attributes => @options[:identity_attributes],
|
37
39
|
:attribute_names => @options[:identity_attribute_names],
|
38
|
-
:unique_identifiers => @options[:
|
40
|
+
:unique_identifiers => @options[:identity_identifiers] || [:provider, :uid],
|
39
41
|
:required_criteria => @options[:identity_required_criteria]
|
40
42
|
)
|
41
43
|
@provider_user = ModelMapper.new(self,
|
42
|
-
:model => @options[:user_model] || User,
|
44
|
+
:model => @options[:user_model] || ::User,
|
43
45
|
:attributes => @options[:user_attributes],
|
44
46
|
:attribute_names => @options[:user_attribute_names],
|
45
|
-
:unique_identifiers => @options[:
|
47
|
+
:unique_identifiers => @options[:user_identifiers] || [:email],
|
48
|
+
:required_criteria => @options[:user_required_criteria]
|
46
49
|
)
|
47
50
|
end
|
48
|
-
|
51
|
+
|
49
52
|
# Query existing
|
50
53
|
|
51
54
|
def find_identities_for_user(user)
|
52
55
|
@provider_identity.find_records(user_id: user.id)
|
53
56
|
end
|
54
|
-
|
57
|
+
|
55
58
|
# Matched identities based on omniauth unique identifiers (provider, uid)
|
56
59
|
def matched_identities
|
57
60
|
@matched_identities ||= @provider_identity.find_records
|
@@ -68,7 +71,7 @@ module Trusty
|
|
68
71
|
def multiple_identities?
|
69
72
|
matched_identities.size > 1
|
70
73
|
end
|
71
|
-
|
74
|
+
|
72
75
|
# Matched users based on omniauth unique identifiers (email)
|
73
76
|
def matched_users
|
74
77
|
@matched_users ||= @provider_user.find_records
|
@@ -85,27 +88,27 @@ module Trusty
|
|
85
88
|
def multiple_users?
|
86
89
|
matched_users.size > 1
|
87
90
|
end
|
88
|
-
|
91
|
+
|
89
92
|
def single_user
|
90
93
|
@single_user ||= matched_users.first if single_user?
|
91
94
|
end
|
92
|
-
|
95
|
+
|
93
96
|
def single_identity
|
94
97
|
@single_identity ||= matched_identities.first if single_identity?
|
95
98
|
end
|
96
|
-
|
99
|
+
|
97
100
|
# USER
|
98
|
-
|
101
|
+
|
99
102
|
def build_user(attributes = {})
|
100
103
|
@provider_user.build_record(attributes)
|
101
104
|
end
|
102
|
-
|
105
|
+
|
103
106
|
# IDENTITY
|
104
|
-
|
107
|
+
|
105
108
|
def build_identity(attributes = {})
|
106
109
|
@provider_identity.build_record(attributes)
|
107
110
|
end
|
108
|
-
|
111
|
+
|
109
112
|
def build_identity_for_user(user)
|
110
113
|
# build_identity.tap do |identity|
|
111
114
|
# # this assumes there is an inverse relationship automatically created
|
@@ -114,23 +117,22 @@ module Trusty
|
|
114
117
|
# end
|
115
118
|
build_identity(user: user)
|
116
119
|
end
|
117
|
-
|
120
|
+
|
118
121
|
def update_identity!(identity)
|
119
122
|
@provider_identity.update_record!(identity)
|
120
123
|
end
|
121
|
-
|
124
|
+
|
122
125
|
###### General ######
|
123
|
-
|
126
|
+
|
124
127
|
def attributes(*filter_attribute_names)
|
125
|
-
puts "provider_attributes: #{provider_attributes.inspect}"
|
126
128
|
unless @attributes
|
127
129
|
info = provider_attributes.fetch('info', {})
|
128
130
|
credentials = provider_attributes['credentials']
|
129
|
-
|
131
|
+
|
130
132
|
name = clean(info['name']) { [info['first_name'], info['last_name']].join(" ").strip }
|
131
133
|
first_name = clean(info['first_name']) { name.split(/\s+/, 2).first }
|
132
134
|
last_name = clean(info['last_name']) { name.split(/\s+/, 2).last }
|
133
|
-
|
135
|
+
|
134
136
|
@attributes = {
|
135
137
|
:provider => provider_name,
|
136
138
|
:uid => clean(provider_attributes['uid']),
|
@@ -156,18 +158,18 @@ module Trusty
|
|
156
158
|
:time_zone => info['time_zone'] || Time.zone.name,
|
157
159
|
:locale => info['locale'] || I18n.locale
|
158
160
|
}.with_indifferent_access
|
159
|
-
|
161
|
+
|
160
162
|
@attributes.reject!{|_,value| value.nil?} if options[:skip_nils]
|
161
163
|
@attributes.delete(:raw_info) if options[:skip_raw_info]
|
162
164
|
end
|
163
|
-
|
165
|
+
|
164
166
|
if filter_attribute_names.any?
|
165
167
|
@attributes.slice(*filter_attribute_names)
|
166
168
|
else
|
167
169
|
@attributes.dup
|
168
170
|
end
|
169
171
|
end
|
170
|
-
|
172
|
+
|
171
173
|
end
|
172
174
|
end
|
173
|
-
end
|
175
|
+
end
|
data/lib/trusty/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trusty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel Van Horn
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-04-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -206,10 +206,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
206
206
|
version: '0'
|
207
207
|
requirements: []
|
208
208
|
rubyforge_project:
|
209
|
-
rubygems_version: 2.
|
209
|
+
rubygems_version: 2.6.11
|
210
210
|
signing_key:
|
211
211
|
specification_version: 4
|
212
212
|
summary: Trusty allows you to manage environment variables and other common configuration
|
213
213
|
challenges.
|
214
214
|
test_files: []
|
215
|
-
has_rdoc:
|