mongo_mapper 0.12.0 → 0.13.0.beta1

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 (154) hide show
  1. checksums.yaml +7 -0
  2. data/README.rdoc +35 -13
  3. data/bin/mmconsole +1 -1
  4. data/lib/mongo_mapper.rb +4 -0
  5. data/lib/mongo_mapper/connection.rb +17 -6
  6. data/lib/mongo_mapper/document.rb +1 -0
  7. data/lib/mongo_mapper/exceptions.rb +4 -1
  8. data/lib/mongo_mapper/extensions/binary.rb +1 -1
  9. data/lib/mongo_mapper/extensions/boolean.rb +20 -23
  10. data/lib/mongo_mapper/extensions/date.rb +3 -3
  11. data/lib/mongo_mapper/extensions/integer.rb +5 -1
  12. data/lib/mongo_mapper/extensions/kernel.rb +2 -0
  13. data/lib/mongo_mapper/extensions/ordered_hash.rb +23 -0
  14. data/lib/mongo_mapper/extensions/string.rb +2 -2
  15. data/lib/mongo_mapper/extensions/time.rb +7 -5
  16. data/lib/mongo_mapper/middleware/identity_map.rb +3 -4
  17. data/lib/mongo_mapper/plugins.rb +1 -1
  18. data/lib/mongo_mapper/plugins/associations.rb +11 -5
  19. data/lib/mongo_mapper/plugins/associations/base.rb +5 -3
  20. data/lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +0 -0
  21. data/lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb +8 -8
  22. data/lib/mongo_mapper/plugins/associations/collection.rb +2 -0
  23. data/lib/mongo_mapper/plugins/associations/many_documents_proxy.rb +32 -7
  24. data/lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb +2 -2
  25. data/lib/mongo_mapper/plugins/associations/one_proxy.rb +12 -12
  26. data/lib/mongo_mapper/plugins/associations/proxy.rb +5 -1
  27. data/lib/mongo_mapper/plugins/associations/single_association.rb +6 -6
  28. data/lib/mongo_mapper/plugins/clone.rb +4 -2
  29. data/lib/mongo_mapper/plugins/dirty.rb +22 -21
  30. data/lib/mongo_mapper/plugins/document.rb +4 -4
  31. data/lib/mongo_mapper/plugins/dumpable.rb +22 -0
  32. data/lib/mongo_mapper/plugins/embedded_callbacks.rb +58 -9
  33. data/lib/mongo_mapper/plugins/identity_map.rb +42 -32
  34. data/lib/mongo_mapper/plugins/keys.rb +133 -54
  35. data/lib/mongo_mapper/plugins/keys/key.rb +68 -22
  36. data/lib/mongo_mapper/plugins/modifiers.rb +26 -19
  37. data/lib/mongo_mapper/plugins/persistence.rb +15 -5
  38. data/lib/mongo_mapper/plugins/querying.rb +15 -40
  39. data/lib/mongo_mapper/plugins/querying/{decorator.rb → decorated_plucky_query.rb} +24 -4
  40. data/lib/mongo_mapper/plugins/rails.rb +22 -2
  41. data/lib/mongo_mapper/plugins/safe.rb +8 -5
  42. data/lib/mongo_mapper/plugins/sci.rb +26 -4
  43. data/lib/mongo_mapper/plugins/scopes.rb +5 -4
  44. data/lib/mongo_mapper/plugins/timestamps.rb +11 -4
  45. data/lib/mongo_mapper/plugins/validations.rb +1 -1
  46. data/lib/mongo_mapper/utils.rb +12 -0
  47. data/lib/mongo_mapper/version.rb +1 -1
  48. data/lib/rails/generators/mongo_mapper/config/config_generator.rb +20 -7
  49. data/lib/rails/generators/mongo_mapper/config/templates/mongo.yml +6 -0
  50. data/lib/rails/generators/mongo_mapper/model/model_generator.rb +18 -1
  51. data/lib/rails/generators/mongo_mapper/model/templates/model.rb +9 -5
  52. data/{test/functional/test_accessible.rb → spec/functional/accessible_spec.rb} +29 -29
  53. data/{test/functional/associations/test_belongs_to_polymorphic_proxy.rb → spec/functional/associations/belongs_to_polymorphic_proxy_spec.rb} +10 -10
  54. data/{test/functional/associations/test_belongs_to_proxy.rb → spec/functional/associations/belongs_to_proxy_spec.rb} +82 -64
  55. data/{test/functional/associations/test_in_array_proxy.rb → spec/functional/associations/in_array_proxy_spec.rb} +68 -68
  56. data/{test/functional/associations/test_many_documents_as_proxy.rb → spec/functional/associations/many_documents_as_proxy_spec.rb} +37 -38
  57. data/{test/functional/associations/test_many_documents_proxy.rb → spec/functional/associations/many_documents_proxy_spec.rb} +233 -146
  58. data/{test/functional/associations/test_many_embedded_polymorphic_proxy.rb → spec/functional/associations/many_embedded_polymorphic_proxy_spec.rb} +19 -20
  59. data/{test/functional/associations/test_many_embedded_proxy.rb → spec/functional/associations/many_embedded_proxy_spec.rb} +23 -24
  60. data/{test/functional/associations/test_many_polymorphic_proxy.rb → spec/functional/associations/many_polymorphic_proxy_spec.rb} +45 -46
  61. data/{test/functional/associations/test_one_as_proxy.rb → spec/functional/associations/one_as_proxy_spec.rb} +75 -77
  62. data/{test/functional/associations/test_one_embedded_polymorphic_proxy.rb → spec/functional/associations/one_embedded_polymorphic_proxy_spec.rb} +31 -32
  63. data/{test/functional/associations/test_one_embedded_proxy.rb → spec/functional/associations/one_embedded_proxy_spec.rb} +10 -10
  64. data/{test/functional/associations/test_one_proxy.rb → spec/functional/associations/one_proxy_spec.rb} +125 -102
  65. data/spec/functional/associations_spec.rb +48 -0
  66. data/{test/functional/test_binary.rb → spec/functional/binary_spec.rb} +6 -6
  67. data/spec/functional/caching_spec.rb +75 -0
  68. data/{test/functional/test_callbacks.rb → spec/functional/callbacks_spec.rb} +84 -26
  69. data/{test/functional/test_dirty.rb → spec/functional/dirty_spec.rb} +57 -42
  70. data/{test/functional/test_document.rb → spec/functional/document_spec.rb} +52 -52
  71. data/spec/functional/dumpable_spec.rb +24 -0
  72. data/{test/functional/test_dynamic_querying.rb → spec/functional/dynamic_querying_spec.rb} +14 -14
  73. data/{test/functional/test_embedded_document.rb → spec/functional/embedded_document_spec.rb} +51 -42
  74. data/{test/functional/test_equality.rb → spec/functional/equality_spec.rb} +4 -4
  75. data/spec/functional/extensions_spec.rb +16 -0
  76. data/{test/functional/test_identity_map.rb → spec/functional/identity_map_spec.rb} +73 -61
  77. data/spec/functional/indexes_spec.rb +48 -0
  78. data/spec/functional/keys_spec.rb +224 -0
  79. data/{test/functional/test_logger.rb → spec/functional/logger_spec.rb} +6 -6
  80. data/spec/functional/modifiers_spec.rb +550 -0
  81. data/spec/functional/pagination_spec.rb +89 -0
  82. data/spec/functional/protected_spec.rb +199 -0
  83. data/spec/functional/querying_spec.rb +1003 -0
  84. data/spec/functional/rails_spec.rb +55 -0
  85. data/spec/functional/safe_spec.rb +163 -0
  86. data/{test/functional/test_sci.rb → spec/functional/sci_spec.rb} +123 -34
  87. data/{test/functional/test_scopes.rb → spec/functional/scopes_spec.rb} +59 -26
  88. data/spec/functional/timestamps_spec.rb +97 -0
  89. data/{test/functional/test_touch.rb → spec/functional/touch_spec.rb} +13 -13
  90. data/spec/functional/userstamps_spec.rb +46 -0
  91. data/{test/functional/test_validations.rb → spec/functional/validations_spec.rb} +64 -64
  92. data/spec/spec_helper.rb +81 -0
  93. data/spec/support/matchers.rb +24 -0
  94. data/{test → spec/support}/models.rb +1 -6
  95. data/spec/unit/associations/base_spec.rb +146 -0
  96. data/spec/unit/associations/belongs_to_association_spec.rb +30 -0
  97. data/spec/unit/associations/many_association_spec.rb +64 -0
  98. data/spec/unit/associations/one_association_spec.rb +48 -0
  99. data/{test/unit/associations/test_proxy.rb → spec/unit/associations/proxy_spec.rb} +21 -21
  100. data/{test/unit/test_clone.rb → spec/unit/clone_spec.rb} +21 -11
  101. data/spec/unit/config_generator_spec.rb +24 -0
  102. data/{test/unit/test_document.rb → spec/unit/document_spec.rb} +42 -42
  103. data/{test/unit/test_dynamic_finder.rb → spec/unit/dynamic_finder_spec.rb} +28 -28
  104. data/{test/unit/test_embedded_document.rb → spec/unit/embedded_document_spec.rb} +102 -108
  105. data/{test/unit/test_equality.rb → spec/unit/equality_spec.rb} +7 -7
  106. data/{test/unit/test_exceptions.rb → spec/unit/exceptions_spec.rb} +3 -3
  107. data/{test/unit/test_extensions.rb → spec/unit/extensions_spec.rb} +85 -71
  108. data/spec/unit/identity_map_middleware_spec.rb +134 -0
  109. data/{test/unit/test_inspect.rb → spec/unit/inspect_spec.rb} +8 -8
  110. data/{test/unit/test_key.rb → spec/unit/key_spec.rb} +82 -52
  111. data/spec/unit/keys_spec.rb +155 -0
  112. data/spec/unit/model_generator_spec.rb +47 -0
  113. data/spec/unit/mongo_mapper_spec.rb +184 -0
  114. data/spec/unit/pagination_spec.rb +11 -0
  115. data/{test/unit/test_plugins.rb → spec/unit/plugins_spec.rb} +14 -14
  116. data/spec/unit/rails_compatibility_spec.rb +40 -0
  117. data/{test/unit/test_rails_reflect_on_association.rb → spec/unit/rails_reflect_on_association_spec.rb} +9 -9
  118. data/{test/unit/test_rails.rb → spec/unit/rails_spec.rb} +31 -31
  119. data/spec/unit/serialization_spec.rb +169 -0
  120. data/spec/unit/serializers/json_serializer_spec.rb +218 -0
  121. data/spec/unit/serializers/xml_serializer_spec.rb +198 -0
  122. data/{test/unit/test_time_zones.rb → spec/unit/time_zones_spec.rb} +8 -8
  123. data/{test/unit/test_translation.rb → spec/unit/translation_spec.rb} +6 -6
  124. data/{test/unit/test_validations.rb → spec/unit/validations_spec.rb} +72 -59
  125. metadata +199 -179
  126. data/test/_NOTE_ON_TESTING +0 -1
  127. data/test/functional/test_associations.rb +0 -46
  128. data/test/functional/test_caching.rb +0 -77
  129. data/test/functional/test_indexes.rb +0 -50
  130. data/test/functional/test_modifiers.rb +0 -537
  131. data/test/functional/test_pagination.rb +0 -91
  132. data/test/functional/test_protected.rb +0 -201
  133. data/test/functional/test_querying.rb +0 -935
  134. data/test/functional/test_safe.rb +0 -76
  135. data/test/functional/test_timestamps.rb +0 -62
  136. data/test/functional/test_userstamps.rb +0 -44
  137. data/test/support/railtie.rb +0 -4
  138. data/test/support/railtie/autoloaded.rb +0 -2
  139. data/test/support/railtie/not_autoloaded.rb +0 -3
  140. data/test/support/railtie/parent.rb +0 -3
  141. data/test/test_active_model_lint.rb +0 -18
  142. data/test/test_helper.rb +0 -93
  143. data/test/unit/associations/test_base.rb +0 -146
  144. data/test/unit/associations/test_belongs_to_association.rb +0 -29
  145. data/test/unit/associations/test_many_association.rb +0 -63
  146. data/test/unit/associations/test_one_association.rb +0 -47
  147. data/test/unit/serializers/test_json_serializer.rb +0 -216
  148. data/test/unit/serializers/test_xml_serializer.rb +0 -196
  149. data/test/unit/test_identity_map_middleware.rb +0 -132
  150. data/test/unit/test_keys.rb +0 -65
  151. data/test/unit/test_mongo_mapper.rb +0 -157
  152. data/test/unit/test_pagination.rb +0 -11
  153. data/test/unit/test_rails_compatibility.rb +0 -38
  154. data/test/unit/test_serialization.rb +0 -166
