microscope 0.0.1 → 0.1
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.md +21 -1
- data/lib/microscope.rb +6 -1
- data/lib/microscope/mixin.rb +6 -1
- data/lib/microscope/version.rb +1 -1
- data/spec/microscope/mixin_spec.rb +53 -0
- data/spec/support/macros/model_macros.rb +2 -2
- metadata +4 -4
data/README.md
CHANGED
@@ -41,10 +41,30 @@ Event.expired_before_now
|
|
41
41
|
Event.expired_after_or_at(2.months.from_now)
|
42
42
|
# SELECT * FROM `events` where `events`.`expired_at` >= '2013-09-05 15:43:42'
|
43
43
|
|
44
|
-
Event.expired_between(2.months.
|
44
|
+
Event.expired_between(2.months.ago..1.month.from_now)
|
45
45
|
# SELECT * FROM `events` where `events`.`expired_at` BETWEEN '2013-05-05 15:43:42' AND '2013-08-05 15:43:42'
|
46
46
|
```
|
47
47
|
|
48
|
+
### Options
|
49
|
+
|
50
|
+
You can use a few options when calling `acts_as_microscope`:
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
class Event < ActiveRecord::Base
|
54
|
+
acts_as_microscope, only: [:created_at]
|
55
|
+
end
|
56
|
+
|
57
|
+
class User < ActiveRecord::Base
|
58
|
+
acts_as_microscope, except: [:activated_at]
|
59
|
+
end
|
60
|
+
|
61
|
+
Event.created_before(2.months.ago) # works!
|
62
|
+
Event.updated_before(2.months.ago) # NoMethodError
|
63
|
+
|
64
|
+
User.created_before(2.months.ago) # works!
|
65
|
+
User.activated_before(2.months.ago) # NoMethodError
|
66
|
+
```
|
67
|
+
|
48
68
|
## License
|
49
69
|
|
50
70
|
`Microscope` is © 2013 [Mirego](http://www.mirego.com) and may be freely distributed under the [New BSD license](http://opensource.org/licenses/BSD-3-Clause). See the [`LICENSE.md`](https://github.com/mirego/microscope/blob/master/LICENSE.md) file.
|
data/lib/microscope.rb
CHANGED
@@ -8,9 +8,14 @@ require "microscope/mixin"
|
|
8
8
|
module Microscope
|
9
9
|
def self.inject_into_active_record
|
10
10
|
@inject_into_active_record ||= Proc.new do
|
11
|
-
def self.acts_as_microscope
|
11
|
+
def self.acts_as_microscope(options = {})
|
12
|
+
self.microscope_options = options
|
12
13
|
self.send :include, Microscope::Mixin
|
13
14
|
end
|
15
|
+
|
16
|
+
def self.microscope_options=(options)
|
17
|
+
@microscope_options = options
|
18
|
+
end
|
14
19
|
end
|
15
20
|
end
|
16
21
|
end
|
data/lib/microscope/mixin.rb
CHANGED
@@ -8,7 +8,12 @@ module Microscope
|
|
8
8
|
|
9
9
|
module ClassMethods
|
10
10
|
def define_microscrope_scopes
|
11
|
-
|
11
|
+
except = @microscope_options[:except] || []
|
12
|
+
model_columns = self.columns.dup.reject { |c| except.include?(c.name.to_sym) }
|
13
|
+
|
14
|
+
if only = @microscope_options[:only]
|
15
|
+
model_columns = model_columns.select { |c| only.include?(c.name.to_sym) }
|
16
|
+
end
|
12
17
|
|
13
18
|
boolean_fields = model_columns.select { |c| c.type == :boolean }.map(&:name)
|
14
19
|
class_eval do
|
data/lib/microscope/version.rb
CHANGED
@@ -1,6 +1,59 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Microscope::Mixin do
|
4
|
+
describe :acts_as_microscope do
|
5
|
+
subject { User }
|
6
|
+
|
7
|
+
before do
|
8
|
+
run_migration do
|
9
|
+
create_table(:users, force: true) do |t|
|
10
|
+
t.boolean :active, default: false
|
11
|
+
t.boolean :admin, default: false
|
12
|
+
t.boolean :moderator, default: false
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe :except do
|
18
|
+
before do
|
19
|
+
microscope 'User', except: [:admin]
|
20
|
+
end
|
21
|
+
|
22
|
+
it { should respond_to :active }
|
23
|
+
it { should respond_to :not_active }
|
24
|
+
it { should respond_to :moderator }
|
25
|
+
it { should respond_to :not_moderator }
|
26
|
+
it { should_not respond_to :admin }
|
27
|
+
it { should_not respond_to :not_admin }
|
28
|
+
end
|
29
|
+
|
30
|
+
describe :only do
|
31
|
+
before do
|
32
|
+
microscope 'User', only: [:admin]
|
33
|
+
end
|
34
|
+
|
35
|
+
it { should_not respond_to :active }
|
36
|
+
it { should_not respond_to :not_active }
|
37
|
+
it { should_not respond_to :moderator }
|
38
|
+
it { should_not respond_to :not_moderator }
|
39
|
+
it { should respond_to :admin }
|
40
|
+
it { should respond_to :not_admin }
|
41
|
+
end
|
42
|
+
|
43
|
+
describe 'except and only' do
|
44
|
+
before do
|
45
|
+
microscope 'User', only: [:admin], except: [:active]
|
46
|
+
end
|
47
|
+
|
48
|
+
it { should_not respond_to :active }
|
49
|
+
it { should_not respond_to :not_active }
|
50
|
+
it { should_not respond_to :moderator }
|
51
|
+
it { should_not respond_to :not_moderator }
|
52
|
+
it { should respond_to :admin }
|
53
|
+
it { should respond_to :not_admin }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
4
57
|
describe 'Boolean scopes' do
|
5
58
|
subject { User }
|
6
59
|
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module ModelMacros
|
2
2
|
# Create a new microscope model
|
3
|
-
def microscope(klass_name, &block)
|
3
|
+
def microscope(klass_name, options = {}, &block)
|
4
4
|
spawn_model klass_name, ActiveRecord::Base do
|
5
|
-
acts_as_microscope
|
5
|
+
acts_as_microscope options
|
6
6
|
instance_exec(&block) if block
|
7
7
|
end
|
8
8
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: microscope
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.1'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-07-
|
13
|
+
date: 2013-07-08 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -147,7 +147,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
147
147
|
version: '0'
|
148
148
|
segments:
|
149
149
|
- 0
|
150
|
-
hash:
|
150
|
+
hash: -1603212847534960096
|
151
151
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
152
|
none: false
|
153
153
|
requirements:
|
@@ -156,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
156
156
|
version: '0'
|
157
157
|
segments:
|
158
158
|
- 0
|
159
|
-
hash:
|
159
|
+
hash: -1603212847534960096
|
160
160
|
requirements: []
|
161
161
|
rubyforge_project:
|
162
162
|
rubygems_version: 1.8.23
|