things-client 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -4,16 +4,23 @@ Things is a Ruby API for the popular GTD app Things, available on the Mac.
4
4
 
5
5
  == Installation
6
6
 
7
- Currently, because this is an alpha version and it's too early for a release, installation must be done manually, like this:
7
+ The gem is hosted on Gemcutter. To install it, use the following command:
8
8
 
9
- git clone http://github.com/marcinbunsch/things
10
- cd things
9
+ sudo gem install things-client --source http://gemcutter.org
10
+
11
+ To get the latest version, clone the gem from github and run rake install:
12
+
13
+ git clone http://github.com/marcinbunsch/things-client
14
+ cd things-client
11
15
  rake check_dependencies:runtime
12
- rake build
13
- sudo gem install pkg/things-0.0.1.gem
16
+ sudo rake install
14
17
 
15
18
  == Usage
16
19
 
20
+ Before using this gem you must require it by calling:
21
+
22
+ require 'things'
23
+
17
24
  === Application
18
25
 
19
26
  The Application can be accessed at all times by calling Things::App. It has a few useful methods which will be described below. If you want Things to gain focus and move to the front of the window stack, you can call the Things::App.activate method.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -5,5 +5,19 @@ module Appscript #:nodoc:
5
5
  def todos
6
6
  to_dos
7
7
  end
