tempo-cli 0.1.6 → 0.2.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.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile.lock +3 -3
  3. data/README.md +9 -3
  4. data/bin/tempo +20 -2
  5. data/features/arrange.feature +1 -1
  6. data/features/directory.feature +108 -0
  7. data/features/project.feature +2 -2
  8. data/features/report.feature +3 -2
  9. data/features/start.feature +0 -1
  10. data/features/step_definitions/tempo_steps.rb +99 -20
  11. data/features/update.feature +7 -1
  12. data/lib/file_record/directory.rb +19 -3
  13. data/lib/file_record/file_utility.rb +122 -0
  14. data/lib/file_record/record.rb +36 -83
  15. data/lib/tempo/controllers/arrange_controller.rb +5 -5
  16. data/lib/tempo/controllers/base.rb +8 -8
  17. data/lib/tempo/controllers/checkout_controller.rb +4 -4
  18. data/lib/tempo/controllers/end_controller.rb +4 -5
  19. data/lib/tempo/controllers/projects_controller.rb +13 -10
  20. data/lib/tempo/controllers/records_controller.rb +8 -5
  21. data/lib/tempo/controllers/report_controller.rb +4 -4
  22. data/lib/tempo/controllers/start_controller.rb +4 -3
  23. data/lib/tempo/controllers/update_controller.rb +22 -8
  24. data/lib/tempo/exceptions.rb +2 -2
  25. data/lib/tempo/models/base.rb +26 -18
  26. data/lib/tempo/models/composite.rb +5 -3
  27. data/lib/tempo/models/log.rb +61 -38
  28. data/lib/tempo/models/project.rb +9 -6
  29. data/lib/tempo/models/time_record.rb +14 -14
  30. data/lib/tempo/version.rb +1 -1
  31. data/lib/tempo/views/arrange_view.rb +4 -4
  32. data/lib/tempo/views/base.rb +10 -23
  33. data/lib/tempo/views/formatters/base.rb +2 -2
  34. data/lib/tempo/views/formatters/screen.rb +7 -7
  35. data/lib/tempo/views/projects_view.rb +8 -8
  36. data/lib/tempo/views/report_view.rb +5 -5
  37. data/lib/tempo/views/reporter.rb +4 -4
  38. data/lib/tempo/views/time_record_view.rb +5 -5
  39. data/lib/tempo/views/view_records/base.rb +8 -8
  40. data/lib/tempo/views/view_records/composite.rb +4 -4
  41. data/lib/tempo/views/view_records/log.rb +3 -3
  42. data/lib/tempo/views/view_records/project.rb +3 -3
  43. data/lib/tempo/views/view_records/time_record.rb +5 -5
  44. data/lib/tempo.rb +3 -0
  45. data/lib/time_utilities.rb +4 -4
  46. data/tempo-cli.gemspec +8 -7
  47. data/test/lib/file_record/directory_test.rb +14 -1
  48. data/test/lib/file_record/record_test.rb +40 -75
  49. data/test/lib/tempo/models/base_test.rb +2 -2
  50. data/test/lib/tempo/models/composite_test.rb +9 -9
  51. data/test/lib/tempo/models/log_test.rb +31 -16
  52. data/test/lib/tempo/models/time_record_test.rb +29 -19
  53. data/test/support/factories.rb +5 -0
  54. data/test/support/helpers.rb +7 -7
  55. metadata +40 -53
@@ -13,7 +13,7 @@ module Tempo
13
13
 
14
14
  class Screen < Tempo::Views::Formatters::Base
15
15
 
16
- def message_block record
16
+ def message_block(record)
17
17
  record.format do |m|
18
18
  case m.category
19
19
  when :error
@@ -25,18 +25,18 @@ module Tempo
25
25
  end
26
26
  end
27
27
 
28
- def duration_block record
28
+ def duration_block(record)
29
29
  record.format do |d|
30
30
  puts "#{ d.hours.to_s }:#{ d.minutes.to_s.rjust(2, '0') }"
