respond_to_faster 0.1.0 → 0.2.0
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/CHANGELOG.md +7 -0
- data/Gemfile +0 -1
- data/Gemfile.lock +89 -15
- data/README.md +14 -25
- data/lib/respond_to_faster.rb +8 -14
- data/lib/respond_to_faster/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3075ab9a3b42594397ce71908c6a9e324ae8ede6
|
|
4
|
+
data.tar.gz: 59ca831802f576914a254c1cb4fde907833a82c2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cc1068552d098ce3aca0cafde960b3129f8039df0bbaf1df83bbcb22a4cc8640ca258a2cdb3e627b39d4008dd40f300f795092ffdce67903fa889ef775f42544
|
|
7
|
+
data.tar.gz: 6203af98ff0c87ba8aab51d74b926ae6dbac84a5350c186867352d2a72e81728f2ea1c68fa9394843253c42fdbcfe735b1e717dd72cb1a31d1a3b273d3e643d1
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# RespondToFaster Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2
|
|
4
|
+
|
|
5
|
+
### 0.2.0
|
|
6
|
+
* Override `find_by_sql` instead of `init_with` [3d05c0e](https://github.com/shioyama/respond_to_faster/commit/3d05c0e9b50a07612ec1edf83fae7f0bcea724db)
|
|
7
|
+
* Put back `respond_to?` and `method_missing` for now [7f95710](https://github.com/shioyama/respond_to_faster/commit/7f95710e34f7068ac21fb55202dda0c69cbfcbfa)
|
|
8
|
+
* Handle case of no results [90084dd](https://github.com/shioyama/respond_to_faster/commit/90084ddee0ec25e8052628b563f1c352b742b883)
|
|
9
|
+
|
|
3
10
|
## 0.1
|
|
4
11
|
|
|
5
12
|
### 0.1.0
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
PATH
|
|
2
|
-
remote:
|
|
3
|
-
specs:
|
|
4
|
-
respond_to_faster (0.0.1)
|
|
5
|
-
activerecord (>= 5.0, < 6.0)
|
|
6
|
-
|
|
7
|
-
GEM
|
|
8
|
-
remote: https://rubygems.org/
|
|
2
|
+
remote: ../../rails
|
|
9
3
|
specs:
|
|
4
|
+
actioncable (5.2.0.beta2)
|
|
5
|
+
actionpack (= 5.2.0.beta2)
|
|
6
|
+
nio4r (~> 2.0)
|
|
7
|
+
websocket-driver (~> 0.6.1)
|
|
8
|
+
actionmailer (5.2.0.beta2)
|
|
9
|
+
actionpack (= 5.2.0.beta2)
|
|
10
|
+
actionview (= 5.2.0.beta2)
|
|
11
|
+
activejob (= 5.2.0.beta2)
|
|
12
|
+
mail (~> 2.5, >= 2.5.4)
|
|
13
|
+
rails-dom-testing (~> 2.0)
|
|
10
14
|
actionpack (5.2.0.beta2)
|
|
11
15
|
actionview (= 5.2.0.beta2)
|
|
12
16
|
activesupport (= 5.2.0.beta2)
|
|
@@ -20,17 +24,52 @@ GEM
|
|
|
20
24
|
erubi (~> 1.4)
|
|
21
25
|
rails-dom-testing (~> 2.0)
|
|
22
26
|
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
|
27
|
+
activejob (5.2.0.beta2)
|
|
28
|
+
activesupport (= 5.2.0.beta2)
|
|
29
|
+
globalid (>= 0.3.6)
|
|
23
30
|
activemodel (5.2.0.beta2)
|
|
24
31
|
activesupport (= 5.2.0.beta2)
|
|
25
32
|
activerecord (5.2.0.beta2)
|
|
26
33
|
activemodel (= 5.2.0.beta2)
|
|
27
34
|
activesupport (= 5.2.0.beta2)
|
|
28
35
|
arel (>= 9.0)
|
|
36
|
+
activestorage (5.2.0.beta2)
|
|
37
|
+
actionpack (= 5.2.0.beta2)
|
|
38
|
+
activerecord (= 5.2.0.beta2)
|
|
29
39
|
activesupport (5.2.0.beta2)
|
|
30
40
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
31
41
|
i18n (~> 0.7)
|
|
32
42
|
minitest (~> 5.1)
|
|
33
43
|
tzinfo (~> 1.1)
|
|
44
|
+
rails (5.2.0.beta2)
|
|
45
|
+
actioncable (= 5.2.0.beta2)
|
|
46
|
+
actionmailer (= 5.2.0.beta2)
|
|
47
|
+
actionpack (= 5.2.0.beta2)
|
|
48
|
+
actionview (= 5.2.0.beta2)
|
|
49
|
+
activejob (= 5.2.0.beta2)
|
|
50
|
+
activemodel (= 5.2.0.beta2)
|
|
51
|
+
activerecord (= 5.2.0.beta2)
|
|
52
|
+
activestorage (= 5.2.0.beta2)
|
|
53
|
+
activesupport (= 5.2.0.beta2)
|
|
54
|
+
bundler (>= 1.3.0)
|
|
55
|
+
railties (= 5.2.0.beta2)
|
|
56
|
+
sprockets-rails (>= 2.0.0)
|
|
57
|
+
railties (5.2.0.beta2)
|
|
58
|
+
actionpack (= 5.2.0.beta2)
|
|
59
|
+
activesupport (= 5.2.0.beta2)
|
|
60
|
+
method_source
|
|
61
|
+
rake (>= 0.8.7)
|
|
62
|
+
thor (>= 0.18.1, < 2.0)
|
|
63
|
+
|
|
64
|
+
PATH
|
|
65
|
+
remote: .
|
|
66
|
+
specs:
|
|
67
|
+
respond_to_faster (0.1.0)
|
|
68
|
+
activerecord (>= 5.0, < 6.0)
|
|
69
|
+
|
|
70
|
+
GEM
|
|
71
|
+
remote: https://rubygems.org/
|
|
72
|
+
specs:
|
|
34
73
|
arel (9.0.0)
|
|
35
74
|
benchmark-ips (2.7.2)
|
|
36
75
|
builder (3.2.3)
|
|
@@ -41,16 +80,42 @@ GEM
|
|
|
41
80
|
database_cleaner (1.6.2)
|
|
42
81
|
diff-lcs (1.3)
|
|
43
82
|
erubi (1.7.0)
|
|
83
|
+
ffi (1.9.18)
|
|
84
|
+
formatador (0.2.5)
|
|
85
|
+
globalid (0.4.1)
|
|
86
|
+
activesupport (>= 4.2.0)
|
|
87
|
+
guard (2.14.1)
|
|
88
|
+
formatador (>= 0.2.4)
|
|
89
|
+
listen (>= 2.7, < 4.0)
|
|
90
|
+
lumberjack (~> 1.0)
|
|
91
|
+
nenv (~> 0.1)
|
|
92
|
+
notiffany (~> 0.0)
|
|
93
|
+
pry (>= 0.9.12)
|
|
94
|
+
shellany (~> 0.0)
|
|
95
|
+
thor (>= 0.18.1)
|
|
44
96
|
i18n (0.9.1)
|
|
45
97
|
concurrent-ruby (~> 1.0)
|
|
98
|
+
listen (3.1.5)
|
|
99
|
+
rb-fsevent (~> 0.9, >= 0.9.4)
|
|
100
|
+
rb-inotify (~> 0.9, >= 0.9.7)
|
|
101
|
+
ruby_dep (~> 1.2)
|
|
46
102
|
loofah (2.1.1)
|
|
47
103
|
crass (~> 1.0.2)
|
|
48
104
|
nokogiri (>= 1.5.9)
|
|
105
|
+
lumberjack (1.0.12)
|
|
106
|
+
mail (2.7.0)
|
|
107
|
+
mini_mime (>= 0.1.1)
|
|
49
108
|
method_source (0.9.0)
|
|
109
|
+
mini_mime (1.0.0)
|
|
50
110
|
mini_portile2 (2.3.0)
|
|
51
111
|
minitest (5.10.3)
|
|
112
|
+
nenv (0.3.0)
|
|
113
|
+
nio4r (2.1.0)
|
|
52
114
|
nokogiri (1.8.1)
|
|
53
115
|
mini_portile2 (~> 2.3.0)
|
|
116
|
+
notiffany (0.1.1)
|
|
117
|
+
nenv (~> 0.1)
|
|
118
|
+
shellany (~> 0.0)
|
|
54
119
|
pry (0.11.3)
|
|
55
120
|
coderay (~> 1.1.0)
|
|
56
121
|
method_source (~> 0.9.0)
|
|
@@ -65,13 +130,10 @@ GEM
|
|
|
65
130
|
nokogiri (>= 1.6)
|
|
66
131
|
rails-html-sanitizer (1.0.3)
|
|
67
132
|
loofah (~> 2.0)
|
|
68
|
-
railties (5.2.0.beta2)
|
|
69
|
-
actionpack (= 5.2.0.beta2)
|
|
70
|
-
activesupport (= 5.2.0.beta2)
|
|
71
|
-
method_source
|
|
72
|
-
rake (>= 0.8.7)
|
|
73
|
-
thor (>= 0.18.1, < 2.0)
|
|
74
133
|
rake (10.5.0)
|
|
134
|
+
rb-fsevent (0.10.2)
|
|
135
|
+
rb-inotify (0.9.10)
|
|
136
|
+
ffi (>= 0.5.0, < 2)
|
|
75
137
|
rspec (3.7.0)
|
|
76
138
|
rspec-core (~> 3.7.0)
|
|
77
139
|
rspec-expectations (~> 3.7.0)
|
|
@@ -85,22 +147,34 @@ GEM
|
|
|
85
147
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
86
148
|
rspec-support (~> 3.7.0)
|
|
87
149
|
rspec-support (3.7.0)
|
|
150
|
+
ruby_dep (1.5.0)
|
|
151
|
+
shellany (0.0.1)
|
|
152
|
+
sprockets (3.7.1)
|
|
153
|
+
concurrent-ruby (~> 1.0)
|
|
154
|
+
rack (> 1, < 3)
|
|
155
|
+
sprockets-rails (3.2.1)
|
|
156
|
+
actionpack (>= 4.0)
|
|
157
|
+
activesupport (>= 4.0)
|
|
158
|
+
sprockets (>= 3.0.0)
|
|
88
159
|
sqlite3 (1.3.13)
|
|
89
160
|
thor (0.20.0)
|
|
90
161
|
thread_safe (0.3.6)
|
|
91
162
|
tzinfo (1.2.4)
|
|
92
163
|
thread_safe (~> 0.1)
|
|
164
|
+
websocket-driver (0.6.5)
|
|
165
|
+
websocket-extensions (>= 0.1.0)
|
|
166
|
+
websocket-extensions (0.1.3)
|
|
93
167
|
|
|
94
168
|
PLATFORMS
|
|
95
169
|
ruby
|
|
96
170
|
|
|
97
171
|
DEPENDENCIES
|
|
98
|
-
activerecord (>= 5.2.0.beta2, < 5.3)
|
|
99
172
|
benchmark-ips
|
|
100
173
|
bundler (~> 1.16)
|
|
101
174
|
database_cleaner (~> 1.6)
|
|
175
|
+
guard
|
|
102
176
|
pry-byebug
|
|
103
|
-
|
|
177
|
+
rails!
|
|
104
178
|
rake (~> 10.0)
|
|
105
179
|
respond_to_faster!
|
|
106
180
|
rspec (~> 3.0)
|
data/README.md
CHANGED
|
@@ -17,11 +17,11 @@ queries.
|
|
|
17
17
|
Just add the gem to your Gemfile:
|
|
18
18
|
|
|
19
19
|
```ruby
|
|
20
|
-
gem 'respond_to_faster', '~> 0.
|
|
20
|
+
gem 'respond_to_faster', '~> 0.2.0'
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
That's it! Read on to learn about what RespondToFaster is doing under the hood
|
|
24
|
-
(or checkout the source code, it's only
|
|
24
|
+
(or checkout the source code, it's only a dozen lines long!)
|
|
25
25
|
|
|
26
26
|
## Background
|
|
27
27
|
|
|
@@ -79,36 +79,25 @@ alternative.
|
|
|
79
79
|
|
|
80
80
|
## What this gem does
|
|
81
81
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
82
|
+
The reality is that in the vast majority of cases, you don't need this
|
|
83
|
+
`method_missing` override. AR has grown over the years to the point where most
|
|
84
|
+
attribute methods are defined, so these fallbacks are not necessary.
|
|
85
85
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
ActiveModel::AttributeMethods.send(:remove_method, :method_missing)
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
For the vast majority of cases, *this will have no impact on your ActiveRecord
|
|
94
|
-
objects*. AR has grown over the years to the point where most attribute methods
|
|
95
|
-
are defined, so these fallbacks are not necessary.
|
|
96
|
-
|
|
97
|
-
The one exception is the example earlier with the custom aliased query. In this
|
|
98
|
-
case, depending on the query, some custom attributes are needed on the objects
|
|
99
|
-
returned, and ActiveRecord still relies on this (very slow) mechanism to make
|
|
100
|
-
the magic work.
|
|
86
|
+
But there is one case where you do: so-called "virtual columns". This is the
|
|
87
|
+
type of query mentioned at the top of this readme. In this case, depending on
|
|
88
|
+
the query, some custom attributes are needed on the objects returned, and
|
|
89
|
+
ActiveRecord still relies on this (very slow) mechanism to make the magic work.
|
|
101
90
|
|
|
102
91
|
But this is a high price to pay for some simple magic. This gem instead
|
|
103
|
-
*defines the methods* on
|
|
104
|
-
you never need to go to `method_missing`. This makes
|
|
105
|
-
much as 5-10 times
|
|
92
|
+
*defines the methods* on a module included into the singleton classes of the
|
|
93
|
+
objects returned, so that you never need to go to `method_missing`. This makes
|
|
94
|
+
calling these accessors things significantly faster, as much as 5-10 times
|
|
95
|
+
faster.
|
|
106
96
|
|
|
107
97
|
## Caveats
|
|
108
98
|
|
|
109
99
|
If you don't use any custom querying with aliases like the one above, this gem
|
|
110
|
-
|
|
111
|
-
may not even notice that.
|
|
100
|
+
will not do much for you.
|
|
112
101
|
|
|
113
102
|
However, if you've got some crazy heavy SQL logic somewhere deep in your
|
|
114
103
|
application, and you're finding it takes forever, give this gem a shot and tell
|
data/lib/respond_to_faster.rb
CHANGED
|
@@ -2,22 +2,16 @@ require "active_record"
|
|
|
2
2
|
require "respond_to_faster/version"
|
|
3
3
|
|
|
4
4
|
module RespondToFaster
|
|
5
|
-
def
|
|
6
|
-
super.tap do
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
else
|
|
13
|
-
uncached_attrs.each &singleton_class.method(:define_attribute_method)
|
|
14
|
-
klass.const_set(mod_name, singleton_class.send(:generated_attribute_methods))
|
|
15
|
-
end
|
|
5
|
+
def find_by_sql(sql, binds = [], preparable: nil, &block)
|
|
6
|
+
super.tap do |records|
|
|
7
|
+
record = records.first
|
|
8
|
+
unless record.nil? || (uncached_attrs = record.attribute_names - attribute_names).empty?
|
|
9
|
+
uncached_attrs.each &record.singleton_class.method(:define_method_attribute)
|
|
10
|
+
mod = record.singleton_class.send(:generated_attribute_methods)
|
|
11
|
+
records[1..-1].each { |record| record.singleton_class.include mod }
|
|
16
12
|
end
|
|
17
13
|
end
|
|
18
14
|
end
|
|
19
15
|
end
|
|
20
16
|
|
|
21
|
-
ActiveRecord::Base.
|
|
22
|
-
ActiveModel::AttributeMethods.send(:remove_method, :respond_to?)
|
|
23
|
-
ActiveModel::AttributeMethods.send(:remove_method, :method_missing)
|
|
17
|
+
ActiveRecord::Base.extend RespondToFaster
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: respond_to_faster
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chris Salzberg
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-12-
|
|
11
|
+
date: 2017-12-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|
|
@@ -123,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
123
123
|
version: '0'
|
|
124
124
|
requirements: []
|
|
125
125
|
rubyforge_project:
|
|
126
|
-
rubygems_version: 2.6.
|
|
126
|
+
rubygems_version: 2.6.14
|
|
127
127
|
signing_key:
|
|
128
128
|
specification_version: 4
|
|
129
129
|
summary: Faster response times for your ActiveRecord attribute methods.
|