microscope 0.5 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5ce7b5f37e16e39e35c66a3656f23102f8e93cf0
4
- data.tar.gz: c9e3f907ff0e7115aad4b1e6fea83554c6669c3f
3
+ metadata.gz: 5895b7cb7f78b5949fbc6ed893ec2ce8572cc966
4
+ data.tar.gz: 26d3e1ec93726e9224d0ff99a4383318932606fe
5
5
  SHA512:
6
- metadata.gz: 8797bc1a795441eb0c4a90028ea8a94fade80a51a2883848be7ec2c065cccaac3911cbc39c34e1d28043653af376d18f5bfcd495c6dac4badbf9b34274cc5f2b
7
- data.tar.gz: 416d448370602b907d27a6713cd180a93b3510b9ac88f66ba12ab9094af21b3fc1563fcfce8498b32f2ad2d2e74f4315facda104e67d144c3b8e90c48da1d566
6
+ metadata.gz: 93107c9b07a8fd1c3f5191fe49a7cefc03db714131f003926bcdc09d944f3d5effaaf4e07b647ecd6b8f50fdb3e344f359901dadb6640b3f3e85008dde4f391c
7
+ data.tar.gz: e3444a475a126c37c4c5f4ffbdba31edadc18012aa39f696d1c6953f4d77fce431c799392e16d8e352dc6ba3669518ccfa2cbac4769d66ed0e3788592bdba19f
data/README.md CHANGED
@@ -7,6 +7,8 @@
7
7
  <br /><br />
8
8
  <a href="https://rubygems.org/gems/microscope"><img src="https://badge.fury.io/rb/microscope.png" /></a>
9
9
  <a href="https://codeclimate.com/github/mirego/microscope"><img src="https://codeclimate.com/github/mirego/microscope.png" /></a>
10
+ <a href='https://coveralls.io/r/mirego/microscope?branch=master'><img src='https://coveralls.io/repos/mirego/microscope/badge.png?branch=master' /></a>
11
+ <a href='https://gemnasium.com/mirego/microscope'><img src="https://gemnasium.com/mirego/microscope.png" /></a>
10
12
  <a href="https://travis-ci.org/mirego/microscope"><img src="https://travis-ci.org/mirego/microscope.png?branch=master" /></a>
11
13
  </p>
12
14
 
@@ -68,7 +70,7 @@ Event.not_started
68
70
  # SELECT * FROM `events` where `events`.`started_at` IS NULL OR `events`.`started_at` > '2013-07-05 15:43:42'
69
71
  ```
70
72
 
71
- Microscope also adds two instance methods to the model per scope.
73
+ Microscope also adds three instance methods to the model per scope.
72
74
 
73
75
  ```ruby
74
76
  event = Event.started.first
@@ -76,6 +78,13 @@ event = Event.started.first
76
78
 
77
79
  event.started? # => true
78
80
  event.not_started? # => false
