mongo_mapper 0.6.10 → 0.7.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.
Files changed (106) hide show
  1. data/README.rdoc +5 -14
  2. data/Rakefile +1 -1
  3. data/VERSION +1 -1
  4. data/lib/mongo_mapper.rb +48 -56
  5. data/lib/mongo_mapper/document.rb +136 -164
  6. data/lib/mongo_mapper/embedded_document.rb +29 -354
  7. data/lib/mongo_mapper/plugins.rb +31 -0
  8. data/lib/mongo_mapper/plugins/associations.rb +105 -0
  9. data/lib/mongo_mapper/plugins/associations/base.rb +123 -0
  10. data/lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +30 -0
  11. data/lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb +25 -0
  12. data/lib/mongo_mapper/plugins/associations/collection.rb +21 -0
  13. data/lib/mongo_mapper/plugins/associations/embedded_collection.rb +50 -0
  14. data/lib/mongo_mapper/plugins/associations/in_array_proxy.rb +139 -0
  15. data/lib/mongo_mapper/plugins/associations/many_documents_as_proxy.rb +28 -0
  16. data/lib/mongo_mapper/plugins/associations/many_documents_proxy.rb +117 -0
  17. data/lib/mongo_mapper/plugins/associations/many_embedded_polymorphic_proxy.rb +31 -0
  18. data/lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb +23 -0
  19. data/lib/mongo_mapper/plugins/associations/many_polymorphic_proxy.rb +13 -0
  20. data/lib/mongo_mapper/plugins/associations/one_proxy.rb +68 -0
  21. data/lib/mongo_mapper/plugins/associations/proxy.rb +118 -0
  22. data/lib/mongo_mapper/plugins/callbacks.rb +65 -0
  23. data/lib/mongo_mapper/plugins/clone.rb +13 -0
  24. data/lib/mongo_mapper/plugins/descendants.rb +16 -0
  25. data/lib/mongo_mapper/plugins/dirty.rb +119 -0
  26. data/lib/mongo_mapper/plugins/equality.rb +23 -0
  27. data/lib/mongo_mapper/plugins/identity_map.rb +122 -0
  28. data/lib/mongo_mapper/plugins/inspect.rb +14 -0
  29. data/lib/mongo_mapper/plugins/keys.rb +324 -0
  30. data/lib/mongo_mapper/plugins/logger.rb +17 -0
  31. data/lib/mongo_mapper/plugins/pagination.rb +24 -0
  32. data/lib/mongo_mapper/plugins/pagination/proxy.rb +68 -0
  33. data/lib/mongo_mapper/plugins/protected.rb +45 -0
  34. data/lib/mongo_mapper/plugins/rails.rb +45 -0
  35. data/lib/mongo_mapper/plugins/serialization.rb +105 -0
  36. data/lib/mongo_mapper/plugins/validations.rb +46 -0
  37. data/lib/mongo_mapper/query.rb +130 -0
  38. data/lib/mongo_mapper/support.rb +40 -17
  39. data/lib/mongo_mapper/support/descendant_appends.rb +46 -0
  40. data/lib/mongo_mapper/support/find.rb +77 -0
  41. data/mongo_mapper.gemspec +55 -38
  42. data/performance/read_write.rb +52 -0
  43. data/specs.watchr +23 -2
  44. data/test/functional/associations/test_belongs_to_proxy.rb +12 -10
  45. data/test/functional/associations/test_many_documents_as_proxy.rb +4 -21
  46. data/test/functional/associations/test_many_documents_proxy.rb +2 -8
  47. data/test/functional/associations/test_many_embedded_polymorphic_proxy.rb +59 -39
  48. data/test/functional/associations/test_many_embedded_proxy.rb +145 -81
  49. data/test/functional/associations/test_many_polymorphic_proxy.rb +2 -40
  50. data/test/functional/associations/test_one_proxy.rb +25 -10
  51. data/test/functional/test_binary.rb +2 -8
  52. data/test/functional/test_callbacks.rb +1 -5
  53. data/test/functional/test_dirty.rb +27 -23
  54. data/test/functional/test_document.rb +224 -165
  55. data/test/functional/test_embedded_document.rb +72 -82
  56. data/test/functional/test_identity_map.rb +508 -0
  57. data/test/functional/test_modifiers.rb +15 -5
  58. data/test/functional/test_pagination.rb +1 -3
  59. data/test/functional/test_protected.rb +155 -0
  60. data/test/functional/test_string_id_compatibility.rb +7 -12
  61. data/test/functional/test_validations.rb +26 -58
  62. data/test/models.rb +0 -39
  63. data/test/test_helper.rb +37 -3
  64. data/test/unit/associations/test_base.rb +5 -5
  65. data/test/unit/associations/test_proxy.rb +8 -6
  66. data/test/unit/test_descendant_appends.rb +71 -0
  67. data/test/unit/test_document.rb +71 -76
  68. data/test/unit/test_dynamic_finder.rb +27 -29
  69. data/test/unit/test_embedded_document.rb +555 -601
  70. data/test/unit/{test_key.rb → test_keys.rb} +2 -5
  71. data/test/unit/test_mongo_mapper.rb +69 -9
  72. data/test/unit/test_pagination.rb +40 -32
  73. data/test/unit/test_plugins.rb +50 -0
  74. data/test/unit/{test_finder_options.rb → test_query.rb} +74 -65
  75. data/test/unit/test_rails.rb +123 -0
  76. data/test/unit/{test_serializations.rb → test_serialization.rb} +1 -2
  77. data/test/unit/test_support.rb +23 -7
  78. data/test/unit/test_time_zones.rb +3 -4
  79. data/test/unit/test_validations.rb +58 -17
  80. metadata +53 -36
  81. data/lib/mongo_mapper/associations.rb +0 -78
  82. data/lib/mongo_mapper/associations/base.rb +0 -119
  83. data/lib/mongo_mapper/associations/belongs_to_polymorphic_proxy.rb +0 -26
  84. data/lib/mongo_mapper/associations/belongs_to_proxy.rb +0 -21
  85. data/lib/mongo_mapper/associations/collection.rb +0 -19
  86. data/lib/mongo_mapper/associations/in_array_proxy.rb +0 -137
  87. data/lib/mongo_mapper/associations/many_documents_as_proxy.rb +0 -26
  88. data/lib/mongo_mapper/associations/many_documents_proxy.rb +0 -115
  89. data/lib/mongo_mapper/associations/many_embedded_polymorphic_proxy.rb +0 -31
  90. data/lib/mongo_mapper/associations/many_embedded_proxy.rb +0 -54
  91. data/lib/mongo_mapper/associations/many_polymorphic_proxy.rb +0 -11
  92. data/lib/mongo_mapper/associations/one_proxy.rb +0 -64
  93. data/lib/mongo_mapper/associations/proxy.rb +0 -116
  94. data/lib/mongo_mapper/callbacks.rb +0 -61
  95. data/lib/mongo_mapper/dirty.rb +0 -117
  96. data/lib/mongo_mapper/dynamic_finder.rb +0 -74
  97. data/lib/mongo_mapper/finder_options.rb +0 -145
  98. data/lib/mongo_mapper/key.rb +0 -36
  99. data/lib/mongo_mapper/mongo_mapper.rb +0 -125
  100. data/lib/mongo_mapper/pagination.rb +0 -66
  101. data/lib/mongo_mapper/rails_compatibility/document.rb +0 -15
  102. data/lib/mongo_mapper/rails_compatibility/embedded_document.rb +0 -28
  103. data/lib/mongo_mapper/serialization.rb +0 -54
  104. data/lib/mongo_mapper/serializers/json_serializer.rb +0 -48
  105. data/lib/mongo_mapper/validations.rb +0 -39
  106. data/test/functional/test_rails_compatibility.rb +0 -25
