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
@@ -1,76 +0,0 @@
1
- require 'test_helper'
2
-
3
- class SafeTest < Test::Unit::TestCase
4
- context "A Document" do
5
- should "default safe to off" do
6
- Doc().should_not be_safe
7
- end
8
-
9
- should "allow turning safe on" do
10
- Doc() { safe }.should be_safe
11
- end
12
-
13
- context "inherited with safe setting on" do
14
- should "set subclass safe setting on" do
15
- inherited = Class.new(Doc() { safe })
16
- inherited.should be_safe
17
- end
18
- end
19
-
20
- context "inherited with safe setting off" do
21
- should "leave subclass safe setting off" do
22
- inherited = Class.new(Doc())
23
- inherited.should_not be_safe
24
- end
25
- end
26
- end
27
-
28
- context "A safe document" do
29
- setup do
30
- @klass = Doc() do
31
- safe
32
- end
33
- end
34
- teardown { drop_indexes(@klass) }
35
-
36
- context "#save" do
37
- setup do
38
- @klass.ensure_index :email, :unique => true
39
- end
40
-
41
- context "using safe setting from class" do
42
- should "work fine when all is well" do
43
- assert_nothing_raised do
44
- @klass.new(:email => 'john@doe.com').save
45
- end
46
- end
47
-
48
- should "raise error when operation fails" do
49
- assert_raises(Mongo::OperationFailure) do
50
- 2.times do
51
- @klass.new(:email => 'john@doe.com').save
52
- end
53
- end
54
- end
55
- end
56
-
57
- context "overriding safe setting" do
58
- should "raise error if safe is true" do
59
- assert_raises(Mongo::OperationFailure) do
60
- 2.times do
61
- @klass.new(:email => 'john@doe.com').save(:safe => true)
62
- end
63
- end
64
- end
65
-
66
- should "not raise error if safe is false" do
67
- assert_nothing_raised do
68
- 2.times do
69
- @klass.new(:email => 'john@doe.com').save(:safe => false)
70
- end
71
- end
72
- end
73
- end
74
- end
75
- end
76
- end
@@ -1,62 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TimestampsTest < Test::Unit::TestCase
4
- context "timestamping" do
5
- setup do
6
- @klass = Doc do
7
- key :first_name, String
8
- key :last_name, String
9
- key :age, Integer
10
- key :date, Date
11
- end
12
- @klass.timestamps!
13
- end
14
-
15
- should "set created_at and updated_at on create" do
16
- doc = @klass.new(:first_name => 'John', :age => 27)
17
- doc.created_at.should be(nil)
18
- doc.updated_at.should be(nil)
19
- doc.save
20
- doc.created_at.should_not be(nil)
21
- doc.updated_at.should_not be(nil)
22
- end
23
-
24
- should "not overwrite created_at if it already exists" do
25
- original_created_at = 1.month.ago
26
- doc = @klass.new(:first_name => 'John', :age => 27, :created_at => original_created_at)
27
- doc.created_at.to_i.should == original_created_at.to_i
28
- doc.updated_at.should be_nil
29
- doc.save
30
- doc.created_at.to_i.should == original_created_at.to_i
31
- doc.updated_at.should_not be_nil
32
- end
33
-
34
- should "set updated_at on field update but leave created_at alone" do
35
- doc = @klass.create(:first_name => 'John', :age => 27)
36
- old_created_at = doc.created_at
37
- old_updated_at = doc.updated_at
38
- doc.first_name = 'Johnny'
39
-
40
- Timecop.freeze(Time.now + 5.seconds) do
41
- doc.save
42
- end
43
-
44
- doc.created_at.should == old_created_at
45
- doc.updated_at.should_not == old_updated_at
46
- end
47
-
48
- should "set updated_at on document update but leave created_at alone" do
49
- doc = @klass.create(:first_name => 'John', :age => 27)
50
- old_created_at = doc.created_at.to_f
51
-
52
- new_updated_at = Time.now + 5.seconds
53
- Timecop.freeze(new_updated_at) do
54
- @klass.update(doc._id, { :first_name => 'Johnny' })
55
- end
56
-
57
- doc = doc.reload
58
- doc.created_at.to_f.should be_close(old_created_at, 0.001)
59
- doc.updated_at.to_f.should be_close(new_updated_at.to_f, 0.001)
60
- end
61
- end
62
- end
@@ -1,44 +0,0 @@
1
- require 'test_helper'
2
-
3
- class UserstampsTest < Test::Unit::TestCase
4
- class AltUser
5
- include MongoMapper::Document
6
- end
7
-
8
- context "userstamping" do
9
- setup do
10
- @document = Doc do
11
- userstamps!
12
- end
13
- @document_alt_user = Doc do
14
- userstamps! :class_name => 'AltUser'
15
- end
16
- @document_alt_user_class = Doc do
17
- userstamps! :class => AltUser
18
- end
19
- @docs = [@document, @document_alt_user, @document_alt_user_class]
20
- end
21
-
22
- should "add creator_id key" do
23
- @docs.each{ |d| d.keys.should include('creator_id') }
24
- end
25
-
26
- should "add updater_id key" do
27
- @docs.each{ |d| d.keys.should include('updater_id') }
28
- end
29
-
30
- should "add belongs_to creator" do
31
- @docs.each{ |d| d.associations.keys.should include(:creator) }
32
- end
33
-
34
- should "add belongs_to updater" do
35
- @docs.each{ |d| d.associations.keys.should include(:updater) }
36
- end
37
-
38
- should "properly set class names" do
39
- @document.associations[:creator].class_name.should == 'User'
40
- @document_alt_user.associations[:creator].class_name.should == 'AltUser'
41
- @document_alt_user_class.associations[:creator].class_name.should == 'UserstampsTest::AltUser'
42
- end
43
- end
44
- end
@@ -1,4 +0,0 @@
1
- module Railtie
2
- # We could get AS::Dependencies to autocreate this module
3
- # but let's keep it simple
4
- end
@@ -1,2 +0,0 @@
1
- class Railtie::Autoloaded < Railtie::Parent
2
- end
@@ -1,3 +0,0 @@
1
- class Railtie::NotAutoloaded < Railtie::Parent
2
-
3
- end
@@ -1,3 +0,0 @@
1
- class Railtie::Parent
2
- extend ActiveSupport::DescendantsTracker
3
- end
@@ -1,18 +0,0 @@
1
- require 'test_helper'
2
- # For testing against edge rails also.
3
- # $:.unshift '/Users/jnunemaker/dev/ruby/rails/activemodel/lib'
4
- require 'active_model'
5
- require 'models'
6
-
7
- class ActiveModelLintTest < ActiveModel::TestCase
8
- include ::ActiveModel::Lint::Tests
9
-
10
- def setup
11
- @model = Post.new
12
- end
13
-
14
- def test_naming
15
- Post.model_name.plural.should == 'posts'
16
- Post.new.respond_to?(:model_name).should be_false
17
- end
18
- end
@@ -1,93 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
-
4
- $:.unshift File.expand_path('../../lib', __FILE__)
5
- require 'mongo_mapper'
6
- require 'fileutils'
7
- require 'ostruct'
8
-
9
- Bundler.require(:default, :test)
10
-
11
- class Test::Unit::TestCase
12
- def Doc(name='Class', &block)
13
- klass = Class.new
14
- klass.class_eval do
15
- include MongoMapper::Document
16
-
17
- if name
18
- class_eval "def self.name; '#{name}' end"
19
- class_eval "def self.to_s; '#{name}' end"
20
- else
21
- set_collection_name :test
22
- end
23
- end
24
-
25
- klass.class_eval(&block) if block_given?
26
- klass.collection.remove
27
- klass
28
- end
29
-
30
- def EDoc(name='Class', &block)
31
- klass = Class.new do
32
- include MongoMapper::EmbeddedDocument
33
-
34
- if name
35
- class_eval "def self.name; '#{name}' end"
36
- class_eval "def self.to_s; '#{name}' end"
37
- end
38
- end
39
-
40
- klass.class_eval(&block) if block_given?
41
- klass
42
- end
43
-
44
- def drop_indexes(klass)
45
- if klass.database.collection_names.include?(klass.collection.name)
46
- klass.collection.drop_indexes
47
- end
48
- end
49
-
50
- custom_matcher :be_true do |receiver, matcher, args|
51
- matcher.positive_failure_message = "Expected #{receiver} to be true but it wasn't"
52
- matcher.negative_failure_message = "Expected #{receiver} not to be true but it was"
53
- receiver.eql?(true)
54
- end
55
-
56
- custom_matcher :be_false do |receiver, matcher, args|
57
- matcher.positive_failure_message = "Expected #{receiver} to be false but it wasn't"
58
- matcher.negative_failure_message = "Expected #{receiver} not to be false but it was"
59
- receiver.eql?(false)
60
- end
61
-
62
- custom_matcher :have_error_on do |receiver, matcher, args|
63
- receiver.valid?
64
- attribute = args[0]
65
- expected_message = args[1]
66
-
67
- if expected_message.nil?
68
- matcher.positive_failure_message = "#{receiver} had no errors on #{attribute}"
69
- matcher.negative_failure_message = "#{receiver} had errors on #{attribute} #{receiver.errors.inspect}"
70
- !receiver.errors[attribute].blank?
71
- else
72
- actual = receiver.errors[attribute]
73
- matcher.positive_failure_message = %Q(Expected error on #{attribute} to be "#{expected_message}" but was "#{actual}")
74
- matcher.negative_failure_message = %Q(Expected error on #{attribute} not to be "#{expected_message}" but was "#{actual}")
75
- actual.include? expected_message
76
- end
77
- end
78
-
79
- custom_matcher :have_index do |receiver, matcher, args|
80
- index_name = args[0]
81
- matcher.positive_failure_message = "#{receiver} does not have index named #{index_name}, but should"
82
- matcher.negative_failure_message = "#{receiver} does have index named #{index_name}, but should not"
83
- !receiver.collection.index_information.detect { |index| index[0] == index_name }.nil?
84
- end
85
- end
86
-
87
- log_dir = File.expand_path('../../log', __FILE__)
88
- FileUtils.mkdir_p(log_dir) unless File.exist?(log_dir)
89
- logger = Logger.new(log_dir + '/test.log')
90
-
91
- MongoMapper.connection = Mongo::Connection.new('127.0.0.1', 27017, :logger => logger)
92
- MongoMapper.database = "test"
93
- MongoMapper.database.collections.each { |c| c.drop_indexes }
@@ -1,146 +0,0 @@
1
- require 'test_helper'
2
- require 'models'
3
-
4
- class FooMonster; end
5
-
6
- class AssociationBaseTest < Test::Unit::TestCase
7
- include MongoMapper::Plugins::Associations
8
-
9
- should "initialize with type and name" do
10
- base = ManyAssociation.new(:foos)
11
- base.name.should == :foos
12
- end
13
-
14
- should "also allow options when initializing" do
15
- base = ManyAssociation.new(:foos, :polymorphic => true)
16
- base.options[:polymorphic].should be_true
17
- end
18
-
19
- context "klass" do
20
- should "default to class_name constantized" do
21
- BelongsToAssociation.new(:foo_monster).klass.should == FooMonster
22
- end
23
-
24
- should "be the specified class" do
25
- anonnymous_class = Class.new
26
- BelongsToAssociation.new(:foo_monster, :class => anonnymous_class).klass.should == anonnymous_class
27
- end
28
- end
29
-
30
- context "polymorphic?" do
31
- should "be true if polymorphic" do
32
- ManyAssociation.new(:foos, :polymorphic => true).polymorphic?.should be_true
33
- end
34
-
35
- should "be false if not polymorphic" do
36
- ManyAssociation.new(:bars).polymorphic?.should be_false
37
- end
38
- end
39
-
40
- context "as?" do
41
- should "be true if one" do
42
- OneAssociation.new(:foo, :as => :commentable).as?.should be_true
43
- end
44
-
45
- should "be false if not one" do
46
- ManyAssociation.new(:foo).as?.should be_false
47
- end
48
- end
49
-
50
- context "in_array?" do
51
- should "be true if one" do
52
- OneAssociation.new(:foo, :in => :list_ids).in_array?.should be_true
53
- end
54
-
55
- should "be false if not one" do
56
- ManyAssociation.new(:foo).in_array?.should be_false
57
- end
58
- end
59
-
60
- context "query_options" do
61
- should "default to empty hash" do
62
- base = ManyAssociation.new(:foos)
63
- base.query_options.should == {}
64
- end
65
-
66
- should "work with order" do
67
- base = ManyAssociation.new(:foos, :order => 'position')
68
- base.query_options.should == {:order => 'position'}
69
- end
70
-
71
- should "correctly parse from options" do
72
- base = ManyAssociation.new(:foos, :order => 'position', :somekey => 'somevalue')
73
- base.query_options.should == {:order => 'position', :somekey => 'somevalue'}
74
- end
75
- end
76
-
77
- context "type_key_name" do
78
- should "be association name _ type for belongs_to" do
79
- BelongsToAssociation.new(:foo).type_key_name.should == 'foo_type'
80
- end
81
- end
82
-
83
- context "foreign_key" do
84
- should "default to assocation name _id for belongs to" do
85
- base = BelongsToAssociation.new(:foo)
86
- base.foreign_key.should == 'foo_id'
87
- end
88
-
89
- should "be overridable with :foreign_key option" do
90
- base = BelongsToAssociation.new(:foo, :foreign_key => 'foobar_id')
91
- base.foreign_key.should == 'foobar_id'
92
- end
93
- end
94
-
95
- should "have ivar that is association name" do
96
- BelongsToAssociation.new(:foo).ivar.should == '@_foo'
97
- end
98
-
99
- context "embeddable?" do
100
- should "be true if class is embeddable" do
101
- base = ManyAssociation.new(:medias)
102
- base.embeddable?.should be_true
103
- end
104
-
105
- should "be false if class is not embeddable" do
106
- base = ManyAssociation.new(:statuses)
107
- base.embeddable?.should be_false
108
-
109
- base = BelongsToAssociation.new(:project)
110
- base.embeddable?.should be_false
111
- end
112
- end
113
-
114
- context "proxy_class" do
115
- should "be BelongsToProxy for belongs_to" do
116
- base = BelongsToAssociation.new(:project)
117
- base.proxy_class.should == BelongsToProxy
118
- end
119
-
120
- should "be BelongsToPolymorphicProxy for polymorphic belongs_to" do
121
- base = BelongsToAssociation.new(:target, :polymorphic => true)
122
- base.proxy_class.should == BelongsToPolymorphicProxy
123
- end
124
-
125
- should "be OneProxy for one" do
126
- base = OneAssociation.new(:status, :polymorphic => true)
127
- base.proxy_class.should == OneProxy
128
- end
129
-
130
- should "be OneEmbeddedProxy for one embedded" do
131
- base = OneAssociation.new(:media)
132
- base.proxy_class.should == OneEmbeddedProxy
133
- end
134
- end
135
-
136
- context "touch?" do
137
- should "be true if touch" do
138
- BelongsToAssociation.new(:car, :touch => true).touch?.should be_true
139
- end
140
-
141
- should "be false if not touch" do
142
- BelongsToAssociation.new(:car).touch?.should be_false
143
- end
144
- end
145
-
146
- end