trusty 0.2.2 → 0.2.3
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 +48 -21
- data/lib/trusty/omniauth/provider_mapper.rb +8 -13
- data/lib/trusty/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a1ea62ba4eb9e305e64fb08259662e965019c41c
|
4
|
+
data.tar.gz: 18f69b12dccb7c65835b4330617866fb3aaeeb22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 349d5f579b16c8033a9d0b17a7db317f3d9918246a487618cc3c95ea4201018837a901180fecad9cabc4bb9f09dbf23e3829e9f3b95b11ca4588058d4d3834d3
|
7
|
+
data.tar.gz: f3e7f8332d13f5e807b5704d2c8f24bf28e278bed24da1603dc22b5b22563b756faf66ba0a7d33f36161fef12a8128ec4074378fe623d967111389809912faa4
|
@@ -5,20 +5,18 @@ module Trusty
|
|
5
5
|
class ModelMapper
|
6
6
|
include MappingHelpers
|
7
7
|
|
8
|
-
attr_reader :unique_identifiers, :required_criteria
|
8
|
+
attr_reader :model, :relation, :column_names, :unique_identifiers, :required_criteria
|
9
9
|
|
10
10
|
def initialize(provider, options = {})
|
11
11
|
@provider = provider
|
12
|
-
@options = options
|
12
|
+
@options = options.dup
|
13
|
+
|
14
|
+
@model, @relation, @column_names = extract_orm_components(@options)
|
13
15
|
|
14
16
|
@unique_identifiers = @options.fetch(:unique_identifiers, []).map(&:to_s)
|
15
17
|
@required_criteria = stringify_keys @options.fetch(:required_criteria, {})
|
16
18
|
end
|
17
19
|
|
18
|
-
def model
|
19
|
-
@options[:model]
|
20
|
-
end
|
21
|
-
|
22
20
|
def attribute_names
|
23
21
|
# Remove required_criteria so that existing attributes are skipped
|
24
22
|
@attribute_names ||= (@options[:attribute_names] || column_names).map(&:to_s) - required_criteria.keys
|
@@ -34,8 +32,9 @@ module Trusty
|
|
34
32
|
end
|
35
33
|
end
|
36
34
|
|
37
|
-
def build_record(additional_attributes = {})
|
38
|
-
|
35
|
+
def build_record(additional_attributes = {}, options = {})
|
36
|
+
build_relation = (options[:relation] || relation)
|
37
|
+
build_relation.build(attributes.merge(required_criteria).merge(additional_attributes), without_protection: true)
|
39
38
|
end
|
40
39
|
|
41
40
|
def find_records(additional_criteria = {})
|
@@ -44,7 +43,7 @@ module Trusty
|
|
44
43
|
|
45
44
|
raise "Missing unique attribute: #{empty_attributes.join(', ')}" if empty_attributes.any?
|
46
45
|
|
47
|
-
conditions =
|
46
|
+
conditions = relation.where( unique_identifier_attributes )
|
48
47
|
conditions = conditions.where(additional_criteria) unless additional_criteria.empty?
|
49
48
|
conditions.where(required_criteria)
|
50
49
|
end
|
@@ -57,20 +56,48 @@ module Trusty
|
|
57
56
|
end
|
58
57
|
end
|
59
58
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
59
|
+
protected
|
60
|
+
|
61
|
+
def extract_orm_components(options)
|
62
|
+
prepared_model = options[:model]
|
63
|
+
prepared_relation = options[:relation]
|
64
|
+
|
65
|
+
prepared_model ||= if prepared_relation.respond_to? :model
|
66
|
+
# ActiveRecord
|
67
|
+
prepared_relation.model
|
68
|
+
elsif prepared_relation.respond_to? :metadata
|
69
|
+
# Mongoid
|
70
|
+
prepared_relation.metadata.klass
|
71
|
+
end
|
72
|
+
|
73
|
+
prepared_relation ||= if prepared_model.respond_to? :default_scoped
|
74
|
+
# ActiveRecord
|
75
|
+
prepared_model.default_scoped
|
76
|
+
elsif prepared_model.respond_to? :default_scope
|
77
|
+
# Mongoid
|
78
|
+
prepared_model.default_scope
|
79
|
+
end
|
80
|
+
|
81
|
+
prepared_column_names = if prepared_model.respond_to? :column_names
|
82
|
+
# ActiveRecord
|
83
|
+
prepared_model.column_names.map(&:to_sym)
|
84
|
+
elsif prepared_model.respond_to? :attribute_names
|
85
|
+
# ActiveModel and Mongoid
|
86
|
+
prepared_model.attribute_names.map(&:to_sym)
|
87
|
+
elsif prepared_model.respond_to? :fields
|
88
|
+
# Older Mongoid
|
89
|
+
prepared_model.fields.map{|c| c[1].name.to_sym}
|
90
|
+
else
|
91
|
+
[]
|
92
|
+
end
|
93
|
+
|
94
|
+
[prepared_model, prepared_relation, prepared_column_names]
|
95
|
+
end
|
96
|
+
|
97
|
+
def stringify_keys(original_hash)
|
98
|
+
original_hash.each_with_object({}){|(key, value), hash| hash[key.to_s] = value}
|
68
99
|
end
|
69
100
|
|
70
|
-
protected
|
71
|
-
def stringify_keys(original_hash)
|
72
|
-
original_hash.each_with_object({}){|(key, value), hash| hash[key.to_s] = value}
|
73
|
-
end
|
74
101
|
end
|
75
102
|
end
|
76
103
|
end
|
@@ -12,6 +12,7 @@ module Trusty
|
|
12
12
|
# provider_attributes = OmniAuth data
|
13
13
|
# options =
|
14
14
|
# - :user_model = User model
|
15
|
+
# - :user_relation = Relation to create new User on (optional, to call #build method on)
|
15
16
|
# - :user_attributes = Hash of attributes to merge into user_attributes
|
16
17
|
# - :user_attributes_names = Array of attribute names to copy from Omniauth data (default: User.column_names)
|
17
18
|
# - :user_required_criteria = Hash of criteria to use to find users, and also to merge into attributes
|
@@ -42,6 +43,7 @@ module Trusty
|
|
42
43
|
)
|
43
44
|
@provider_user = ModelMapper.new(self,
|
44
45
|
:model => @options[:user_model] || ::User,
|
46
|
+
:relation => @options[:user_relation],
|
45
47
|
:attributes => @options[:user_attributes],
|
46
48
|
:attribute_names => @options[:user_attribute_names],
|
47
49
|
:unique_identifiers => @options[:user_identifiers] || [:email],
|
@@ -99,23 +101,16 @@ module Trusty
|
|
99
101
|
|
100
102
|
# USER
|
101
103
|
|
102
|
-
|
103
|
-
|
104
|
+
# Option :relation - pass in relation to build Identity from
|
105
|
+
def build_user(attributes = {}, options = {})
|
106
|
+
@provider_user.build_record(attributes, options)
|
104
107
|
end
|
105
108
|
|
106
109
|
# IDENTITY
|
107
110
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
def build_identity_for_user(user)
|
113
|
-
# build_identity.tap do |identity|
|
114
|
-
# # this assumes there is an inverse relationship automatically created
|
115
|
-
# # such as user.identities would now contain this identity for the user
|
116
|
-
# identity.user = user
|
117
|
-
# end
|
118
|
-
build_identity(user: user)
|
111
|
+
# Option :relation - pass in relation to build Identity from
|
112
|
+
def build_identity(attributes = {}, options = {})
|
113
|
+
@provider_identity.build_record(attributes, options)
|
119
114
|
end
|
120
115
|
|
121
116
|
def update_identity!(identity)
|
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.3
|
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: 2017-04-
|
11
|
+
date: 2017-04-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|