mongo_mapper_ign 0.7.7 → 0.7.8

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.
Files changed (50) hide show
  1. data/LICENSE +20 -20
  2. data/README.rdoc +34 -34
  3. data/bin/mmconsole +60 -60
  4. data/lib/mongo_mapper.rb +123 -123
  5. data/lib/mongo_mapper/document.rb +292 -292
  6. data/lib/mongo_mapper/embedded_document.rb +71 -71
  7. data/lib/mongo_mapper/plugins.rb +36 -36
  8. data/lib/mongo_mapper/plugins/associations.rb +115 -115
  9. data/lib/mongo_mapper/plugins/associations/base.rb +124 -124
  10. data/lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +31 -31
  11. data/lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb +26 -26
  12. data/lib/mongo_mapper/plugins/associations/collection.rb +21 -21
  13. data/lib/mongo_mapper/plugins/associations/embedded_collection.rb +39 -39
  14. data/lib/mongo_mapper/plugins/associations/in_array_proxy.rb +160 -144
  15. data/lib/mongo_mapper/plugins/associations/many_documents_as_proxy.rb +29 -29
  16. data/lib/mongo_mapper/plugins/associations/many_documents_proxy.rb +130 -130
  17. data/lib/mongo_mapper/plugins/associations/many_embedded_polymorphic_proxy.rb +32 -32
  18. data/lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb +24 -24
  19. data/lib/mongo_mapper/plugins/associations/many_polymorphic_proxy.rb +14 -14
  20. data/lib/mongo_mapper/plugins/associations/one_embedded_proxy.rb +42 -42
  21. data/lib/mongo_mapper/plugins/associations/one_proxy.rb +70 -70
  22. data/lib/mongo_mapper/plugins/associations/proxy.rb +125 -125
  23. data/lib/mongo_mapper/plugins/callbacks.rb +241 -241
  24. data/lib/mongo_mapper/plugins/clone.rb +13 -13
  25. data/lib/mongo_mapper/plugins/descendants.rb +16 -16
  26. data/lib/mongo_mapper/plugins/dirty.rb +119 -119
  27. data/lib/mongo_mapper/plugins/equality.rb +23 -23
  28. data/lib/mongo_mapper/plugins/identity_map.rb +123 -123
  29. data/lib/mongo_mapper/plugins/inspect.rb +14 -14
  30. data/lib/mongo_mapper/plugins/keys.rb +322 -322
  31. data/lib/mongo_mapper/plugins/keys/key.rb +53 -53
  32. data/lib/mongo_mapper/plugins/logger.rb +17 -17
  33. data/lib/mongo_mapper/plugins/modifiers.rb +111 -111
  34. data/lib/mongo_mapper/plugins/pagination.rb +24 -24
  35. data/lib/mongo_mapper/plugins/pagination/proxy.rb +72 -72
  36. data/lib/mongo_mapper/plugins/persistence.rb +96 -96
  37. data/lib/mongo_mapper/plugins/protected.rb +46 -46
  38. data/lib/mongo_mapper/plugins/rails.rb +57 -57
  39. data/lib/mongo_mapper/plugins/serialization.rb +92 -92
  40. data/lib/mongo_mapper/plugins/serialization/array.rb +56 -56
  41. data/lib/mongo_mapper/plugins/serialization/xml_serializer.rb +239 -239
  42. data/lib/mongo_mapper/plugins/timestamps.rb +21 -21
  43. data/lib/mongo_mapper/plugins/userstamps.rb +14 -14
  44. data/lib/mongo_mapper/plugins/validations.rb +46 -46
  45. data/lib/mongo_mapper/query.rb +28 -28
  46. data/lib/mongo_mapper/support.rb +197 -197
  47. data/lib/mongo_mapper/support/descendant_appends.rb +46 -46
  48. data/lib/mongo_mapper/support/find.rb +77 -77
  49. data/lib/mongo_mapper/version.rb +3 -3
  50. metadata +4 -25
