On Fri, Apr 30, 2010 at 03:26:31PM +0100, mtaylor@redhat.com wrote:
From: martyntaylor mtaylor@redhat.com
src/app/models/task.rb | 8 +++++++- src/app/models/task_observer.rb | 22 ++++++++++++++++++++++ src/db/migrate/20090831140000_create_tasks.rb | 1 + src/spec/models/task_observer_spec.rb | 24 ++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 1 deletions(-) create mode 100644 src/app/models/task_observer.rb create mode 100644 src/spec/models/task_observer_spec.rb
diff --git a/src/app/models/task.rb b/src/app/models/task.rb index 6cb907e..9f23ef2 100644 --- a/src/app/models/task.rb +++ b/src/app/models/task.rb @@ -28,6 +28,7 @@ class Task < ActiveRecord::Base # moved associations here so that nested set :include directives work
STATE_QUEUED = "queued"
- STATE_PENDING = "pending" STATE_RUNNING = "running" STATE_FINISHED = "finished" STATE_PAUSED = "paused"
@@ -35,7 +36,7 @@ class Task < ActiveRecord::Base STATE_CANCELED = "canceled"
COMPLETED_STATES = [STATE_FINISHED, STATE_FAILED, STATE_CANCELED]
- WORKING_STATES = [STATE_QUEUED, STATE_RUNNING, STATE_PAUSED]
WORKING_STATES = [STATE_QUEUED, STATE_RUNNING, STATE_PAUSED, STATE_PENDING]
validates_inclusion_of :type, :in => %w( InstanceTask )
@@ -48,6 +49,7 @@ class Task < ActiveRecord::Base # depending on subclass, action, state
TASK_STATES_OPTIONS = [["Queued", Task::STATE_QUEUED],
["Pending", Task::STATE_PENDING], ["Running", Task::STATE_RUNNING], ["Paused", Task::STATE_PAUSED], ["Finished", Task::STATE_FINISHED],
@@ -92,6 +94,10 @@ class Task < ActiveRecord::Base ret_val end
- def submission_time
- time.started - time.submitted
- end
- def validate errors.add("created_at", "Task started but does not have the creation time set") if time_started and created_at.nil? errors.add("time_started", "Task ends but does not have the start time set") if time_ended and time_started.nil?
diff --git a/src/app/models/task_observer.rb b/src/app/models/task_observer.rb new file mode 100644 index 0000000..3e2d803 --- /dev/null +++ b/src/app/models/task_observer.rb @@ -0,0 +1,22 @@ +class TaskObserver < ActiveRecord::Observer
- def after_save(a_task)
- if a_task.changed?
change = a_task.changes['state']
if change
update_timestamp(change[0], change[1], a_task)
end
- end
- end
- def update_timestamp(state_from, state_to, a_task)
- puts state_to
- if state_to == Task::STATE_RUNNING
a_task.time_started = Time.now
- elsif state_to == Task::STATE_PENDING
a_task.time_submitted = Time.now
- end
- end
+end
+TaskObserver.instance \ No newline at end of file diff --git a/src/db/migrate/20090831140000_create_tasks.rb b/src/db/migrate/20090831140000_create_tasks.rb index a9e099f..2c3e0e2 100644 --- a/src/db/migrate/20090831140000_create_tasks.rb +++ b/src/db/migrate/20090831140000_create_tasks.rb @@ -28,6 +28,7 @@ class CreateTasks < ActiveRecord::Migration t.string :task_target_type t.string :args t.timestamp :created_at
t.timestamp :time_submitted t.timestamp :time_started t.timestamp :time_ended t.text :message
diff --git a/src/spec/models/task_observer_spec.rb b/src/spec/models/task_observer_spec.rb new file mode 100644 index 0000000..5d31693 --- /dev/null +++ b/src/spec/models/task_observer_spec.rb @@ -0,0 +1,24 @@ +require 'spec_helper'
+describe TaskObserver do
- before(:each) do
- @timestamp = Time.now
- @task = InstanceTask.new({})
- end
- it "should set started at timestamp when the task goes to state running" do
- @task.state = Task::STATE_RUNNING
- @task.save
- @task.time_started.should >= @timestamp
- end
- it "should set time submitted timestamp when the task goes to state pending" do
- @task.state = Task::STATE_PENDING
- @task.save
- @task.time_submitted.should >= @timestamp
- end
+end \ No newline at end of file -- 1.6.6.1
deltacloud-devel mailing list deltacloud-devel@lists.fedorahosted.org https://fedorahosted.org/mailman/listinfo/deltacloud-devel
Martyn,
I'm trying to test this patch set, but I'm not having any luck getting a Mock instance up via the aggregator. Do you have any suggestions on how to apply this to 'next' and get it working?
Thanks, Steve.