@@ -1,15 +0,0 @@
1
- module MongoMapper
2
- module RailsCompatibility
3
- module Document
4
- def self.included(model)
5
- model.class_eval do
6
- alias_method :new_record?, :new?
7
-
8
- def human_name
9
- self.name.demodulize.titleize
10
- end
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,28 +0,0 @@
1
- module MongoMapper
2
- module RailsCompatibility
3
- module EmbeddedDocument
4
- def self.included(model)
5
- model.class_eval do
6
- extend ClassMethods
7
-
8
- alias_method :new_record?, :new?
9
- end
10
-
11
- class << model
12
- alias has_many many
13
- alias has_one one
14
- end
15
- end
16
-
17
- module ClassMethods
18
- def column_names
19
- keys.keys
20
- end
21
-
22
- def human_name
23
- self.name.demodulize.titleize
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,54 +0,0 @@
1
- require 'active_support/json'
2
-
3
- module MongoMapper
4
- module Serialization
5
- class Serializer
6
- attr_reader :options
7
-
8
- def initialize(record, options={})
9
- @record, @options = record, options.dup
10
- end
11
-
12
- def serializable_key_names
13
- key_names = @record.attributes.keys
14
-
15
- if options[:only]
16
- options.delete(:except)
17
- key_names = key_names & Array(options[:only]).collect { |n| n.to_s }
18
- else
19
- options[:except] = Array(options[:except])
20
- key_names = key_names - options[:except].collect { |n| n.to_s }
21
- end
22
-
23
- key_names
24
- end
25
-
26
- def serializable_method_names
27
- Array(options[:methods]).inject([]) do |method_attributes, name|
28
- method_attributes << name if @record.respond_to?(name.to_s)
29
- method_attributes
30
- end
31
- end
32
-
33
- def serializable_names
34
- serializable_key_names + serializable_method_names
35
- end
36
-
37
- def serializable_record
38
- returning(serializable_record = {}) do
39
- serializable_names.each { |name| serializable_record[name] = @record.send(name) }
40
- end
41
- end
42
-
43
- def serialize
44
- # overwrite to implement
45
- end
46
-
47
- def to_s(&block)
48
- serialize(&block)
49
- end
50
- end
51
- end
52
- end
53
-
54
- require 'mongo_mapper/serializers/json_serializer'
@@ -1,48 +0,0 @@
1
- module MongoMapper
2
- module Serialization
3
- def self.included(base)
4
- base.cattr_accessor :include_root_in_json, :instance_writer => false
5
- base.extend ClassMethods
6
- end
7
-
8
- def to_json(options={})
9
- apply_to_json_defaults(options)
10
-
11
- if include_root_in_json
12
- "{#{self.class.json_class_name}: #{JsonSerializer.new(self, options).to_s}}"
13
- else
14
- JsonSerializer.new(self, options).to_s
15
- end
16
- end
17
-
18
- def from_json(json)
19
- self.attributes = ActiveSupport::JSON.decode(json)
20
- self
21
- end
22
-
23
- class JsonSerializer < MongoMapper::Serialization::Serializer
24
- def serialize
25
- serializable_record.to_json
26
- end
27
- end
28
-
29
- module ClassMethods
30
- def json_class_name
31
- @json_class_name ||= name.demodulize.underscore.inspect
32
- end
33
- end
34
-
35
- private
36
- def apply_to_json_defaults(options)
37
- unless options[:only]
38
- methods = [options.delete(:methods)].flatten.compact
39
- methods << :id
40
- options[:methods] = methods.uniq
41
- end
42
-
43
- except = [options.delete(:except)].flatten.compact
44
- except << :_id
45
- options[:except] = except
46
- end
47
- end
48
- end
@@ -1,39 +0,0 @@
1
- module MongoMapper
2
- module Validations
3
- module Macros
4
- def validates_uniqueness_of(*args)
5
- add_validations(args, MongoMapper::Validations::ValidatesUniquenessOf)
6
- end
7
- end
8
-
9
- class ValidatesUniquenessOf < Validatable::ValidationBase
10
- option :scope, :case_sensitive
11
- default :case_sensitive => true
12
-
13
- def valid?(instance)
14
- value = instance[attribute]
15
- return true if allow_blank && value.blank?
16
- base_conditions = case_sensitive ? {self.attribute => value} : {}
17
- doc = instance.class.first(base_conditions.merge(scope_conditions(instance)).merge(where_conditions(instance)))
18
- doc.nil? || instance._id == doc._id
19
- end
20
-
21
- def message(instance)
22
- super || "has already been taken"
23
- end
24
-
25
- def scope_conditions(instance)
26
- return {} unless scope
27
- Array(scope).inject({}) do |conditions, key|
28
- conditions.merge(key => instance[key])
29
- end
30
- end
31
-
32
- def where_conditions(instance)
33
- conditions = {}
34
- conditions[attribute] = /#{instance[attribute].to_s}/i unless case_sensitive
35
- conditions
36
- end
37
- end
38
- end
39
- end
@@ -1,25 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TestRailsCompatibility < Test::Unit::TestCase
4
- class Item
5
- include MongoMapper::EmbeddedDocument
6
- key :for_all, String
7
- end
8
-
9
- class Order
10
- include MongoMapper::Document
11
- many :items, :class_name => 'TestRailsCompatibility::Item'
12
- key :order_only, String
13
- end
14
-
15
- context "Document" do
16
- setup do
17
- Order.collection.remove
18
- end
19
-
20
- should "alias new to new_record?" do
21
- instance = Order.new
22
- instance.new_record?.should == instance.new?
23
- end
24
- end
25
- end