31
31
  end
32
32
  end
33
33
 
34
34
  # spacer for project titles, active project marked with *
35
- def active_indicator( project )
35
+ def active_indicator(project)
36
36
  indicator = project.current ? "* " : " "
37
37
  end
38
38
 
39
- def tag_partial tags, title_length
39
+ def tag_partial(tags, title_length)
40
40
  max_length = ViewRecords::Project.max_title_length
41
41
  max_length += ViewRecords::Project.max_depth * 2 if @options[:depth]
42
42
  max_length += 6 if @options[:id]
@@ -50,11 +50,11 @@ module Tempo
50
50
  view[0..-3] + "]"
51
51
  end
52
52
 
53
- def id_partial id
53
+ def id_partial(id)
54
54
  @options[:id] ? "[#{id}] ".rjust(6, ' ') : ""
55
55
  end
56
56
 
57
- def project_block record
57
+ def project_block(record)
58
58
 
59
59
  record.format do |r|
60
60
  @options[:active] = @options.fetch( :active, false )
@@ -71,7 +71,7 @@ module Tempo
71
71
  end
72
72
  end
73
73
 
74
- def timerecord_block record
74
+ def timerecord_block(record)
75
75
  record.format do |r|
76
76
  id = id_partial r.id
77
77
  running = r.running ? "*" : " "
@@ -6,7 +6,7 @@ module Tempo
6
6
  ViewRecords::Project.new project, depth: depth
7
7
  end
8
8
 
9
- def projects_list_view projects=Tempo::Model::Project.index, parent=:root, depth=0
9
+ def projects_list_view(projects=Tempo::Model::Project.index, parent=:root, depth=0)
10
10
  return no_items( "projects" ) if projects.empty?
11
11
 
12
12
  Tempo::Model::Project.sort_by_title projects do |projects|
@@ -26,7 +26,7 @@ module Tempo
26
26
  end
27
27
 
28
28
  # list of sorted projects, no hierarchy
29
- def projects_flat_list_view projects=Tempo::Model::Project.index
29
+ def projects_flat_list_view(projects=Tempo::Model::Project.index)
30
30
 
31
31
  Tempo::Model::Project.sort_by_title projects do |projects|
32
32
  projects.each do |p|
@@ -35,32 +35,32 @@ module Tempo
35
35
  end
36
36
  end
37
37
 
38
- def project_added project
38
+ def project_added(project)
39
39
  ViewRecords::Message.new "added project:"
40
40
  project_view project
41
41
  end
42
42
 
43
- def project_deleted project
43
+ def project_deleted(project)
44
44
  ViewRecords::Message.new "deleted project:"
45
45
  project_view project
46
46
  end
47
47
 
48
- def project_checkout project
48
+ def project_checkout(project)
49
49
  ViewRecords::Message.new "switched to project:"
50
50
  project_view project
51
51
  end
52
52
 
53
- def project_already_current project
53
+ def project_already_current(project)
54
54
  ViewRecords::Message.new "already on project:"
55
55
  project_view project
56
56
  end
57
57
 
58
- def project_tags project
58
+ def project_tags(project)
59
59
  ViewRecords::Message.new "altered project tags:"
60
60
  project_view project
61
61
  end
62
62
 
63
- def ambiguous_project( matches, command )
63
+ def ambiguous_project(matches, command)
64
64
 
65
65
  ViewRecords::Message.new "The following projects matched your search:"
66
66
 
@@ -2,13 +2,13 @@ module Tempo
2
2
  module Views
3
3
  class << self
4
4
 
5
- def report_records_view options={}
5
+ def report_records_view(options={})
6
6
 
7
- projects = options.fetch( :projects, Tempo::Model::Project.index )
8
- return no_items( "projects" ) if projects.empty?
7
+ projects = options.fetch(:projects, Tempo::Model::Project.index)
8
+ return no_items("projects") if projects.empty?
9
9
 
10
10
  time_records = options.fetch( :time_records, Tempo::Model::TimeRecord.days_index )
