custom_fields 1.0.0.beta.23 → 1.0.0.beta.24

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,23 +5,7 @@ module CustomFields
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- register_type :boolean
9
- end
10
-
11
- module InstanceMethods
12
-
13
- def apply_boolean_type(klass)
14
-
15
- klass.class_eval <<-EOF
16
- alias :#{self.safe_alias}= :#{self._name}=
17
-
18
- def #{self.safe_alias}
19
- ::Boolean.set(self.send(:#{self._name}))
20
- end
21
- EOF
22
-
23
- end
24
-
8
+ register_type :boolean, ::Boolean
25
9
  end
26
10
 
27
11
  end
@@ -75,11 +75,11 @@ module CustomFields
75
75
 
76
76
  def collection(reload_embedded = false)
77
77
  if self.target_klass.embedded?
78
- parent_target_klass = self.target_klass._parent
78
+ parent_target = self.target_klass._parent
79
79
 
80
- parent_target_klass = parent_target_klass.reload if reload_embedded
80
+ parent_target = parent_target.reload if reload_embedded
81
81
 
82
- parent_target_klass.send(self.target_klass.association_name)
82
+ parent_target.send(self.target_klass.association_name)
83
83
  else
84
84
  self.target_klass
85
85
  end
@@ -23,18 +23,20 @@ module CustomFields
23
23
  end
24
24
 
25
25
  def persist
26
- (self.previous_state[:ids] - self.ids).each do |id|
27
- self.set_foreign_key_and_position(id, nil)
26
+ (self.previous_state[:values] - self.values).each do |object|
27
+ self.set_foreign_key_and_position(object, nil)
28
28
  end
29
29
 
30
- self.ids.each_with_index do |id, position|
31
- self.set_foreign_key_and_position(id, self.parent._id, position)
30
+ self.values.each_with_index do |object, position|
31
+ self.set_foreign_key_and_position(object, self.parent._id, position)
32
32
  end
33
33
 
34
34
  if self.target_klass.embedded?
35
35
  self.target_klass._parent.save!(:validate => false)
36
36
  end
37
37
 
38
+ self.reorder # update positions in the internal collection (self.values)
39
+
38
40
  self.reset_previous_state
39
41
  end
40
42
 
@@ -52,29 +54,35 @@ module CustomFields
52
54
  end
53
55
 
54
56
  def reload
55
- self.update(self.reverse_collection)
57
+ self.update(self.reverse_collection(true))
56
58
 
57
59
  self.reset_previous_state
58
60
  end
59
61
 
60
62
  protected
61
63
 
62
- def reverse_collection
63
- self.collection.where(self.reverse_lookup_field => self.parent._id).order_by([[:"#{self.reverse_lookup_field}_position", :asc]])
64
+ def reverse_collection(reload = false)
65
+ self.collection(reload).where(self.reverse_lookup_field => self.parent._id).order_by([[:"#{self.reverse_lookup_field}_position", :asc]])
66
+ end
67
+
68
+ def reorder
69
+ self.values.sort! { |a, b| a.send(:"#{self.reverse_lookup_field}_position") <=> b.send(:"#{self.reverse_lookup_field}_position") }
64
70
  end
65
71
 
66
- def set_foreign_key_and_position(object_id, value, position = nil)
72
+ def set_foreign_key_and_position(object, value, position = nil)
73
+ objects = [object]
74
+
67
75
  if self.target_klass.embedded?
68
- object = self.collection.find(object_id)
69
- else
70
- object = self.previous_state[:values].detect { |o| o._id == object_id }
76
+ # Fixme (Did): objects in self.values are different from the ones in self.collection
77
+ objects << self.collection.find(object._id)
71
78
  end
72
79
 
73
- object.send("#{self.reverse_lookup_field}=".to_sym, value)
74
-
75
- object.send("#{self.reverse_lookup_field}_position=".to_sym, position)
80
+ objects.each do |o|
81
+ o.send("#{self.reverse_lookup_field}=".to_sym, value)
82
+ o.send("#{self.reverse_lookup_field}_position=".to_sym, position)
83
+ end
76
84
 
77
- if self.target_klass.embedded?
85
+ unless self.target_klass.embedded?
78
86
  object.save(:validate => false)
79
87
  end
80
88
  end
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module CustomFields
3
- VERSION = "1.0.0.beta.23"
3
+ VERSION = "1.0.0.beta.24"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,15 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: custom_fields
3
3
  version: !ruby/object:Gem::Version
4
- hash: 62196397
5
4
  prerelease: 6
6
- segments:
7
- - 1
8
- - 0
9
- - 0
10
- - beta
11
- - 23
12
- version: 1.0.0.beta.23
5
+ version: 1.0.0.beta.24
13
6
  platform: ruby
14
7
  authors:
15
8
  - Didier Lafforgue
@@ -17,40 +10,30 @@ autorequire:
17
10
  bindir: bin
18
11
  cert_chain: []
19
12
 
20
- date: 2011-08-17 00:00:00 Z
13
+ date: 2011-08-25 00:00:00 Z
21
14
  dependencies:
22
15
  - !ruby/object:Gem::Dependency
23
16
  name: mongoid
24
- prerelease: false
25
- type: :runtime
26
- version_requirements: &id001 !ruby/object:Gem::Requirement
17
+ requirement: &id001 !ruby/object:Gem::Requirement
27
18
  none: false
28
19
  requirements:
29
20
  - - "="
30
21
  - !ruby/object:Gem::Version
31
- hash: 11
32
- segments:
33
- - 2
34
- - 0
35
- - 2
36
22
  version: 2.0.2
37
- requirement: *id001
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *id001
38
26
  - !ruby/object:Gem::Dependency
39
27
  name: activesupport
40
- prerelease: false
41
- type: :runtime
42
- version_requirements: &id002 !ruby/object:Gem::Requirement
28
+ requirement: &id002 !ruby/object:Gem::Requirement
43
29
  none: false
44
30
  requirements:
45
31
  - - ~>
46
32
  - !ruby/object:Gem::Version
47
- hash: 21
48
- segments:
49
- - 3
50
- - 0
51
- - 9
52
33
  version: 3.0.9
53
- requirement: *id002
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *id002
54
37
  description: Manage custom fields to a mongoid document or a collection. This module is one of the core features we implemented in our custom cms named Locomotive.
55
38
  email:
56
39
  - didier@nocoffee.fr
@@ -102,7 +85,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
102
85
  requirements:
103
86
  - - ">="
104
87
  - !ruby/object:Gem::Version
105
- hash: 3
88
+ hash: -3936643888107415339
106
89
  segments:
107
90
  - 0
108
91
  version: "0"
@@ -111,11 +94,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
111
94
  requirements:
112
95
  - - ">="
113
96
  - !ruby/object:Gem::Version
114
- hash: 23
115
- segments:
116
- - 1
117
- - 3
118
- - 6
119
97
  version: 1.3.6
120
98
  requirements: []
121
99