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.
@@ -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}") } do include ActsAsSourceable::GroupScopeExtensions; end
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}") } do include ActsAsSourceable::GroupScopeExtensions; end
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 ActiveRelationMethods
56
+
57
+ module ClassMethods
58
+ def acts_like_sourceable?
59
+ true
60
+ end
61
+
66
62
  def remove_sources(*sources)
67
- scoping { @klass.find_each{|record| record.remove_sources(*sources) } }
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
- scoping { @klass.find_each{|record| record.add_sources(*sources) } }
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
- scoping { @klass.where(@klass.acts_as_sourceable_options[:cache_column] => true).update_all("#{acts_as_sourceable_options[:cache_column]} = false") } if @klass.acts_as_sourceable_options[:cache_column]
79
- scoping { ActsAsSourceable::RegistryEntry.where("sourceable_type = ? AND sourceable_id IN (#{@klass.select("#{@klass.table_name}.id").to_sql})", @klass.name).delete_all }
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.1.6
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-03-07 00:00:00.000000000 Z
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: 2.0.5
62
+ rubygems_version: 1.8.25
45
63
  signing_key:
46
- specification_version: 4
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