Renaming casted model to embeddable and preparing for 1.1.0 launch@
This commit is contained in:
parent
05ed7b127f
commit
8efa5208da
|
@ -2,8 +2,9 @@
|
||||||
|
|
||||||
## 1.1.0 - 2011-06-25
|
## 1.1.0 - 2011-06-25
|
||||||
|
|
||||||
* Major Fixes
|
* Major Alterations
|
||||||
* CastedModel no longer requires a Hash. Automatically includes all required methods.
|
* CastedModel no longer requires a Hash. Automatically includes all required methods.
|
||||||
|
* CastedModel module renamed to Embeddable (old still works!)
|
||||||
|
|
||||||
* Minor Fixes
|
* Minor Fixes
|
||||||
* Validation callbacks now support context (thanks kostia)
|
* Validation callbacks now support context (thanks kostia)
|
||||||
|
|
|
@ -47,8 +47,8 @@ module CouchRest
|
||||||
#
|
#
|
||||||
# Options supported:
|
# Options supported:
|
||||||
#
|
#
|
||||||
# * :directly_set_attributes: true when data comes directly from database
|
# * :directly_set_attributes, true when data comes directly from database
|
||||||
# * :database: provide an alternative database
|
# * :database, provide an alternative database
|
||||||
#
|
#
|
||||||
# If a block is provided the new model will be passed into the
|
# If a block is provided the new model will be passed into the
|
||||||
# block so that it can be populated.
|
# block so that it can be populated.
|
||||||
|
@ -64,6 +64,7 @@ module CouchRest
|
||||||
yield self if block_given?
|
yield self if block_given?
|
||||||
|
|
||||||
after_initialize if respond_to?(:after_initialize)
|
after_initialize if respond_to?(:after_initialize)
|
||||||
|
run_callbacks(:initialize) { self }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
module CouchRest::Model
|
module CouchRest::Model
|
||||||
module CastedModel
|
module Embeddable
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
included do
|
included do
|
||||||
|
@ -26,6 +26,7 @@ module CouchRest::Model
|
||||||
def initialize(keys = {}, options = {})
|
def initialize(keys = {}, options = {})
|
||||||
super()
|
super()
|
||||||
prepare_all_attributes(keys, options)
|
prepare_all_attributes(keys, options)
|
||||||
|
run_callbacks(:initialize) { self }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -61,6 +62,14 @@ module CouchRest::Model
|
||||||
end
|
end
|
||||||
alias :attributes= :update_attributes_without_saving
|
alias :attributes= :update_attributes_without_saving
|
||||||
|
|
||||||
|
end # End Embeddable
|
||||||
|
|
||||||
|
# Provide backwards compatability with previous versions (pre 1.1.0)
|
||||||
|
module CastedModel
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
included do
|
||||||
|
include CouchRest::Model::Embeddable
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
|
@ -167,7 +167,7 @@ module CouchRest
|
||||||
type = options.delete(:type) || options.delete(:cast_as)
|
type = options.delete(:type) || options.delete(:cast_as)
|
||||||
if block_given?
|
if block_given?
|
||||||
type = Class.new do
|
type = Class.new do
|
||||||
include CastedModel
|
include Embeddable
|
||||||
end
|
end
|
||||||
if block.arity == 1 # Traditional, with options
|
if block.arity == 1 # Traditional, with options
|
||||||
type.class_eval { yield type }
|
type.class_eval { yield type }
|
||||||
|
|
|
@ -45,7 +45,7 @@ module CouchRest::Model
|
||||||
|
|
||||||
# Cast an individual value, not an array
|
# Cast an individual value, not an array
|
||||||
def cast_value(parent, value)
|
def cast_value(parent, value)
|
||||||
raise "An array inside an array cannot be casted, use CastedModel" if value.is_a?(Array)
|
raise "An array inside an array cannot be casted, use Embeddable module" if value.is_a?(Array)
|
||||||
value = typecast_value(value, self)
|
value = typecast_value(value, self)
|
||||||
associate_casted_value_to_parent(parent, value)
|
associate_casted_value_to_parent(parent, value)
|
||||||
end
|
end
|
||||||
|
|
|
@ -33,7 +33,6 @@ require "couchrest/model/property_protection"
|
||||||
require "couchrest/model/properties"
|
require "couchrest/model/properties"
|
||||||
require "couchrest/model/casted_array"
|
require "couchrest/model/casted_array"
|
||||||
require "couchrest/model/casted_hash"
|
require "couchrest/model/casted_hash"
|
||||||
require "couchrest/model/casted_model"
|
|
||||||
require "couchrest/model/validations"
|
require "couchrest/model/validations"
|
||||||
require "couchrest/model/callbacks"
|
require "couchrest/model/callbacks"
|
||||||
require "couchrest/model/document_queries"
|
require "couchrest/model/document_queries"
|
||||||
|
@ -58,7 +57,7 @@ require "couchrest/model/core_extensions/hash"
|
||||||
require "couchrest/model/core_extensions/time_parsing"
|
require "couchrest/model/core_extensions/time_parsing"
|
||||||
|
|
||||||
# Base libraries
|
# Base libraries
|
||||||
require "couchrest/model/casted_model"
|
require "couchrest/model/embeddable"
|
||||||
require "couchrest/model/base"
|
require "couchrest/model/base"
|
||||||
|
|
||||||
# Add rails support *after* everything has loaded
|
# Add rails support *after* everything has loaded
|
||||||
|
|
2
spec/fixtures/models/cat.rb
vendored
2
spec/fixtures/models/cat.rb
vendored
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
class CatToy
|
class CatToy
|
||||||
include CouchRest::Model::CastedModel
|
include CouchRest::Model::Embeddable
|
||||||
|
|
||||||
property :name
|
property :name
|
||||||
|
|
||||||
|
|
4
spec/fixtures/models/membership.rb
vendored
4
spec/fixtures/models/membership.rb
vendored
|
@ -1,4 +1,4 @@
|
||||||
class Membership < Hash
|
class Membership
|
||||||
include CouchRest::Model::CastedModel
|
include CouchRest::Model::Embeddable
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
4
spec/fixtures/models/person.rb
vendored
4
spec/fixtures/models/person.rb
vendored
|
@ -1,7 +1,7 @@
|
||||||
require 'cat'
|
require 'cat'
|
||||||
|
|
||||||
class Person < Hash
|
class Person
|
||||||
include ::CouchRest::Model::CastedModel
|
include ::CouchRest::Model::Embeddable
|
||||||
property :pet, Cat
|
property :pet, Cat
|
||||||
property :name, [String]
|
property :name, [String]
|
||||||
|
|
||||||
|
|
4
spec/fixtures/models/question.rb
vendored
4
spec/fixtures/models/question.rb
vendored
|
@ -1,5 +1,5 @@
|
||||||
class Question < Hash
|
class Question
|
||||||
include ::CouchRest::Model::CastedModel
|
include ::CouchRest::Model::Embeddable
|
||||||
|
|
||||||
property :q
|
property :q
|
||||||
property :a
|
property :a
|
||||||
|
|
|
@ -69,6 +69,17 @@ describe "Model Base" do
|
||||||
@doc = WithAfterInitializeMethod.new {|d| d.some_value = "foo"}
|
@doc = WithAfterInitializeMethod.new {|d| d.some_value = "foo"}
|
||||||
@doc['some_value'].should eql('foo')
|
@doc['some_value'].should eql('foo')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should call after_initialize callback if available" do
|
||||||
|
klass = Class.new(CouchRest::Model::Base)
|
||||||
|
klass.class_eval do # for ruby 1.8.7
|
||||||
|
property :name
|
||||||
|
after_initialize :set_name
|
||||||
|
def set_name; self.name = "foobar"; end
|
||||||
|
end
|
||||||
|
@doc = klass.new
|
||||||
|
@doc.name.should eql("foobar")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "ActiveModel compatability Basic" do
|
describe "ActiveModel compatability Basic" do
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
require "spec_helper"
|
require "spec_helper"
|
||||||
|
|
||||||
class WithCastedModelMixin
|
class WithCastedModelMixin
|
||||||
include CouchRest::Model::CastedModel
|
include CouchRest::Model::Embeddable
|
||||||
property :name
|
property :name
|
||||||
property :no_value
|
property :no_value
|
||||||
property :details, Object, :default => {}
|
property :details, Object, :default => {}
|
||||||
|
@ -29,7 +29,7 @@ class DummyModel < CouchRest::Model::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
class WithCastedCallBackModel
|
class WithCastedCallBackModel
|
||||||
include CouchRest::Model::CastedModel
|
include CouchRest::Model::Embeddable
|
||||||
property :name
|
property :name
|
||||||
property :run_before_validation
|
property :run_before_validation
|
||||||
property :run_after_validation
|
property :run_after_validation
|
||||||
|
@ -50,19 +50,7 @@ class CastedCallbackDoc < CouchRest::Model::Base
|
||||||
property :callback_model, WithCastedCallBackModel
|
property :callback_model, WithCastedCallBackModel
|
||||||
end
|
end
|
||||||
|
|
||||||
describe CouchRest::Model::CastedModel do
|
describe CouchRest::Model::Embeddable do
|
||||||
|
|
||||||
describe "A non hash class including CastedModel" do
|
|
||||||
it "should fail raising and include error" do
|
|
||||||
lambda do
|
|
||||||
class NotAHashButWithCastedModelMixin
|
|
||||||
include CouchRest::CastedModel
|
|
||||||
property :name
|
|
||||||
end
|
|
||||||
|
|
||||||
end.should raise_error
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "isolated" do
|
describe "isolated" do
|
||||||
before(:each) do
|
before(:each) do
|
||||||
|
@ -81,7 +69,16 @@ describe CouchRest::Model::CastedModel do
|
||||||
it "should always return base_doc? as false" do
|
it "should always return base_doc? as false" do
|
||||||
@obj.base_doc?.should be_false
|
@obj.base_doc?.should be_false
|
||||||
end
|
end
|
||||||
|
it "should call after_initialize callback if available" do
|
||||||
|
klass = Class.new do
|
||||||
|
include CouchRest::Model::CastedModel
|
||||||
|
after_initialize :set_name
|
||||||
|
property :name
|
||||||
|
def set_name; self.name = "foobar"; end
|
||||||
|
end
|
||||||
|
@obj = klass.new
|
||||||
|
@obj.name.should eql("foobar")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "casted as an attribute, but without a value" do
|
describe "casted as an attribute, but without a value" do
|
Loading…
Reference in a new issue