@@ -0,0 +1,81 @@
1
+ $:.unshift(File.expand_path('../../lib', __FILE__))
2
+
3
+ require 'rubygems'
4
+ require 'bundler/setup'
5
+ require 'fileutils'
6
+ require 'timecop'
7
+ require "generator_spec/test_case"
8
+
9
+ if RUBY_PLATFORM != "java"
10
+ if ENV['TRAVIS']
11
+ require 'coveralls'
12
+ Coveralls.wear!
13
+ elsif ENV['COVERAGE'] && RUBY_VERSION > "1.8"
14
+ require 'simplecov'
15
+ SimpleCov.start do
16
+ add_filter 'spec'
17
+ add_group 'Core', 'lib/mongo_mapper'
18
+ add_group 'Rails', 'lib/rails'
19
+ add_group 'Extensions', 'lib/mongo_mapper/extensions'
20
+ add_group 'Plugins', 'lib/mongo_mapper/plugins'
21
+ add_group 'Associations', 'lib/mongo_mapper/plugins/associations'
22
+ end
23
+ end
24
+ end
25
+
26
+ require 'mongo_mapper'
27
+
28
+ def Doc(name='Class', &block)
29
+ klass = Class.new
30
+ klass.class_eval do
31
+ include MongoMapper::Document
32
+
33
+ if name
34
+ class_eval "def self.name; '#{name}' end"
35
+ class_eval "def self.to_s; '#{name}' end"
36
+ else
37
+ set_collection_name :test
38
+ end
39
+ end
40
+
41
+ klass.class_eval(&block) if block_given?
42
+ klass.collection.remove
43
+ klass
44
+ end
45
+
46
+ def EDoc(name='Class', &block)
47
+ klass = Class.new do
48
+ include MongoMapper::EmbeddedDocument
49
+
50
+ if name
51
+ class_eval "def self.name; '#{name}' end"
52
+ class_eval "def self.to_s; '#{name}' end"
53
+ end
54
+ end
55
+
56
+ klass.class_eval(&block) if block_given?
57
+ klass
58
+ end
59
+
60
+ def drop_indexes(klass)
61
+ klass.collection.drop_indexes if klass.database.collection_names.include?(klass.collection.name)
62
+ end
63
+
64
+ log_dir = File.expand_path('../../log', __FILE__)
65
+ FileUtils.mkdir_p(log_dir) unless File.exist?(log_dir)
66
+ logger = Logger.new(log_dir + '/test.log')
67
+
68
+ MongoMapper.connection = Mongo::MongoClient.new('127.0.0.1', 27017, :logger => logger)
69
+ MongoMapper.database = "test"
70
+ MongoMapper.database.collections.each { |c| c.drop_indexes }
71
+ Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f}
72
+
73
+ RSpec.configure do |c|
74
+ c.treat_symbols_as_metadata_keys_with_true_values = true
75
+ c.around(:each, :without_connection) do |example|
76
+ old, MongoMapper.connection = MongoMapper.connection, nil
77
+ example.run
78
+ MongoMapper.connection = old
79
+ end
80
+ end
81
+
@@ -0,0 +1,24 @@
1
+ RSpec::Matchers.define :have_error_on do |*args|
2
+ @message = nil
3
+ @attributes = [args]
4
+
5
+ chain :or do |*args|
6
+ @attributes << args
7
+ end
8
+
9
+ match do |model|
10
+ model.valid?
11
+ @has_errors = @attributes.detect {|attribute| model.errors[attribute[0]].present? }
12
+ if @message
13
+ !!@has_errors && model.errors[@has_errors[0]].include?(@has_errors[1])
14
+ else
15
+ !!@has_errors
16
+ end
17
+ end
18
+ end
19
+
20
+ RSpec::Matchers.define :have_index do |index_name|
21
+ match do |model|
22
+ model.collection.index_information.detect { |index| index[0] == index_name }.present?
23
+ end
24
+ end
@@ -125,12 +125,7 @@ class Project
125
125
  end