11
- return no_items( "time records" ) if time_records.empty?
11
+ return no_items("time records") if time_records.empty?
12
12
 
13
13
  time_records.each do |d_id, days_record|
14
14
 
@@ -23,4 +23,4 @@ module Tempo
23
23
  end
24
24
  end
25
25
  end
26
- end
26
+ end
@@ -27,7 +27,7 @@ module Tempo
27
27
  class << self
28
28
  attr_accessor :view_records
29
29
 
30
- def add_format *formats
30
+ def add_format(*formats)
31
31
  @@formats ||= []
32
32
  formats.each {|format| @@formats << format}
33
33
  end
@@ -40,12 +40,12 @@ module Tempo
40
40
  @@options ||= {}
41
41
  end
42
42
 
43
- def add_options options
43
+ def add_options(options)
44
44
  @@options ||= {}
45
45
  @@options.merge! options
46
46
  end
47
47
 
48
- def add_view_record record
48
+ def add_view_record(record)
49
49
  @@view_records ||= []
50
50
 
51
51
  if /Views::ViewRecords/.match record.class.name
@@ -67,4 +67,4 @@ module Tempo
67
67
  end
68
68
  end
69
69
  end
70
- end
70
+ end
@@ -2,26 +2,26 @@ module Tempo
2
2
  module Views
3
3
  class << self
4
4
 
5
- def time_record_view time_record
5
+ def time_record_view(time_record)
6
6
  ViewRecords::TimeRecord.new time_record
7
7
  end
8
8
 
9
- def start_time_record_view time_record
9
+ def start_time_record_view(time_record)
10
10
  ViewRecords::Message.new "time record started:"
11
11
  time_record_view time_record
12
12
  end
13
13
 
14
- def end_time_record_view time_record
14
+ def end_time_record_view(time_record)
15
15
  ViewRecords::Message.new "time record ended:"
16
16
  time_record_view time_record
17
17
  end
18
18
 
19
- def update_time_record_view time_record
19
+ def update_time_record_view(time_record)
20
20
  ViewRecords::Message.new "time record updated:"
21
21
  time_record_view time_record
22
22
  end
23
23
 
24
- def delete_time_record_view time_record
24
+ def delete_time_record_view(time_record)
25
25
  ViewRecords::Message.new "time record deleted:"
26
26
  time_record_view time_record
27
27
  end
@@ -30,14 +30,14 @@ module Tempo
30
30
  class Message
31
31
  attr_accessor :type, :message, :category
32
32
 
33
- def initialize message, options={}
33
+ def initialize(message, options={})
34
34
  @message = message
35
35
  @category = options.fetch( :category, :info )
36
36
  @type = "message"
37
37
  Reporter.add_view_record self
38
38
  end
39
39
 
40
- def format &block
40
+ def format(&block)
41
41
  block ||= lambda {|m| "#{m.message}"}
42
42
  block.call self
43
43
  end
@@ -63,18 +63,18 @@ module Tempo
63
63
  @total = seconds
64
64
  end
65
65
 
66
- def format &block
66
+ def format(&block)
67
67
  block ||= lambda do |d|
68
68
  "#{ d.hours.to_s }:#{ d.minutes.to_s.rjust(2, '0') }"
69
69
  end
70
70
  block.call self
71
71
  end
72
72
 
73
- def add seconds
73
+ def add(seconds)
74
74
  @total += seconds
75
75
  end
76
76
 
77
- def subtract seconds
77
+ def subtract(seconds)
78
78
  @total -= seconds
79
79
  end
80
80
 
@@ -96,7 +96,7 @@ module Tempo
96
96
  class Model
97
97
  attr_accessor :id, :type
98
98
 
99
- def initialize model, options={}
99
+ def initialize(model, options={})
100
100
  @id = model.id
101
101
 
102
102
  # example: Tempo::Model::Something => "something"
@@ -104,11 +104,11 @@ module Tempo
104
104
  Reporter.add_view_record self
105
105
  end
106
106
 