8
+
9
+ def identify
10
+ name = self.to_s.match(/Things.app"\)\.([^\.]*)/)[1]
11
+
12
+ begin
13
+ name = name.gsub('_', '')
14
+ # inflections
15
+ name = 'persons' if name == 'people'
16
+ Things.const_get(name.capitalize[0..-2])
17
+ rescue NameError
18
+ nil
19
+ end
20
+ end
21
+
8
22
  end
9
23
  end
data/lib/things.rb CHANGED
@@ -13,11 +13,8 @@ module Things
13
13
  autoload :Area, File.dirname(__FILE__) + '/things/area'
14
14
  autoload :Project, File.dirname(__FILE__) + '/things/project'
15
15
  autoload :Tag, File.dirname(__FILE__) + '/things/tag'
16
-
17
- module Collections
18
- autoload :Todo, File.dirname(__FILE__) + '/things/collections/todo'
19
- end
20
-
16
+ autoload :Person, File.dirname(__FILE__) + '/things/person'
17
+
21
18
  module Reference
22
19
  autoload :Base, File.dirname(__FILE__) + '/things/reference/base'
23
20
  autoload :Inheritance, File.dirname(__FILE__) + '/things/reference/inheritance'
data/lib/things/app.rb CHANGED
@@ -16,11 +16,6 @@ module Things
16
16
  List
17
17
  end
18
18
 
19
- # get a collection of Todos
20
- def self.todos
21
- Collections::Todo
22
- end
23
-
24
19
  # activate the app and bring it to front
25
20
  def self.activate
26
21
  instance!.activate
data/lib/things/area.rb CHANGED
@@ -8,5 +8,10 @@ module Things
8
8
  # collection is used for findings
9
9
  collection :areas
10
10
 
11
+ def todos
12
+ Things::Todo.convert(reference.todos.get)
13
+ end
14
+
11
15
  end
16
+
12
17
  end
data/lib/things/list.rb CHANGED
@@ -1,18 +1,45 @@
1
1
  module Things
2
- class List
2
+ class List < Reference::Base
3
+
3
4
  DEFAULTS = [:inbox, :today, :next, :scheduled, :someday, :projects, :logbook, :trash]
4
- class << self
5
- def all
6
- Things::App.instance.lists
7
- end
5
+
6
+ def todos
7
+ Things::Todo.convert(reference.todos.get)
8
+ end
9
+
10
+ class << self
11
+
12
+ # Returns an Appscript Reference to the entire collection of todos
13
+ def reference
14
+ Things::App.instance.lists
15
+ end
16
+
17
+ # Converts a collection of reference into a collection of objects
18
+ def convert(references)
19
+ references = [references] if !references.is_a?(Array)
20
+ references.collect { |todo| build(todo) }
21
+ end
22
+
23
+ def all
24
+ convert(reference.get)
25
+ end
26
+
27
+ # build a new instance and link it to the supplied reference
28
+ #
29
+ # Returns a object associated with a reference
30
+ def build(reference)
31
+ todo = self.new
32
+ todo.reference = reference
33
+ todo
34
+ end
8
35
 
9
- DEFAULTS.each do |list|
10
- class_eval <<-"eval"
11
- def #{list}
12
- all['#{list.to_s.capitalize}']
13
- end
14
- eval
15
- end
36
+ DEFAULTS.each do |list|
37
+ class_eval <<-"eval"
38
+ def #{list}
39
+ convert(reference['#{list.to_s.capitalize}'].get).first
40
+ end
41
+ eval
16
42
  end
43
+ end
17
44
  end
18
45
  end
@@ -0,0 +1,42 @@
1
+ module Things
2
+ # Things::Person
3
+ #
4
+ # People in Things cannot be created, they are fetched from Address Book
5
+ class Person < Reference::Record
6
+
7
+ properties :name
8
+ # identifier is required for creation
9
+ identifier :person
10
+ # collection is used for findings
11
+ collection :people
12
+
13
+ # Find a Person in Address Book and add a teammate in Things
14
+ #
15
+ # Returns a Things::Person object
16
+ def self.create(address_book_name)
17
+ reference = Things::App.instance.add_teammate_named(address_book_name)
18
+ raise 'Could not find person in Address Book' if reference == :missing_value
19
+ build(reference)
20
+ end
21
+
22
+ def todos
23
+ Things::Todo.convert(reference.todos.get)
24
+ end
25
+
26
+ # Not supported by Things::Person
27
+ #
28
+ # Raises a RuntimeError when called
29
+ def save
30
+ raise 'Currently Things does not support this method'
31
+ end
32
+
33
+ # Not supported by Things::Person
34
+ #
35
+ # Raises a RuntimeError when called
36
+ def delete
37
+ reference.delete
38
+ end
39
+
40
+ end
41
+
42
+ end
@@ -8,5 +8,9 @@ module Things
8
8
  # collection is used for findings
9
9
  collection :projects
10
10
 
11
+ def todos
12
+ Things::Todo.convert(reference.todos.get)
13
+ end
14
+
11
15
  end
12
16
  end
@@ -21,16 +21,16 @@ module Things
21
21
  if args
22
22
  @_properties += args
23
23
  @_properties.each do |property|
24
- attr_writer(property) if !instance_methods.include?(property.to_s)
24
+ attr_writer(property) if !instance_methods.include?(property.to_s+'=')
25
25
  if !instance_methods.include?(property.to_s )
26
26
  class_eval <<-"eval"
27
27
  def #{property}
28
- if !@#{property}
29
- fetched = @reference.#{property}.get rescue nil
30
- @#{property} = fetched if fetched and fetched != :missing_value
31
- else
32
- @#{property}
28
+ return @#{property} if @#{property}
29
+ fetched = @reference.#{property}.get rescue nil
30
+ if fetched.is_a?(Appscript::Reference)
31
+ fetched = fetched.identify.build(fetched)
33
32
  end
33
+ @#{property} = fetched if fetched and fetched != :missing_value
34
34
  end
35
35
  eval
36
36
  end
@@ -58,12 +58,24 @@ module Things
58
58
  if new?
59
59
  properties = {}
60
60
  (self.class.properties - [:id_]).each do |property|
61
- properties[property] = self.send(property) if self.send(property)
61
+ if value = self.send(property)
62
+ properties[property] = value.respond_to?(:reference) ? value.reference : value
63
+ end
62
64
  end
63
- self.reference = Things::App.instance.make(:new => self.class.identifier, :with_properties => properties)
65
+ # only set name in make, then set the rest of the properties
66
+ name = properties.delete(:name)
67
+ self.reference = Things::App.instance.make(:new => self.class.identifier, :with_properties => { :name => name })
68
+ properties.each_pair { |name, property| self.reference.send(name).set(property) }
64
69
  else
65
70
  (self.class.properties - [:id_]).each do |property|
66
- self.reference.send(property).set(self.send(property)) if self.send(property)
71
+ if value = self.send(property)
72
+ self.reference.send(property).set(value.respond_to?(:reference) ? value.reference : value)
73
+ else
74
+ begin
75
+ self.reference.send(property).delete
76
+ rescue
77
+ end
78
+ end
67
79
  end
68
80
  end
69
81
  self
data/lib/things/todo.rb CHANGED
@@ -2,7 +2,7 @@ module Things
2
2
  # Things::Todo
3
3
  class Todo < Reference::Record
4
4
 
5
- properties :name, :notes, :completion_date
5
+ properties :name, :notes, :completion_date, :delegate, :status, :area, :project
6
6
  # identifier is required for creation
7
7
  identifier :to_do
8
8
  # collection is used for findings
@@ -11,8 +11,88 @@ module Things
11
11
  # Move a todo to a different list <br />
12
12
  # Moving to Trash will delete the todo
13
13
  def move(list)
14
+ list = list.reference if !list.is_a?(Appscript::Reference)
14
15
  Things::App.instance.move(reference, { :to => list })
15
16
  end
16
17
 
18
+ # Set the status to :completed
19
+ #
20
+ # Does not save the Todo
21
+ def complete
22
+ self.status = :completed
23
+ end
24
+
25
+ # Set the status to :completed
26
+ #
27
+ # Saves the Todo
28
+ def complete!
29
+ complete
30
+ self.save
31
+ end
32
+
33
+ # Check whether the Todo is completed or not
34
+ def completed?
35
+ self.status == :completed
36
+ end
37
+
38
+ # Set the status to :open
39
+ #
40
+ # Does not save the Todo
41
+ def open
42
+ self.status = :open
43
+ end
44
+
45
+ # Set the status to :open
46
+ #
47
+ # Saves the Todo
48
+ def open!
49
+ open
50
+ self.save
51
+ end
52
+
53
+ # Check whether the Todo is open or not
54
+ def open?
55
+ self.status == :open
56
+ end
57
+
58
+ # class methods, for accessing collections
59
+ class << self
60
+
61
+ # Returns an Appscript Reference to the entire collection of todos
62
+ def reference
63
+ Things::App.instance.todos
64
+ end
65
+
66
+ # Converts a collection of reference into a collection of objects
67
+ def convert(references)
68
+ references.to_a.collect { |todo| build(todo) }
69
+ end
70
+
71
+ # these are references and should be stored somewhere else...
72
+ Things::List::DEFAULTS.each do |list|
73
+ class_eval <<-"eval"
74
+ def #{list}
75
+ convert(Things::List.#{list}.reference.todos.get)
76
+ end
77
+ eval
78
+ end
79
+
80
+ # Returns an array of Things::Todo objects
81
+ def all
82
+ convert(reference.get)
83
+ end
84
+
85
+ # Get all not completed Todos
86
+ # Note this returns an array of Todos, not references
87
+ # TODO: find a better way of filtering references
88
+ def active
89
+ result = (reference.get - Things::List.trash.reference.todos.get).select do |todo|
90
+ todo.completion_date.get == :missing_value
91
+ end
92
+ convert(result.compact)
93
+ end
94
+
95
+ end
96
+
17
97
  end
18
98
  end
@@ -12,13 +12,9 @@ describe "Things::App" do
12
12
 
13
13
  describe '#activate' do
14
14
 
15
- it 'should start the app if it is not running' do
16
-
17
- # close if running
18
- #Things::App.instance!.quit if `ps x | grep Things`.include?('Things.app')
19
- #{}`ps x | grep Things`.should_not match('Things.app')
20
- #Things::App.instance!.activate
21
- #{}`ps x | grep Things`.should match('Things.app')
15
+ it 'should put the app in the front' do
16
+ Things::App.instance!.activate
17
+ Things::App.instance.frontmost.get.should == true
22
18
  end
23
19
 
24
20
  end
@@ -30,14 +26,5 @@ describe "Things::App" do
30
26
  end
31
27
 
32
28
  end
33
-
34
- describe '#todos' do
35
29
 
36
- it "should return Things::Collections::Todo" do
37
- Things::App.todos.should == Things::Collections::Todo
38
- end
39
-
40
- end
41
-
42
-
43
30
  end
@@ -3,17 +3,9 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
3
3
  describe "Things::Area" do
4
4
 
5
5
  before do
6
- Things::App.activate
7
6
  @area = Things::Area.new(:name => 'TEST - Foo')
8
7
  end
9
8
 
10
- after do
11
- # close all windows when done
12
- Things::App.instance.windows.get.each do |window|
13
- Things::App.instance!.close(window)
14
- end
15
- end
16
-
17
9
  describe "#self.new" do
18
10
 
19
11
  it "should create a new Things::Area instance with properties" do
@@ -148,6 +140,29 @@ describe "Things::Area" do
148
140
 
149
141
  end
150
142
 
143
+ describe '#todos' do
144
+
145
+ before do
146
+ @foo = Things::Todo.new(:name => 'TEST - Foo')
147
+ @bar = Things::Todo.new(:name => 'TEST - Bar')
148
+ end
149
+
150
+ after do
151
+ @foo.delete
152
+ @bar.delete
153
+ Things::App.instance.empty_trash
154
+ end
155
+
156
+ it "should get todo assigner to a area" do
157
+ @area.save
158
+ @foo.area= @area
159
+ @foo.save
160
+ @foo.area.should == @area
161
+ @area.delete
162
+ end
163
+
164
+ end
165
+
151
166
 
152
167
 
153
168
  end
@@ -0,0 +1,5 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Things::List" do
4
+
5
+ end
@@ -0,0 +1,13 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Things::Person" do
4
+
5
+ before do
6
+ Appscript.app('Address Book').make(:new => :person, :with_properties => { :organization => 'ThingsClientTest', :company => true })
7
+ end
8
+
9
+ it "should add a new person" do
10
+ @person = Things::Person.create('ThingsClientTest')
11
+
12
+ end
13
+ end
@@ -3,17 +3,9 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
3
3
  describe "Things::Project" do
4
4
 
5
5
  before do
6
- Things::App.activate
7
6
  @project = Things::Project.new(:name => 'TEST - Foo')
8
7
  end
9
8
 
10
- after do
11
- # close all windows when done
12
- Things::App.instance.windows.get.each do |window|
13
- Things::App.instance!.close(window)
14
- end
15
- end
16
-
17
9
  describe "#self.new" do
18
10
 
19
11
  it "should create a new Things::Project instance with properties" do
@@ -3,17 +3,9 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
3
3
  describe "Things::Tag" do
4
4
 
5
5
  before do
6
- Things::App.activate
7
6
  @tag = Things::Tag.new(:name => 'TEST - Foo')
8
7
  end
9
-
10
- after do
11
- # close all windows when done
12
- Things::App.instance.windows.get.each do |window|
13
- Things::App.instance!.close(window)
14
- end
15
- end
16
-
8
+
17
9
  describe "#self.new" do
18
10
 
19
11
  it "should create a new Things::Tag instance with properties" do
@@ -3,17 +3,9 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
3
3
  describe "Things::Todo" do
4
4
 
5
5
  before do
6
- Things::App.activate
7
6
  @todo = Things::Todo.new(:name => 'TEST - Foo', :notes => 'TEST - Fooer')
8
7
  end
9
8
 
10
- after do
11
- # close all windows when done
12
- Things::App.instance.windows.get.each do |window|
13
- Things::App.instance!.close(window)
14
- end
15
- end
16
-
17
9
  describe "#self.new" do
18
10
 
19
11
  it "should create a new Things::Todo instance with properties" do
@@ -23,7 +15,7 @@ describe "Things::Todo" do
23
15
 
24
16
  it "should not be sent to Things yet" do
25
17
  @todo.id_.should == nil
26
- active = (Things::App.instance.todos.get - Things::List.trash.todos.get)
18
+ active = (Things::App.instance.todos.get - Things::List.trash.reference.todos.get)
27
19
  active.collect { |todo| todo.name.get }.should_not include("TEST - Foo")
28
20
  end
29
21
 
@@ -53,7 +45,7 @@ describe "Things::Todo" do
53
45
  it "should create the todo" do
54
46
  @todo.id_.should_not be_nil
55
47
  @todo.new?.should == false
56
- active = (Things::App.instance.todos.get - Things::List.trash.todos.get)
48
+ active = (Things::App.instance.todos.get - Things::List.trash.reference.todos.get)
57
49
  active.collect { |todo| todo.name.get }.should include("TEST - Foo")
58
50
  end
59
51
 
@@ -96,13 +88,13 @@ describe "Things::Todo" do
96
88
 
97
89
  before do
98
90
  @todo.save
99
- Things::App.lists.inbox.todos.name.get.should include(@todo.name)
91
+ Things::App.lists.inbox.reference.todos.name.get.should include(@todo.name)
100
92
  end
101
93
 
102
94
  it "should remove a todo" do
103
95
  @todo.delete
104
- Things::App.lists.inbox.todos.name.get.should_not include(@todo.name)
105
- Things::App.lists.trash.todos.name.get.should include(@todo.name)
96
+ Things::App.lists.inbox.reference.todos.name.get.should_not include(@todo.name)
97
+ Things::App.lists.trash.reference.todos.name.get.should include(@todo.name)
106
98
  end
107
99
 
108
100
  after do
@@ -155,6 +147,54 @@ describe "Things::Todo" do
155
147
 
156
148
  end
157
149
 
150
+ describe "#self.all" do
151
+ before do
152
+ @todo_a = Things::Todo.create(:name => 'TEST - AAA')
153
+ @todo_b = Things::Todo.create(:name => 'TEST - BBB')
154
+ end
155
+
156
+ after do
157
+ @todo_a.delete
158
+ @todo_b.delete
159
+ Things::App.instance.empty_trash
160
+ end
161
+
162
+ it "should return a collection of all todos as Things::Todo objects" do
163
+ Things::Todo.all.collect(&:id_).should include(@todo_a.id_)
164
+ Things::Todo.all.collect(&:id_).should include(@todo_b.id_)
165
+ end
166
+
167
+
168
+ end
158
169
 
170
+ describe "#self.active" do
171
+
172
+ before do
173
+ @todo_a = Things::Todo.create(:name => 'TEST - AAA')
174
+ @todo_b = Things::Todo.create(:name => 'TEST - BBB')
175
+ Things::Todo.active.collect(&:id_).should include(@todo_a.id_)
176
+ Things::Todo.active.collect(&:id_).should include(@todo_b.id_)
177
+ end
178
+
179
+ after do
180
+ @todo_a.delete
181
+ @todo_b.delete
182
+ Things::App.instance.empty_trash
183
+ end
184
+
185
+ it "should not include completed todos" do
186
+ @todo_b.completion_date = Time.now
187
+ @todo_b.save
188
+ Things::Todo.active.collect(&:id_).should include(@todo_a.id_)
189
+ Things::Todo.active.collect(&:id_).should_not include(@todo_b.id_)
190
+ end
191
+
192
+ it "should not include deleted todos" do
193
+ @todo_a.delete
194
+ Things::Todo.active.collect(&:id_).should_not include(@todo_a.id_)
195
+ Things::Todo.active.collect(&:id_).should include(@todo_b.id_)
196
+ end
197
+
198
+ end
159
199
 
160
200
  end
data/spec/things_spec.rb CHANGED
@@ -8,7 +8,10 @@ describe "Things" do
8
8
  Things::Todo
9
9
  Things::List
10
10
  Things::Status
11
- Things::Collections::Todo
11
+ Things::Area
12
+ Things::Project
13
+ Things::Tag
14
+ Things::Person
12
15
  end.should_not raise_error(NameError)
13
16
  end
14
17
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: things-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcin Bunsch
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-08 00:00:00 +01:00
12
+ date: 2010-02-23 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -52,8 +52,8 @@ files:
52
52
  - lib/things.rb
53
53
  - lib/things/app.rb
54
54
  - lib/things/area.rb
55
- - lib/things/collections/todo.rb
56
55
  - lib/things/list.rb
56
+ - lib/things/person.rb
57
57
  - lib/things/project.rb
58
58
  - lib/things/reference/base.rb
59
59
  - lib/things/reference/inheritance.rb
@@ -65,7 +65,8 @@ files:
65
65
  - spec/spec_helper.rb
66
66
  - spec/things/app_spec.rb
67
67
  - spec/things/area_spec.rb
68
- - spec/things/collections/todo_spec.rb
68
+ - spec/things/list_spec.rb
69
+ - spec/things/person_spec.rb
69
70
  - spec/things/project_spec.rb
70
71
  - spec/things/tag_spec.rb
71
72
  - spec/things/todo_spec.rb
@@ -103,7 +104,8 @@ test_files:
103
104
  - spec/spec_helper.rb
104
105
  - spec/things/app_spec.rb
105
106
  - spec/things/area_spec.rb
106
- - spec/things/collections/todo_spec.rb
107
+ - spec/things/list_spec.rb
108
+ - spec/things/person_spec.rb
107
109
  - spec/things/project_spec.rb
108
110
  - spec/things/tag_spec.rb
109
111
  - spec/things/todo_spec.rb
@@ -1,42 +0,0 @@
1
- module Things
2
- module Collections
3
- class Todo
4
-
5
- class << self
6
-
7
- # Returns an Appscript Reference to the entire collection of todos
8
- def reference
9
- Things::App.instance.todos
10
- end
11
-
12
- # these are references and should be stored somewhere else...
13
- Things::List::DEFAULTS.each do |list|
14
- class_eval <<-"eval"
15
- def #{list}
16
- Things::App.lists.#{list}.todos
17
- end
18
- eval
19
- end
20
-
21
- # Returns an array of Things::Todo objects
22
- def all
23
- reference.get.collect { |todo| Things::Todo.build(todo) }
24
- end
25
-
26
- # Get all not completed Todos
27
- # Note this returns an array of Todos, not references
28
- # TODO: find a better way of filtering references
29
- def active
30
- result = (reference.get - Things::List.trash.todos.get).collect do |todo|
31
- Things::Todo.build(todo) if todo.completion_date.get.to_s == 'missing_value'
32
- end
33
- result.compact
34
- end
35
-
36
-
37
-
38
- end
39
-
40
- end
41
- end
42
- end
@@ -1,54 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
-
3
- describe "Things::Collections::Todo" do
4
-
5
- describe "#self.all" do
6
- before do
7
- @todo_a = Things::Todo.create(:name => 'TEST - AAA')
8
- @todo_b = Things::Todo.create(:name => 'TEST - BBB')
9
- end
10
-
11
- after do
12
- @todo_a.delete
13
- @todo_b.delete
14
- Things::App.instance.empty_trash
15
- end
16
-
17
- it "should return a collection of all todos as Things::Todo objects" do
18
- Things::Collections::Todo.all.collect(&:id_).should include(@todo_a.id_)
19
- Things::Collections::Todo.all.collect(&:id_).should include(@todo_b.id_)
20
- end
21
-
22
-
23
- end
24
-
25
- describe "#self.active" do
26
-
27
- before do
28
- @todo_a = Things::Todo.create(:name => 'TEST - AAA')
29
- @todo_b = Things::Todo.create(:name => 'TEST - BBB')
30
- Things::Collections::Todo.active.collect(&:id_).should include(@todo_a.id_)
31
- Things::Collections::Todo.active.collect(&:id_).should include(@todo_b.id_)
32
- end
33
-
34
- after do
35
- @todo_a.delete
36
- @todo_b.delete
37
- Things::App.instance.empty_trash
38
- end
39
-
40
- it "should not include completed todos" do
41
- @todo_b.completion_date = Time.now
42
- @todo_b.save
43
- Things::Collections::Todo.active.collect(&:id_).should include(@todo_a.id_)
44
- Things::Collections::Todo.active.collect(&:id_).should_not include(@todo_b.id_)
45
- end
46
-
47
- it "should not include deleted todos" do
48
- @todo_a.delete
49
- Things::Collections::Todo.active.collect(&:id_).should_not include(@todo_a.id_)
50
- Things::Collections::Todo.active.collect(&:id_).should include(@todo_b.id_)
51
- end
52
-
53
- end
54
- end