126
126
  end
127
127
 
128
- many :addresses do
129
- def find_all_by_state(state)
130
- # can't use select here for some reason
131
- find_all { |a| a.state == state }
132
- end
133
- end
128
+ many :addresses
134
129
  end
135
130
 
136
131
  class Collaborator
@@ -0,0 +1,146 @@
1
+ require 'spec_helper'
2
+
3
+ class FooMonster; end
4
+ module AssociationSpec
5
+ include MongoMapper::Plugins::Associations
6
+
7
+ describe MongoMapper::Plugins::Associations::Base do
8
+ it "should initialize with type and name" do
9
+ base = ManyAssociation.new(:foos)
10
+ base.name.should == :foos
11
+ end
12
+
13
+ it "should also allow options when initializing" do
14
+ base = ManyAssociation.new(:foos, :polymorphic => true)
15
+ base.options[:polymorphic].should be_true
16
+ end
17
+
18
+ context "klass" do
19
+ it "should default to class_name constantized" do
20
+ BelongsToAssociation.new(:foo_monster).klass.should == FooMonster
21
+ end
22
+
23
+ it "should be the specified class" do
24
+ anonnymous_class = Class.new
25
+ BelongsToAssociation.new(:foo_monster, :class => anonnymous_class).klass.should == anonnymous_class
26
+ end
27
+ end
28
+
29
+ context "polymorphic?" do
30
+ it "should be true if polymorphic" do
31
+ ManyAssociation.new(:foos, :polymorphic => true).polymorphic?.should be_true
32
+ end
33
+
34
+ it "should be false if not polymorphic" do
35
+ ManyAssociation.new(:bars).polymorphic?.should be_false
36
+ end
37
+ end
38
+
39
+ context "as?" do
40
+ it "should be true if one" do
41
+ OneAssociation.new(:foo, :as => :commentable).as?.should be_true
42
+ end
43
+
44
+ it "should be false if not one" do
45
+ ManyAssociation.new(:foo).as?.should be_false
46
+ end
47
+ end
48
+
49
+ context "in_array?" do
50
+ it "should be true if one" do
51
+ OneAssociation.new(:foo, :in => :list_ids).in_array?.should be_true
52
+ end
53
+
54
+ it "should be false if not one" do
55
+ ManyAssociation.new(:foo).in_array?.should be_false
56
+ end
57
+ end
58
+
59
+ context "query_options" do
60
+ it "should default to empty hash" do
61
+ base = ManyAssociation.new(:foos)
62
+ base.query_options.should == {}
63
+ end
64
+
65
+ it "should work with order" do
66
+ base = ManyAssociation.new(:foos, :order => 'position')
67
+ base.query_options.should == {:order => 'position'}
68
+ end
69
+
70
+ it "should correctly parse from options" do
71
+ base = ManyAssociation.new(:foos, :order => 'position', :somekey => 'somevalue')
72
+ base.query_options.should == {:order => 'position', :somekey => 'somevalue'}
73
+ end
74
+ end
75
+
76
+ context "type_key_name" do
77
+ it "should be association name _ type for belongs_to" do
78
+ BelongsToAssociation.new(:foo).type_key_name.should == 'foo_type'
79
+ end
80
+ end
81
+
82
+ context "foreign_key" do
83
+ it "should default to assocation name _id for belongs to" do
84
+ base = BelongsToAssociation.new(:foo)
85
+ base.foreign_key.should == 'foo_id'
86
+ end
87
+
88
+ it "should be overridable with :foreign_key option" do
89
+ base = BelongsToAssociation.new(:foo, :foreign_key => 'foobar_id')
90
+ base.foreign_key.should == 'foobar_id'
91
+ end
92
+ end
93
+
94
+ it "should have ivar that is association name" do
95
+ BelongsToAssociation.new(:foo).ivar.should == '@_foo'
96
+ end
97
+
98
+ context "embeddable?" do
99
+ it "should be true if class is embeddable" do
100
+ base = ManyAssociation.new(:medias)
101
+ base.embeddable?.should be_true
102
+ end
103
+
104
+ it "should be false if class is not embeddable" do
105
+ base = ManyAssociation.new(:statuses)
106
+ base.embeddable?.should be_false
107
+
108
+ base = BelongsToAssociation.new(:project)
109
+ base.embeddable?.should be_false
110
+ end
111
+ end
112
+
113
+ context "proxy_class" do
114
+ it "should be BelongsToProxy for belongs_to" do
115
+ base = BelongsToAssociation.new(:project)
116
+ base.proxy_class.should == BelongsToProxy
117
+ end
118
+
119
+ it "should be BelongsToPolymorphicProxy for polymorphic belongs_to" do
120
+ base = BelongsToAssociation.new(:target, :polymorphic => true)
121
+ base.proxy_class.should == BelongsToPolymorphicProxy
122
+ end
123
+
124
+ it "should be OneProxy for one" do
125
+ base = OneAssociation.new(:status, :polymorphic => true)
126
+ base.proxy_class.should == OneProxy
127
+ end
128
+
129
+ it "should be OneEmbeddedProxy for one embedded" do
130
+ base = OneAssociation.new(:media)
131
+ base.proxy_class.should == OneEmbeddedProxy
132
+ end
133
+ end
134
+
135
+ context "touch?" do
136
+ it "should be true if touch" do
137
+ BelongsToAssociation.new(:car, :touch => true).touch?.should be_true
138
+ end
139
+
140
+ it "should be false if not touch" do
141
+ BelongsToAssociation.new(:car).touch?.should be_false
142
+ end
143
+ end
144
+
145
+ end
146
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ module BelongsToAssociation
4
+ include MongoMapper::Plugins::Associations
5
+ describe "BelongsToAssociation" do
6
+
7
+ context "class_name" do
8
+ it "should camelize the name" do
9
+ BelongsToAssociation.new(:user).class_name.should == 'User'
10
+ end
11
+
12
+ it "should be changeable using class_name option" do
13
+ association = BelongsToAssociation.new(:user, :class_name => 'Person')
14
+ association.class_name.should == 'Person'
15
+ end
16
+ end
17
+
18
+ context "embeddable?" do
19
+ it "should be false even if class is embeddable" do
20
+ base = BelongsToAssociation.new(:address)
21
+ base.embeddable?.should be_false
22
+ end
23
+
24
+ it "should be false if class is not embeddable" do
25
+ base = BelongsToAssociation.new(:project)
26
+ base.embeddable?.should be_false
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ module ManyAssociationSpec
5
+ include MongoMapper::Plugins::Associations
6
+ describe "ManyAssociation" do
7
+
8
+ context "class_name" do
9
+ it "should camelize the name" do
10
+ ManyAssociation.new(:smart_people).class_name.should == 'SmartPerson'
11
+ end
12
+
13
+ it "should be changeable using class_name option" do
14
+ base = ManyAssociation.new(:smart_people, :class_name => 'IntelligentPerson')
15
+ base.class_name.should == 'IntelligentPerson'
16
+ end
17
+ end
18
+
19
+ context "type_key_name" do
20
+ it "should be _type" do
21
+ ManyAssociation.new(:foos).type_key_name.should == '_type'
22
+ end
23
+ end
24
+
25
+ context "embeddable?" do
26
+ it "should be true if class is embeddable" do
27
+ base = ManyAssociation.new(:medias)
28
+ base.embeddable?.should be_true
29
+ end
30
+
31
+ it "should be false if class is not embeddable" do
32
+ base = ManyAssociation.new(:statuses)
33
+ base.embeddable?.should be_false
34
+ end
35
+ end
36
+
37
+ context "proxy_class" do
38
+ it "should be ManyDocumentsProxy for many" do
39
+ base = ManyAssociation.new(:statuses)
40
+ base.proxy_class.should == ManyDocumentsProxy
41
+ end
42
+
43
+ it "should be ManyPolymorphicProxy for polymorphic many" do
44
+ base = ManyAssociation.new(:messages, :polymorphic => true)
45
+ base.proxy_class.should == ManyPolymorphicProxy
46
+ end
47
+
48
+ it "should be ManyEmbeddedProxy for many embedded" do
49
+ base = ManyAssociation.new(:medias)
50
+ base.proxy_class.should == ManyEmbeddedProxy
51
+ end
52
+
53
+ it "should be ManyEmbeddedPolymorphicProxy for polymorphic many embedded" do
54
+ base = ManyAssociation.new(:medias, :polymorphic => true)
55
+ base.proxy_class.should == ManyEmbeddedPolymorphicProxy
56
+ end
57
+
58
+ it "should be InArrayProxy for many with :in option" do
59
+ base = ManyAssociation.new(:messages, :in => :message_ids)
60
+ base.proxy_class.should == InArrayProxy
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ module OneAssociationSpec
5
+ include MongoMapper::Plugins::Associations
6
+ describe "OneAssociation" do
7
+
8
+ context "type_key_name" do
9
+ it "should be _type" do
10
+ OneAssociation.new(:foo).type_key_name.should == '_type'
11
+ end
12
+ end
13
+
14
+ context "embeddable?" do
15
+ it "should be true if class is embeddable" do
16
+ base = OneAssociation.new(:media)
17
+ base.embeddable?.should be_true
18
+ end
19
+
20
+ it "should be false if class is not embeddable" do
21
+ base = OneAssociation.new(:project)
22
+ base.embeddable?.should be_false
23
+ end
24
+ end
25
+
26
+ context "proxy_class" do
27
+ it "should be OneProxy for one" do
28
+ base = OneAssociation.new(:status)
29
+ base.proxy_class.should == OneProxy
30
+ end
31
+
32
+ it "should be OneAsProxy for one with :as option" do
33
+ base = OneAssociation.new(:message, :as => :messagable)
34
+ base.proxy_class.should == OneAsProxy
35
+ end
36
+
37
+ it "should be OneEmbeddedProxy for one embedded" do
38
+ base = OneAssociation.new(:media)
39
+ base.proxy_class.should == OneEmbeddedProxy
40
+ end
41
+
42
+ it "should be OneEmbeddedPolymorphicProxy for polymorphic one embedded" do
43
+ base = OneAssociation.new(:media, :polymorphic => true)
44
+ base.proxy_class.should == OneEmbeddedPolymorphicProxy
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,4 +1,4 @@
1
- require 'test_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  class FakeNilProxy < MongoMapper::Plugins::Associations::Proxy
4
4
  def find_target; nil end