107
- def format &block
107
+ def format(&block)
108
108
  block ||= lambda {|model| "#{ model.type.capitalize} #{model.id}"}
109
109
  block.call self
110
110
  end
111
111
  end
112
112
  end
113
113
  end
114
- end
114
+ end
@@ -18,23 +18,23 @@ module Tempo
18
18
  attr_accessor :depth
19
19
 
20
20
  class << self
21
- def max_depth depth=0
21
+ def max_depth(depth=0)
22
22
  @max_depth ||= 0
23
23
  @max_depth = @max_depth > depth ? @max_depth : depth
24
24
  end
25
25
  end
26
26
 
27
- def initialize model, options={}
27
+ def initialize(model, options={})
28
28
  super model, options
29
29
  @depth = options.fetch(:depth, 0)
30
30
  self.class.max_depth @depth
31
31
  end
32
32
 
33
- def format &block
33
+ def format(&block)
34
34
  block ||= lambda {|model| "#{" " * model.depth}#{ model.type.capitalize} #{model.id}"}
35
35
  block.call self
36
36
  end
37
37
  end
38
38
  end
39
39
  end
40
- end
40
+ end
@@ -12,17 +12,17 @@ module Tempo
12
12
  class Log < ViewRecords::Model
13
13
  attr_accessor :start_time, :d_id
14
14
 
15
- def initialize model, options={}
15
+ def initialize(model, options={})
16
16
  super model, options
17
17
  @start_time = model.start_time
18
18
  @d_id = model.d_id
19
19
  end
20
20
 
21
- def format &block
21
+ def format(&block)
22
22
  block ||= lambda {|model| "#{ model.type.capitalize} #{model.d_id}-#{model.id} #{model.start_time.strftime('%H:%M')}"}
23
23
  block.call self
24
24
  end
25
25
  end
26
26
  end
27
27
  end
28
- end
28
+ end
@@ -12,13 +12,13 @@ module Tempo
12
12
  attr_accessor :title, :tags, :current, :duration
13
13
 
14
14
  class << self
15
- def max_title_length len=0
15
+ def max_title_length(len=0)
16
16
  @max_title_length ||= 0
17
17
  @max_title_length = @max_title_length > len ? @max_title_length : len
18
18
  end
19
19
  end
20
20
 
21
- def initialize model, options={}
21
+ def initialize(model, options={})
22
22
  super model, options
23
23
  @title = model.title
24
24
  @tags = model.tags
@@ -29,4 +29,4 @@ module Tempo
29
29
  end
30
30
  end
31
31
  end
32
- end
32
+ end
@@ -11,18 +11,18 @@ module Tempo
11
11
  attr_accessor :description, :duration, :end_time, :project, :running
12
12
 
13
13
  class << self
14
- def max_description_length len=0
14
+ def max_description_length(len=0)
15
15
  @max_description_length ||= 0
16
16
  @max_description_length = @max_description_length > len ? @max_description_length : len
17
17
  end
18
18
 
19
- def max_project_length len=0
19
+ def max_project_length(len=0)
20
20
  @max_project_length ||= 0
21
21
  @max_project_length = @max_project_length > len ? @max_project_length : len
22
22
  end
23
23
  end
24
24
 
25
- def initialize model, options={}
25
+ def initialize(model, options={})
26
26
  super model, options
27
27
  @description = model.description
28
28
  @description ||= ""
@@ -34,7 +34,7 @@ module Tempo
34
34
  self.class.max_project_length @project.length
35
35
  end
36
36
 
37
- def format &block
37
+ def format(&block)
38
38
  block ||= lambda do |m|
39
39
  running = m.running ? "*" : " "
40
40
  description = @description ? "#{m.project}: #{m.description}" : "#{m.project}"
@@ -45,4 +45,4 @@ module Tempo
45
45
  end
46
46
  end
47
47
  end
48
- end
48
+ end
data/lib/tempo.rb CHANGED
@@ -15,6 +15,8 @@ require 'tempo/controllers/base.rb'
15
15
  Dir[File.dirname(__FILE__) + '/tempo/controllers/*.rb'].each {|file| require file }
