mongo_mapper 0.6.10 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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