You can set a report as baseline by calling #baseline!

Paired-With: Matt Robinson <[email protected]>
Signed-off-by: Jesse Wolfe <[email protected]>
---
Local-branch: ticket/next/5174-part2
 app/models/node.rb                                 |    1 +
 app/models/report.rb                               |    9 +++++
 ...101229023023_add_baseline_report_id_to_nodes.rb |    9 +++++
 db/schema.rb                                       |    5 ++-
 spec/models/report_spec.rb                         |   32 ++++++++++++++++++++
 5 files changed, 54 insertions(+), 2 deletions(-)
 create mode 100644 db/migrate/20101229023023_add_baseline_report_id_to_nodes.rb

diff --git a/app/models/node.rb b/app/models/node.rb
index ba48086..a270950 100644
--- a/app/models/node.rb
+++ b/app/models/node.rb
@@ -15,6 +15,7 @@ class Node < ActiveRecord::Base
 
   has_many :reports, :dependent => :destroy
   belongs_to :last_report, :class_name => 'Report'
+  belongs_to :baseline_report, :class_name => 'Report'
 
   named_scope :with_last_report, :include => :last_report
   named_scope :by_report_date, :order => 'reported_at DESC'
diff --git a/app/models/report.rb b/app/models/report.rb
index da20b3e..98f4817 100644
--- a/app/models/report.rb
+++ b/app/models/report.rb
@@ -117,6 +117,15 @@ class Report < ActiveRecord::Base
     end
   end
 
+  def baseline?
+    self.node.baseline_report == self
+  end
+
+  def baseline!
+    self.node.baseline_report = self
+    self.node.save!
+  end
+
   private
 
   def resources_to_hash(resources)
diff --git a/db/migrate/20101229023023_add_baseline_report_id_to_nodes.rb 
b/db/migrate/20101229023023_add_baseline_report_id_to_nodes.rb
new file mode 100644
index 0000000..da8efb8
--- /dev/null
+++ b/db/migrate/20101229023023_add_baseline_report_id_to_nodes.rb
@@ -0,0 +1,9 @@
+class AddBaselineReportIdToNodes < ActiveRecord::Migration
+  def self.up
+    add_column :nodes, :baseline_report_id, :integer
+  end
+
+  def self.down
+    remove_column :nodes, :baseline_report_id
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 34b87d8..bd3c2fe 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -9,7 +9,7 @@
 #
 # It's strongly recommended to check this file into your version control 
system.
 
-ActiveRecord::Schema.define(:version => 20101206225510) do
+ActiveRecord::Schema.define(:version => 20101229023023) do
 
   create_table "assignments", :force => true do |t|
     t.integer  "node_id"
@@ -76,7 +76,8 @@ ActiveRecord::Schema.define(:version => 20101206225510) do
     t.datetime "reported_at"
     t.integer  "last_report_id"
     t.string   "status"
-    t.boolean  "hidden",         :default => false
+    t.boolean  "hidden",             :default => false
+    t.integer  "baseline_report_id"
   end
 
   create_table "old_reports", :force => true do |t|
diff --git a/spec/models/report_spec.rb b/spec/models/report_spec.rb
index 918510a..ffd3177 100644
--- a/spec/models/report_spec.rb
+++ b/spec/models/report_spec.rb
@@ -239,6 +239,37 @@ HEREDOC
         }
       }
     end
+
+    describe "baseline!" do
+      before do
+        @report  = generate_report(Time.now, "file", "foo")
+        @report2 = generate_report(1.week.ago, "absent", nil)
+      end
+
+      it "should set baseline?" do
+        @report.baseline!
+
+        @report.reload
+        @report.should be_baseline
+      end
+
+      it "should unset other reports' baseline?" do
+        @report.should_not be_baseline
+        @report2.should_not be_baseline
+
+        @report.baseline!
+        @report.reload
+        @report.should be_baseline
+        @report2.should_not be_baseline
+
+        @report2.baseline!
+        @report2.should be_baseline
+
+        @report.reload
+        @report.should_not be_baseline
+      end
+    end
+
   end
 
   describe "#create_from_yaml" do
@@ -358,6 +389,7 @@ HEREDOC
     end
   end
 
+
   describe "When destroying" do
     it "should destroy all dependent model objects" do
       @node = Node.generate(:name => 'puppet.puppetlabs.vm')
-- 
1.7.0.4

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to