16
16
 
17
17
  require 'tempo/views/view_records/base.rb'
18
+ require 'tempo/views/view_records/composite.rb'
19
+ require 'tempo/views/view_records/log.rb'
18
20
  Dir[File.dirname(__FILE__) + '/tempo/views/view_records/*.rb'].each {|file| require file }
19
21
 
20
22
  require 'tempo/views/reporter.rb'
@@ -25,4 +27,5 @@ require 'tempo/views/base.rb'
25
27
  Dir[File.dirname(__FILE__) + '/tempo/views/*.rb'].each {|file| require file }
26
28
 
27
29
  require 'file_record/directory.rb'
30
+ require 'file_record/file_utility.rb'
28
31
  require 'file_record/record.rb'
@@ -5,9 +5,9 @@ require 'chronic'
5
5
  class Time
6
6
 
7
7
  class << self
8
- def parse time
8
+ def parse(time)
9
9
  # Chronic will usually return nil when unable to parse time
10
- # it throws an error, on 't' and a few other string, so we
10
+ # it throws an error, on 't' and a few other strings, so we
11
11
  # capture these here an assure that nil is returned
12
12
  begin
13
13
  chron = Chronic.parse time
@@ -19,12 +19,12 @@ class Time
19
19
  end
20
20
 
21
21
  #default to whole minutes
22
- def round options={}
22
+ def round(options={})
23
23
  seconds = 60
24
24
  Time.at((self.to_f / seconds).round * seconds)
25
25
  end
26
26
 
27
- def add_days days
27
+ def add_days(days)
28
28
  t = self + days * 86400 # 24 * 60 * 60
29
29
  end
30
30
  end
data/tempo-cli.gemspec CHANGED
@@ -5,6 +5,7 @@ spec = Gem::Specification.new do |s|
5
5
  s.version = Tempo::VERSION
6
6
  s.author = 'Jonathan Gabel'
7
7
  s.email = 'hello@jonathangabel.com'
8
+ s.license = 'MIT'
8
9
  s.homepage = 'https://github.com/josankapo/tempo-cli'
9
10
  s.platform = Gem::Platform::RUBY
10
11
  s.summary = 'A command line time tracker for recording by day and by project'
@@ -14,11 +15,11 @@ spec = Gem::Specification.new do |s|
14
15
  s.has_rdoc = true
15
16
  s.bindir = 'bin'
16
17
  s.executables << 'tempo'
17
- s.add_development_dependency('rake')
18
- s.add_development_dependency('rdoc')
19
- s.add_development_dependency('aruba')
20
- s.add_development_dependency('turn', '~> 0.9.6')
21
- s.add_development_dependency('pry','~> 0.9.12.2')
22
- s.add_runtime_dependency('gli','2.6.1')
23
- s.add_runtime_dependency "chronic", "~> 0.10.2"
18
+ s.add_development_dependency('rake', '~> 10.3')
19
+ s.add_development_dependency('rdoc', '~> 4.1')
20
+ s.add_development_dependency('aruba', '~> 0.5')
21
+ s.add_development_dependency('turn', '~> 0.9')
22
+ s.add_development_dependency('pry','~> 0.9')
23
+ s.add_runtime_dependency('gli', '~> 2.10')
24
+ s.add_runtime_dependency "chronic", "~> 0.10"
24
25
  end
@@ -4,11 +4,13 @@ describe FileRecord do
4
4
 
5
5
  before do
6
6
  @dir = File.join(Dir.home,"tempo")
7
+ @alt_dir = File.join(Dir.home, "testdir", "tempo")
7
8
  FileUtils.rm_r @dir if File.exists?(@dir)
8
9
  end
9
10
 
10
11
  after do
11
12
  FileUtils.rm_r @dir if File.exists?(@dir)
13
+ FileUtils.rm_r @alt_dir if File.exists?(@alt_dir)
12
14
  end
