effective_resources 0.3.3 → 0.3.4
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/app/models/effective/attribute.rb +2 -2
- data/app/models/effective/resource.rb +2 -2
- data/app/models/effective/resources/associations.rb +13 -1
- data/app/models/effective/resources/forms.rb +1 -1
- data/app/models/effective/resources/init.rb +22 -21
- data/app/models/effective/resources/naming.rb +3 -3
- data/app/models/effective/resources/relation.rb +11 -3
- data/app/models/effective/resources/sql.rb +4 -2
- data/lib/effective_resources/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: 80f8bb76be22a155d74952c74d008382e1ba7cd7
|
4
|
+
data.tar.gz: 06fa5f406c156ed2dbe2ef413e3f0f5a57a6214c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a3aab4b276571bdf76024ea8b381173b640fb748c06126d565f84f3fdf92c62177fd5ac61f13dce78cff23dce3fbc25799ecae87273cc5347a8925fcc778e60
|
7
|
+
data.tar.gz: 42ed251bf078e6b173639083e8b68bc5b2fa0955b3bba97e3214c9330e9d0a284d3664304acadf1242916a7f09665f95850ea401a527b15cb4def8ffcc7f2c9b
|
@@ -92,7 +92,7 @@ module Effective
|
|
92
92
|
value.to_s
|
93
93
|
when :belongs_to_polymorphic
|
94
94
|
value.to_s
|
95
|
-
when :belongs_to, :has_many, :has_and_belongs_to_many, :has_one, :resource # Returns an Array of ints, an Int or String
|
95
|
+
when :belongs_to, :has_many, :has_and_belongs_to_many, :has_one, :resource, :effective_addresses # Returns an Array of ints, an Int or String
|
96
96
|
if value.kind_of?(Integer) || value.kind_of?(Array)
|
97
97
|
value
|
98
98
|
else
|
@@ -109,7 +109,7 @@ module Effective
|
|
109
109
|
end
|
110
110
|
end
|
111
111
|
else
|
112
|
-
raise
|
112
|
+
raise "unsupported type #{type}"
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
@@ -12,8 +12,8 @@ module Effective
|
|
12
12
|
include Effective::Resources::Sql
|
13
13
|
|
14
14
|
# post, Post, Admin::Post, admin::Post, admin/posts, admin/post, admin/effective::post
|
15
|
-
def initialize(input)
|
16
|
-
_initialize(input)
|
15
|
+
def initialize(input, namespace: nil)
|
16
|
+
_initialize(input, namespace: namespace)
|
17
17
|
end
|
18
18
|
|
19
19
|
def to_s
|
@@ -33,7 +33,7 @@ module Effective
|
|
33
33
|
|
34
34
|
def associated(name)
|
35
35
|
name = (name.to_s.end_with?('_id') ? name.to_s[0...-3] : name).to_sym
|
36
|
-
klass.reflect_on_all_associations.find { |ass| ass.name == name }
|
36
|
+
klass.reflect_on_all_associations.find { |ass| ass.name == name } || effective_addresses(name)
|
37
37
|
end
|
38
38
|
|
39
39
|
def belongs_to(name)
|
@@ -61,6 +61,18 @@ module Effective
|
|
61
61
|
has_ones.find { |ass| ass.name == name }
|
62
62
|
end
|
63
63
|
|
64
|
+
def effective_addresses(name)
|
65
|
+
return unless defined?(EffectiveAddresses) && has_many(:addresses).try(:klass) == Effective::Address
|
66
|
+
|
67
|
+
name = name.to_s.downcase
|
68
|
+
return unless name.end_with?('_address') || name.end_with?('_addresses')
|
69
|
+
|
70
|
+
category = name.split('_').reject { |name| name == 'address' || name == 'addresses' }.join('_')
|
71
|
+
return unless category.present?
|
72
|
+
|
73
|
+
Effective::Address.where(category: category).where(addressable_type: class_name)
|
74
|
+
end
|
75
|
+
|
64
76
|
def nested_resource(name)
|
65
77
|
name = name.to_sym
|
66
78
|
nested_resources.find { |ass| ass.name == name }
|
@@ -23,7 +23,7 @@ module Effective
|
|
23
23
|
when :effective_obfuscation
|
24
24
|
{ as: :effective_obfuscation }
|
25
25
|
when :boolean
|
26
|
-
{ as: :boolean, collection: [['
|
26
|
+
{ as: :boolean, collection: [['Yes', true], ['No', false]] }
|
27
27
|
when :datetime
|
28
28
|
{ as: :datetime }
|
29
29
|
when :date
|
@@ -4,41 +4,42 @@ module Effective
|
|
4
4
|
|
5
5
|
private
|
6
6
|
|
7
|
-
def _initialize(
|
8
|
-
@
|
9
|
-
_initialize_names(@input_name)
|
7
|
+
def _initialize(input, namespace: nil)
|
8
|
+
@namespaces = (namespace.kind_of?(String) ? namespace.split('/') : Array(namespace)) if namespace
|
10
9
|
|
11
|
-
@
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
def _initialize_input_name(input)
|
16
|
-
case input
|
17
|
-
when String ; input.start_with?('/') ? input[1..-1] : input
|
18
|
-
when Symbol ; input
|
19
|
-
when Class ; input.name
|
10
|
+
@model_klass = case input
|
11
|
+
when String, Symbol
|
12
|
+
_klass_by_name(input)
|
20
13
|
when ActiveRecord::Relation
|
21
14
|
input.klass
|
22
15
|
when ActiveRecord::Reflection::AbstractReflection
|
23
|
-
|
24
|
-
input.name
|
16
|
+
input.klass unless input.options[:polymorphic]
|
25
17
|
when ActionDispatch::Journey::Route
|
26
|
-
input.defaults[:controller]
|
18
|
+
_klass_by_name(input.defaults[:controller])
|
19
|
+
when Class
|
20
|
+
input
|
27
21
|
when nil ; raise 'expected a string or class'
|
28
|
-
else ; input.class.name
|
29
|
-
end
|
22
|
+
else ; _klass_by_name(input.class.name)
|
23
|
+
end
|
24
|
+
|
25
|
+
@relation = _initialize_relation(input)
|
26
|
+
@instance = input if (klass && input.instance_of?(klass))
|
30
27
|
end
|
31
28
|
|
32
|
-
def
|
29
|
+
def _klass_by_name(input)
|
30
|
+
input = input.to_s
|
31
|
+
input = input[1..-1] if input.start_with?('/')
|
32
|
+
|
33
33
|
names = input.split('/')
|
34
34
|
|
35
35
|
0.upto(names.length-1) do |index|
|
36
36
|
class_name = (names[index..-1].map { |name| name.classify } * '::')
|
37
|
+
klass = (class_name.safe_constantize rescue nil)
|
37
38
|
|
38
|
-
if
|
39
|
-
@class_name = class_name
|
39
|
+
if klass.present?
|
40
40
|
@namespaces = names[0...index]
|
41
|
-
|
41
|
+
@model_klass = klass
|
42
|
+
return klass
|
42
43
|
end
|
43
44
|
end
|
44
45
|
end
|
@@ -4,7 +4,7 @@ module Effective
|
|
4
4
|
SPLIT = /\/|::/ # / or ::
|
5
5
|
|
6
6
|
def name # 'post'
|
7
|
-
@name ||=
|
7
|
+
@name ||= (klass.try(:name).to_s.split(SPLIT).last || '').singularize.downcase
|
8
8
|
end
|
9
9
|
|
10
10
|
def plural_name # 'posts'
|
@@ -12,7 +12,7 @@ module Effective
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def class_name # 'Effective::Post'
|
15
|
-
@model_klass.try(:name)
|
15
|
+
@model_klass.try(:name).to_s
|
16
16
|
end
|
17
17
|
|
18
18
|
def class_path # 'effective'
|
@@ -20,7 +20,7 @@ module Effective
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def namespaced_class_name # 'Admin::Effective::Post'
|
23
|
-
(namespaces.
|
23
|
+
(Array(namespaces).map { |name| name.classify } + [class_name]) * '::'
|
24
24
|
end
|
25
25
|
|
26
26
|
def namespace # 'admin/things'
|
@@ -31,6 +31,10 @@ module Effective
|
|
31
31
|
relation
|
32
32
|
.order(order_by_associated_conditions(association, sort: sort, direction: direction))
|
33
33
|
.order("#{sql_column(klass.primary_key)} #{sql_direction}")
|
34
|
+
when :effective_addresses
|
35
|
+
relation
|
36
|
+
.order(order_by_associated_conditions(associated(:addresses), sort: sort, direction: direction))
|
37
|
+
.order("#{sql_column(klass.primary_key)} #{sql_direction}")
|
34
38
|
when :effective_roles
|
35
39
|
relation.order("#{sql_column(:roles_mask)} #{sql_direction}")
|
36
40
|
when :string, :text
|
@@ -57,6 +61,10 @@ module Effective
|
|
57
61
|
|
58
62
|
term = Effective::Attribute.new(sql_type, klass: (association.try(:klass) rescue nil) || klass).parse(value, name: name)
|
59
63
|
|
64
|
+
if term == 'nil' && ![:has_and_belongs_to_many, :has_many, :has_one, :belongs_to_polymorphic, :effective_roles].include?(sql_type)
|
65
|
+
return relation.where("#{sql_column} IS NULL")
|
66
|
+
end
|
67
|
+
|
60
68
|
case sql_type
|
61
69
|
when :belongs_to, :has_and_belongs_to_many, :has_many, :has_one
|
62
70
|
relation.where(search_by_associated_conditions(association, term, fuzzy: fuzzy))
|
@@ -70,7 +78,7 @@ module Effective
|
|
70
78
|
relation.where("#{sql_column} = ? OR #{sql_column.sub('_id', '_type')} = ?", id, (type || term))
|
71
79
|
end
|
72
80
|
when :effective_addresses
|
73
|
-
|
81
|
+
relation.where(id: Effective::Resource.new(association).search_any(value, fuzzy: fuzzy).pluck(:addressable_id))
|
74
82
|
when :effective_obfuscation
|
75
83
|
# If value == term, it's an invalid deobfuscated id
|
76
84
|
relation.where("#{sql_column} = ?", (value == term ? 0 : term))
|
@@ -124,7 +132,7 @@ module Effective
|
|
124
132
|
relation.where("#{sql_column} = ?", term)
|
125
133
|
end
|
126
134
|
else
|
127
|
-
raise
|
135
|
+
raise "unsupported sql type #{sql_type}"
|
128
136
|
end
|
129
137
|
end
|
130
138
|
|
@@ -200,7 +208,7 @@ module Effective
|
|
200
208
|
# Order the target model for its matching records / keys
|
201
209
|
sort_column = (sort unless sort == true) || resource.sort_column
|
202
210
|
|
203
|
-
relation = resource.relation.order("#{resource.sql_column(sort_column)} #{sql_direction(direction)}")
|
211
|
+
relation = resource.relation.reorder(nil).order("#{resource.sql_column(sort_column)} #{sql_direction(direction)}")
|
204
212
|
|
205
213
|
if association.options[:as] # polymorphic
|
206
214
|
relation = relation.where(association.type => klass.name)
|
@@ -20,7 +20,7 @@ module Effective
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def max_id
|
23
|
-
@max_id ||= klass.maximum(klass.primary_key).to_i
|
23
|
+
@max_id ||= klass.unscoped.maximum(klass.primary_key).to_i
|
24
24
|
end
|
25
25
|
|
26
26
|
def sql_column(name)
|
@@ -52,6 +52,8 @@ module Effective
|
|
52
52
|
:effective_obfuscation
|
53
53
|
elsif name == 'roles' && defined?(EffectiveRoles) && klass.respond_to?(:with_role)
|
54
54
|
:effective_roles
|
55
|
+
elsif (name.include?('_address') || name.include?('_addresses')) && defined?(EffectiveAddresses) && (klass.new rescue nil).respond_to?(:effective_addresses)
|
56
|
+
:effective_addresses
|
55
57
|
elsif (column = column(name))
|
56
58
|
column.type
|
57
59
|
elsif name.ends_with?('_id')
|
@@ -64,7 +66,7 @@ module Effective
|
|
64
66
|
# This tries to figure out the column we should order this collection by.
|
65
67
|
# Whatever would match up with the .to_s
|
66
68
|
def sort_column
|
67
|
-
['name', 'title', 'label', '
|
69
|
+
['name', 'title', 'label', 'subject', 'full_name', 'first_name', 'email', 'description'].each do |name|
|
68
70
|
return name if column_names.include?(name)
|
69
71
|
end
|
70
72
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_resources
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|