rtt 0.0.0.47 → 0.0.0.48
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +4 -7
- data/Gemfile.lock +28 -35
- data/Manifest +12 -12
- data/Rakefile +3 -3
- data/bin/rtt +2 -2
- data/db/config.yml +10 -0
- data/db/schema.rb +43 -0
- data/db/test.sqlite3 +0 -0
- data/lib/{rtt/array_extensions.rb → extensions/array.rb} +0 -0
- data/lib/extensions/date.rb +15 -0
- data/lib/{rtt/hash_extensions.rb → extensions/hash.rb} +0 -0
- data/lib/{rtt/system_extensions.rb → extensions/kernel.rb} +0 -0
- data/lib/models/client.rb +34 -0
- data/lib/models/project.rb +44 -0
- data/lib/models/task.rb +131 -0
- data/lib/models/user.rb +48 -0
- data/lib/rtt.rb +13 -12
- data/lib/rtt/cmd_line_parser.rb +10 -2
- data/lib/rtt/interactive_configurator.rb +11 -7
- data/lib/rtt/query_builder.rb +9 -4
- data/lib/rtt/report_generator.rb +3 -4
- data/lib/rtt/storage.rb +18 -11
- data/rtt.gemspec +17 -33
- data/spec/ar_spec_helper.rb +11 -0
- data/spec/lib/{rtt → models}/task_spec.rb +9 -10
- data/spec/lib/rtt_spec.rb +20 -22
- data/tasks/rtt.rake +1 -1
- metadata +318 -424
- data/db/rtt.sqlite3 +0 -0
- data/lib/rtt/client.rb +0 -42
- data/lib/rtt/project.rb +0 -54
- data/lib/rtt/task.rb +0 -144
- data/lib/rtt/user.rb +0 -65
- data/log/rtt.sqlite3 +0 -0
- data/spec/datamapper_spec_helper.rb +0 -3
data/lib/models/user.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
class User < ActiveRecord::Base
|
3
|
+
|
4
|
+
BLANK_FIELD = ''
|
5
|
+
DEFAULT_NICK = 'Default user'
|
6
|
+
|
7
|
+
has_many :tasks
|
8
|
+
has_many :projects, :through => :tasks
|
9
|
+
|
10
|
+
def self.default
|
11
|
+
find_or_create_by_active(true)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.find_or_create_active
|
15
|
+
last_user = User.last
|
16
|
+
if last_user.present?
|
17
|
+
last_user.active = true
|
18
|
+
last_user.save
|
19
|
+
last_user
|
20
|
+
else
|
21
|
+
self.default
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def activate
|
26
|
+
self.active = true
|
27
|
+
self.save
|
28
|
+
self
|
29
|
+
end
|
30
|
+
|
31
|
+
def deactivate
|
32
|
+
self.active = false
|
33
|
+
self.save
|
34
|
+
self
|
35
|
+
end
|
36
|
+
|
37
|
+
def full_name
|
38
|
+
"#{first_name.present? ? first_name : ''} #{last_name.present? ? last_name : ''}".strip
|
39
|
+
end
|
40
|
+
|
41
|
+
def full_name_and_nickname
|
42
|
+
"#{full_name.present? ? full_name : ''} #{full_name.present? ? "(#{nickname})" : nickname }".strip
|
43
|
+
end
|
44
|
+
|
45
|
+
def location
|
46
|
+
"#{self.city}#{self.city.present? && self.country.present? ? ', ' : ''}#{self.country}".strip
|
47
|
+
end
|
48
|
+
end
|
data/lib/rtt.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'thread'
|
3
|
-
require 'rtt/boot'
|
4
|
-
require
|
5
|
-
|
6
|
-
Dir[File.expand_path(File.join(File.dirname(__FILE__), '
|
3
|
+
require File.expand_path 'lib/rtt/boot'
|
4
|
+
%w( active_support active_record highline/import).each { |lib| require lib }
|
5
|
+
Dir[File.expand_path(File.join(File.dirname(__FILE__), 'extensions', '*'))].each { |lib| require lib; }
|
6
|
+
Dir[File.expand_path(File.join(File.dirname(__FILE__), 'models', '*'))].each { |lib| require lib; }
|
7
|
+
Dir[File.expand_path(File.join(File.dirname(__FILE__), 'rtt', '*'))].each { |lib| require(lib) unless File.directory?(lib); }
|
7
8
|
|
8
9
|
module Rtt
|
9
10
|
|
10
|
-
VERSION = '
|
11
|
+
VERSION = '0.0.0.48'
|
11
12
|
|
12
13
|
extend self
|
13
14
|
|
@@ -24,7 +25,7 @@ module Rtt
|
|
24
25
|
end
|
25
26
|
|
26
27
|
def current_user
|
27
|
-
active = User.
|
28
|
+
active = User.where(:active => true).first
|
28
29
|
return active if active.present?
|
29
30
|
User.find_or_create_active
|
30
31
|
end
|
@@ -41,7 +42,7 @@ module Rtt
|
|
41
42
|
user = if nickname.blank?
|
42
43
|
current_user
|
43
44
|
else
|
44
|
-
User.
|
45
|
+
User.where(:nickname => nickname).first
|
45
46
|
end
|
46
47
|
current_user.deactivate if current_user
|
47
48
|
if user.blank? || configure
|
@@ -119,7 +120,7 @@ module Rtt
|
|
119
120
|
raise ParametersNotMatchCommandSignatureError if project_name.blank?
|
120
121
|
deactivate_current_project if current_project
|
121
122
|
client = client(client_name) unless client_name.nil?
|
122
|
-
project = Project.
|
123
|
+
project = Project.find_or_create_by_name project_name
|
123
124
|
project.client = client
|
124
125
|
project.description = project_name
|
125
126
|
unless project.active
|
@@ -150,21 +151,21 @@ module Rtt
|
|
150
151
|
end
|
151
152
|
|
152
153
|
def current_client
|
153
|
-
Client.
|
154
|
+
Client.where(:active => true).first
|
154
155
|
end
|
155
156
|
|
156
157
|
def current_project
|
157
|
-
Project.
|
158
|
+
Project.where(:active => true).first
|
158
159
|
end
|
159
160
|
|
160
161
|
def current_task
|
161
|
-
Task.
|
162
|
+
Task.where(:active => true).first
|
162
163
|
end
|
163
164
|
|
164
165
|
private
|
165
166
|
|
166
167
|
def client(name)
|
167
|
-
Client.
|
168
|
+
Client.find_or_create_by_name_and_description(name, name)
|
168
169
|
end
|
169
170
|
|
170
171
|
def deactivate_current_client
|
data/lib/rtt/cmd_line_parser.rb
CHANGED
@@ -99,7 +99,14 @@ module Rtt
|
|
99
99
|
|
100
100
|
def env_filters
|
101
101
|
[ 'date', 'nickname', 'from', 'to', 'client', 'project' ].inject({}) do |filters, key|
|
102
|
-
|
102
|
+
if env_variable(key).present?
|
103
|
+
value = if key == 'date' || key == 'from' || key == 'to'
|
104
|
+
Date.parse(env_variable(key))
|
105
|
+
else
|
106
|
+
env_variable(key)
|
107
|
+
end
|
108
|
+
filters[key.to_sym] = value
|
109
|
+
end
|
103
110
|
filters
|
104
111
|
end
|
105
112
|
end
|
@@ -152,7 +159,8 @@ module Rtt
|
|
152
159
|
when ConfigureCommand
|
153
160
|
case cmd.name.downcase
|
154
161
|
when 'task'
|
155
|
-
|
162
|
+
name = cmd.next_optional
|
163
|
+
update_task(name, env_filters)
|
156
164
|
when 'project'
|
157
165
|
name = cmd.next_optional
|
158
166
|
client = cmd.next_optional
|
@@ -6,7 +6,7 @@ module Rtt
|
|
6
6
|
say "Please fill in your Client information"
|
7
7
|
say "======================================"
|
8
8
|
client = if name.blank?
|
9
|
-
if (active_client = Client.
|
9
|
+
if (active_client = Client.where(:active => true).first) && agree_or_enter("Want to modify current")
|
10
10
|
active_client
|
11
11
|
else
|
12
12
|
modify_name_or_create_model(:client, name)
|
@@ -29,7 +29,7 @@ module Rtt
|
|
29
29
|
say "======================================="
|
30
30
|
project = if name.blank?
|
31
31
|
project_name = ask_or_default('Project name', "Project name:", name, /^\w+$/)
|
32
|
-
Project.
|
32
|
+
Project.find_or_create_by_name(project_name)
|
33
33
|
else
|
34
34
|
modify_name_or_create_model(:project, name)
|
35
35
|
end
|
@@ -37,7 +37,7 @@ module Rtt
|
|
37
37
|
client_found = false
|
38
38
|
while !client_found
|
39
39
|
client_name=(ask("Client name:") { |q| q.validate = /^\w+$/ }) if client_name.blank?
|
40
|
-
client = Client.
|
40
|
+
client = Client.where(:name => client_name).first
|
41
41
|
if client.blank?
|
42
42
|
say "A Client with this name is not registered."
|
43
43
|
create_client = agree_or_enter("Want to created a Client with that name")
|
@@ -69,7 +69,7 @@ module Rtt
|
|
69
69
|
if !skip_name || nickname.blank? || nickname == User::DEFAULT_NICK
|
70
70
|
nickname = ask_or_default('nickname', 'Nickname (Required):', nickname, /^\w+$/)
|
71
71
|
end
|
72
|
-
existing = User.
|
72
|
+
existing = User.where(:nickname => nickname).first
|
73
73
|
first_name = ask_or_default('first name', "First name:", (existing.first_name if existing.present?))
|
74
74
|
last_name = ask_or_default('last name', 'Last name:', (existing.last_name if existing.present?))
|
75
75
|
company = ask_or_default('company', 'Company:', (existing.company if existing.present?))
|
@@ -91,7 +91,11 @@ module Rtt
|
|
91
91
|
|
92
92
|
def configure_task(name = nil, conditions = {})
|
93
93
|
conditions.merge!(name.blank? ? { :active => true } : { :name => name })
|
94
|
-
task = name.blank?
|
94
|
+
task = if name.blank?
|
95
|
+
Task.where(conditions).first
|
96
|
+
else
|
97
|
+
Task.where(conditions).first || Task.create(conditions)
|
98
|
+
end
|
95
99
|
if task.present?
|
96
100
|
say "Modify the task information (with name: #{task.name})"
|
97
101
|
say "================================"
|
@@ -152,8 +156,8 @@ module Rtt
|
|
152
156
|
|
153
157
|
def modify_name_or_create_model(model_name, name)
|
154
158
|
class_name = model_name.to_s.capitalize
|
155
|
-
klazz =
|
156
|
-
instance = klazz.
|
159
|
+
klazz = class_name.constantize
|
160
|
+
instance = klazz.where(:name => name).first
|
157
161
|
if instance.present?
|
158
162
|
instance.name=(ask("#{class_name} name:") { |q| q.validate = /^\w+$/ }) unless agree_or_enter('Want to keep current name')
|
159
163
|
instance.save
|
data/lib/rtt/query_builder.rb
CHANGED
@@ -5,17 +5,22 @@ module Rtt
|
|
5
5
|
#
|
6
6
|
#
|
7
7
|
def query options = {}
|
8
|
-
Task.
|
8
|
+
relation = Task.where(rtt_build_conditions(options))
|
9
|
+
relation = relation.where(table[:date].gt(Date.parse(options.delete(:from)))) if options[:from]
|
10
|
+
relation = relation.where(table[:date].lt(Date.parse(options.delete(:to)))) if options[:to]
|
11
|
+
relation
|
9
12
|
end
|
10
13
|
|
11
14
|
private
|
12
15
|
|
16
|
+
def table
|
17
|
+
@table ||= Task.arel_table
|
18
|
+
end
|
19
|
+
|
13
20
|
def rtt_build_conditions options
|
14
21
|
# default filter for today unless a date range is specified
|
15
22
|
options[:date] = Date.today.strftime('%d-%m-%Y') if options[:to].blank? and options[:from].blank? and options[:date].blank?
|
16
|
-
conditions = options
|
17
|
-
conditions[:date.gte] = Date.parse(options.delete(:from)) if options[:from]
|
18
|
-
conditions[:date.lte] = Date.parse(options.delete(:to)) if options[:to]
|
23
|
+
conditions = options.reject { |k,_| k.to_s == 'from' || k.to_s == 'to' }
|
19
24
|
conditions[:date] = Date.parse(options.delete(:date)) if options[:date]
|
20
25
|
conditions[:user] = { :nickname => options.delete(:nickname) } if options[:nickname]
|
21
26
|
conditions[:project] = { :name => options.delete(:project) } if options[:project]
|
data/lib/rtt/report_generator.rb
CHANGED
@@ -32,7 +32,7 @@ module Rtt
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def custom_user_is_defined?
|
35
|
-
current_user.present? && current_user.nickname !=
|
35
|
+
current_user.present? && current_user.nickname != User::DEFAULT_NICK
|
36
36
|
end
|
37
37
|
|
38
38
|
def fill_user_information(pdf)
|
@@ -89,7 +89,7 @@ module Rtt
|
|
89
89
|
task = self.data[:rows].first
|
90
90
|
return true if task.nil?
|
91
91
|
return false if !(field == 'Client' || field == 'Project' || field == 'User')
|
92
|
-
(REPORT_FIELD_OUTPUT[field].call(task) if task.present?) == eval("
|
92
|
+
(REPORT_FIELD_OUTPUT[field].call(task) if task.present?) == eval("#{field}::DEFAULT_NAME")
|
93
93
|
end
|
94
94
|
|
95
95
|
#
|
@@ -101,8 +101,7 @@ module Rtt
|
|
101
101
|
path = options.delete(extension)
|
102
102
|
fixed_fields = extract_fixed_fields(options)
|
103
103
|
fixed_fields_and_values = fixed_fields.inject({}) { |hash, key| hash[key] = options[key.downcase.to_sym]; hash }
|
104
|
-
|
105
|
-
@data = { :fixed_fields => fixed_fields_and_values, :rows => query(filter_options) }
|
104
|
+
@data = { :fixed_fields => fixed_fields_and_values, :rows => query(options).order('date desc') }
|
106
105
|
filename_path = full_path(path)
|
107
106
|
case extension
|
108
107
|
when :pdf
|
data/lib/rtt/storage.rb
CHANGED
@@ -1,31 +1,38 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
require 'rubygems'
|
3
|
+
require 'active_record'
|
4
|
+
require 'logger'
|
2
5
|
module Rtt
|
3
6
|
module Storage
|
4
7
|
|
5
|
-
|
8
|
+
def database_file
|
9
|
+
File.expand_path(File.join(File.dirname(__FILE__), '..', '..') + config[:production][:database])
|
10
|
+
end
|
6
11
|
|
7
12
|
def export filename
|
8
13
|
require 'fileutils'
|
9
|
-
FileUtils.cp(
|
14
|
+
FileUtils.cp(database_file, filename)
|
10
15
|
end
|
11
16
|
|
12
17
|
def import filename
|
13
18
|
require 'fileutils'
|
14
|
-
FileUtils.cp(filename,
|
19
|
+
FileUtils.cp(filename, database_file)
|
15
20
|
end
|
16
21
|
|
17
|
-
def
|
18
|
-
|
19
|
-
migrate unless missing_tables
|
20
|
-
#DataObjects::Sqlite3.logger = DataMapper::Logger.new(File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'log', 'sqlite3.log')), 0)
|
22
|
+
def config(env)
|
23
|
+
@config ||= YAML::load_file(File.join(File.dirname(__FILE__), '..', '..', 'db', 'config.yml'))[env.to_s]
|
21
24
|
end
|
22
25
|
|
23
|
-
def
|
24
|
-
|
26
|
+
def init(env = :production)
|
27
|
+
ActiveRecord::Base.establish_connection(config(env))
|
28
|
+
ActiveRecord::Base.logger = Logger.new(File.open(File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'log', 'database.log')), 'a'))
|
29
|
+
silence_stream(STDOUT) do
|
30
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'db', 'schema.rb')) unless tables_exists?
|
31
|
+
end
|
25
32
|
end
|
26
33
|
|
27
|
-
def
|
28
|
-
%
|
34
|
+
def tables_exists?
|
35
|
+
%w(projects clients tasks users).any? { |t| ActiveRecord::Base.connection.tables.include?(t) }
|
29
36
|
end
|
30
37
|
end
|
31
38
|
end
|
data/rtt.gemspec
CHANGED
@@ -1,40 +1,34 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
|
-
s.name =
|
5
|
-
s.version = "0.0.0.
|
4
|
+
s.name = "rtt"
|
5
|
+
s.version = "0.0.0.48"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Marcelo Giorgi"]
|
9
|
-
s.date =
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
s.email = %q{marklazz.uy@gmail.com}
|
9
|
+
s.date = "2012-07-30"
|
10
|
+
s.description = "RTT is a tool for tracking time"
|
11
|
+
s.email = "marklazz.uy@gmail.com"
|
13
12
|
s.executables = ["rtt"]
|
14
|
-
s.extra_rdoc_files = ["LICENSE", "README.rdoc", "bin/rtt", "lib/
|
15
|
-
s.files = ["Gemfile", "Gemfile.lock", "LICENSE", "
|
16
|
-
s.homepage =
|
13
|
+
s.extra_rdoc_files = ["LICENSE", "README.rdoc", "bin/rtt", "lib/extensions/array.rb", "lib/extensions/date.rb", "lib/extensions/hash.rb", "lib/extensions/kernel.rb", "lib/models/client.rb", "lib/models/project.rb", "lib/models/task.rb", "lib/models/user.rb", "lib/rtt.rb", "lib/rtt/boot.rb", "lib/rtt/cmd_line_parser.rb", "lib/rtt/interactive_configurator.rb", "lib/rtt/query_builder.rb", "lib/rtt/report_generator.rb", "lib/rtt/storage.rb", "tasks/rtt.rake"]
|
14
|
+
s.files = ["Gemfile", "Gemfile.lock", "LICENSE", "README.rdoc", "Rakefile", "USAGE.txt", "bin/rtt", "db/config.yml", "db/schema.rb", "db/test.sqlite3", "lib/extensions/array.rb", "lib/extensions/date.rb", "lib/extensions/hash.rb", "lib/extensions/kernel.rb", "lib/models/client.rb", "lib/models/project.rb", "lib/models/task.rb", "lib/models/user.rb", "lib/rtt.rb", "lib/rtt/boot.rb", "lib/rtt/cmd_line_parser.rb", "lib/rtt/interactive_configurator.rb", "lib/rtt/query_builder.rb", "lib/rtt/report_generator.rb", "lib/rtt/storage.rb", "spec/ar_spec_helper.rb", "spec/lib/models/task_spec.rb", "spec/lib/rtt_spec.rb", "tasks/rtt.rake", "Manifest", "rtt.gemspec"]
|
15
|
+
s.homepage = "http://github.com/marklazz/rtt"
|
17
16
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Rtt", "--main", "README.rdoc"]
|
18
17
|
s.require_paths = ["lib"]
|
19
|
-
s.rubyforge_project =
|
20
|
-
s.rubygems_version =
|
21
|
-
s.summary =
|
18
|
+
s.rubyforge_project = "rtt"
|
19
|
+
s.rubygems_version = "1.8.23"
|
20
|
+
s.summary = "RTT is a tool for tracking time"
|
22
21
|
|
23
22
|
if s.respond_to? :specification_version then
|
24
23
|
s.specification_version = 3
|
25
24
|
|
26
25
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
27
26
|
s.add_runtime_dependency(%q<highline>, ["= 1.5.2"])
|
28
|
-
s.add_runtime_dependency(%q<
|
27
|
+
s.add_runtime_dependency(%q<activerecord>, ["= 3.2.6"])
|
28
|
+
s.add_runtime_dependency(%q<activesupport>, ["= 3.2.6"])
|
29
29
|
s.add_runtime_dependency(%q<prawn>, ["= 0.8.4"])
|
30
|
-
s.add_runtime_dependency(%q<dm-core>, ["= 1.0.0"])
|
31
|
-
s.add_runtime_dependency(%q<dm-validations>, ["= 1.0.0"])
|
32
|
-
s.add_runtime_dependency(%q<dm-migrations>, ["= 1.0.0"])
|
33
|
-
s.add_runtime_dependency(%q<dm-sqlite-adapter>, ["= 1.0.0"])
|
34
30
|
s.add_runtime_dependency(%q<rake>, ["= 0.8.2"])
|
35
|
-
s.add_runtime_dependency(%q<addressable>, ["= 2.2.7"])
|
36
31
|
s.add_runtime_dependency(%q<allison>, ["= 2.0.3"])
|
37
|
-
s.add_runtime_dependency(%q<data_objects>, ["= 0.10.2"])
|
38
32
|
s.add_runtime_dependency(%q<extlib>, ["= 0.9.15"])
|
39
33
|
s.add_runtime_dependency(%q<json_pure>, ["= 1.6.5"])
|
40
34
|
s.add_runtime_dependency(%q<prawn-core>, ["= 0.8.4"])
|
@@ -51,16 +45,11 @@ Gem::Specification.new do |s|
|
|
51
45
|
s.add_runtime_dependency(%q<echoe>, ["= 4.5.6"])
|
52
46
|
else
|
53
47
|
s.add_dependency(%q<highline>, ["= 1.5.2"])
|
54
|
-
s.add_dependency(%q<
|
48
|
+
s.add_dependency(%q<activerecord>, ["= 3.2.6"])
|
49
|
+
s.add_dependency(%q<activesupport>, ["= 3.2.6"])
|
55
50
|
s.add_dependency(%q<prawn>, ["= 0.8.4"])
|
56
|
-
s.add_dependency(%q<dm-core>, ["= 1.0.0"])
|
57
|
-
s.add_dependency(%q<dm-validations>, ["= 1.0.0"])
|
58
|
-
s.add_dependency(%q<dm-migrations>, ["= 1.0.0"])
|
59
|
-
s.add_dependency(%q<dm-sqlite-adapter>, ["= 1.0.0"])
|
60
51
|
s.add_dependency(%q<rake>, ["= 0.8.2"])
|
61
|
-
s.add_dependency(%q<addressable>, ["= 2.2.7"])
|
62
52
|
s.add_dependency(%q<allison>, ["= 2.0.3"])
|
63
|
-
s.add_dependency(%q<data_objects>, ["= 0.10.2"])
|
64
53
|
s.add_dependency(%q<extlib>, ["= 0.9.15"])
|
65
54
|
s.add_dependency(%q<json_pure>, ["= 1.6.5"])
|
66
55
|
s.add_dependency(%q<prawn-core>, ["= 0.8.4"])
|
@@ -78,16 +67,11 @@ Gem::Specification.new do |s|
|
|
78
67
|
end
|
79
68
|
else
|
80
69
|
s.add_dependency(%q<highline>, ["= 1.5.2"])
|
81
|
-
s.add_dependency(%q<
|
70
|
+
s.add_dependency(%q<activerecord>, ["= 3.2.6"])
|
71
|
+
s.add_dependency(%q<activesupport>, ["= 3.2.6"])
|
82
72
|
s.add_dependency(%q<prawn>, ["= 0.8.4"])
|
83
|
-
s.add_dependency(%q<dm-core>, ["= 1.0.0"])
|
84
|
-
s.add_dependency(%q<dm-validations>, ["= 1.0.0"])
|
85
|
-
s.add_dependency(%q<dm-migrations>, ["= 1.0.0"])
|
86
|
-
s.add_dependency(%q<dm-sqlite-adapter>, ["= 1.0.0"])
|
87
73
|
s.add_dependency(%q<rake>, ["= 0.8.2"])
|
88
|
-
s.add_dependency(%q<addressable>, ["= 2.2.7"])
|
89
74
|
s.add_dependency(%q<allison>, ["= 2.0.3"])
|
90
|
-
s.add_dependency(%q<data_objects>, ["= 0.10.2"])
|
91
75
|
s.add_dependency(%q<extlib>, ["= 0.9.15"])
|
92
76
|
s.add_dependency(%q<json_pure>, ["= 1.6.5"])
|
93
77
|
s.add_dependency(%q<prawn-core>, ["= 0.8.4"])
|
@@ -1,11 +1,10 @@
|
|
1
1
|
require 'mocha'
|
2
|
-
require File.join( File.dirname(__FILE__), '..', '..', '
|
2
|
+
require File.expand_path(File.join( File.dirname(__FILE__), '..', '..', 'ar_spec_helper'))
|
3
3
|
|
4
|
-
describe
|
4
|
+
describe Task do
|
5
5
|
|
6
6
|
before do
|
7
|
-
|
8
|
-
Rtt.migrate
|
7
|
+
setup_testing_env
|
9
8
|
@task_name = 'a_name'
|
10
9
|
@now = Time.now
|
11
10
|
end
|
@@ -16,7 +15,7 @@ describe Rtt::Task do
|
|
16
15
|
|
17
16
|
before do
|
18
17
|
start_at = Time.parse('May 10 13:45:00 2010', @now)
|
19
|
-
@task =
|
18
|
+
@task = Task.create :name => @task_name, :start_at => start_at.to_datetime, :date => start_at.to_date
|
20
19
|
end
|
21
20
|
|
22
21
|
context 'task has end_at: 2010-05-10 14:15:01' do
|
@@ -58,12 +57,12 @@ describe Rtt::Task do
|
|
58
57
|
end
|
59
58
|
|
60
59
|
it 'should have 2 tasks with the same name' do
|
61
|
-
|
60
|
+
Task.where(:name => @task_name).count.should == 2
|
62
61
|
end
|
63
62
|
|
64
63
|
it 'should return 11h15m for 2010-05-10' do
|
65
64
|
date = Time.parse('2010-05-10', @now).to_date
|
66
|
-
task =
|
65
|
+
task = Task.where(:name => @task_name, :date => date).first
|
67
66
|
task.duration.should == '10h14m'
|
68
67
|
end
|
69
68
|
|
@@ -82,18 +81,18 @@ describe Rtt::Task do
|
|
82
81
|
end
|
83
82
|
|
84
83
|
it 'should have 3 tasks with the same name' do
|
85
|
-
|
84
|
+
Task.where(:name => @task_name).count.should == 3
|
86
85
|
end
|
87
86
|
|
88
87
|
it 'should return 11h15m for 2010-05-11' do
|
89
88
|
date = Time.parse('2010-05-11', @now).to_date
|
90
|
-
task =
|
89
|
+
task = Task.where(:name => @task_name, :date => date).first
|
91
90
|
task.duration.should == '23h59m'
|
92
91
|
end
|
93
92
|
|
94
93
|
it 'should return 11h15m for 2010-05-10' do
|
95
94
|
date = Time.parse('2010-05-10', @now).to_date
|
96
|
-
task =
|
95
|
+
task = Task.where(:name => @task_name, :date => date).first
|
97
96
|
task.duration.should == '10h14m'
|
98
97
|
end
|
99
98
|
|