couchrest_model 1.1.0.rc1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +4 -0
- data/VERSION +1 -1
- data/couchrest_model.gemspec +1 -1
- data/history.md +13 -1
- data/lib/couchrest/model/associations.rb +4 -4
- data/lib/couchrest/model/base.rb +25 -7
- data/lib/couchrest/model/callbacks.rb +13 -11
- data/lib/couchrest/model/{casted_model.rb → embeddable.rb} +22 -17
- data/lib/couchrest/model/persistence.rb +6 -1
- data/lib/couchrest/model/properties.rb +22 -34
- data/lib/couchrest/model/property.rb +1 -1
- data/lib/couchrest/model/validations.rb +19 -8
- data/lib/couchrest/railtie.rb +6 -3
- data/lib/couchrest_model.rb +2 -3
- data/lib/rails/generators/couchrest_model/config/config_generator.rb +18 -0
- data/lib/rails/generators/couchrest_model/config/templates/couchdb.yml +21 -0
- data/spec/fixtures/{more → models}/article.rb +0 -0
- data/spec/fixtures/{base.rb → models/base.rb} +11 -0
- data/spec/fixtures/{more → models}/card.rb +2 -0
- data/spec/fixtures/{more → models}/cat.rb +2 -2
- data/spec/fixtures/{more → models}/client.rb +0 -0
- data/spec/fixtures/{more → models}/course.rb +2 -2
- data/spec/fixtures/{more → models}/event.rb +0 -0
- data/spec/fixtures/{more → models}/invoice.rb +2 -2
- data/spec/fixtures/{more → models}/key_chain.rb +0 -0
- data/spec/fixtures/models/membership.rb +4 -0
- data/spec/fixtures/{more → models}/person.rb +4 -2
- data/spec/fixtures/models/project.rb +6 -0
- data/spec/fixtures/models/question.rb +7 -0
- data/spec/fixtures/{more → models}/sale_entry.rb +0 -0
- data/spec/fixtures/{more → models}/sale_invoice.rb +5 -4
- data/spec/fixtures/{more → models}/service.rb +0 -0
- data/spec/fixtures/{more → models}/user.rb +0 -0
- data/spec/functional/validations_spec.rb +8 -0
- data/spec/spec_helper.rb +23 -14
- data/spec/unit/active_model_lint_spec.rb +30 -0
- data/spec/{couchrest → unit}/assocations_spec.rb +1 -3
- data/spec/{couchrest → unit}/attachment_spec.rb +1 -1
- data/spec/{couchrest → unit}/base_spec.rb +59 -10
- data/spec/{couchrest → unit}/casted_spec.rb +1 -4
- data/spec/{couchrest → unit}/class_proxy_spec.rb +1 -1
- data/spec/{couchrest → unit}/collection_spec.rb +1 -2
- data/spec/{couchrest → unit}/configuration_spec.rb +2 -3
- data/spec/{couchrest → unit}/connection_spec.rb +2 -2
- data/spec/{couchrest → unit}/core_extensions/time_parsing.rb +0 -0
- data/spec/{couchrest → unit}/design_doc_spec.rb +2 -5
- data/spec/{couchrest → unit}/designs/view_spec.rb +0 -0
- data/spec/{couchrest → unit}/designs_spec.rb +2 -3
- data/spec/{couchrest → unit}/dirty_spec.rb +2 -8
- data/spec/{couchrest/casted_model_spec.rb → unit/embeddable_spec.rb} +49 -26
- data/spec/{couchrest → unit}/inherited_spec.rb +1 -1
- data/spec/{couchrest → unit}/persistence_spec.rb +23 -8
- data/spec/{couchrest → unit}/property_protection_spec.rb +1 -1
- data/spec/{couchrest → unit}/property_spec.rb +3 -14
- data/spec/{couchrest → unit}/proxyable_spec.rb +2 -4
- data/spec/{couchrest → unit}/subclass_spec.rb +1 -5
- data/spec/{couchrest → unit}/typecast_spec.rb +1 -4
- data/spec/{couchrest → unit}/validations_spec.rb +2 -10
- data/spec/{couchrest → unit}/view_spec.rb +2 -7
- metadata +49 -91
- data/spec/fixtures/more/question.rb +0 -7
data/README.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.1.0
|
1
|
+
1.1.0
|
data/couchrest_model.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
24
24
|
s.require_paths = ["lib"]
|
25
25
|
|
26
|
-
s.add_dependency(%q<couchrest>, "1.1.0
|
26
|
+
s.add_dependency(%q<couchrest>, "1.1.0")
|
27
27
|
s.add_dependency(%q<mime-types>, "~> 1.15")
|
28
28
|
s.add_dependency(%q<activemodel>, "~> 3.0")
|
29
29
|
s.add_dependency(%q<tzinfo>, "~> 0.3.22")
|
data/history.md
CHANGED
@@ -1,6 +1,18 @@
|
|
1
1
|
# CouchRest Model Change History
|
2
2
|
|
3
|
-
## 1.1.0
|
3
|
+
## 1.1.0 - 2011-06-25
|
4
|
+
|
5
|
+
* Major Alterations
|
6
|
+
* CastedModel no longer requires a Hash. Automatically includes all required methods.
|
7
|
+
* CastedModel module renamed to Embeddable (old still works!)
|
8
|
+
|
9
|
+
* Minor Fixes
|
10
|
+
* Validation callbacks now support context (thanks kostia)
|
11
|
+
* Document comparisons now performed using database and document ID (pointer by neocsr)
|
12
|
+
* Automatic config generation now supported (thanks lucasrenan)
|
13
|
+
* Comparing documents resorts to Hash comparison if both IDs are nil. (pointer by kostia)
|
14
|
+
|
15
|
+
## 1.1.0.rc1 - 2011-06-08
|
4
16
|
|
5
17
|
* New Features
|
6
18
|
* Properties with a nil value are now no longer sent to the database.
|
@@ -183,19 +183,19 @@ module CouchRest
|
|
183
183
|
casted_by[casted_by_property.to_s] << obj.id
|
184
184
|
end
|
185
185
|
end
|
186
|
-
|
186
|
+
|
187
187
|
def << obj
|
188
188
|
check_obj(obj)
|
189
189
|
casted_by[casted_by_property.to_s] << obj.id
|
190
190
|
super(obj)
|
191
191
|
end
|
192
|
-
|
192
|
+
|
193
193
|
def push(obj)
|
194
194
|
check_obj(obj)
|
195
195
|
casted_by[casted_by_property.to_s].push obj.id
|
196
196
|
super(obj)
|
197
197
|
end
|
198
|
-
|
198
|
+
|
199
199
|
def unshift(obj)
|
200
200
|
check_obj(obj)
|
201
201
|
casted_by[casted_by_property.to_s].unshift obj.id
|
@@ -212,7 +212,7 @@ module CouchRest
|
|
212
212
|
casted_by[casted_by_property.to_s].pop
|
213
213
|
super
|
214
214
|
end
|
215
|
-
|
215
|
+
|
216
216
|
def shift
|
217
217
|
casted_by[casted_by_property.to_s].shift
|
218
218
|
super
|
data/lib/couchrest/model/base.rb
CHANGED
@@ -7,7 +7,6 @@ module CouchRest
|
|
7
7
|
include CouchRest::Model::Configuration
|
8
8
|
include CouchRest::Model::Connection
|
9
9
|
include CouchRest::Model::Persistence
|
10
|
-
include CouchRest::Model::Callbacks
|
11
10
|
include CouchRest::Model::DocumentQueries
|
12
11
|
include CouchRest::Model::Views
|
13
12
|
include CouchRest::Model::DesignDoc
|
@@ -18,9 +17,11 @@ module CouchRest
|
|
18
17
|
include CouchRest::Model::PropertyProtection
|
19
18
|
include CouchRest::Model::Associations
|
20
19
|
include CouchRest::Model::Validations
|
20
|
+
include CouchRest::Model::Callbacks
|
21
21
|
include CouchRest::Model::Designs
|
22
22
|
include CouchRest::Model::CastedBy
|
23
23
|
include CouchRest::Model::Dirty
|
24
|
+
include CouchRest::Model::Callbacks
|
24
25
|
|
25
26
|
def self.subclasses
|
26
27
|
@subclasses ||= []
|
@@ -46,8 +47,8 @@ module CouchRest
|
|
46
47
|
#
|
47
48
|
# Options supported:
|
48
49
|
#
|
49
|
-
# * :directly_set_attributes
|
50
|
-
# * :database
|
50
|
+
# * :directly_set_attributes, true when data comes directly from database
|
51
|
+
# * :database, provide an alternative database
|
51
52
|
#
|
52
53
|
# If a block is provided the new model will be passed into the
|
53
54
|
# block so that it can be populated.
|
@@ -63,6 +64,7 @@ module CouchRest
|
|
63
64
|
yield self if block_given?
|
64
65
|
|
65
66
|
after_initialize if respond_to?(:after_initialize)
|
67
|
+
run_callbacks(:initialize) { self }
|
66
68
|
end
|
67
69
|
|
68
70
|
|
@@ -80,10 +82,6 @@ module CouchRest
|
|
80
82
|
super
|
81
83
|
end
|
82
84
|
|
83
|
-
def persisted?
|
84
|
-
!new?
|
85
|
-
end
|
86
|
-
|
87
85
|
def to_key
|
88
86
|
new? ? nil : [id]
|
89
87
|
end
|
@@ -91,6 +89,26 @@ module CouchRest
|
|
91
89
|
alias :to_param :id
|
92
90
|
alias :new_record? :new?
|
93
91
|
alias :new_document? :new?
|
92
|
+
|
93
|
+
# Compare this model with another by confirming to see
|
94
|
+
# if the IDs and their databases match!
|
95
|
+
#
|
96
|
+
# Camparison of the database is required in case the
|
97
|
+
# model has been proxied or loaded elsewhere.
|
98
|
+
#
|
99
|
+
# A Basic CouchRest document will only ever compare using
|
100
|
+
# a Hash comparison on the attributes.
|
101
|
+
def == other
|
102
|
+
return false unless other.is_a?(Base)
|
103
|
+
if id.nil? && other.id.nil?
|
104
|
+
# no ids? assume comparing nested and revert to hash comparison
|
105
|
+
to_hash == other.to_hash
|
106
|
+
else
|
107
|
+
database == other.database && id == other.id
|
108
|
+
end
|
109
|
+
end
|
110
|
+
alias :eql? :==
|
111
|
+
|
94
112
|
end
|
95
113
|
end
|
96
114
|
end
|
@@ -5,21 +5,23 @@ module CouchRest #:nodoc:
|
|
5
5
|
|
6
6
|
module Callbacks
|
7
7
|
extend ActiveSupport::Concern
|
8
|
-
included do
|
9
|
-
extend ActiveModel::Callbacks
|
10
8
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
CALLBACKS = [
|
10
|
+
:before_validation, :after_validation,
|
11
|
+
:after_initialize,
|
12
|
+
:before_create, :around_create, :after_create,
|
13
|
+
:before_destroy, :around_destroy, :after_destroy,
|
14
|
+
:before_save, :around_save, :after_save,
|
15
|
+
:before_update, :around_update, :after_update,
|
16
|
+
]
|
16
17
|
|
17
|
-
|
18
|
+
included do
|
19
|
+
extend ActiveModel::Callbacks
|
20
|
+
include ActiveModel::Validations::Callbacks
|
18
21
|
|
19
|
-
|
20
|
-
|
22
|
+
define_model_callbacks :initialize, :only => :after
|
23
|
+
define_model_callbacks :create, :destroy, :save, :update
|
21
24
|
end
|
22
|
-
|
23
25
|
end
|
24
26
|
|
25
27
|
end
|
@@ -1,37 +1,34 @@
|
|
1
1
|
module CouchRest::Model
|
2
|
-
module
|
3
|
-
|
2
|
+
module Embeddable
|
4
3
|
extend ActiveSupport::Concern
|
5
4
|
|
6
5
|
included do
|
6
|
+
include CouchRest::Attributes
|
7
7
|
include CouchRest::Model::Configuration
|
8
|
-
include CouchRest::Model::Callbacks
|
9
8
|
include CouchRest::Model::Properties
|
10
9
|
include CouchRest::Model::PropertyProtection
|
11
10
|
include CouchRest::Model::Associations
|
12
11
|
include CouchRest::Model::Validations
|
12
|
+
include CouchRest::Model::Callbacks
|
13
13
|
include CouchRest::Model::CastedBy
|
14
14
|
include CouchRest::Model::Dirty
|
15
|
+
include CouchRest::Model::Callbacks
|
16
|
+
|
15
17
|
class_eval do
|
16
18
|
# Override CastedBy's base_doc?
|
17
19
|
def base_doc?
|
18
20
|
false # Can never be base doc!
|
19
21
|
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def initialize(keys = {})
|
24
|
-
raise StandardError unless self.is_a? Hash
|
25
|
-
prepare_all_attributes(keys)
|
26
|
-
super()
|
27
|
-
end
|
28
22
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
23
|
+
# Initialize a new Casted Model. Accepts the same
|
24
|
+
# options as CouchRest::Model::Base for preparing and initializing
|
25
|
+
# attributes.
|
26
|
+
def initialize(keys = {}, options = {})
|
27
|
+
super()
|
28
|
+
prepare_all_attributes(keys, options)
|
29
|
+
run_callbacks(:initialize) { self }
|
30
|
+
end
|
31
|
+
end
|
35
32
|
end
|
36
33
|
|
37
34
|
# False if the casted model has already
|
@@ -65,6 +62,14 @@ module CouchRest::Model
|
|
65
62
|
end
|
66
63
|
alias :attributes= :update_attributes_without_saving
|
67
64
|
|
65
|
+
end # End Embeddable
|
66
|
+
|
67
|
+
# Provide backwards compatability with previous versions (pre 1.1.0)
|
68
|
+
module CastedModel
|
69
|
+
extend ActiveSupport::Concern
|
70
|
+
included do
|
71
|
+
include CouchRest::Model::Embeddable
|
72
|
+
end
|
68
73
|
end
|
69
74
|
|
70
75
|
end
|
@@ -28,7 +28,8 @@ module CouchRest
|
|
28
28
|
# Trigger the callbacks (before, after, around)
|
29
29
|
# only if the document isn't new
|
30
30
|
def update(options = {})
|
31
|
-
raise "
|
31
|
+
raise "Cannot save a destroyed document!" if destroyed?
|
32
|
+
raise "Calling #{self.class.name}#update on document that has not been created!" if new?
|
32
33
|
return false unless perform_validations(options)
|
33
34
|
return true if !self.disable_dirty && !self.changed?
|
34
35
|
_run_update_callbacks do
|
@@ -69,6 +70,10 @@ module CouchRest
|
|
69
70
|
!!@_destroyed
|
70
71
|
end
|
71
72
|
|
73
|
+
def persisted?
|
74
|
+
!new? && !destroyed?
|
75
|
+
end
|
76
|
+
|
72
77
|
# Update the document's attributes and save. For example:
|
73
78
|
#
|
74
79
|
# doc.update_attributes :name => "Fred"
|
@@ -149,15 +149,13 @@ module CouchRest
|
|
149
149
|
# These properties are casted as Time objects, so they should always
|
150
150
|
# be set to UTC.
|
151
151
|
def timestamps!
|
152
|
-
|
153
|
-
|
154
|
-
property(:created_at, Time, :read_only => true, :protected => true, :auto_validation => false)
|
152
|
+
property(:updated_at, Time, :read_only => true, :protected => true, :auto_validation => false)
|
153
|
+
property(:created_at, Time, :read_only => true, :protected => true, :auto_validation => false)
|
155
154
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
EOS
|
155
|
+
set_callback :save, :before do |object|
|
156
|
+
write_attribute('updated_at', Time.now)
|
157
|
+
write_attribute('created_at', Time.now) if object.new?
|
158
|
+
end
|
161
159
|
end
|
162
160
|
|
163
161
|
protected
|
@@ -168,8 +166,8 @@ module CouchRest
|
|
168
166
|
# check if this property is going to casted
|
169
167
|
type = options.delete(:type) || options.delete(:cast_as)
|
170
168
|
if block_given?
|
171
|
-
type = Class.new
|
172
|
-
include
|
169
|
+
type = Class.new do
|
170
|
+
include Embeddable
|
173
171
|
end
|
174
172
|
if block.arity == 1 # Traditional, with options
|
175
173
|
type.class_eval { yield type }
|
@@ -191,42 +189,32 @@ module CouchRest
|
|
191
189
|
|
192
190
|
# defines the getter for the property (and optional aliases)
|
193
191
|
def create_property_getter(property)
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
read_attribute('#{property.name}')
|
198
|
-
end
|
199
|
-
EOS
|
192
|
+
define_method(property.name) do
|
193
|
+
read_attribute(property.name)
|
194
|
+
end
|
200
195
|
|
201
196
|
if ['boolean', TrueClass.to_s.downcase].include?(property.type.to_s.downcase)
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
end
|
207
|
-
EOS
|
197
|
+
define_method("#{property.name}?") do
|
198
|
+
value = read_attribute(property.name)
|
199
|
+
!(value.nil? || value == false)
|
200
|
+
end
|
208
201
|
end
|
209
202
|
|
210
203
|
if property.alias
|
211
|
-
|
212
|
-
alias #{property.alias.to_sym} #{property.name.to_sym}
|
213
|
-
EOS
|
204
|
+
alias_method(property.alias, property.name.to_sym)
|
214
205
|
end
|
215
206
|
end
|
216
207
|
|
217
208
|
# defines the setter for the property (and optional aliases)
|
218
209
|
def create_property_setter(property)
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
EOS
|
210
|
+
name = property.name
|
211
|
+
|
212
|
+
define_method("#{name}=") do |value|
|
213
|
+
write_attribute(name, value)
|
214
|
+
end
|
225
215
|
|
226
216
|
if property.alias
|
227
|
-
|
228
|
-
alias #{property.alias.to_sym}= #{property_name.to_sym}=
|
229
|
-
EOS
|
217
|
+
alias_method "#{property.alias}=", "#{name}="
|
230
218
|
end
|
231
219
|
end
|
232
220
|
|
@@ -45,7 +45,7 @@ module CouchRest::Model
|
|
45
45
|
|
46
46
|
# Cast an individual value, not an array
|
47
47
|
def cast_value(parent, value)
|
48
|
-
raise "An array inside an array cannot be casted, use
|
48
|
+
raise "An array inside an array cannot be casted, use Embeddable module" if value.is_a?(Array)
|
49
49
|
value = typecast_value(value, self)
|
50
50
|
associate_casted_value_to_parent(parent, value)
|
51
51
|
end
|
@@ -13,22 +13,33 @@ module CouchRest
|
|
13
13
|
# Validations may be applied to both Model::Base and Model::CastedModel
|
14
14
|
module Validations
|
15
15
|
extend ActiveSupport::Concern
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
include ActiveModel::Validations
|
17
|
+
|
18
|
+
# Determine if the document is valid.
|
19
|
+
#
|
20
|
+
# @example Is the document valid?
|
21
|
+
# person.valid?
|
22
|
+
#
|
23
|
+
# @example Is the document valid in a context?
|
24
|
+
# person.valid?(:create)
|
25
|
+
#
|
26
|
+
# @param [ Symbol ] context The optional validation context.
|
27
|
+
#
|
28
|
+
# @return [ true, false ] True if valid, false if not.
|
29
|
+
#
|
30
|
+
def valid?(context = nil)
|
31
|
+
super context ? context : (new? ? :create : :update)
|
19
32
|
end
|
20
|
-
|
21
33
|
|
22
34
|
module ClassMethods
|
23
|
-
|
24
|
-
# Validates the associated casted model. This method should not be
|
35
|
+
|
36
|
+
# Validates the associated casted model. This method should not be
|
25
37
|
# used within your code as it is automatically included when a CastedModel
|
26
38
|
# is used inside the model.
|
27
|
-
#
|
28
39
|
def validates_casted_model(*args)
|
29
40
|
validates_with(CastedModelValidator, _merge_attributes(args))
|
30
41
|
end
|
31
|
-
|
42
|
+
|
32
43
|
# Validates if the field is unique for this type of document. Automatically creates
|
33
44
|
# a view if one does not already exist and performs a search for all matching
|
34
45
|
# documents.
|
data/lib/couchrest/railtie.rb
CHANGED
@@ -2,10 +2,13 @@ require "rails"
|
|
2
2
|
require "active_model/railtie"
|
3
3
|
|
4
4
|
module CouchRest
|
5
|
-
# = Active Record Railtie
|
6
5
|
class ModelRailtie < Rails::Railtie
|
7
|
-
|
8
|
-
|
6
|
+
def self.generator
|
7
|
+
config.respond_to?(:app_generators) ? :app_generators : :generators
|
8
|
+
end
|
9
|
+
|
10
|
+
config.send(generator).orm :couchrest_model
|
11
|
+
config.send(generator).test_framework :test_unit, :fixture => false
|
9
12
|
|
10
13
|
initializer "couchrest_model.configure_default_connection" do
|
11
14
|
CouchRest::Model::Base.configure do |conf|
|
data/lib/couchrest_model.rb
CHANGED
@@ -33,7 +33,6 @@ require "couchrest/model/property_protection"
|
|
33
33
|
require "couchrest/model/properties"
|
34
34
|
require "couchrest/model/casted_array"
|
35
35
|
require "couchrest/model/casted_hash"
|
36
|
-
require "couchrest/model/casted_model"
|
37
36
|
require "couchrest/model/validations"
|
38
37
|
require "couchrest/model/callbacks"
|
39
38
|
require "couchrest/model/document_queries"
|
@@ -58,10 +57,10 @@ require "couchrest/model/core_extensions/hash"
|
|
58
57
|
require "couchrest/model/core_extensions/time_parsing"
|
59
58
|
|
60
59
|
# Base libraries
|
61
|
-
require "couchrest/model/
|
60
|
+
require "couchrest/model/embeddable"
|
62
61
|
require "couchrest/model/base"
|
63
|
-
# Add rails support *after* everything has loaded
|
64
62
|
|
63
|
+
# Add rails support *after* everything has loaded
|
65
64
|
if defined?(Rails)
|
66
65
|
require "couchrest/railtie"
|
67
66
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rails/generators/couchrest_model'
|
2
|
+
|
3
|
+
module CouchrestModel
|
4
|
+
module Generators
|
5
|
+
class ConfigGenerator < Rails::Generators::Base
|
6
|
+
source_root File.expand_path('../templates', __FILE__)
|
7
|
+
|
8
|
+
def app_name
|
9
|
+
Rails::Application.subclasses.first.parent.to_s.underscore
|
10
|
+
end
|
11
|
+
|
12
|
+
def copy_configuration_file
|
13
|
+
template 'couchdb.yml', File.join('config', "couchdb.yml")
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
development: &development
|
2
|
+
protocol: 'http'
|
3
|
+
host: localhost
|
4
|
+
port: 5984
|
5
|
+
prefix: <%= app_name %>
|
6
|
+
suffix: development
|
7
|
+
username:
|
8
|
+
password:
|
9
|
+
|
10
|
+
test:
|
11
|
+
<<: *development
|
12
|
+
suffix: test
|
13
|
+
|
14
|
+
production:
|
15
|
+
protocol: 'https'
|
16
|
+
host: localhost
|
17
|
+
port: 5984
|
18
|
+
prefix: <%= app_name %>
|
19
|
+
suffix: production
|
20
|
+
username: root
|
21
|
+
password: 123
|
File without changes
|
@@ -83,6 +83,17 @@ class WithCallBacks < CouchRest::Model::Base
|
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
|
+
# Following two fixture classes have __intentionally__ diffent syntax for setting the validation context
|
87
|
+
class WithContextualValidationOnCreate < CouchRest::Model::Base
|
88
|
+
property(:name, String)
|
89
|
+
validates(:name, :presence => {:on => :create})
|
90
|
+
end
|
91
|
+
|
92
|
+
class WithContextualValidationOnUpdate < CouchRest::Model::Base
|
93
|
+
property(:name, String)
|
94
|
+
validates(:name, :presence => true, :on => :update)
|
95
|
+
end
|
96
|
+
|
86
97
|
class WithTemplateAndUniqueID < CouchRest::Model::Base
|
87
98
|
use_database TEST_SERVER.default_database
|
88
99
|
unique_id do |model|
|
File without changes
|
File without changes
|
@@ -6,9 +6,9 @@ class Invoice < CouchRest::Model::Base
|
|
6
6
|
property :client_name
|
7
7
|
property :employee_name
|
8
8
|
property :location
|
9
|
-
|
9
|
+
|
10
10
|
# Validation
|
11
11
|
validates_presence_of :client_name, :employee_name
|
12
12
|
validates_presence_of :location, :message => "Hey stupid!, you forgot the location"
|
13
|
-
|
13
|
+
|
14
14
|
end
|
File without changes
|
File without changes
|
@@ -1,6 +1,7 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
|
1
|
+
require 'client'
|
2
|
+
require 'sale_entry'
|
3
|
+
|
4
|
+
class SaleInvoice < CouchRest::Model::Base
|
4
5
|
use_database DB
|
5
6
|
|
6
7
|
belongs_to :client
|
@@ -10,4 +11,4 @@ class SaleInvoice < CouchRest::Model::Base
|
|
10
11
|
|
11
12
|
property :date, Date
|
12
13
|
property :price, Integer
|
13
|
-
end
|
14
|
+
end
|
File without changes
|
File without changes
|