acts_as_sourceable 2.1.6 → 2.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.
- data/lib/acts_as_sourceable/acts_as_sourceable.rb +17 -34
- metadata +24 -6
- checksums.yaml +0 -7
@@ -30,10 +30,10 @@ module ActsAsSourceable
|
|
30
30
|
scope :sourced, lambda { where(options[:cache_column] => true) }
|
31
31
|
scope :unsourced, lambda { where(options[:cache_column] => false) }
|
32
32
|
elsif options[:through]
|
33
|
-
scope :sourced, lambda { joins(options[:through]).group("#{table_name}.#{primary_key}") }
|
33
|
+
scope :sourced, lambda { from(unscoped.joins(options[:through]).group("#{table_name}.#{primary_key}"), table_name) }
|
34
34
|
scope :unsourced, lambda { joins("LEFT OUTER JOIN (#{sourced.to_sql}) sourced ON sourced.id = #{table_name}.id").where("sourced.id IS NULL") }
|
35
35
|
else
|
36
|
-
scope :sourced, lambda { joins(:sourceable_registry_entries).group("#{table_name}.#{primary_key}") }
|
36
|
+
scope :sourced, lambda { from(unscoped.joins(:sourceable_registry_entries).group("#{table_name}.#{primary_key}"), table_name) }
|
37
37
|
scope :unsourced, lambda { joins("LEFT OUTER JOIN (#{ActsAsSourceable::RegistryEntry.select('sourceable_id AS id').where(:sourceable_type => self).to_sql}) sourced ON sourced.id = #{table_name}.id").where("sourced.id IS NULL") }
|
38
38
|
end
|
39
39
|
|
@@ -51,53 +51,36 @@ module ActsAsSourceable
|
|
51
51
|
else
|
52
52
|
scope :orphaned, lambda { unsourced }
|
53
53
|
end
|
54
|
-
|
55
|
-
# ACTIVE RELATION SETUP
|
56
|
-
ActiveRecord::Relation.send(:include, ActsAsSourceable::ActiveRelationMethods)
|
57
|
-
|
58
|
-
# Delegate the relation methods to the relation so we can call Klass.unsourced (do this in the metaclass because all these methods are class level)
|
59
|
-
class << self
|
60
|
-
delegate :add_sources, :add_source, :remove_source, :remove_sources, :unsource, :to => :scoped
|
61
|
-
end
|
62
54
|
end
|
63
55
|
end
|
64
|
-
|
65
|
-
module
|
56
|
+
|
57
|
+
module ClassMethods
|
58
|
+
def acts_like_sourceable?
|
59
|
+
true
|
60
|
+
end
|
61
|
+
|
66
62
|
def remove_sources(*sources)
|
67
|
-
|
63
|
+
find_each{|record| record.remove_sources(*sources) }
|
68
64
|
end
|
69
65
|
alias_method :remove_source, :remove_sources
|
70
66
|
|
71
67
|
def add_sources(*sources)
|
72
|
-
|
68
|
+
find_each{|record| record.add_sources(*sources) }
|
73
69
|
end
|
74
70
|
alias_method :add_source, :add_sources
|
75
|
-
|
71
|
+
|
76
72
|
def unsource
|
77
73
|
# OPTIMIZATION: it's faster to only set the cache column to false if it is true instead of setting all to false indiscriminately
|
78
|
-
|
79
|
-
|
74
|
+
where(acts_as_sourceable_options[:cache_column] => true).update_all(acts_as_sourceable_options[:cache_column] => false) if acts_as_sourceable_options[:cache_column]
|
75
|
+
ActsAsSourceable::RegistryEntry.where(:sourceable_type => self.name, :sourceable_id => self.all).delete_all
|
80
76
|
end
|
81
77
|
end
|
82
78
|
|
83
|
-
module GroupScopeExtensions
|
84
|
-
# Extension for scopes where we're grouping but want to be able to call count
|
85
|
-
def count
|
86
|
-
connection.select_value("SELECT count(1) FROM (#{to_sql}) AS count_all").to_i
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
module ClassMethods
|
91
|
-
def acts_like_sourceable?
|
92
|
-
true
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
79
|
module InstanceMethods
|
97
80
|
def acts_like_sourceable?
|
98
81
|
true
|
99
82
|
end
|
100
|
-
|
83
|
+
|
101
84
|
def sourced?
|
102
85
|
if acts_as_sourceable_options[:cache_column]
|
103
86
|
self[acts_as_sourceable_options[:cache_column]]
|
@@ -133,13 +116,13 @@ module ActsAsSourceable
|
|
133
116
|
update_sourceable_cache_column(false) if self.sourceable_registry_entries.empty?
|
134
117
|
end
|
135
118
|
alias_method :remove_source, :remove_sources
|
136
|
-
|
119
|
+
|
137
120
|
private
|
138
121
|
|
139
122
|
def source_scope(source)
|
140
123
|
ActsAsSourceable::RegistryEntry.where(:sourceable_type => self.class.name, :sourceable_id => self.id, :source_type => source.class, :source_id => source.id)
|
141
124
|
end
|
142
|
-
|
125
|
+
|
143
126
|
def update_sourceable_cache_column(value = nil)
|
144
127
|
return unless acts_as_sourceable_options[:cache_column] # Update via sql because we don't need callbacks and validations called
|
145
128
|
|
@@ -182,4 +165,4 @@ module ActsAsSourceable
|
|
182
165
|
end
|
183
166
|
end
|
184
167
|
end
|
185
|
-
end
|
168
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_sourceable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.2
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Nicholas Jakobsen
|
@@ -9,8 +10,24 @@ authors:
|
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2013-
|
13
|
-
dependencies:
|
13
|
+
date: 2013-09-04 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rails
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ~>
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '4.0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '4.0'
|
14
31
|
description: Allows the RRN to perform garbage collection on categories that are no
|
15
32
|
longer referenced.
|
16
33
|
email: technical@rrnpilot.org
|
@@ -24,25 +41,26 @@ files:
|
|
24
41
|
- README.md
|
25
42
|
homepage: http://github.com/rrn/acts_as_sourceable
|
26
43
|
licenses: []
|
27
|
-
metadata: {}
|
28
44
|
post_install_message:
|
29
45
|
rdoc_options: []
|
30
46
|
require_paths:
|
31
47
|
- lib
|
32
48
|
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
33
50
|
requirements:
|
34
51
|
- - '>='
|
35
52
|
- !ruby/object:Gem::Version
|
36
53
|
version: '0'
|
37
54
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
38
56
|
requirements:
|
39
57
|
- - '>='
|
40
58
|
- !ruby/object:Gem::Version
|
41
59
|
version: '0'
|
42
60
|
requirements: []
|
43
61
|
rubyforge_project:
|
44
|
-
rubygems_version:
|
62
|
+
rubygems_version: 1.8.25
|
45
63
|
signing_key:
|
46
|
-
specification_version:
|
64
|
+
specification_version: 3
|
47
65
|
summary: perform garbage collection on categories that are no longer referenced
|
48
66
|
test_files: []
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: cbea8083a7e55b7564806fdb3b45949ba6f3ecf0
|
4
|
-
data.tar.gz: 769945cd32379edd5fb48cde928313261dd55fe8
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: e0fff5cc8519cda5dbd5b9a1735edfc27b223a344680a3374538847988043561bfe59520f055f9f4a390926f027b000f03ae0d93e516661b55f67e8d4775b20a
|
7
|
-
data.tar.gz: 4be367a71ea15eb1ec0a1636ce2ff04baf1c1384bdce5645613c63530b482a31c5d22c65c61039935ab08873a3c878496598c31fc2f3e83b73324711c2f1fa41
|