13
15
 
14
16
 
@@ -25,6 +27,17 @@ describe FileRecord do
25
27
  File.exists?( project_file ).must_equal true
26
28
  File.exists?( readme ).must_equal true
27
29
  end
30
+
31
+ it "should take an optional directory parameter" do
32
+ project_file = File.join(@alt_dir, "tempo_projects.yaml")
33
+ readme = File.join(@alt_dir, "README.txt")
34
+ dir = File.join(Dir.home, "testdir")
35
+
36
+ FileRecord::Directory.create_new directory: dir
37
+ File.exists?( @alt_dir ).must_equal true
38
+ File.exists?( project_file ).must_equal true
39
+ File.exists?( readme ).must_equal true
40
+ end
28
41
  end
29
42
  end
30
- end
43
+ end
@@ -12,81 +12,6 @@ describe FileRecord do
12
12
 
13
13
  describe "Record" do
14
14
 
15
- before do
16
- @file = File.join( @dir, "filerecord_create.txt")
17
- end
18
-
19
- after do
20
- File.delete(@file) if File.exists?(@file)
21
- end
22
-
23
- describe "create" do
24
-
25
- it "should create a new record" do
26
- FileRecord::Record.create( @file, "" )
27
- File.exists?( @file ).must_equal true
28
- end
29
-
30
- it "should raise and error if the file exists" do
31
- FileRecord::Record.create( @file, "" )
32
- proc { FileRecord::Record.create( @file, "" ) }.must_raise ArgumentError
33
- end
34
-
35
- it "should overwrite a file with option :force" do
36
- File.open( @file,'w' ) do |f|
37
- f.puts "Now this file already exists"
38
- end
39
- FileRecord::Record.create( @file, "overwrite file", force: true )
40
- contents = eval_file_as_array( @file )
41
- contents.must_equal ["overwrite file"]
42
- end
43
- end
44
-
45
- describe "recording a string" do
46
- it "should be able to record a string" do
47
- FileRecord::Record.create( @file, "a simple string" )
48
- contents = eval_file_as_array( @file )
49
- contents.must_equal ["a simple string"]
50
- end
51
-
52
- it "should be able to record a string as yaml" do
53
- FileRecord::Record.create( @file, "a simple string", format: 'yaml' )
54
- contents = eval_file_as_array( @file )
55
- contents.must_equal ["--- a simple string", "..."]
56
- end
57
- end
58
-
59
- describe "recording and array" do
60
-
61
- it "should be able to record a shallow array as string" do
62
- FileRecord::Record.create( @file, ["a","simple","array"], format: "string" )
63
- contents = eval_file_as_array( @file )
64
- contents.must_equal ["a","simple","array"]
65
- end
66
-
67
- it "should default to recording a shallow array as yaml" do
68
- FileRecord::Record.create( @file, ["a","simple","array"] )
69
- contents = eval_file_as_array( @file )
70
- contents.must_equal ["---", "- a", "- simple", "- array"]
71
- end
72
-
73
- it "should record a nested array as yaml" do
74
- FileRecord::Record.create( @file, ["a",["nested",["array"]]])
75
- contents = eval_file_as_array( @file )
76
- contents.must_equal ["---", "- a", "- - nested", " - - array"]
77
- end
78
- end
79
-
80
- describe "recording a hash" do
81
-
82
- it "should default to and record a hash as yaml" do
83
- hash = {a: 1, b: true, c: Hash.new, d: "object", with: ['an', 'array']}
84
- FileRecord::Record.create( @file, hash )
85
- contents = eval_file_as_array( @file )
86
- contents.must_equal ["---", ":a: 1", ":b: true", ":c: {}", ":d: object", ":with:", "- an", "- array"]
87
- end
88
- end
89
-
90
15
  describe "recording a Tempo Model" do
91
16
 
92
17
  it "should create a record of all instances" do
@@ -102,5 +27,45 @@ describe FileRecord do
102
27
  "---", ":id: 5", ":genious: Panthera", ":species: p. zdanskyi"]
