snusnu-dm-accepts_nested_attributes 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest.txt CHANGED
@@ -9,6 +9,7 @@ lib/dm-accepts_nested_attributes.rb
9
9
  lib/dm-accepts_nested_attributes/association_proxies.rb
10
10
  lib/dm-accepts_nested_attributes/association_validation.rb
11
11
  lib/dm-accepts_nested_attributes/nested_attributes.rb
12
+ lib/dm-accepts_nested_attributes/resource.rb
12
13
  lib/dm-accepts_nested_attributes/version.rb
13
14
  spec/fixtures/person.rb
14
15
  spec/fixtures/profile.rb
@@ -2,64 +2,26 @@ module DataMapper
2
2
  module NestedAttributes
3
3
 
4
4
  module AssociationValidation
5
-
6
- # NOTE:
7
- # overwriting Resource#save like this breaks the before(:save) hook stack
8
- # this hopefully is no problem, since the current implementation doesn't rely on
9
- # a before(:save) hook, but rather overwrites this hook with a no-op, and adds
10
- # the desired behavior via overwriting Resource#save directly. I'd really appreciate
11
- # any ideas for doing this differently, though. Anyways, I'm not really sure if this
12
- # is the right approach. I don't even know if it works with custom validations,
13
- # or maybe breaks other things. It's also really not well specced at all atm.
14
- # Use at your own risk :-)
15
-
16
- def save(context = :default)
17
-
18
- # -----------------------------------------------------------------
19
- # ORIGINAL CODE from Resource#save
20
- # -----------------------------------------------------------------
21
- #
22
- # associations_saved = false
23
- # child_associations.each { |a| associations_saved |= a.save }
24
- #
25
- # saved = new_record? ? create : update
26
- #
27
- # if saved
28
- # original_values.clear
29
- # end
30
- #
31
- # parent_associations.each { |a| associations_saved |= a.save }
32
- #
33
- # # We should return true if the model (or any of its associations)
34
- # # were saved.
35
- # (saved | associations_saved) == true
36
- #
37
- # -----------------------------------------------------------------
38
-
5
+
6
+ def save_child_associations(saved, context)
39
7
  return super if context.nil? # preserve save! behavior
40
-
41
- associations_saved = false
42
-
43
8
  child_associations.each do |a|
44
-
45
9
  if a.respond_to?(:valid?)
46
10
  a.errors.each { |e| self.errors.add(:general, e) } unless a.valid?(context)
47
11
  else
48
12
  self.errors.add(:general, "child association is missing")
49
13
  end
50
-
51
- associations_saved |= a.save
52
-
14
+ saved |= a.save
53
15
  end
16
+ saved
17
+ end
54
18
 
55
- saved = self.valid? && (new_record? ? create : update)
56
-
57
- if saved
58
- original_values.clear
59
- end
19
+ def save_self
20
+ self.valid? && super
21
+ end
60
22
 
23
+ def save_parent_associations(saved, context)
61
24
  parent_associations.each do |a|
62
-
63
25
  if a.respond_to?(:each)
64
26
  a.each do |r|
65
27
  r.errors.each { |e| self.errors.add(:general, e) } unless r.valid?(context)
@@ -67,20 +29,16 @@ module DataMapper
67
29
  else
68
30
  a.errors.each { |e| self.errors.add(:general, e) } unless a.valid?(context)
69
31
  end
70
-
71
- associations_saved |= a.save
72
-
32
+ saved |= a.save
73
33
  end
74
-
75
- (saved | associations_saved) == true
76
-
34
+ saved
77
35
  end
78
36
 
79
37
  # everything works the same if this method isn't overwritten with a no-op
80
38
  # however, i suspect that this is the case because the registered before(:save) hook
81
39
  # somehow gets lost when overwriting Resource#save here in this module.
82
40
  # I'll leave it in for now, to make the purpose clear
83
-
41
+
84
42
  def check_validations(context = :default)
85
43
  true # no-op, validations are checked inside #save
86
44
  end
@@ -0,0 +1,42 @@
1
+ module DataMapper
2
+ module Resource
3
+
4
+ # basic extract method refactorings to work around a bug in extlib
5
+ # see http://sick.snusnu.info/2009/04/29/extlibhook-breaks-if-hooked-method-is-redefined/
6
+ # maybe they are worth considering even when the bug in extlib (hopefully) gets fixed
7
+
8
+ def save(context = :default)
9
+
10
+ associations_saved = false
11
+ associations_saved = save_child_associations(associations_saved, context)
12
+
13
+ saved = save_self
14
+
15
+ if saved
16
+ original_values.clear
17
+ end
18
+
19
+ associations_saved = save_parent_associations(associations_saved, context)
20
+
21
+ # We should return true if the model (or any of its associations) were saved.
22
+ (saved | associations_saved) == true
23
+
24
+ end
25
+
26
+
27
+ def save_child_associations(saved, context)
28
+ child_associations.each { |a| saved |= a.save }
29
+ saved
30
+ end
31
+
32
+ def save_self
33
+ new_record? ? create : update
34
+ end
35
+
36
+ def save_parent_associations(saved, context)
37
+ parent_associations.each { |a| saved |= a.save }
38
+ saved
39
+ end
40
+
41
+ end
42
+ end
@@ -1,7 +1,7 @@
1
1
  module DataMapper
2
2
  module NestedAttributes
3
3
 
4
- VERSION = "0.0.3"
4
+ VERSION = "0.0.4"
5
5
 
6
6
  end
7
7
  end
@@ -10,9 +10,10 @@ require 'dm-core'
10
10
  require 'dm-validations'
11
11
 
12
12
  # Require plugin-files
13
- require Pathname(__FILE__).dirname.expand_path / 'dm-accepts_nested_attributes' / 'nested_attributes'
14
- # monkeypatches for dm-core/associations/(many_to_one.rb and one_to_many.rb)
15
- require Pathname(__FILE__).dirname.expand_path / 'dm-accepts_nested_attributes' / 'association_proxies'
13
+ dir = Pathname(__FILE__).dirname.expand_path / 'dm-accepts_nested_attributes'
14
+ require dir / 'resource'
15
+ require dir / 'association_proxies'
16
+ require dir / 'nested_attributes'
16
17
 
17
18
  # Include the plugin in Model
18
19
  DataMapper::Model.append_extensions DataMapper::NestedAttributes::ClassMethods
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snusnu-dm-accepts_nested_attributes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - "Martin Gamsj\xC3\xA4ger"
@@ -54,6 +54,7 @@ files:
54
54
  - lib/dm-accepts_nested_attributes/association_proxies.rb
55
55
  - lib/dm-accepts_nested_attributes/association_validation.rb
56
56
  - lib/dm-accepts_nested_attributes/nested_attributes.rb
57
+ - lib/dm-accepts_nested_attributes/resource.rb
57
58
  - lib/dm-accepts_nested_attributes/version.rb
58
59
  - spec/fixtures/person.rb
59
60
  - spec/fixtures/profile.rb