microscope 0.1.1 → 0.2

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.
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.0.0
5
+ - 1.9.3
6
+
7
+ gemfile:
8
+ - gemfiles/Gemfile.activerecord-4.0
9
+ - gemfiles/Gemfile.activerecord-3.2.x
10
+
11
+ script: "echo 'DO IT' && bundle exec rake spec"
data/README.md CHANGED
@@ -1,6 +1,9 @@
1
1
  # Microscope
2
2
 
3
- Microscope adds useful scopes targeting ActiveRecord boolean and datetime fields.
3
+ [![Gem Version](https://badge.fury.io/rb/microscope.png)](https://rubygems.org/gems/microscope)
4
+ [![Build Status](https://travis-ci.org/mirego/microscope.png?branch=master)](https://travis-ci.org/mirego/microscope)
5
+
6
+ Microscope adds useful scopes targeting ActiveRecord boolean, date and datetime fields.
4
7
 
5
8
  ## Installation
6
9
 
@@ -17,6 +20,7 @@ create_table "events" do |t|
17
20
  t.string "name"
18
21
  t.boolean "special"
19
22
  t.datetime "expired_at"
23
+ t.date "started_on"
20
24
  end
21
25
 
22
26
  class Event < ActiveRecord::Base
@@ -33,16 +37,22 @@ Time.now
33
37
  # => 2013-07-05 15:43:42
34
38
 
35
39
  Event.expired_before(2.months.ago)
36
- # SELECT * FROM `events` where `events`.`expired_at` > '2013-05-05 15:43:42'
40
+ # SELECT * FROM `events` where `events`.`expired_at` < '2013-05-05 15:43:42'
37
41
 
38
42
  Event.expired_before_now
39
- # SELECT * FROM `events` where `events`.`expired_at` > '2013-07-05 15:43:42'
43
+ # SELECT * FROM `events` where `events`.`expired_at` < '2013-07-05 15:43:42'
40
44
 
41
45
  Event.expired_after_or_at(2.months.from_now)
42
46
  # SELECT * FROM `events` where `events`.`expired_at` >= '2013-09-05 15:43:42'
43
47
 
44
48
  Event.expired_between(2.months.ago..1.month.from_now)
45
49
  # SELECT * FROM `events` where `events`.`expired_at` BETWEEN '2013-05-05 15:43:42' AND '2013-08-05 15:43:42'
50
+
51
+ Event.started_before(2.days.ago)
52
+ # SELECT * FROM `events` where `events`.`started_on` < '2013-07-03'
53
+
54
+ Event.started_between(2.days.ago..3.days.from_now)
55
+ # SELECT * FROM `events` where `events`.`started_on` BETWEEN '2013-07-03' AND '2013-07-08'
46
56
  ```
47
57
 
48
58
  ### Options
@@ -55,14 +65,14 @@ class Event < ActiveRecord::Base
55
65
  end
56
66
 
57
67
  class User < ActiveRecord::Base
58
- acts_as_microscope, except: [:activated_at]
68
+ acts_as_microscope, except: [:created_at]
59
69
  end
60
70
 
61
71
  Event.created_before(2.months.ago) # works!
62
72
  Event.updated_before(2.months.ago) # NoMethodError
63
73
 
64
- User.created_before(2.months.ago) # works!
65
- User.activated_before(2.months.ago) # NoMethodError
74
+ User.created_before(2.months.ago) # NoMethodError
75
+ User.updated_before(2.months.ago) # works!
66
76
  ```
67
77
 
68
78
  ## License
@@ -71,5 +81,6 @@ User.activated_before(2.months.ago) # NoMethodError
71
81
 
72
82
  ## About Mirego
73
83
 
74
- Mirego is a team of passionate people who believe that work is a place where you can innovate and have fun.
75
- We proudly built mobile applications for [iPhone](http://mirego.com/en/iphone-app-development/ "iPhone application development"), [iPad](http://mirego.com/en/ipad-app-development/ "iPad application development"), [Android](http://mirego.com/en/android-app-development/ "Android application development"), [Blackberry](http://mirego.com/en/blackberry-app-development/ "Blackberry application development"), [Windows Phone](http://mirego.com/en/windows-phone-app-development/ "Windows Phone application development") and [Windows 8](http://mirego.com/en/windows-8-app-development/ "Windows 8 application development").
84
+ Mirego is a team of passionate people who believe that work is a place where you can innovate and have fun. We proudly build mobile applications for [iPhone](http://mirego.com/en/iphone-app-development/ "iPhone application development"), [iPad](http://mirego.com/en/ipad-app-development/ "iPad application development"), [Android](http://mirego.com/en/android-app-development/ "Android application development"), [Blackberry](http://mirego.com/en/blackberry-app-development/ "Blackberry application development"), [Windows Phone](http://mirego.com/en/windows-phone-app-development/ "Windows Phone application development") and [Windows 8](http://mirego.com/en/windows-8-app-development/ "Windows 8 application development") in beautiful Quebec City.
85
+
86
+ We also love [open-source software](http://open.mirego.com/) and we try to extract as much code as possible from our projects to give back to the community.
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec :path => "../"
4
+
5
+ gem 'activerecord', '~> 3.2.0'
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec :path => "../"
4
+
5
+ gem 'activerecord', '~> 4.0.0'
@@ -9,12 +9,8 @@ module Microscope
9
9
  def self.inject_into_active_record
10
10
  @inject_into_active_record ||= Proc.new do
11
11
  def self.acts_as_microscope(options = {})
12
- self.microscope_options = options
13
- self.send :include, Microscope::Mixin
14
- end
15
-
16
- def self.microscope_options=(options)
17
12
  @microscope_options = options
13
+ include Microscope::Mixin
18
14
  end
19
15
  end
20
16
  end
@@ -16,28 +16,39 @@ module Microscope
16
16
  end
17
17
 
18
18
  boolean_fields = model_columns.select { |c| c.type == :boolean }.map(&:name)
19
- class_eval do
20
- boolean_fields.each do |field|
21
- scope field, lambda { where(field => true) }
22
- scope "not_#{field}", lambda { where(field => false) }
23
- end
19
+ boolean_fields.each do |field|
20
+ scope field, lambda { where(field => true) }
21
+ scope "not_#{field}", lambda { where(field => false) }
24
22
  end
25
23
 
26
24
  datetime_fields = model_columns.select { |c| c.type == :datetime }.map(&:name)
27
- class_eval do
28
- datetime_fields.each do |field|
29
- cropped_field = field.gsub(/_at$/, '')
25
+ datetime_fields.each do |field|
26
+ cropped_field = field.gsub(/_at$/, '')
30
27
 
31
- scope "#{cropped_field}_before", lambda { |time| where(["#{field} < ?", time]) }
32
- scope "#{cropped_field}_before_or_at", lambda { |time| where(["#{field} <= ?", time]) }
33
- scope "#{cropped_field}_before_now", lambda { where(["#{field} < ?", Time.now]) }
28
+ scope "#{cropped_field}_before", lambda { |time| where("#{field} < ?", time) }
29
+ scope "#{cropped_field}_before_or_at", lambda { |time| where("#{field} <= ?", time) }
30
+ scope "#{cropped_field}_before_now", lambda { where("#{field} < ?", Time.now) }
34
31
 
35
- scope "#{cropped_field}_after", lambda { |time| where(["#{field} > ?", time]) }
36
- scope "#{cropped_field}_after_or_at", lambda { |time| where(["#{field} >= ?", time]) }
37
- scope "#{cropped_field}_after_now", lambda { where(["#{field} > ?", Time.now]) }
32
+ scope "#{cropped_field}_after", lambda { |time| where("#{field} > ?", time) }
33
+ scope "#{cropped_field}_after_or_at", lambda { |time| where("#{field} >= ?", time) }
34
+ scope "#{cropped_field}_after_now", lambda { where("#{field} > ?", Time.now) }
38
35
 
39
- scope "#{cropped_field}_between", lambda { |range| where(field => range) }
40
- end
36
+ scope "#{cropped_field}_between", lambda { |range| where(field => range) }
37
+ end
38
+
39
+ date_fields = model_columns.select { |c| c.type == :date }.map(&:name)
40
+ date_fields.each do |field|
41
+ cropped_field = field.gsub(/_on$/, '')
42
+
43
+ scope "#{cropped_field}_before", lambda { |time| where("#{field} < ?", time) }
44
+ scope "#{cropped_field}_before_or_on", lambda { |time| where("#{field} <= ?", time) }
45
+ scope "#{cropped_field}_before_today", lambda { where("#{field} < ?", Date.today) }
46
+
47
+ scope "#{cropped_field}_after", lambda { |time| where("#{field} > ?", time) }
48
+ scope "#{cropped_field}_after_or_at", lambda { |time| where("#{field} >= ?", time) }
49
+ scope "#{cropped_field}_after_today", lambda { where("#{field} > ?", Date.today) }
50
+
51
+ scope "#{cropped_field}_between", lambda { |range| where(field => range) }
41
52
  end
42
53
  end
43
54
  end
@@ -1,3 +1,3 @@
1
1
  module Microscope
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2"
3
3
  end
@@ -143,4 +143,64 @@ describe Microscope::Mixin do
143
143
  it { expect(Event.started_between(4.months.ago..2.months.ago).to_a).to eql [@event] }
144
144
  end
145
145
  end
146
+
147
+ describe 'Date scopes' do
148
+ subject { Event }
149
+
150
+ before do
151
+ run_migration do
152
+ create_table(:events, force: true) do |t|
153
+ t.date :started_on, default: false
154
+ end
155
+ end
156
+
157
+ microscope 'Event'
158
+ end
159
+
160
+ describe 'before scope' do
161
+ before do
162
+ @event = Event.create(started_on: 2.months.ago)
163
+ Event.create(started_on: 1.month.from_now)
164
+ end
165
+
166
+ it { expect(Event.started_before(1.month.ago).to_a).to eql [@event] }
167
+ end
168
+
169
+ describe 'before_today scope' do
170
+ before do
171
+ @event = Event.create(started_on: 2.months.ago)
172
+ Event.create(started_on: 1.month.from_now)
173
+ end
174
+
175
+ it { expect(Event.started_before_today.to_a).to eql [@event] }
176
+ end
177
+
178
+ describe 'after scope' do
179
+ before do
180
+ @event = Event.create(started_on: 2.months.from_now)
181
+ Event.create(started_on: 1.month.ago)
182
+ end
183
+
184
+ it { expect(Event.started_after(1.month.from_now).to_a).to eql [@event] }
185
+ end
186
+
187
+ describe 'after_today scope' do
188
+ before do
189
+ @event = Event.create(started_on: 2.months.from_now)
190
+ Event.create(started_on: 1.month.ago)
191
+ end
192
+
193
+ it { expect(Event.started_after_today.to_a).to eql [@event] }
194
+ end
195
+
196
+ describe 'between scope' do
197
+ before do
198
+ Event.create(started_on: 1.month.ago)
199
+ @event = Event.create(started_on: 3.months.ago)
200
+ Event.create(started_on: 5.month.ago)
201
+ end
202
+
203
+ it { expect(Event.started_between(4.months.ago..2.months.ago).to_a).to eql [@event] }
204
+ end
205
+ end
146
206
  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.1.1
4
+ version: '0.2'
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-15 00:00:00.000000000 Z
13
+ date: 2013-08-01 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -119,10 +119,13 @@ extra_rdoc_files: []
119
119
  files:
120
120
  - .gitignore
121
121
  - .rspec
122
+ - .travis.yml
122
123
  - Gemfile
123
124
  - LICENSE.md
124
125
  - README.md
125
126
  - Rakefile
127
+ - gemfiles/Gemfile.activerecord-3.2.x
128
+ - gemfiles/Gemfile.activerecord-4.0
126
129
  - lib/microscope.rb
127
130
  - lib/microscope/mixin.rb
128
131
  - lib/microscope/railtie.rb
@@ -147,7 +150,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
147
150
  version: '0'
148
151
  segments:
149
152
  - 0
150
- hash: 1493090215892188080
153
+ hash: -4314982214745494353
151
154
  required_rubygems_version: !ruby/object:Gem::Requirement
152
155
  none: false
153
156
  requirements:
@@ -156,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
159
  version: '0'
157
160
  segments:
158
161
  - 0
159
- hash: 1493090215892188080
162
+ hash: -4314982214745494353
160
163
  requirements: []
161
164
  rubyforge_project:
162
165
  rubygems_version: 1.8.23