ref: refs/heads/master
commit 3a887ea3796193432c1292ee3a2dec258e69feb0
Author: Josef Reidinger
Date: Tue Dec 8 17:51:31 2009 +0100
add initial version of ancestor for models, they allow validation, callbacks and mass assignment
---
webservice/lib/base_model/base.rb | 37 +++++++++++++++++++++++++
webservice/lib/base_model/mass_assignment.rb | 9 ++++++
webservice/test/unit/base_model_test.rb | 38 ++++++++++++++++++++++++++
3 files changed, 84 insertions(+), 0 deletions(-)
diff --git a/webservice/lib/base_model/base.rb b/webservice/lib/base_model/base.rb
new file mode 100644
index 0000000..e1387e1
--- /dev/null
+++ b/webservice/lib/base_model/base.rb
@@ -0,0 +1,37 @@
+module BaseModel
+ class Base
+
+ def save
+ create_or_update
+ end
+
+ def save!
+ create_or_update
+ #TODO raise exception
+ end
+
+ def new_record?
+ true
+ end
+
+ def create_or_update
+ (new_record? ? create : update) != false
+ end
+
+ def create
+ true
+ end
+
+ def update
+ true
+ end
+
+ def destroy
+ end
+
+ include BaseModel::MassAssignment
+ include ActiveRecord::AttributeMethods
+ include ActiveRecord::Validations
+ include ActiveRecord::Callbacks
+ end
+end
diff --git a/webservice/lib/base_model/mass_assignment.rb b/webservice/lib/base_model/mass_assignment.rb
new file mode 100644
index 0000000..ce5dd52
--- /dev/null
+++ b/webservice/lib/base_model/mass_assignment.rb
@@ -0,0 +1,9 @@
+module BaseModel
+ module MassAssignment
+ def load(attributes)
+ attributes.each do |k,v|
+ instance_variable_set ( "@#{k.to_s}",v )
+ end
+ end
+ end
+end
diff --git a/webservice/test/unit/base_model_test.rb b/webservice/test/unit/base_model_test.rb
new file mode 100644
index 0000000..977c364
--- /dev/null
+++ b/webservice/test/unit/base_model_test.rb
@@ -0,0 +1,38 @@
+require File.dirname(__FILE__) + '/../test_helper'
+class BaseModelTest < ActiveSupport::TestCase
+ class Test < BaseModel::Base
+ validates_presence_of :arg1
+ validates_format_of :arg2, :with => /^\d$/
+ before_save :call
+
+ attr_accessor :arg1, :arg2, :callback_used
+ def call
+ @callback_used = true;
+ end
+ end
+
+ def test_validations
+ test = Test.new
+ test.arg1 = "last"
+ test.arg2 = "5"
+ assert test.valid?
+ test.arg1 = nil
+ test.arg2 = "sda"
+ assert test.invalid?
+ end
+
+ def test_callbacks
+ test = Test.new
+ test.callback_used = false
+ assert test.save(false)
+ assert test.callback_used
+ end
+
+MASS_DATA = { :arg1 => "last", :arg2 => "5" }
+ def test_mass_assignment
+ test = Test.new
+ test.load MASS_DATA
+ assert_equal "last", test.arg1
+ assert_equal "5", test.arg2
+ end
+end
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org