slim_scrooge 1.0.10 → 1.0.11
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/README.textile +1 -0
- data/Rakefile +0 -18
- data/VERSION.yml +1 -1
- data/lib/slim_scrooge/monitored_hash.rb +14 -12
- metadata +9 -4
data/README.textile
CHANGED
@@ -113,3 +113,4 @@ h2. References
|
|
113
113
|
h2. Authors
|
114
114
|
* Stephen Sykes (sdsykes)
|
115
115
|
* Special thanks to Lourens Naudé (methodmissing) for the original idea, and the C implementation of callsite_hash as well as some other bits of code that I borrowed from the original project.
|
116
|
+
* Thanks to Steve Purcell for fixes and help
|
data/Rakefile
CHANGED
@@ -9,21 +9,3 @@ Rake::TestTask.new(:test_with_active_record) do |t|
|
|
9
9
|
t.ruby_opts = ["-r #{File.join(File.dirname(__FILE__), 'test', 'active_record_setup')}"]
|
10
10
|
t.verbose = true
|
11
11
|
end
|
12
|
-
|
13
|
-
begin
|
14
|
-
require 'jeweler'
|
15
|
-
Jeweler::Tasks.new do |s|
|
16
|
-
s.name = "slim_scrooge"
|
17
|
-
s.summary = "Slim_scrooge - serious optimisation for ActiveRecord"
|
18
|
-
s.email = "sdsykes@gmail.com"
|
19
|
-
s.homepage = "http://github.com/sdsykes/slim_scrooge"
|
20
|
-
s.description = "Slim scrooge boosts speed in Rails ActiveRecord Models by only querying the database for what is needed."
|
21
|
-
s.authors = ["Stephen Sykes"]
|
22
|
-
s.files = FileList["[A-Z]*", "{ext,lib,test}/**/*"]
|
23
|
-
s.extensions = "ext/Rakefile"
|
24
|
-
end
|
25
|
-
Jeweler::GemcutterTasks.new
|
26
|
-
rescue LoadError
|
27
|
-
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://
|
28
|
-
gems.github.com"
|
29
|
-
end
|
data/VERSION.yml
CHANGED
@@ -29,7 +29,7 @@ module SlimScrooge
|
|
29
29
|
#
|
30
30
|
def new_column_access(name)
|
31
31
|
if @callsite.columns_hash.has_key?(name)
|
32
|
-
@result_set.reload! if
|
32
|
+
@result_set.reload! if !@result_set.nil? && name != @callsite.primary_key
|
33
33
|
Callsites.add_seen_column(@callsite, name)
|
34
34
|
end
|
35
35
|
@monitored_columns[name]
|
@@ -40,7 +40,7 @@ module SlimScrooge
|
|
40
40
|
def []=(name, value)
|
41
41
|
if has_key?(name)
|
42
42
|
return super
|
43
|
-
elsif
|
43
|
+
elsif !@result_set.nil? && @callsite.columns_hash.has_key?(name)
|
44
44
|
@result_set.reload!
|
45
45
|
Callsites.add_seen_column(@callsite, name)
|
46
46
|
end
|
@@ -50,13 +50,13 @@ module SlimScrooge
|
|
50
50
|
# Returns the column names
|
51
51
|
#
|
52
52
|
def keys
|
53
|
-
|
53
|
+
!@result_set.nil? ? @callsite.columns_hash.keys : super | @monitored_columns.keys
|
54
54
|
end
|
55
55
|
|
56
56
|
# Check for a column name
|
57
57
|
#
|
58
58
|
def has_key?(name)
|
59
|
-
|
59
|
+
!@result_set.nil? ? @callsite.columns_hash.has_key?(name) : super || @monitored_columns.has_key?(name)
|
60
60
|
end
|
61
61
|
|
62
62
|
alias_method :include?, :has_key?
|
@@ -64,12 +64,12 @@ module SlimScrooge
|
|
64
64
|
# Called by Hash#update when reload is called on an ActiveRecord object
|
65
65
|
#
|
66
66
|
def to_hash
|
67
|
-
@result_set.reload!
|
67
|
+
@result_set.reload! unless @result_set.nil?
|
68
68
|
@monitored_columns.merge(self)
|
69
69
|
end
|
70
70
|
|
71
71
|
def freeze
|
72
|
-
@result_set.reload!
|
72
|
+
@result_set.reload! unless @result_set.nil?
|
73
73
|
@monitored_columns.freeze
|
74
74
|
super
|
75
75
|
end
|
@@ -87,17 +87,19 @@ module SlimScrooge
|
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
|
-
# We need to change the update method of Hash so that it *always*
|
91
|
-
# to_hash. This is because it
|
92
|
-
#
|
93
|
-
# to_hash
|
94
|
-
# from a
|
90
|
+
# We need to change the update method of Hash so that it *always*
|
91
|
+
# calls to_hash on MonitoredHash instances. This is because it
|
92
|
+
# normally checks if other_hash is a kind of Hash, and doesn't bother
|
93
|
+
# calling to_hash if so. But we need it to call to_hash, because
|
94
|
+
# otherwise update will not get the complete columns from a
|
95
|
+
# MonitoredHash
|
95
96
|
#
|
96
97
|
# This is not harmful - to_hash in a regular Hash just returns self.
|
97
98
|
#
|
98
99
|
class Hash
|
99
100
|
alias_method :c_update, :update
|
100
101
|
def update(other_hash, &block)
|
101
|
-
c_update(other_hash.to_hash,
|
102
|
+
c_update(other_hash.is_a?(::SlimScrooge::MonitoredHash) ? other_hash.to_hash : other_hash,
|
103
|
+
&block)
|
102
104
|
end
|
103
105
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slim_scrooge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 1
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 1
|
7
8
|
- 0
|
8
|
-
-
|
9
|
-
version: 1.0.
|
9
|
+
- 11
|
10
|
+
version: 1.0.11
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Stephen Sykes
|
@@ -14,7 +15,7 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-
|
18
|
+
date: 2010-12-20 00:00:00 +02:00
|
18
19
|
default_executable:
|
19
20
|
dependencies: []
|
20
21
|
|
@@ -55,23 +56,27 @@ rdoc_options:
|
|
55
56
|
require_paths:
|
56
57
|
- lib
|
57
58
|
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
58
60
|
requirements:
|
59
61
|
- - ">="
|
60
62
|
- !ruby/object:Gem::Version
|
63
|
+
hash: 3
|
61
64
|
segments:
|
62
65
|
- 0
|
63
66
|
version: "0"
|
64
67
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
65
69
|
requirements:
|
66
70
|
- - ">="
|
67
71
|
- !ruby/object:Gem::Version
|
72
|
+
hash: 3
|
68
73
|
segments:
|
69
74
|
- 0
|
70
75
|
version: "0"
|
71
76
|
requirements: []
|
72
77
|
|
73
78
|
rubyforge_project:
|
74
|
-
rubygems_version: 1.3.
|
79
|
+
rubygems_version: 1.3.7
|
75
80
|
signing_key:
|
76
81
|
specification_version: 3
|
77
82
|
summary: Slim_scrooge - serious optimisation for ActiveRecord
|