103
28
  end
104
29
  end
30
+
31
+ describe "redording a Tempo Log" do
32
+
33
+ it "should create daily records containing each instance" do
34
+ test_file_1 = File.join(ENV['HOME'],'tempo','tempo_message_logs', '20140101.yaml')
35
+ File.delete( test_file ) if File.exists?( test_file_1 )
36
+ test_file_2 = File.join(ENV['HOME'],'tempo','tempo_message_logs', '20140102.yaml')
37
+ File.delete( test_file ) if File.exists?( test_file_2 )
38
+
39
+ log_factory
40
+ FileRecord::Record.save_log(Tempo::Model::MessageLog)
41
+ contents = eval_file_as_array( test_file_1 )
42
+ contents.must_equal [ "---",
43
+ ":start_time: 2014-01-01 07:00:00.000000000 -05:00",
44
+ ":id: 1",
45
+ ":message: day 1 pet the sheep",
46
+ "---",
47
+ ":start_time: 2014-01-01 07:30:00.000000000 -05:00",
48
+ ":id: 2",
49
+ ":message: day 1 drinking coffee, check on the mushrooms",
50
+ "---",
51
+ ":start_time: 2014-01-01 12:30:00.000000000 -05:00",
52
+ ":id: 3",
53
+ ":message: day 1 water the bonsai"]
54
+
55
+ contents = eval_file_as_array( test_file_2 )
56
+ contents.must_equal [ "---",
57
+ ":start_time: 2014-01-02 07:15:00.000000000 -05:00",
58
+ ":id: 1",
59
+ ":message: day 2 pet the sheep",
60
+ "---",
61
+ ":start_time: 2014-01-02 07:45:00.000000000 -05:00",
62
+ ":id: 2",
63
+ ":message: day 2 drinking coffee, check on the mushrooms",
64
+ "---",
65
+ ":start_time: 2014-01-02 12:00:00.000000000 -05:00",
66
+ ":id: 3",
67
+ ":message: day 2 water the bonsai"]
68
+ end
69
+ end
105
70
  end
106
71
  end
@@ -10,7 +10,7 @@ describe Tempo do
10
10
 
11
11
  describe "Model::Base" do
12
12
 
13
- it "inheritale from" do
13
+ it "is inheritable from" do
14
14
  Tempo::Model::Animal.superclass.must_equal Tempo::Model::Base
15
15
  end
16
16
 
@@ -30,7 +30,7 @@ describe Tempo do
30
30
  end
31
31
  end
32
32
 
33
- it "creates a file name to save to" do
33
+ it "knows which file name to save to" do
34
34
  frog_factory
35
35
  Tempo::Model::Animal.file.must_equal "tempo_animals.yaml"
36
36
  end
@@ -42,15 +42,15 @@ describe Tempo do
42
42
  end
43
43
 
44
44
  it "should revive a tree structure from a file" do
45
- tree_factory
46
- test_file = File.join(ENV['HOME'],'tempo','tempo_trees.yaml')
47
- File.delete(test_file) if File.exists?( test_file )
48
- contents = Tempo::Model::Tree.save_to_file
49
- Tempo::Model::Tree.clear_all
50
- Tempo::Model::Tree.read_from_file
51
- branch1 = Tempo::Model::Tree.find_by_id 3
52
- branch1.parent.must_equal 1
53
- branch1.children.must_equal [7,8]
45
+ tree_factory
46
+ test_file = File.join(ENV['HOME'],'tempo','tempo_trees.yaml')
47
+ File.delete(test_file) if File.exists?( test_file )
48
+ contents = Tempo::Model::Tree.save_to_file
49
+ Tempo::Model::Tree.clear_all
50
+ Tempo::Model::Tree.read_from_file
51
+ branch1 = Tempo::Model::Tree.find_by_id 3
52
+ branch1.parent.must_equal 1
53
+ branch1.children.must_equal [7,8]
54
54
  end
55
55
 
56
56
  it "should have a << child method" do