activerecord-endoscope 0.0.2 → 0.0.3
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/.gitignore +1 -0
- data/.travis.yml +3 -0
- data/Gemfile +1 -0
- data/README.md +3 -0
- data/Rakefile +10 -1
- data/activerecord-endoscope.gemspec +3 -0
- data/lib/active_record/endoscope/version.rb +1 -1
- data/spec/scope_spec.rb +28 -0
- data/spec/spec_helper.rb +74 -0
- metadata +50 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4f7b0f144f4d540ddf9c2cfeb5193de79fb4406e
|
4
|
+
data.tar.gz: 21d1a181faaec6953411bd9a4574b084ed0e15d5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1254fd5b3774e8c16b10261a3f70e57993b44015639b93e1b57ef4716dbce5eaaea4b24a3607bbf651289661a9271ed08963f3618094682f34e65a5631b549bd
|
7
|
+
data.tar.gz: ab0199d0cd4bb7448e2dc655b1876b5af68a6f97831372d0fe09e91ef070dfc6f54871fb3e39a6286b9b50ddf204a00d1f876bfaafc64115b54c794c66d8ed77
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# activerecord-endoscope
|
2
2
|
|
3
|
+
[](https://travis-ci.org/tkawa/activerecord-endoscope)
|
4
|
+
[](http://badge.fury.io/rb/activerecord-endoscope)
|
5
|
+
|
3
6
|
Endoscope enables scope to apply to model instance
|
4
7
|
|
5
8
|
## Example
|
data/Rakefile
CHANGED
@@ -23,4 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_dependency 'arel_ruby'
|
24
24
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
25
25
|
spec.add_development_dependency 'rake'
|
26
|
+
spec.add_development_dependency 'rspec'
|
27
|
+
spec.add_development_dependency 'sqlite3'
|
28
|
+
spec.add_development_dependency 'squeel'
|
26
29
|
end
|
data/spec/scope_spec.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "user's scope" do
|
4
|
+
subject {
|
5
|
+
User.create!(
|
6
|
+
locale: 'ja',
|
7
|
+
sign_in_count: 1,
|
8
|
+
name: 'foobar',
|
9
|
+
email: 'foobar@example.com',
|
10
|
+
joined_at: Time.parse('2013-09-19 00:00:00'),
|
11
|
+
specified_on: Date.parse('2013-09-19')
|
12
|
+
)
|
13
|
+
}
|
14
|
+
specify { expect(subject).to be_ja }
|
15
|
+
specify { expect(subject).not_to be_not_ja }
|
16
|
+
specify { expect(subject).to be_ja_or_en }
|
17
|
+
specify { expect(subject).not_to be_not_ja_or_en }
|
18
|
+
specify { expect(subject).to be_rarely_signed_in }
|
19
|
+
specify { expect(subject).not_to be_not_rarely_signed_in }
|
20
|
+
specify { expect(subject).to be_recently_joined }
|
21
|
+
specify { expect(subject).to be_specified_day_in_this_week }
|
22
|
+
specify { expect(subject).not_to have_no_email }
|
23
|
+
specify { expect(subject).to have_email }
|
24
|
+
specify { expect(subject).to be_named('foo') }
|
25
|
+
specify { expect(subject).not_to be_named('baz') }
|
26
|
+
specify { expect(subject).not_to be_heavily_used }
|
27
|
+
specify { expect(subject).to be_complex_logic }
|
28
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
require 'active_record'
|
4
|
+
require 'arel_ruby'
|
5
|
+
require 'activerecord-endoscope'
|
6
|
+
require 'squeel'
|
7
|
+
|
8
|
+
# database
|
9
|
+
ActiveRecord::Base.configurations = {'test' => {:adapter => 'sqlite3', :database => ':memory:'}}
|
10
|
+
ActiveRecord::Base.establish_connection('test')
|
11
|
+
|
12
|
+
# models
|
13
|
+
class User < ActiveRecord::Base
|
14
|
+
extend ActiveRecord::Endoscope
|
15
|
+
scope :ja, -> {
|
16
|
+
where(locale: 'ja')
|
17
|
+
}
|
18
|
+
scope :not_ja, -> {
|
19
|
+
where.not(locale: 'ja')
|
20
|
+
}
|
21
|
+
scope :ja_or_en, -> {
|
22
|
+
where(locale: ['ja', 'en'])
|
23
|
+
#where{ (locale == 'ja') | (locale == 'en') }
|
24
|
+
}
|
25
|
+
scope :not_ja_or_en, -> {
|
26
|
+
where.not(locale: ['ja', 'en'])
|
27
|
+
}
|
28
|
+
scope :rarely_signed_in, -> {
|
29
|
+
where(sign_in_count: 0..3)
|
30
|
+
}
|
31
|
+
scope :not_rarely_signed_in, -> {
|
32
|
+
where.not(sign_in_count: 0..3)
|
33
|
+
}
|
34
|
+
scope :recently_joined, -> {
|
35
|
+
now = Time.parse('2013-09-20 00:00:00')
|
36
|
+
where(joined_at: now.ago(1.week)..now)
|
37
|
+
}
|
38
|
+
scope :specified_day_in_this_week, -> {
|
39
|
+
now = Date.parse('2013-09-20')
|
40
|
+
where(specified_on: now.beginning_of_week..now.end_of_week)
|
41
|
+
}
|
42
|
+
scope :have_no_email, -> {
|
43
|
+
where(email: nil)
|
44
|
+
}
|
45
|
+
scope :have_email, -> {
|
46
|
+
where.not(email: nil).where.not(email: '')
|
47
|
+
}
|
48
|
+
# using squeel
|
49
|
+
scope :named, ->(param) {
|
50
|
+
where{ name.like "%#{param}%" }
|
51
|
+
}
|
52
|
+
scope :not_named, ->(param) {
|
53
|
+
where{ name.not_like "%#{param}%" }
|
54
|
+
}
|
55
|
+
scope :heavily_used, -> {
|
56
|
+
where{ sign_in_count >= 4 }
|
57
|
+
}
|
58
|
+
scope :complex_logic, -> {
|
59
|
+
where{ ((locale == 'ja') & (email != nil)) | ((locale == 'en') & (email == nil)) }
|
60
|
+
}
|
61
|
+
end
|
62
|
+
|
63
|
+
# migrations
|
64
|
+
class CreateAllTables < ActiveRecord::Migration
|
65
|
+
def self.up
|
66
|
+
create_table(:users) {|t| t.string :locale; t.integer :sign_in_count; t.string :name; t.string :email; t.datetime :joined_at; t.date :specified_on}
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
RSpec.configure do |config|
|
71
|
+
config.before :all do
|
72
|
+
CreateAllTables.up unless ActiveRecord::Base.connection.table_exists?('users')
|
73
|
+
end
|
74
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-endoscope
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Toru KAWAMURA
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-09-
|
11
|
+
date: 2013-09-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -80,6 +80,48 @@ dependencies:
|
|
80
80
|
- - '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: sqlite3
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: squeel
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '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'
|
83
125
|
description: Endoscope enables scope to apply to model instance
|
84
126
|
email:
|
85
127
|
- tkawa@4bit.net
|
@@ -88,6 +130,7 @@ extensions: []
|
|
88
130
|
extra_rdoc_files: []
|
89
131
|
files:
|
90
132
|
- .gitignore
|
133
|
+
- .travis.yml
|
91
134
|
- Gemfile
|
92
135
|
- LICENSE.txt
|
93
136
|
- README.md
|
@@ -96,6 +139,8 @@ files:
|
|
96
139
|
- lib/active_record/endoscope.rb
|
97
140
|
- lib/active_record/endoscope/version.rb
|
98
141
|
- lib/activerecord-endoscope.rb
|
142
|
+
- spec/scope_spec.rb
|
143
|
+
- spec/spec_helper.rb
|
99
144
|
homepage: https://github.com/tkawa/activerecord-endoscope
|
100
145
|
licenses:
|
101
146
|
- MIT
|
@@ -120,4 +165,6 @@ rubygems_version: 2.0.3
|
|
120
165
|
signing_key:
|
121
166
|
specification_version: 4
|
122
167
|
summary: Endoscope enables scope to apply to model instance
|
123
|
-
test_files:
|
168
|
+
test_files:
|
169
|
+
- spec/scope_spec.rb
|
170
|
+
- spec/spec_helper.rb
|