periscope-activerecord 1.0.0 → 2.0.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 +15 -0
- data/{LICENSE → LICENSE.md} +0 -0
- data/README.md +31 -13
- data/lib/periscope-activerecord.rb +1 -1
- data/lib/periscope/adapters/active_record.rb +3 -3
- data/periscope-activerecord.gemspec +10 -16
- metadata +18 -110
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YWEwZjJlOGZiNjhmNzNhM2Y4OTliNGU3MDkwMjczNWZmMjJhYmFmNA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
N2U2NWRmMDljZWZhMjZhZWY1ZjA2YWZlMjM3MWRkMjIyZWFmNDc2Yg==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
YmY0ZWIwYTk1YTA2NmZhMWE0NTY5N2MzOWViYzZmYzJiZGI1YWQ1ZDg5MmVj
|
10
|
+
ZWM0MjI5NGQ2ZDBjMjhhY2IwMGRlMDEwN2IwYmMzNmRjMTdjYjdlNGYyOTA4
|
11
|
+
ZmJhODI5NjUzYzkyMTdiMTliZWVmNjcwZmQzMTYxYjM3MDZiOGY=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MTQ5YzJkZWZlZDhlODg2ODkzOWQwNWQ1OGEzMTk5MWQ0ODNmNjg0N2E2OTU1
|
14
|
+
MzRhOThlNWUyZjU3NmI3MjM0MGIwYTMzZDllOWJhMjMxZTQ5MDQzMDdmMzlm
|
15
|
+
YWYzMmY2N2IxMTg4MTZlNGU2OWFiODdhZDc5Mzk3YmVhNDM4MjQ=
|
data/{LICENSE → LICENSE.md}
RENAMED
File without changes
|
data/README.md
CHANGED
@@ -1,7 +1,23 @@
|
|
1
|
-
# Periscope
|
1
|
+
# Periscope
|
2
|
+
[](http://badge.fury.io/rb/periscope)
|
3
|
+
[](https://travis-ci.org/laserlemon/periscope)
|
4
|
+
[](https://codeclimate.com/github/laserlemon/periscope)
|
5
|
+
[](https://coveralls.io/r/laserlemon/periscope)
|
6
|
+
[](https://gemnasium.com/laserlemon/periscope)
|
2
7
|
|
3
8
|
Periscope provides a simple way to chain scopes on your models and to open those scopes up to your users.
|
4
9
|
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
Periscope sits on top of your favorite ORM. Currently, the following ORMs are supported through individual gems extending Periscope:
|
13
|
+
|
14
|
+
* Active Record ([periscope-activerecord](https://rubygems.org/gems/periscope-activerecord))
|
15
|
+
* MongoMapper ([periscope-mongo_mapper](https://rubygems.org/gems/periscope-mongo_mapper))
|
16
|
+
* Mongoid ([periscope-mongoid](https://rubygems.org/gems/periscope-mongoid))
|
17
|
+
* DataMapper ([periscope-data_mapper](https://rubygems.org/gems/periscope-data_mapper))
|
18
|
+
|
19
|
+
Simply add the gem to your bundle and you're off!
|
20
|
+
|
5
21
|
## The Problem
|
6
22
|
|
7
23
|
More often than not, the index action in a RESTful Rails controller is expected to do a lot more than simply return all the records for a given model. We ask it to do all sorts of stuff like filtering, sorting and paginating results. Of course, this is typically done using _scopes_.
|
@@ -40,8 +56,8 @@ Within your model you can use the `scope_accessible` method to specify which sco
|
|
40
56
|
|
41
57
|
```ruby
|
42
58
|
class User < ActiveRecord::Base
|
43
|
-
scope :gender,
|
44
|
-
scope :makes,
|
59
|
+
scope :gender, proc { |g| where(gender: g) }
|
60
|
+
scope :makes, proc { |s| where("salary >= ?", s) }
|
45
61
|
|
46
62
|
scope_accessible :gender
|
47
63
|
end
|
@@ -71,9 +87,9 @@ Parsers must respond to the `call` method, receiving the raw query parameter and
|
|
71
87
|
|
72
88
|
```ruby
|
73
89
|
class User < ActiveRecord::Base
|
74
|
-
scope :gender,
|
90
|
+
scope :gender, proc { |g| where(gender: g) }
|
75
91
|
|
76
|
-
scope_accessible :gender, parser:
|
92
|
+
scope_accessible :gender, parser: proc { |g| [g.downcase] }
|
77
93
|
end
|
78
94
|
```
|
79
95
|
|
@@ -83,8 +99,8 @@ But not all scopes accept arguments. For scopes that you want to toggle on or of
|
|
83
99
|
|
84
100
|
```ruby
|
85
101
|
class User < ActiveRecord::Base
|
86
|
-
scope :male, where(gender:
|
87
|
-
scope :female, where(gender:
|
102
|
+
scope :male, proc { where(gender: "male") }
|
103
|
+
scope :female, proc { where(gender: "female") }
|
88
104
|
|
89
105
|
scope_accessible :male, :female, boolean: true
|
90
106
|
end
|
@@ -100,11 +116,11 @@ class Project < ActiveRecord::Base
|
|
100
116
|
scope_accessible :end, method: :ends_before
|
101
117
|
|
102
118
|
def self.begins_after(date)
|
103
|
-
where(
|
119
|
+
where("begins_at >= ?", date)
|
104
120
|
end
|
105
121
|
|
106
122
|
def self.ends_before(date)
|
107
|
-
where(
|
123
|
+
where("ends_at <= ?", date)
|
108
124
|
end
|
109
125
|
end
|
110
126
|
```
|
@@ -113,19 +129,21 @@ Alternatively, you can set `:prefix` and/or `:suffix` options, which will be app
|
|
113
129
|
|
114
130
|
```ruby
|
115
131
|
class Project < ActiveRecord::Base
|
116
|
-
scope_accessible :begin, :end, suffix:
|
132
|
+
scope_accessible :begin, :end, suffix: "_date"
|
117
133
|
|
118
134
|
def self.begin_date(date)
|
119
|
-
where(
|
135
|
+
where("begins_at >= ?", date)
|
120
136
|
end
|
121
137
|
|
122
138
|
def self.end_date(date)
|
123
|
-
where(
|
139
|
+
where("ends_at <= ?", date)
|
124
140
|
end
|
125
141
|
end
|
126
142
|
```
|
127
143
|
|
128
|
-
## This sucks.
|
144
|
+
## This sucks.
|
145
|
+
|
146
|
+
How can I make it better?
|
129
147
|
|
130
148
|
1. Fork it.
|
131
149
|
2. Make it better.
|
@@ -1 +1 @@
|
|
1
|
-
require
|
1
|
+
require "periscope/adapters/active_record"
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "periscope"
|
2
|
+
require "active_record"
|
3
3
|
|
4
4
|
module Periscope
|
5
5
|
module Adapters
|
@@ -9,7 +9,7 @@ module Periscope
|
|
9
9
|
private
|
10
10
|
|
11
11
|
def periscope_default_scope
|
12
|
-
scoped
|
12
|
+
::ActiveRecord::VERSION::MAJOR == 4 ? all : scoped
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
@@ -1,28 +1,22 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
Gem::Specification.new do |gem|
|
4
|
-
gem.name =
|
5
|
-
gem.version =
|
4
|
+
gem.name = "periscope-activerecord"
|
5
|
+
gem.version = "2.0.0"
|
6
6
|
|
7
|
-
gem.
|
8
|
-
gem.email
|
9
|
-
gem.
|
10
|
-
gem.
|
11
|
-
gem.
|
7
|
+
gem.author = "Steve Richert"
|
8
|
+
gem.email = "steve.richert@gmail.com"
|
9
|
+
gem.summary = "Push your Active Record models' scopes up to the surface"
|
10
|
+
gem.homepage = "https://github.com/laserlemon/periscope"
|
11
|
+
gem.license = "MIT"
|
12
12
|
|
13
|
-
gem.add_dependency
|
14
|
-
gem.add_dependency
|
15
|
-
|
16
|
-
gem.add_development_dependency 'database_cleaner', '~> 0.8'
|
17
|
-
gem.add_development_dependency 'factory_girl', '>= 2', '< 4'
|
18
|
-
gem.add_development_dependency 'rake', '~> 0.9'
|
19
|
-
gem.add_development_dependency 'rspec', '~> 2.0'
|
20
|
-
gem.add_development_dependency 'sqlite3'
|
13
|
+
gem.add_dependency "activerecord", ">= 3", "< 5"
|
14
|
+
gem.add_dependency "periscope", "~> 2.0"
|
21
15
|
|
22
16
|
gem.files = %w(
|
23
|
-
LICENSE
|
24
17
|
lib/periscope-activerecord.rb
|
25
18
|
lib/periscope/adapters/active_record.rb
|
19
|
+
LICENSE.md
|
26
20
|
periscope-activerecord.gemspec
|
27
21
|
README.md
|
28
22
|
)
|
metadata
CHANGED
@@ -1,174 +1,82 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: periscope-activerecord
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 2.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Steve Richert
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-03-06 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: activerecord
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ~>
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '3.0'
|
22
|
-
type: :runtime
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '3.0'
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: periscope
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ~>
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: '1.0'
|
38
|
-
type: :runtime
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '1.0'
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: database_cleaner
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ~>
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '0.8'
|
54
|
-
type: :development
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0.8'
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: factory_girl
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
16
|
requirements:
|
67
17
|
- - ! '>='
|
68
18
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
19
|
+
version: '3'
|
70
20
|
- - <
|
71
21
|
- !ruby/object:Gem::Version
|
72
|
-
version: '
|
73
|
-
type: :
|
22
|
+
version: '5'
|
23
|
+
type: :runtime
|
74
24
|
prerelease: false
|
75
25
|
version_requirements: !ruby/object:Gem::Requirement
|
76
|
-
none: false
|
77
26
|
requirements:
|
78
27
|
- - ! '>='
|
79
28
|
- !ruby/object:Gem::Version
|
80
|
-
version: '
|
29
|
+
version: '3'
|
81
30
|
- - <
|
82
31
|
- !ruby/object:Gem::Version
|
83
|
-
version: '
|
84
|
-
- !ruby/object:Gem::Dependency
|
85
|
-
name: rake
|
86
|
-
requirement: !ruby/object:Gem::Requirement
|
87
|
-
none: false
|
88
|
-
requirements:
|
89
|
-
- - ~>
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
version: '0.9'
|
92
|
-
type: :development
|
93
|
-
prerelease: false
|
94
|
-
version_requirements: !ruby/object:Gem::Requirement
|
95
|
-
none: false
|
96
|
-
requirements:
|
97
|
-
- - ~>
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
version: '0.9'
|
32
|
+
version: '5'
|
100
33
|
- !ruby/object:Gem::Dependency
|
101
|
-
name:
|
34
|
+
name: periscope
|
102
35
|
requirement: !ruby/object:Gem::Requirement
|
103
|
-
none: false
|
104
36
|
requirements:
|
105
37
|
- - ~>
|
106
38
|
- !ruby/object:Gem::Version
|
107
39
|
version: '2.0'
|
108
|
-
type: :
|
40
|
+
type: :runtime
|
109
41
|
prerelease: false
|
110
42
|
version_requirements: !ruby/object:Gem::Requirement
|
111
|
-
none: false
|
112
43
|
requirements:
|
113
44
|
- - ~>
|
114
45
|
- !ruby/object:Gem::Version
|
115
46
|
version: '2.0'
|
116
|
-
|
117
|
-
|
118
|
-
requirement: !ruby/object:Gem::Requirement
|
119
|
-
none: false
|
120
|
-
requirements:
|
121
|
-
- - ! '>='
|
122
|
-
- !ruby/object:Gem::Version
|
123
|
-
version: '0'
|
124
|
-
type: :development
|
125
|
-
prerelease: false
|
126
|
-
version_requirements: !ruby/object:Gem::Requirement
|
127
|
-
none: false
|
128
|
-
requirements:
|
129
|
-
- - ! '>='
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
|
-
description: Push your ActiveRecord models' scopes up to the surface
|
133
|
-
email:
|
134
|
-
- steve.richert@gmail.com
|
47
|
+
description:
|
48
|
+
email: steve.richert@gmail.com
|
135
49
|
executables: []
|
136
50
|
extensions: []
|
137
51
|
extra_rdoc_files: []
|
138
52
|
files:
|
139
|
-
- LICENSE
|
140
53
|
- lib/periscope-activerecord.rb
|
141
54
|
- lib/periscope/adapters/active_record.rb
|
55
|
+
- LICENSE.md
|
142
56
|
- periscope-activerecord.gemspec
|
143
57
|
- README.md
|
144
58
|
homepage: https://github.com/laserlemon/periscope
|
145
|
-
licenses:
|
59
|
+
licenses:
|
60
|
+
- MIT
|
61
|
+
metadata: {}
|
146
62
|
post_install_message:
|
147
63
|
rdoc_options: []
|
148
64
|
require_paths:
|
149
65
|
- lib
|
150
66
|
required_ruby_version: !ruby/object:Gem::Requirement
|
151
|
-
none: false
|
152
67
|
requirements:
|
153
68
|
- - ! '>='
|
154
69
|
- !ruby/object:Gem::Version
|
155
70
|
version: '0'
|
156
|
-
segments:
|
157
|
-
- 0
|
158
|
-
hash: 2923427527483607329
|
159
71
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
|
-
none: false
|
161
72
|
requirements:
|
162
73
|
- - ! '>='
|
163
74
|
- !ruby/object:Gem::Version
|
164
75
|
version: '0'
|
165
|
-
segments:
|
166
|
-
- 0
|
167
|
-
hash: 2923427527483607329
|
168
76
|
requirements: []
|
169
77
|
rubyforge_project:
|
170
|
-
rubygems_version:
|
78
|
+
rubygems_version: 2.0.0
|
171
79
|
signing_key:
|
172
|
-
specification_version:
|
173
|
-
summary: Push your
|
80
|
+
specification_version: 4
|
81
|
+
summary: Push your Active Record models' scopes up to the surface
|
174
82
|
test_files: []
|