@@ -16,84 +16,84 @@ class FakeProxy < MongoMapper::Plugins::Associations::Proxy
16
16
  def find_target; [1, 2] end
17
17
  end
18
18
 
19
- class ProxyTest < Test::Unit::TestCase
20
- def setup
21
- @owner = mock('owner')
22
- @owner.stubs(:new?).returns(false)
23
- @association = mock('association')
24
- @association.stubs(:options).returns({:extend => []})
19
+ describe "Proxy" do
20
+ before do
21
+ @owner = double('owner')
22
+ @owner.stub(:new?).and_return(false)
23
+ @association = double('association')
24
+ @association.stub(:options).and_return({:extend => []})
25
25
 
26
26
  @proxy = FakeProxy.new(@owner, @association)
27
27
  @nil_proxy = FakeNilProxy.new(@owner, @association)
28
28
  @blank_proxy = FakeBlankProxy.new(@owner, @association)
29
29
  end
30
30
 
31
- should "set target to nil when reset is called" do
31
+ it "should set target to nil when reset is called" do
32
32
  @proxy.reset
33
33
  @proxy.target.should be_nil
34
34
  end
35
35
 
36
- should "be able to inspect the proxy" do
36
+ it "should be able to inspect the proxy" do
37
37
  @proxy.inspect.should == '[1, 2]'
