rescoped 0.1.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 +7 -0
- data/.gitignore +11 -0
- data/.rubocop.yml +13 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +85 -0
- data/LICENSE.txt +21 -0
- data/README.md +62 -0
- data/Rakefile +4 -0
- data/bin/console +16 -0
- data/bin/setup +8 -0
- data/lib/rescoped.rb +9 -0
- data/lib/rescoped/error.rb +7 -0
- data/lib/rescoped/query_methods.rb +59 -0
- data/lib/rescoped/version.rb +5 -0
- data/rescoped.gemspec +33 -0
- metadata +188 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: bac70612955cc28de9d0fb10afcb8625bf93643ec3e4fda2e886f58999a46698
|
4
|
+
data.tar.gz: a2c7fe40e52a8e322faafe84ba2b1ab3c6dae83d86a44bfab497f0be2bb26d50
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bb1e608aea1c401d8e518fa52b5735af5355a080199e3ba7cdb9636044fa0c489f3329419e97c2b7e4081a8196e19fe873d9e7481300e3678cd70d309229478d
|
7
|
+
data.tar.gz: feaa57e341951a5d5db5ceb3d3546d0d0ba72091337d94cd917c51773bc9ee5ffbea84f1280e544c5fcd0e15761010d07587fccbaceca091f7fc56cdb9545b18
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
rescoped (0.1.0)
|
5
|
+
activerecord (>= 4.0.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
activemodel (6.0.1)
|
11
|
+
activesupport (= 6.0.1)
|
12
|
+
activerecord (6.0.1)
|
13
|
+
activemodel (= 6.0.1)
|
14
|
+
activesupport (= 6.0.1)
|
15
|
+
activesupport (6.0.1)
|
16
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
17
|
+
i18n (>= 0.7, < 2)
|
18
|
+
minitest (~> 5.1)
|
19
|
+
tzinfo (~> 1.1)
|
20
|
+
zeitwerk (~> 2.2)
|
21
|
+
ast (2.4.0)
|
22
|
+
coderay (1.1.2)
|
23
|
+
concurrent-ruby (1.1.5)
|
24
|
+
diff-lcs (1.3)
|
25
|
+
factory_bot (5.1.1)
|
26
|
+
activesupport (>= 4.2.0)
|
27
|
+
faker (2.7.0)
|
28
|
+
i18n (>= 1.6, < 1.8)
|
29
|
+
i18n (1.7.0)
|
30
|
+
concurrent-ruby (~> 1.0)
|
31
|
+
jaro_winkler (1.5.4)
|
32
|
+
method_source (0.9.2)
|
33
|
+
minitest (5.13.0)
|
34
|
+
parallel (1.19.0)
|
35
|
+
parser (2.6.5.0)
|
36
|
+
ast (~> 2.4.0)
|
37
|
+
pry (0.12.2)
|
38
|
+
coderay (~> 1.1.0)
|
39
|
+
method_source (~> 0.9.0)
|
40
|
+
rainbow (3.0.0)
|
41
|
+
rake (10.5.0)
|
42
|
+
rspec (3.9.0)
|
43
|
+
rspec-core (~> 3.9.0)
|
44
|
+
rspec-expectations (~> 3.9.0)
|
45
|
+
rspec-mocks (~> 3.9.0)
|
46
|
+
rspec-core (3.9.0)
|
47
|
+
rspec-support (~> 3.9.0)
|
48
|
+
rspec-expectations (3.9.0)
|
49
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
50
|
+
rspec-support (~> 3.9.0)
|
51
|
+
rspec-mocks (3.9.0)
|
52
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
53
|
+
rspec-support (~> 3.9.0)
|
54
|
+
rspec-support (3.9.0)
|
55
|
+
rubocop (0.76.0)
|
56
|
+
jaro_winkler (~> 1.5.1)
|
57
|
+
parallel (~> 1.10)
|
58
|
+
parser (>= 2.6)
|
59
|
+
rainbow (>= 2.2.2, < 4.0)
|
60
|
+
ruby-progressbar (~> 1.7)
|
61
|
+
unicode-display_width (>= 1.4.0, < 1.7)
|
62
|
+
ruby-progressbar (1.10.1)
|
63
|
+
sqlite3 (1.4.1)
|
64
|
+
thread_safe (0.3.6)
|
65
|
+
tzinfo (1.2.5)
|
66
|
+
thread_safe (~> 0.1)
|
67
|
+
unicode-display_width (1.6.0)
|
68
|
+
zeitwerk (2.2.1)
|
69
|
+
|
70
|
+
PLATFORMS
|
71
|
+
ruby
|
72
|
+
|
73
|
+
DEPENDENCIES
|
74
|
+
bundler (~> 2.0)
|
75
|
+
factory_bot
|
76
|
+
faker
|
77
|
+
pry
|
78
|
+
rake (~> 10.0)
|
79
|
+
rescoped!
|
80
|
+
rspec (~> 3.2)
|
81
|
+
rubocop (>= 0.76.0)
|
82
|
+
sqlite3
|
83
|
+
|
84
|
+
BUNDLED WITH
|
85
|
+
2.0.2
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2019 Geoff Ereth
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
# Rescoped
|
2
|
+
|
3
|
+
Rescoped allows you to remove specific relations from an activerecord `:joins` or `:includes` with some new utilities, `remove_includes`, `remove_joins`, and `remove_left_outer_joins`
|
4
|
+
|
5
|
+
### Usage
|
6
|
+
|
7
|
+
Consider the following scope:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
class Photo < ApplicationRecord
|
11
|
+
|
12
|
+
scope :public_api, lambda {
|
13
|
+
includes(
|
14
|
+
:users,
|
15
|
+
:likes,
|
16
|
+
:region
|
17
|
+
).viewable.recent
|
18
|
+
}
|
19
|
+
end
|
20
|
+
```
|
21
|
+
|
22
|
+
Rescoped let's you keep an existing scope but **without** the same relations structure. Here's an example of keeping the `:public_api` scope but removing one of the relations from the `:includes`
|
23
|
+
|
24
|
+
```ruby
|
25
|
+
# Avoid an includes(:relation).joins(:relation) and instead restructure as a simple INNER JOIN
|
26
|
+
|
27
|
+
Photo.public_api.remove_includes(:region).joins(:region)
|
28
|
+
```
|
29
|
+
|
30
|
+
Some other **simple** examples:
|
31
|
+
|
32
|
+
1. Remove any number of relations from `:left_outer_joins`.
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
Photo.left_outer_joins(:users, :likes, :region).remove_left_outer_joins(:users, :likes)
|
36
|
+
```
|
37
|
+
|
38
|
+
2. Remove a single relations from the `:joins`
|
39
|
+
```ruby
|
40
|
+
Photo.joins(:users, :likes).remove_joins(:users)
|
41
|
+
```
|
42
|
+
|
43
|
+
3. The rescoped utilities can be used anywhere in the chain:
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
Photo.includes(:users).left_joins(:regions).viewable.recent.remove_includes(:users)
|
47
|
+
```
|
48
|
+
|
49
|
+
## Installation
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
gem 'rescoped'
|
53
|
+
```
|
54
|
+
|
55
|
+
## License
|
56
|
+
|
57
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
58
|
+
|
59
|
+
|
60
|
+
## Author
|
61
|
+
|
62
|
+
Geoff Ereth (github@geoffereth.com)
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'rescoped'
|
6
|
+
require 'pry'
|
7
|
+
require 'irb'
|
8
|
+
|
9
|
+
# load models and schema
|
10
|
+
require File.expand_path('../spec/support/models.rb', __dir__)
|
11
|
+
database = File.join('../spec/rescoped.sqlite3')
|
12
|
+
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: database)
|
13
|
+
load File.expand_path('../spec/support/schema.rb', __dir__)
|
14
|
+
|
15
|
+
Pry.start
|
16
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
data/lib/rescoped.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_record/relation'
|
4
|
+
require 'rescoped/error'
|
5
|
+
|
6
|
+
module Rescoped
|
7
|
+
module QueryMethods # :nodoc:
|
8
|
+
SUPPORTED_QUERY_METHODS = %i[joins left_outer_joins includes].freeze
|
9
|
+
|
10
|
+
# @!method remove_joins(*args)
|
11
|
+
# Removes any number of joins relations in scope
|
12
|
+
#
|
13
|
+
# @param args [Array<Symbol>] associations to remove
|
14
|
+
# @return [ActiveRecord::Relation]
|
15
|
+
# @example
|
16
|
+
# Model.joins(:a, :b, :c).remove_joins(:a, :b)
|
17
|
+
|
18
|
+
# @!method remove_left_outer_joins(*args)
|
19
|
+
# Removes any number of left outer joins relations in scope
|
20
|
+
#
|
21
|
+
# @param args [Array<Symbol>] associations to remove
|
22
|
+
# @return [ActiveRecord::Relation]
|
23
|
+
# @example
|
24
|
+
# Model.left_joins(:a, :b, :c).remove_left_outer_joins(:b)
|
25
|
+
|
26
|
+
# @!method remove_includes(*args)
|
27
|
+
# Removes any number of eager loaded relations in scope
|
28
|
+
#
|
29
|
+
# @param args [Array<Symbol>] associations to remove
|
30
|
+
# @return [ActiveRecord::Relation]
|
31
|
+
# @example
|
32
|
+
# Model.includes(:a, :b, :c).remove_includes(:a)
|
33
|
+
|
34
|
+
SUPPORTED_QUERY_METHODS.each do |name|
|
35
|
+
define_method("remove_#{name}") do |*args|
|
36
|
+
rescoped(query_method: name, relations: args)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
# @param query_method [Symbol] ActiveRecord::QueryMethods method name
|
43
|
+
# @param relations [Array<Symbol>] relations to remove
|
44
|
+
# @raise [Rescoped::Error::UNSUPPORTED_QUERY_METHOD]
|
45
|
+
# if query_method is unsupported
|
46
|
+
|
47
|
+
def rescoped(query_method:, relations: [])
|
48
|
+
unless SUPPORTED_QUERY_METHODS.include?(query_method)
|
49
|
+
raise Rescoped::Error::UNSUPPORTED_QUERY_METHOD
|
50
|
+
end
|
51
|
+
|
52
|
+
new_relations = values.fetch(query_method, []) - relations
|
53
|
+
new_values = values.merge(query_method => new_relations)
|
54
|
+
klass = @klass || self
|
55
|
+
|
56
|
+
ActiveRecord::Relation.new(klass, values: new_values)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/rescoped.gemspec
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'rescoped/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = 'rescoped'
|
9
|
+
spec.version = Rescoped::VERSION
|
10
|
+
spec.authors = ['Geoff Ereth']
|
11
|
+
spec.email = ['github@geoffereth.com']
|
12
|
+
spec.summary = 'Remove includes or joins from an activerecord scope'
|
13
|
+
spec.homepage = 'https://github.com/gadogado/rescoped'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
16
|
+
spec.metadata['source_code_uri'] = 'https://github.com/gadogado/rescoped'
|
17
|
+
spec.metadata['changelog_uri'] = 'https://github.com/gadogado/rescoped/master/CHANGELOG.md'
|
18
|
+
|
19
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
20
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
21
|
+
end
|
22
|
+
spec.require_paths = ['lib']
|
23
|
+
|
24
|
+
spec.add_runtime_dependency 'activerecord', '>= 4.0.0'
|
25
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
26
|
+
spec.add_development_dependency 'factory_bot'
|
27
|
+
spec.add_development_dependency 'faker'
|
28
|
+
spec.add_development_dependency 'pry'
|
29
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
30
|
+
spec.add_development_dependency 'rspec', '~> 3.2'
|
31
|
+
spec.add_development_dependency 'rubocop', '>= 0.76.0'
|
32
|
+
spec.add_development_dependency 'sqlite3'
|
33
|
+
end
|
metadata
ADDED
@@ -0,0 +1,188 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rescoped
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Geoff Ereth
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-11-26 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activerecord
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: factory_bot
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: faker
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '10.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '10.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.2'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.2'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubocop
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 0.76.0
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 0.76.0
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: sqlite3
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
description:
|
140
|
+
email:
|
141
|
+
- github@geoffereth.com
|
142
|
+
executables: []
|
143
|
+
extensions: []
|
144
|
+
extra_rdoc_files: []
|
145
|
+
files:
|
146
|
+
- ".gitignore"
|
147
|
+
- ".rubocop.yml"
|
148
|
+
- CHANGELOG.md
|
149
|
+
- Gemfile
|
150
|
+
- Gemfile.lock
|
151
|
+
- LICENSE.txt
|
152
|
+
- README.md
|
153
|
+
- Rakefile
|
154
|
+
- bin/console
|
155
|
+
- bin/setup
|
156
|
+
- lib/rescoped.rb
|
157
|
+
- lib/rescoped/error.rb
|
158
|
+
- lib/rescoped/query_methods.rb
|
159
|
+
- lib/rescoped/version.rb
|
160
|
+
- rescoped.gemspec
|
161
|
+
homepage: https://github.com/gadogado/rescoped
|
162
|
+
licenses:
|
163
|
+
- MIT
|
164
|
+
metadata:
|
165
|
+
homepage_uri: https://github.com/gadogado/rescoped
|
166
|
+
source_code_uri: https://github.com/gadogado/rescoped
|
167
|
+
changelog_uri: https://github.com/gadogado/rescoped/master/CHANGELOG.md
|
168
|
+
post_install_message:
|
169
|
+
rdoc_options: []
|
170
|
+
require_paths:
|
171
|
+
- lib
|
172
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
173
|
+
requirements:
|
174
|
+
- - ">="
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: '0'
|
177
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
|
+
requirements:
|
179
|
+
- - ">="
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
requirements: []
|
183
|
+
rubyforge_project:
|
184
|
+
rubygems_version: 2.7.6
|
185
|
+
signing_key:
|
186
|
+
specification_version: 4
|
187
|
+
summary: Remove includes or joins from an activerecord scope
|
188
|
+
test_files: []
|