subly 0.2.0 → 0.3.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.
- data/lib/subly.rb +11 -0
- data/lib/subly/model.rb +19 -0
- data/lib/subly/version.rb +1 -1
- data/spec/spec_helper.rb +3 -1
- data/spec/subly_model_spec.rb +17 -2
- data/spec/subly_spec.rb +28 -4
- metadata +9 -9
data/lib/subly.rb
CHANGED
@@ -50,6 +50,17 @@ module Subly
|
|
50
50
|
def has_active_subscription?(name)
|
51
51
|
self.sublies.active.by_name(name).count > 0
|
52
52
|
end
|
53
|
+
|
54
|
+
def cancel_active_subscriptions(name)
|
55
|
+
self.sublies.active.by_name(name).collect(&:expire_now)
|
56
|
+
end
|
57
|
+
|
58
|
+
def cancel_all_subscriptions(name)
|
59
|
+
self.sublies.unexpired.by_name(name).each do |sub|
|
60
|
+
#if active, deactivate, else destroy as and end_time greater than start is not valid
|
61
|
+
sub.active? ? sub.expire_now : sub.destroy
|
62
|
+
end
|
63
|
+
end
|
53
64
|
end
|
54
65
|
end
|
55
66
|
|
data/lib/subly/model.rb
CHANGED
@@ -21,6 +21,11 @@ module Subly
|
|
21
21
|
scoped(:conditions => ['starts_at <= ? AND ends_at <= ?', now, now])
|
22
22
|
end
|
23
23
|
|
24
|
+
def self.unexpired
|
25
|
+
now = Time.zone.now
|
26
|
+
scoped(:conditions => ['ends_at > ? OR ends_at IS NULL', now])
|
27
|
+
end
|
28
|
+
|
24
29
|
def self.for_subscriber(sub)
|
25
30
|
raise ArgumentError('wrong number of arguments (0 for 1)') if sub.blank?
|
26
31
|
scoped(:conditions => ['subscriber_type = ? AND subscriber_id = ?',sub.class.to_s, sub.id])
|
@@ -43,6 +48,20 @@ module Subly
|
|
43
48
|
!!(starts_at <= now && (ends_at.nil? || ends_at > now))
|
44
49
|
end
|
45
50
|
|
51
|
+
def expired?
|
52
|
+
now = Time.now
|
53
|
+
!(ends_at.nil? || ends_at > now)
|
54
|
+
end
|
55
|
+
|
56
|
+
def in_the_future?
|
57
|
+
now = Time.now
|
58
|
+
!!(starts_at > now && (ends_at.nil? || ends_at > now))
|
59
|
+
end
|
60
|
+
|
61
|
+
def expire_now
|
62
|
+
self.update_attribute(:ends_at, Time.now)
|
63
|
+
end
|
64
|
+
|
46
65
|
private
|
47
66
|
def ends_after_starts
|
48
67
|
if !starts_at.nil? && !ends_at.nil? && (ends_at < starts_at)
|
data/lib/subly/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
data/spec/subly_model_spec.rb
CHANGED
@@ -21,8 +21,23 @@ describe Subly::Model do
|
|
21
21
|
lambda{Subly::Model.create!(:name => 'Foo', :subscriber_type => 'Foo', :subscriber_id => 1, :starts_at => Time.now + 1.minute, :ends_at => Time.now - 1.minute)}.should raise_error
|
22
22
|
end
|
23
23
|
|
24
|
-
it "should be
|
25
|
-
|
24
|
+
it "should be expire immediately" do
|
25
|
+
s = Subly::Model.create(:name => 'Foo', :subscriber_type => 'Item', :subscriber_id => 1, :starts_at => Time.now - 5.minute)
|
26
|
+
s.active?.should be_true
|
27
|
+
s.expire_now.should be_true
|
28
|
+
s.reload
|
29
|
+
s.active?.should be_false
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should be active if it starts in the past and ends in the future" do
|
26
33
|
Subly::Model.new(:name => 'Foo', :subscriber_type => 'Item', :subscriber_id => 1, :starts_at => Time.now - 1.minute, :ends_at => Time.now + 1.hour).active?.should be_true
|
27
34
|
end
|
35
|
+
|
36
|
+
it "should be expired if it ends in the past" do
|
37
|
+
Subly::Model.new(:name => 'Foo', :subscriber_type => 'Item', :subscriber_id => 1, :starts_at => Time.now - 5.minute, :ends_at => Time.now - 4.minutes).expired?.should be_true
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should be in_the_future if it starts and ends in the future" do
|
41
|
+
Subly::Model.new(:name => 'Foo', :subscriber_type => 'Item', :subscriber_id => 1, :starts_at => Time.now + 5.minute, :ends_at => Time.now + 14.minutes).in_the_future?.should be_true
|
42
|
+
end
|
28
43
|
end
|
data/spec/subly_spec.rb
CHANGED
@@ -17,7 +17,7 @@ describe Subly do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it "subscription should default to active" do
|
20
|
-
|
20
|
+
stub_time_zone
|
21
21
|
thing_one = Thing.create(:name => 'Thing One', :description => 'foo')
|
22
22
|
thing_one.add_subscription('sub name').should be_true
|
23
23
|
thing_one.reload
|
@@ -52,12 +52,12 @@ describe Subly do
|
|
52
52
|
end
|
53
53
|
|
54
54
|
it "is method should be false if it does not have an active sub" do
|
55
|
-
|
55
|
+
stub_time_zone
|
56
56
|
Item.new.is_subby?.should be_false
|
57
57
|
end
|
58
58
|
|
59
59
|
it "is method should be true if it has an active sub" do
|
60
|
-
|
60
|
+
stub_time_zone
|
61
61
|
item = Item.create(:name => 'foo')
|
62
62
|
item.add_subscription('subby')
|
63
63
|
item.is_subby?.should be_true
|
@@ -65,11 +65,35 @@ describe Subly do
|
|
65
65
|
|
66
66
|
it "should convert duration to time" do
|
67
67
|
time = Time.parse('2001-01-01T010101+0000')
|
68
|
-
|
68
|
+
stub_time_zone
|
69
69
|
Time.stub!(:now).and_return(time)
|
70
70
|
item = Item.create(:name => 'foo')
|
71
71
|
item.add_subscription('subby', :duration => "1 year")
|
72
72
|
item.is_subby?.should be_true
|
73
73
|
item.sublies.last.ends_at.should == time + 1.year
|
74
74
|
end
|
75
|
+
|
76
|
+
it "should change the end date of all active subscriptions" do
|
77
|
+
stub_time_zone
|
78
|
+
thing_one = Thing.create(:name => 'Thing One', :description => 'foo')
|
79
|
+
thing_one.add_subscription('sub name',:value => 'sub value').should be_true
|
80
|
+
thing_one.add_subscription('sub name',:value => 'sub value', :starts_at => Time.now + 1.month).should be_true
|
81
|
+
thing_one.reload
|
82
|
+
thing_one.cancel_active_subscriptions('sub name')
|
83
|
+
thing_one.sublies.count.should == 2
|
84
|
+
thing_one.sublies.unexpired.count.should == 1
|
85
|
+
thing_one.sublies.expired.count.should == 1
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should cancel all subscriptions" do
|
89
|
+
stub_time_zone
|
90
|
+
thing_one = Thing.create(:name => 'Thing One', :description => 'foo')
|
91
|
+
thing_one.add_subscription('sub name',:value => 'sub value').should be_true
|
92
|
+
thing_one.add_subscription('sub name',:value => 'sub value', :starts_at => Time.now + 1.month).should be_true
|
93
|
+
thing_one.reload
|
94
|
+
thing_one.cancel_all_subscriptions('sub name')
|
95
|
+
thing_one.sublies.count.should == 1
|
96
|
+
thing_one.sublies.unexpired.count.should == 0
|
97
|
+
thing_one.sublies.expired.count.should == 1
|
98
|
+
end
|
75
99
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: subly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ date: 2012-01-09 00:00:00.000000000Z
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
17
|
-
requirement: &
|
17
|
+
requirement: &2156824500 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 2.3.12
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2156824500
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: rspec
|
28
|
-
requirement: &
|
28
|
+
requirement: &2156824060 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *2156824060
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: sqlite3
|
39
|
-
requirement: &
|
39
|
+
requirement: &2156823560 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *2156823560
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: chronic_duration
|
50
|
-
requirement: &
|
50
|
+
requirement: &2156823020 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,7 +55,7 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *2156823020
|
59
59
|
description: This was purpose built to extend models with subscriptions that were
|
60
60
|
controlled via SalesForce
|
61
61
|
email:
|