@@ -1,97 +1,97 @@
1
- # encoding: UTF-8
2
- module MongoMapper
3
- module Plugins
4
- module Persistence
5
- module ClassMethods
6
- class Unsupported < MongoMapperError; end
7
-
8
- def connection(mongo_connection=nil)
9
- not_supported_by_embedded
10
- if mongo_connection.nil?
11
- @connection ||= MongoMapper.connection
12
- else
13
- @connection = mongo_connection
14
- end
15
- @connection
16
- end
17
-
18
- def slave_connection
19
- not_supported_by_embedded
20
- raise "Slave connections have not been configured" if MongoMapper.slave_connections.empty?
21
- @slave_idx ||= 0
22
- conn = MongoMapper.slave_connections[@slave_idx]
23
- increment_slave_idx
24
- conn
25
- end
26
-
27
- def set_database_name(name)
28
- not_supported_by_embedded
29
- @database_name = name
30
- end
31
-
32
- def database_name
33
- not_supported_by_embedded
34
- @database_name
35
- end
36
-
37
- def database
38
- not_supported_by_embedded
39
- if database_name.nil?
40
- MongoMapper.database
41
- else
42
- connection.db(database_name)
43
- end
44
- end
45
-
46
- def slave_database
47
- not_supported_by_embedded
48
- conn = slave_connection
49
- if database_name.nil?
50
- conn.db(MongoMapper.database.name)
51
- else
52
- conn.db(database_name)
53
- end
54
- end
55
-
56
- def set_collection_name(name)
57
- not_supported_by_embedded
58
- @collection_name = name
59
- end
60
-
61
- def collection_name
62
- not_supported_by_embedded
63
- @collection_name ||= self.to_s.tableize.gsub(/\//, '.')
64
- end
65
-
66
- def collection
67
- not_supported_by_embedded
68
- database.collection(collection_name)
69
- end
70
-
71
- def slave_collection
72
- not_supported_by_embedded
73
- slave_database.collection(collection_name)
74
- end
75
-
76
- private
77
- def not_supported_by_embedded
78
- raise Unsupported.new('This is not supported for embeddable documents at this time.') if embeddable?
79
- end
80
-
81
- def increment_slave_idx
82
- @slave_idx = @slave_idx + 1 <= MongoMapper.slave_connections.length-1 ? @slave_idx + 1 : 0
83
- end
84
- end
85
-
86
- module InstanceMethods
87
- def collection
88
- _root_document.class.collection
89
- end
90
-
91
- def database
92
- _root_document.class.database
93
- end
94
- end
95
- end
96
- end
1
+ # encoding: UTF-8
2
+ module MongoMapper
3
+ module Plugins
4
+ module Persistence
5
+ module ClassMethods
6
+ class Unsupported < MongoMapperError; end
7
+
8
+ def connection(mongo_connection=nil)
9
+ not_supported_by_embedded
10
+ if mongo_connection.nil?
11
+ @connection ||= MongoMapper.connection
12
+ else
13
+ @connection = mongo_connection
14
+ end
15
+ @connection
16
+ end
17
+
18
+ def slave_connection
19
+ not_supported_by_embedded
20
+ raise "Slave connections have not been configured" if MongoMapper.slave_connections.empty?
21
+ @slave_idx ||= 0
22
+ conn = MongoMapper.slave_connections[@slave_idx]
23
+ increment_slave_idx
24
+ conn
25
+ end
26
+
27
+ def set_database_name(name)
28
+ not_supported_by_embedded
29
+ @database_name = name
30
+ end
31
+
32
+ def database_name
33
+ not_supported_by_embedded
34
+ @database_name
35
+ end
36
+
37
+ def database
38
+ not_supported_by_embedded
39
+ if database_name.nil?
40
+ MongoMapper.database
41
+ else
42
+ connection.db(database_name)
43
+ end
44
+ end
45
+
46
+ def slave_database
47
+ not_supported_by_embedded
48
+ conn = slave_connection
49
+ if database_name.nil?
50
+ conn.db(MongoMapper.database.name)
51
+ else
52
+ conn.db(database_name)
53
+ end
54
+ end
55
+
56
+ def set_collection_name(name)
57
+ not_supported_by_embedded
58
+ @collection_name = name
59
+ end
60
+
61
+ def collection_name
62
+ not_supported_by_embedded
63
+ @collection_name ||= self.to_s.tableize.gsub(/\//, '.')
64
+ end
65
+
66
+ def collection
67
+ not_supported_by_embedded
68
+ database.collection(collection_name)
69
+ end
70
+
71
+ def slave_collection
72
+ not_supported_by_embedded
73
+ slave_database.collection(collection_name)
74
+ end
75
+
76
+ private
77
+ def not_supported_by_embedded
78
+ raise Unsupported.new('This is not supported for embeddable documents at this time.') if embeddable?
79
+ end
80
+
81
+ def increment_slave_idx
82
+ @slave_idx = @slave_idx + 1 <= MongoMapper.slave_connections.length-1 ? @slave_idx + 1 : 0
83
+ end
84
+ end
85
+
86
+ module InstanceMethods
87
+ def collection
88
+ _root_document.class.collection
89
+ end
90
+
91
+ def database
92
+ _root_document.class.database
93
+ end
94
+ end
95
+ end
96
+ end
97
97
  end
@@ -1,46 +1,46 @@
1
- # encoding: UTF-8
2
- module MongoMapper
3
- module Plugins
4
- module Protected
5
- module ClassMethods
6
- def attr_protected(*attrs)
7
- self.write_inheritable_attribute(:attr_protected, Set.new(attrs) + (protected_attributes || []))
8
- end
9
-
10
- def protected_attributes
11
- self.read_inheritable_attribute(:attr_protected)
12
- end
13
-
14
- def key(*args)
15
- key = super
16
- attr_protected key.name.to_sym if key.options[:protected]
17
- key
18
- end
19
- end
20
-
21
- module InstanceMethods
22
- def assign(attrs={})
23
- super(filter_protected_attrs(attrs))
24
- end
25
-
26
- def update_attributes(attrs={})
27
- super(filter_protected_attrs(attrs))
28
- end
29
-
30
- def update_attributes!(attrs={})
31
- super(filter_protected_attrs(attrs))
32
- end
33
-
34
- def protected_attributes
35
- self.class.protected_attributes
36
- end
37
-
38
- protected
39
- def filter_protected_attrs(attrs)
40
- return attrs if protected_attributes.blank? || attrs.blank?
41
- attrs.dup.delete_if { |key, val| protected_attributes.include?(key.to_sym) }
42
- end
43
- end
44
- end
45
- end
46
- end
1
+ # encoding: UTF-8
2
+ module MongoMapper
3
+ module Plugins
4
+ module Protected
5
+ module ClassMethods
6
+ def attr_protected(*attrs)
7
+ self.write_inheritable_attribute(:attr_protected, Set.new(attrs) + (protected_attributes || []))
8
+ end
9
+
10
+ def protected_attributes
11
+ self.read_inheritable_attribute(:attr_protected)
12
+ end
13
+
14
+ def key(*args)
15
+ key = super
16
+ attr_protected key.name.to_sym if key.options[:protected]
17
+ key
18
+ end
19
+ end
20
+
21
+ module InstanceMethods
22
+ def assign(attrs={})
23
+ super(filter_protected_attrs(attrs))
24
+ end
25
+
26
+ def update_attributes(attrs={})
27
+ super(filter_protected_attrs(attrs))
28
+ end
29
+
30
+ def update_attributes!(attrs={})
31
+ super(filter_protected_attrs(attrs))
32
+ end
33
+
34
+ def protected_attributes
35
+ self.class.protected_attributes
36
+ end
37
+
38
+ protected
39
+ def filter_protected_attrs(attrs)
40
+ return attrs if protected_attributes.blank? || attrs.blank?
41
+ attrs.dup.delete_if { |key, val| protected_attributes.include?(key.to_sym) }
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -1,58 +1,58 @@
1
- # encoding: UTF-8
2
- module MongoMapper
3
- module Plugins
4
- module Rails
5
- def self.configure(model)
6
- model.extend ActiveModel::Naming if defined?(ActiveModel)
7
- end
8
-
9
- module InstanceMethods
10
- def to_param
11
- id.to_s if persisted?
12
- end
13
-
14
- def to_model
15
- self
16
- end
17
-
18
- def to_key
19
- [id] if persisted?
20
- end
21
-
22
- def new_record?
23
- new?
24
- end
25
-
26
- def read_attribute(name)
27
- self[name]
28
- end
29
-
30
- def read_attribute_before_typecast(name)
31
- read_key_before_typecast(name)
32
- end
33
-
34
- def write_attribute(name, value)
35
- self[name] = value
36
- end
37
- end
38
-
39
- module ClassMethods
40
- def has_one(*args)
41
- one(*args)
42
- end
43
-
44
- def has_many(*args)
45
- many(*args)
46
- end
47
-
48
- def column_names
49
- keys.keys
50
- end
51
-
52
- def human_name
53
- self.name.demodulize.titleize
54
- end
55
- end
56
- end
57
- end
1
+ # encoding: UTF-8
2
+ module MongoMapper
3
+ module Plugins
4
+ module Rails
5
+ def self.configure(model)
6
+ model.extend ActiveModel::Naming if defined?(ActiveModel)
7
+ end
8
+
9
+ module InstanceMethods
10
+ def to_param
11
+ id.to_s if persisted?
12
+ end
13
+
14
+ def to_model
15
+ self
16
+ end
17
+
18
+ def to_key
19
+ [id] if persisted?
20
+ end
21
+
22
+ def new_record?
23
+ new?
24
+ end
25
+
26
+ def read_attribute(name)
27
+ self[name]
28
+ end
29
+
30
+ def read_attribute_before_typecast(name)
31
+ read_key_before_typecast(name)
32
+ end
33
+
34
+ def write_attribute(name, value)
35
+ self[name] = value
36
+ end
37
+ end
38
+
39
+ module ClassMethods
40
+ def has_one(*args)
41
+ one(*args)
42
+ end
43
+
44
+ def has_many(*args)
45
+ many(*args)
46
+ end
47
+
48
+ def column_names
49
+ keys.keys
50
+ end
51
+
52
+ def human_name
53
+ self.name.demodulize.titleize
54
+ end
55
+ end
56
+ end
57
+ end
58
58
  end
@@ -1,92 +1,92 @@
1
- # encoding: UTF-8
2
- require 'active_support/json'
3
-
4
- module MongoMapper
5
- module Plugins
6
- module Serialization
7
- def self.configure(model)
8
- model.class_eval { cattr_accessor :include_root_in_json, :instance_writer => true }
9
- end
10
-
11
- module InstanceMethods
12
- def to_xml(options = {}, &block)
13
- options[:dasherize] = false unless options.has_key?(:dasherize)
14
- serializer = Serialization::XmlSerializer.new(self, options)
15
- block_given? ? serializer.to_s(&block) : serializer.to_s
16
- end
17
-
18
- def as_json options={}
19
- options ||= {}
20
- unless options[:only]
21
- methods = [options.delete(:methods)].flatten.compact
22
- methods << :id
23
- options[:methods] = methods.uniq
24
- end
25
-
26
- except = [options.delete(:except)].flatten.compact
27
- except << :_id
28
- options[:except] = except
29
-
30
- # Direct rip from Rails 3 ActiveModel Serialization (#serializable_hash)
31
- hash = begin
32
- options[:only] = Array.wrap(options[:only]).map { |n| n.to_s }
33
- options[:except] = Array.wrap(options[:except]).map { |n| n.to_s }
34
-
35
- attribute_names = attributes.keys.sort
36
- if options[:only].any?
37
- attribute_names &= options[:only]
38
- elsif options[:except].any?
39
- attribute_names -= options[:except]
40
- end
41
-
42
- method_names = Array.wrap(options[:methods]).inject([]) do |methods, name|
43
- methods << name if respond_to?(name.to_s)
44
- methods
45
- end
46
-
47
- (attribute_names + method_names).inject({}) { |hash, name|
48
- hash[name] = send(name)
49
- hash
50
- }
51
- end
52
- # End rip
53
-
54
- options.delete(:only) if options[:only].nil? or options[:only].empty?
55
-
56
- hash.each do |key, value|
57
- if value.is_a?(Array)
58
- hash[key] = value.map do |item|
59
- item.respond_to?(:as_json) ? item.as_json(options) : item
60
- end
61
- elsif value.is_a? BSON::ObjectID
62
- hash[key] = value.to_s
63
- elsif value.respond_to?(:as_json)
64
- hash[key] = value.as_json(options)
65
- end
66
- end
67
-
68
- # Replicate Rails 3 naming - and also bin anytihng after : for use in our dynamic classes from unit tests
69
- hash = { ActiveSupport::Inflector.underscore(ActiveSupport::Inflector.demodulize(self)).gsub(/:.*/,'') => hash } if include_root_in_json
70
- hash
71
- end
72
- end
73
-
74
- module ClassMethods
75
- def from_json(json)
76
- self.new(ActiveSupport::JSON.decode(json))
77
- end
78
-
79
- def from_xml(xml)
80
- # instance = self.new
81
- # instance.attributes = self.new
82
- # instance
83
- instance.attributes = self.new(Hash.from_xml(xml).values.first)
84
- end
85
- end
86
-
87
- end
88
- end
89
- end
90
-
91
- require 'mongo_mapper/plugins/serialization/xml_serializer'
92
- require 'mongo_mapper/plugins/serialization/array'
1
+ # encoding: UTF-8
2
+ require 'active_support/json'
3
+
4
+ module MongoMapper
5
+ module Plugins
6
+ module Serialization
7
+ def self.configure(model)
8
+ model.class_eval { cattr_accessor :include_root_in_json, :instance_writer => true }
9
+ end
10
+
11
+ module InstanceMethods
12
+ def to_xml(options = {}, &block)
13
+ options[:dasherize] = false unless options.has_key?(:dasherize)
14
+ serializer = Serialization::XmlSerializer.new(self, options)
15
+ block_given? ? serializer.to_s(&block) : serializer.to_s
16
+ end
17
+
18
+ def as_json options={}
19
+ options ||= {}
20
+ unless options[:only]
21
+ methods = [options.delete(:methods)].flatten.compact
22
+ methods << :id
23
+ options[:methods] = methods.uniq
24
+ end
25
+
26
+ except = [options.delete(:except)].flatten.compact
27
+ except << :_id
28
+ options[:except] = except
29
+
30
+ # Direct rip from Rails 3 ActiveModel Serialization (#serializable_hash)
31
+ hash = begin
32
+ options[:only] = Array.wrap(options[:only]).map { |n| n.to_s }
33
+ options[:except] = Array.wrap(options[:except]).map { |n| n.to_s }
34
+
35
+ attribute_names = attributes.keys.sort
36
+ if options[:only].any?
37
+ attribute_names &= options[:only]
38
+ elsif options[:except].any?
39
+ attribute_names -= options[:except]
40
+ end
41
+
42
+ method_names = Array.wrap(options[:methods]).inject([]) do |methods, name|
43
+ methods << name if respond_to?(name.to_s)
44
+ methods
45
+ end
46
+
47
+ (attribute_names + method_names).inject({}) { |hash, name|
48
+ hash[name] = send(name)
49
+ hash
50
+ }
51
+ end
52
+ # End rip
53
+
54
+ options.delete(:only) if options[:only].nil? or options[:only].empty?
55
+
56
+ hash.each do |key, value|
57
+ if value.is_a?(Array)
58
+ hash[key] = value.map do |item|
59
+ item.respond_to?(:as_json) ? item.as_json(options) : item
60
+ end
61
+ elsif value.is_a? BSON::ObjectID
62
+ hash[key] = value.to_s
63
+ elsif value.respond_to?(:as_json)
64
+ hash[key] = value.as_json(options)
65
+ end
66
+ end
67
+
68
+ # Replicate Rails 3 naming - and also bin anytihng after : for use in our dynamic classes from unit tests
69
+ hash = { ActiveSupport::Inflector.underscore(ActiveSupport::Inflector.demodulize(self)).gsub(/:.*/,'') => hash } if include_root_in_json
70
+ hash
71
+ end
72
+ end
73
+
74
+ module ClassMethods
75
+ def from_json(json)
76
+ self.new(ActiveSupport::JSON.decode(json))
77
+ end
78
+
79
+ def from_xml(xml)
80
+ # instance = self.new
81
+ # instance.attributes = self.new
82
+ # instance
83
+ instance.attributes = self.new(Hash.from_xml(xml).values.first)
84
+ end
85
+ end
86
+
87
+ end
88
+ end
89
+ end
90
+
91
+ require 'mongo_mapper/plugins/serialization/xml_serializer'
92
+ require 'mongo_mapper/plugins/serialization/array'