81
+
82
+ event = Event.unstarted.first
83
+ event.started? # => false
84
+
85
+ event.start!
86
+ event.started? # => true
87
+ event.started_at # => 2013-07-05 15:43:44 (Time.now)
79
88
  ```
80
89
 
81
90
  ### Options
@@ -0,0 +1,155 @@
1
+ arisen: arise
2
+ awoken: awake
3
+ been: be
4
+ borne: bear
5
+ beaten: beat
6
+ beat: beat
7
+ become: become
8
+ begun: begin
9
+ bent: bend
10
+ bet: bet
11
+ bitten: bite
12
+ bled: bleed
13
+ blown: blow
14
+ broken: break
15
+ brought: bring
16
+ built: build
17
+ burnt: burn
18
+ burst: burst
19
+ bought: buy
20
+ caught: catch
21
+ chosen: choose
22
+ clung: cling
23
+ come: come
24
+ cost: cost
25
+ crept: creep
26
+ cut: cut
27
+ dealt: deal
28
+ dug: dig
29
+ dived: dive
30
+ done: do
31
+ drawn: draw
32
+ dreamt: dream
33
+ dreamed: dream
34
+ drunk: drink
35
+ driven: drive
36
+ eaten: eat
37
+ fallen: fall
38
+ fed: feed
39
+ felt: feel
40
+ fought: fight
41
+ found: find
42
+ fit: fit
43
+ fled: flee
44
+ flung: fling
45
+ flown: fly
46
+ forbidden: forbid
47
+ forbade: forbid
48
+ forgotten: forget
49
+ forgiven: forgive
50
+ forgone: forgo
51
+ frozen: freeze
52
+ gotten: get
53
+ got: get
54
+ given: give
55
+ gone: go
56
+ ground: grind
57
+ grown: grow
58
+ hung: hang
59
+ had: have
60
+ heard: hear
61
+ hidden: hide
62
+ hit: hit
63
+ held: hold
64
+ hurt: hurt
65
+ kept: keep
66
+ knelt: kneel
67
+ knit: knit
68
+ known: know
69
+ laid: lay
70
+ led: lead
71
+ leapt: leap
72
+ left: leave
73
+ lent: lend
74
+ let: let
75
+ lain: lie
76
+ lit: light
77
+ lost: lose
78
+ made: make
79
+ meant: mean
80
+ met: meet
81
+ paid: pay
82
+ proven: prove
83
+ put: put
84
+ quit: quit
85
+ read: read
86
+ ridden: ride
87
+ rung: ring
88
+ risen: rise
89
+ run: run
90
+ sawn: saw
91
+ said: say
92
+ seen: see
93
+ sought: seek
94
+ sold: sell
95
+ sent: send
96
+ set: set
97
+ sewn: sew
98
+ shaken: shake
99
+ shaven: shave
100
+ shorn: shear
101
+ shone: shine
102
+ shot: shoot
103
+ shown: show
104
+ shrunken: shrink
105
+ shrunk: shrink
106
+ shut: shut
107
+ sung: sing
108
+ sunk: sink
109
+ sat: sit
110
+ slain: slay
111
+ slept: sleep
112
+ slid: slide
113
+ snuck: sneak
114
+ spoken: speak
115
+ sped: speed
116
+ spent: spend
117
+ spilt: spill
118
+ spun: spin
119
+ spit: spit
120
+ spat: spit
121
+ split: split
122
+ spread: spread
123
+ sprung: spring
124
+ stood: stand
125
+ stolen: steal
126
+ stuck: stick
127
+ stung: sting
128
+ stunk: stink
129
+ strewn: strew
130
+ struck: strike
131
+ stricken: strike
132
+ striven: strive
133
+ sworn: swear
134
+ swept: sweep
135
+ swum: swim
136
+ swung: swing
137
+ taken: take
138
+ taught: teach
139
+ torn: tear
140
+ told: tell
141
+ thought: think
142
+ thriven: thrive
143
+ thrown: throw
144
+ undergone: undergo
145
+ understood: understand
146
+ upset: upset
147
+ woken: wake
148
+ worn: wear
149
+ woven: weave
150
+ wept: weep
151
+ won: win
152
+ wound: wind
153
+ withdrawn: withdraw
154
+ wrung: wring
155
+ written: write
@@ -0,0 +1,16 @@
1
+ module Microscope
2
+ class InstanceMethod
3
+ class BooleanInstanceMethod < InstanceMethod
4
+ def apply
5
+ infinitive_verb = self.class.past_participle_to_infinitive(field.name)
6
+
7
+ model.class_eval <<-RUBY, __FILE__, __LINE__ + 1
8
+ define_method "#{infinitive_verb}!" do
9
+ send("#{field.name}=", true)
10
+ save!
11
+ end
12
+ RUBY
13
+ end
14
+ end
15
+ end
16
+ end
@@ -3,6 +3,7 @@ module Microscope
3
3
  class DateInstanceMethod < InstanceMethod
4
4
  def apply
5
5
  cropped_field = field.name.gsub(/_on$/, '')
6
+ infinitive_verb = self.class.past_participle_to_infinitive(cropped_field)
6
7
 
7
8
  model.class_eval <<-RUBY, __FILE__, __LINE__ + 1
8
9
  define_method "#{cropped_field}?" do
@@ -13,6 +14,11 @@ module Microscope
13
14
  define_method "not_#{cropped_field}?" do
14
15
  !#{cropped_field}?
15
16
  end
17
+
18
+ define_method "#{infinitive_verb}!" do
19
+ send("#{field.name}=", Date.today)
20
+ save!
21
+ end
16
22
  RUBY
17
23
  end
18
24
  end
@@ -3,6 +3,7 @@ module Microscope
3
3
  class DatetimeInstanceMethod < InstanceMethod
4
4
  def apply
5
5
  cropped_field = field.name.gsub(/_at$/, '')
6
+ infinitive_verb = self.class.past_participle_to_infinitive(cropped_field)
6
7
 
7
8
  model.class_eval <<-RUBY, __FILE__, __LINE__ + 1
8
9
  define_method "#{cropped_field}?" do
@@ -13,6 +14,11 @@ module Microscope
13
14
  define_method "not_#{cropped_field}?" do
14
15
  !#{cropped_field}?
15
16
  end
17
+
18
+ define_method "#{infinitive_verb}!" do
19
+ send("#{field.name}=", Time.now)
20
+ save!
21
+ end
16
22
  RUBY
17
23
  end
18
24
  end
@@ -10,5 +10,16 @@ module Microscope
10
10
  end
11
11
  end
12
12
  end
13
+
14
+ # Convert a past participle to its infinitive form
15
+ def self.past_participle_to_infinitive(participle)
16
+ if Microscope.irregular_verbs.include?(participle)
17
+ Microscope.irregular_verbs[participle]
18
+ elsif participle =~ /ed$/
19
+ participle.sub(/ed$/, '')
20
+ else
21
+ participle
22
+ end
23
+ end
13
24
  end
14
25
  end
@@ -1,3 +1,3 @@
1
1
  module Microscope
2
- VERSION = '0.5'
2
+ VERSION = '0.5.1'
3
3
  end
data/lib/microscope.rb CHANGED
@@ -9,9 +9,18 @@ require "microscope/scope/datetime_scope"
9
9
  require "microscope/scope/date_scope"
10
10
 
11
11
  require "microscope/instance_method"
12
+ require "microscope/instance_method/boolean_instance_method"
12
13
  require "microscope/instance_method/datetime_instance_method"
13
14
  require "microscope/instance_method/date_instance_method"
14
15
 
16
+ module Microscope
17
+ IRREGULAR_VERBS_FILE = File.expand_path('../../data/irregular_verbs.yml', __FILE__)
18
+
19
+ def self.irregular_verbs
20
+ @irregular_verbs ||= YAML.load_file(IRREGULAR_VERBS_FILE)
21
+ end
22
+ end
23
+
15
24
  class ActiveRecord::Base
16
25
  def self.acts_as_microscope(options = {})
17
26
  return unless table_exists?
data/microscope.gemspec CHANGED
@@ -27,4 +27,5 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency 'sqlite3'
28
28
  spec.add_development_dependency 'pg'
29
29
  spec.add_development_dependency 'mysql2', '~> 0.3.13'
30
+ spec.add_development_dependency 'coveralls'
30
31
  end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe Microscope::InstanceMethod::BooleanInstanceMethod do
4
+ before do
5
+ run_migration do
6
+ create_table(:animals, force: true) do |t|
7
+ t.boolean :fed, default: false
8
+ end
9
+ end
10
+
11
+ microscope 'Animal'
12
+ end
13
+
14
+ describe '#feed!' do
15
+ let(:animal) { Animal.create(fed: false) }
16
+ it { expect { animal.feed! }.to change { animal.reload.fed? }.from(false).to(true) }
17
+ end
18
+ end
@@ -36,4 +36,12 @@ describe Microscope::InstanceMethod::DateInstanceMethod do
36
36
  it { should be_not_started }
37
37
  end
38
38
  end
39
+
40
+ describe '#start!' do
41
+ let(:stubbed_date) { Date.parse('2020-03-18 08:00:00') }
42
+ before { Date.stub(:today).and_return(stubbed_date) }
43
+
44
+ let(:event) { Event.create(started_on: nil) }
45
+ it { expect { event.start! }.to change { event.reload.started_on }.from(nil).to(stubbed_date) }
46
+ end
39
47
  end
@@ -34,4 +34,12 @@ describe Microscope::InstanceMethod::DatetimeInstanceMethod do
34
34
  it { should be_not_started }
35
35
  end
36
36
  end
37
+
38
+ describe '#start!' do
39
+ let(:stubbed_date) { Time.parse('2020-03-18 08:00:00') }
40
+ before { Time.stub(:now).and_return(stubbed_date) }
41
+
42
+ let(:event) { Event.create(started_at: nil) }
43
+ it { expect { event.start! }.to change { event.reload.started_at }.from(nil).to(stubbed_date) }
44
+ end
37
45
  end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,8 @@
1
1
  $:.unshift File.expand_path('../lib', __FILE__)
2
2
 
3
+ require 'coveralls'
4
+ Coveralls.wear!
5
+
3
6
  require 'rspec'
4
7
  require 'sqlite3'
5
8
  require 'mysql2'
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.5'
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Prévost
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-05 00:00:00.000000000 Z
12
+ date: 2013-11-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -123,6 +123,20 @@ dependencies:
123
123
  - - ~>
124
124
  - !ruby/object:Gem::Version
125
125
  version: 0.3.13
126
+ - !ruby/object:Gem::Dependency
127
+ name: coveralls
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - '>='
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
126
140
  description: Microscope adds useful scopes targeting ActiveRecord boolean and datetime
127
141
  fields.
128
142
  email:
@@ -139,10 +153,12 @@ files:
139
153
  - LICENSE.md
140
154
  - README.md
141
155
  - Rakefile
156
+ - data/irregular_verbs.yml
142
157
  - gemfiles/Gemfile.activerecord-3.2.x
143
158
  - gemfiles/Gemfile.activerecord-4.0
144
159
  - lib/microscope.rb
145
160
  - lib/microscope/instance_method.rb
161
+ - lib/microscope/instance_method/boolean_instance_method.rb
146
162
  - lib/microscope/instance_method/date_instance_method.rb
147
163
  - lib/microscope/instance_method/datetime_instance_method.rb
148
164
  - lib/microscope/scope.rb
@@ -151,6 +167,7 @@ files:
151
167
  - lib/microscope/scope/datetime_scope.rb
152
168
  - lib/microscope/version.rb
153
169
  - microscope.gemspec
170
+ - spec/microscope/instance_method/boolean_instance_method_spec.rb
154
171
  - spec/microscope/instance_method/date_instance_method_spec.rb
155
172
  - spec/microscope/instance_method/datetime_instance_method_spec.rb
156
173
  - spec/microscope/scope/boolean_scope_spec.rb
@@ -184,12 +201,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
201
  version: '0'
185
202
  requirements: []
186
203
  rubyforge_project:
187
- rubygems_version: 2.0.2
204
+ rubygems_version: 2.1.0
188
205
  signing_key:
189
206
  specification_version: 4
190
207
  summary: Microscope adds useful scopes targeting ActiveRecord boolean and datetime
191
208
  fields.
192
209
  test_files:
210
+ - spec/microscope/instance_method/boolean_instance_method_spec.rb
193
211
  - spec/microscope/instance_method/date_instance_method_spec.rb
194
212
  - spec/microscope/instance_method/datetime_instance_method_spec.rb
195
213
  - spec/microscope/scope/boolean_scope_spec.rb