38
38
  end
39
39
 
40
40
  context "nil?" do
41
- should "be true if nil" do
41
+ it "should be true if nil" do
42
42
  @nil_proxy.nil?.should be_true
43
43
  end
44
44
 
45
- should "be false if not nil" do
45
+ it "should be false if not nil" do
46
46
  @proxy.nil?.should be_false
47
47
  end
48
48
  end
49
49
 
50
50
  context "blank?" do
51
- should "be true if blank" do
51
+ it "should be true if blank" do
52
52
  @blank_proxy.blank?.should be_true
53
53
  @nil_proxy.blank?.should be_true
54
54
  end
55
55
 
56
- should "be false if not blank" do
56
+ it "should be false if not blank" do
57
57
  @proxy.blank?.should be_false
58
58
  end
59
59
  end
60
60
 
61
61
  context "present?" do
62
- should "be true if present" do
62
+ it "should be true if present" do
63
63
  @proxy.present?.should be_true
64
64
  end
65
65
 
66
- should "be false if not present" do
66
+ it "should be false if not present" do
67
67
  @blank_proxy.present?.should be_false
68
68
  @nil_proxy.present?.should be_false
69
69
  end
70
70
  end
71
71
 
72
- should "delegate respond_to? to target" do
72
+ it "should delegate respond_to? to target" do
73
73
  @proxy.respond_to?(:each).should be_true
74
74
  @proxy.respond_to?(:size).should be_true
75
75
  @proxy.respond_to?(:gsub).should be_false
76
76
  end
77
77
 
78
- should "alias proxy owner to owner" do
78
+ it "should alias proxy owner to owner" do
79
79
  @proxy.proxy_owner.should == @owner
80
80
  end
81
81
 
82
- should "alias proxy target to target" do
82
+ it "should alias proxy target to target" do
83
83
  @proxy.proxy_target.should == @target
84
84
  end
85
85
 
86
86
  context "send" do
87
- should "work if proxy responds to method" do
87
+ it "should work if proxy responds to method" do
88
88
  @proxy.send(:reset)
89
89
  @proxy.target.should be_nil
90
90
  end
91
91
 
92
- should "work if the target responds to the method" do
92
+ it "should work if the target responds to the method" do
93
93
  @proxy.send(:size).should == 2
94
94
  end
95
95
 
96
- should "not work if neither the proxy or target respond to method" do
96
+ it "should not work if neither the proxy or target respond to method" do
97
97
  lambda { @proxy.send(:gsub) }.should raise_error
98
98
  end
99
99
  end