datamapper 0.3.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (180) hide show
  1. data/History.txt +0 -0
  2. data/Manifest.txt +5 -0
  3. data/README.txt +11 -0
  4. data/Rakefile +70 -0
  5. data/lib/datamapper.rb +8 -0
  6. metadata +152 -319
  7. data/CHANGELOG +0 -145
  8. data/FAQ +0 -96
  9. data/MIT-LICENSE +0 -22
  10. data/QUICKLINKS +0 -12
  11. data/README +0 -105
  12. data/environment.rb +0 -62
  13. data/example.rb +0 -156
  14. data/lib/data_mapper.rb +0 -88
  15. data/lib/data_mapper/adapters/abstract_adapter.rb +0 -43
  16. data/lib/data_mapper/adapters/data_object_adapter.rb +0 -480
  17. data/lib/data_mapper/adapters/mysql_adapter.rb +0 -72
  18. data/lib/data_mapper/adapters/postgresql_adapter.rb +0 -258
  19. data/lib/data_mapper/adapters/sql/coersion.rb +0 -134
  20. data/lib/data_mapper/adapters/sql/commands/load_command.rb +0 -545
  21. data/lib/data_mapper/adapters/sql/mappings/associations_set.rb +0 -34
  22. data/lib/data_mapper/adapters/sql/mappings/column.rb +0 -279
  23. data/lib/data_mapper/adapters/sql/mappings/conditions.rb +0 -172
  24. data/lib/data_mapper/adapters/sql/mappings/schema.rb +0 -60
  25. data/lib/data_mapper/adapters/sql/mappings/table.rb +0 -459
  26. data/lib/data_mapper/adapters/sql/quoting.rb +0 -24
  27. data/lib/data_mapper/adapters/sqlite3_adapter.rb +0 -159
  28. data/lib/data_mapper/associations.rb +0 -106
  29. data/lib/data_mapper/associations/belongs_to_association.rb +0 -160
  30. data/lib/data_mapper/associations/has_and_belongs_to_many_association.rb +0 -437
  31. data/lib/data_mapper/associations/has_many_association.rb +0 -283
  32. data/lib/data_mapper/associations/has_n_association.rb +0 -143
  33. data/lib/data_mapper/associations/reference.rb +0 -47
  34. data/lib/data_mapper/attributes.rb +0 -73
  35. data/lib/data_mapper/auto_migrations.rb +0 -36
  36. data/lib/data_mapper/base.rb +0 -17
  37. data/lib/data_mapper/callbacks.rb +0 -107
  38. data/lib/data_mapper/context.rb +0 -112
  39. data/lib/data_mapper/database.rb +0 -234
  40. data/lib/data_mapper/dependency_queue.rb +0 -28
  41. data/lib/data_mapper/embedded_value.rb +0 -145
  42. data/lib/data_mapper/identity_map.rb +0 -47
  43. data/lib/data_mapper/is/tree.rb +0 -121
  44. data/lib/data_mapper/migration.rb +0 -155
  45. data/lib/data_mapper/persistence.rb +0 -852
  46. data/lib/data_mapper/property.rb +0 -310
  47. data/lib/data_mapper/query.rb +0 -164
  48. data/lib/data_mapper/support/blank.rb +0 -35
  49. data/lib/data_mapper/support/connection_pool.rb +0 -117
  50. data/lib/data_mapper/support/enumerable.rb +0 -35
  51. data/lib/data_mapper/support/errors.rb +0 -16
  52. data/lib/data_mapper/support/inflector.rb +0 -265
  53. data/lib/data_mapper/support/object.rb +0 -54
  54. data/lib/data_mapper/support/serialization.rb +0 -96
  55. data/lib/data_mapper/support/silence.rb +0 -10
  56. data/lib/data_mapper/support/string.rb +0 -72
  57. data/lib/data_mapper/support/struct.rb +0 -7
  58. data/lib/data_mapper/support/symbol.rb +0 -82
  59. data/lib/data_mapper/support/typed_set.rb +0 -65
  60. data/lib/data_mapper/types/base.rb +0 -44
  61. data/lib/data_mapper/types/string.rb +0 -34
  62. data/lib/data_mapper/validatable_extensions/errors.rb +0 -12
  63. data/lib/data_mapper/validatable_extensions/macros.rb +0 -7
  64. data/lib/data_mapper/validatable_extensions/validatable_instance_methods.rb +0 -62
  65. data/lib/data_mapper/validatable_extensions/validation_base.rb +0 -18
  66. data/lib/data_mapper/validatable_extensions/validations/formats/email.rb +0 -43
  67. data/lib/data_mapper/validatable_extensions/validations/validates_acceptance_of.rb +0 -7
  68. data/lib/data_mapper/validatable_extensions/validations/validates_confirmation_of.rb +0 -7
  69. data/lib/data_mapper/validatable_extensions/validations/validates_each.rb +0 -7
  70. data/lib/data_mapper/validatable_extensions/validations/validates_format_of.rb +0 -28
  71. data/lib/data_mapper/validatable_extensions/validations/validates_length_of.rb +0 -15
  72. data/lib/data_mapper/validatable_extensions/validations/validates_numericality_of.rb +0 -7
  73. data/lib/data_mapper/validatable_extensions/validations/validates_presence_of.rb +0 -7
  74. data/lib/data_mapper/validatable_extensions/validations/validates_true_for.rb +0 -7
  75. data/lib/data_mapper/validatable_extensions/validations/validates_uniqueness_of.rb +0 -40
  76. data/lib/data_mapper/validations.rb +0 -20
  77. data/lib/data_mapper/validations/number_validator.rb +0 -40
  78. data/lib/data_mapper/validations/string_validator.rb +0 -20
  79. data/lib/data_mapper/validations/validator.rb +0 -13
  80. data/performance.rb +0 -307
  81. data/plugins/can_has_sphinx/LICENSE +0 -23
  82. data/plugins/can_has_sphinx/README +0 -4
  83. data/plugins/can_has_sphinx/REVISION +0 -1
  84. data/plugins/can_has_sphinx/Rakefile +0 -22
  85. data/plugins/can_has_sphinx/init.rb +0 -1
  86. data/plugins/can_has_sphinx/install.rb +0 -1
  87. data/plugins/can_has_sphinx/lib/acts_as_sphinx.rb +0 -123
  88. data/plugins/can_has_sphinx/lib/sphinx.rb +0 -460
  89. data/plugins/can_has_sphinx/scripts/sphinx.sh +0 -47
  90. data/plugins/can_has_sphinx/tasks/acts_as_sphinx_tasks.rake +0 -41
  91. data/profile_data_mapper.rb +0 -40
  92. data/rakefile.rb +0 -159
  93. data/spec/acts_as_tree_spec.rb +0 -67
  94. data/spec/adapters/data_object_adapter_spec.rb +0 -31
  95. data/spec/associations/belongs_to_association_spec.rb +0 -98
  96. data/spec/associations/has_and_belongs_to_many_association_spec.rb +0 -377
  97. data/spec/associations/has_many_association_spec.rb +0 -337
  98. data/spec/attributes_spec.rb +0 -52
  99. data/spec/auto_migrations_spec.rb +0 -101
  100. data/spec/callbacks_spec.rb +0 -186
  101. data/spec/can_has_sphinx.rb +0 -5
  102. data/spec/coersion_spec.rb +0 -41
  103. data/spec/column_spec.rb +0 -114
  104. data/spec/count_command_spec.rb +0 -45
  105. data/spec/database_spec.rb +0 -18
  106. data/spec/dataobjects_spec.rb +0 -27
  107. data/spec/delete_command_spec.rb +0 -11
  108. data/spec/dependency_spec.rb +0 -29
  109. data/spec/embedded_value_spec.rb +0 -161
  110. data/spec/fixtures/animals.yaml +0 -33
  111. data/spec/fixtures/animals_exhibits.yaml +0 -2
  112. data/spec/fixtures/careers.yaml +0 -5
  113. data/spec/fixtures/comments.yaml +0 -1
  114. data/spec/fixtures/exhibits.yaml +0 -90
  115. data/spec/fixtures/fruit.yaml +0 -6
  116. data/spec/fixtures/people.yaml +0 -37
  117. data/spec/fixtures/posts.yaml +0 -3
  118. data/spec/fixtures/projects.yaml +0 -13
  119. data/spec/fixtures/sections.yaml +0 -5
  120. data/spec/fixtures/serializers.yaml +0 -6
  121. data/spec/fixtures/tasks.yaml +0 -6
  122. data/spec/fixtures/tasks_tasks.yaml +0 -2
  123. data/spec/fixtures/tomatoes.yaml +0 -1
  124. data/spec/fixtures/users.yaml +0 -1
  125. data/spec/fixtures/zoos.yaml +0 -24
  126. data/spec/is_a_tree_spec.rb +0 -149
  127. data/spec/legacy_spec.rb +0 -16
  128. data/spec/load_command_spec.rb +0 -322
  129. data/spec/magic_columns_spec.rb +0 -26
  130. data/spec/migration_spec.rb +0 -267
  131. data/spec/mock_adapter.rb +0 -20
  132. data/spec/models/animal.rb +0 -12
  133. data/spec/models/candidate.rb +0 -8
  134. data/spec/models/career.rb +0 -7
  135. data/spec/models/chain.rb +0 -8
  136. data/spec/models/comment.rb +0 -6
  137. data/spec/models/exhibit.rb +0 -14
  138. data/spec/models/fence.rb +0 -7
  139. data/spec/models/fruit.rb +0 -8
  140. data/spec/models/job.rb +0 -8
  141. data/spec/models/person.rb +0 -30
  142. data/spec/models/post.rb +0 -14
  143. data/spec/models/project.rb +0 -41
  144. data/spec/models/sales_person.rb +0 -5
  145. data/spec/models/section.rb +0 -8
  146. data/spec/models/serializer.rb +0 -5
  147. data/spec/models/task.rb +0 -9
  148. data/spec/models/tomato.rb +0 -27
  149. data/spec/models/user.rb +0 -12
  150. data/spec/models/zoo.rb +0 -13
  151. data/spec/natural_key_spec.rb +0 -36
  152. data/spec/paranoia_spec.rb +0 -38
  153. data/spec/persistence_spec.rb +0 -479
  154. data/spec/postgres_spec.rb +0 -96
  155. data/spec/property_spec.rb +0 -151
  156. data/spec/query_spec.rb +0 -77
  157. data/spec/save_command_spec.rb +0 -94
  158. data/spec/schema_spec.rb +0 -8
  159. data/spec/serialize_spec.rb +0 -19
  160. data/spec/single_table_inheritance_spec.rb +0 -43
  161. data/spec/spec_helper.rb +0 -45
  162. data/spec/support/blank_spec.rb +0 -8
  163. data/spec/support/inflector_spec.rb +0 -41
  164. data/spec/support/object_spec.rb +0 -9
  165. data/spec/support/serialization_spec.rb +0 -61
  166. data/spec/support/silence_spec.rb +0 -15
  167. data/spec/support/string_spec.rb +0 -7
  168. data/spec/support/struct_spec.rb +0 -12
  169. data/spec/support/typed_set_spec.rb +0 -66
  170. data/spec/symbolic_operators_spec.rb +0 -27
  171. data/spec/table_spec.rb +0 -79
  172. data/spec/types/string.rb +0 -81
  173. data/spec/validates_confirmation_of_spec.rb +0 -55
  174. data/spec/validates_format_of_spec.rb +0 -78
  175. data/spec/validates_length_of_spec.rb +0 -117
  176. data/spec/validates_uniqueness_of_spec.rb +0 -92
  177. data/spec/validations/number_validator.rb +0 -59
  178. data/spec/validations/string_validator.rb +0 -14
  179. data/spec/validations_spec.rb +0 -141
  180. data/tasks/fixtures.rb +0 -53
@@ -1,47 +0,0 @@
1
- #!/bin/sh
2
- #
3
- # start/stop searchd server.
4
-
5
- if ! [ -x /usr/local/bin/searchd ]; then
6
- exit 0
7
- fi
8
-
9
- case "$1" in
10
- start)
11
- echo -n "Starting sphinx searchd server:"
12
- echo -n " searchd" ;
13
- /sbin/start-stop-daemon --start --quiet --pidfile /var/run/searchd.pid --chdir /etc --exec /usr/local/bin/searchd
14
- echo "."
15
- ;;
16
- stop)
17
- echo -n "Stopping sphinx searchd server:"
18
- echo -n " searchd" ;
19
- /sbin/start-stop-daemon --stop --quiet --oknodo --pidfile /var/run/searchd.pid --exec /usr/local/bin/searchd
20
- echo "."
21
- ;;
22
- reload)
23
- echo -n "Reloading sphinx searchd server:"
24
- echo -n " searchd"
25
- /sbin/start-stop-daemon --stop --quiet --oknodo --pidfile /var/run/searchd.pid --signal 1
26
- echo "."
27
- ;;
28
- force-reload)
29
- $0 reload
30
- ;;
31
- reindex)
32
- cd /etc
33
- /usr/local/bin/indexer --rotate --quiet --all
34
- ;;
35
- restart)
36
- echo -n "Restarting sphinx searchd server:"
37
- echo -n " searchd"
38
- /sbin/start-stop-daemon --stop --quiet --oknodo --pidfile /var/run/searchd.pid --exec /usr/local/bin/searchd
39
- /sbin/start-stop-daemon --start --quiet --pidfile /var/run/searchd.pid --chdir /etc --exec /usr/local/bin/searchd
40
- echo "."
41
- ;;
42
- *)
43
- echo "Usage: /etc/init.d/searchd {start|stop|reload|restart|reindex}"
44
- exit 1
45
- ;;
46
- esac
47
- exit 0
@@ -1,41 +0,0 @@
1
- namespace :sphinx do
2
- desc "Run indexer"
3
- task :index do
4
- cd 'config' do
5
- system 'indexer --all'
6
- end
7
- end
8
-
9
- desc "Rotate idendexes and restart searchd server"
10
- task :rotate do
11
- cd 'config' do
12
- system 'indexer --rotate --all'
13
- end
14
- end
15
-
16
- desc "Start searchd server"
17
- task :start do
18
- if File.exists?('/var/run/searchd.pid')
19
- puts 'Sphinx searchd server is already started.'
20
- else
21
- cd 'config' do
22
- system 'searchd'
23
- puts 'Sphinx searchd server started.'
24
- end
25
- end
26
- end
27
-
28
- desc "Stop searchd server"
29
- task :stop do
30
- unless File.exists?('/var/run/searchd.pid')
31
- puts 'Sphinx searchd server is not running.'
32
- else
33
- pid = File.read('/var/run/searchd.pid').chomp
34
- system "kill #{pid}"
35
- puts 'Sphinx searchd server stopped.'
36
- end
37
- end
38
-
39
- desc "Restart searchd server"
40
- task :restart => [:stop, :start]
41
- end
@@ -1,40 +0,0 @@
1
- #!/opt/local/bin/ruby
2
-
3
- require 'environment'
4
- require 'ruby-prof'
5
-
6
- # RubyProf, making profiling Ruby pretty since 1899!
7
- def profile(&b)
8
- result = RubyProf.profile &b
9
-
10
- printer = RubyProf::GraphHtmlPrinter.new(result)
11
- File::open('profile_results.html', 'w+') do |file|
12
- printer.print(file, 0)
13
- end
14
- end
15
-
16
- profile do
17
- 1000.times do
18
- Zoo.all.each { |zoo| zoo.name; zoo.exhibits.entries }
19
- end
20
- end
21
-
22
- puts "Done!"
23
-
24
- # require 'benchmark'
25
- #
26
- # N = 100_000
27
- #
28
- # Benchmark::bmbm do |x|
29
- # x.report do
30
- # N.times do
31
- # Inflector.underscore('DataMapper')
32
- # end
33
- # end
34
- #
35
- # x.report do
36
- # N.times do
37
- # String::memoized_underscore('DataMapper')
38
- # end
39
- # end
40
- # end
@@ -1,159 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'rubygems'
4
- require 'rake'
5
- require 'spec/rake/spectask'
6
- require 'rake/rdoctask'
7
- require 'rake/gempackagetask'
8
- require 'rake/contrib/rubyforgepublisher'
9
-
10
- Dir[File.dirname(__FILE__) + '/tasks/*'].each { |t| require(t) }
11
-
12
- task :default => 'dm:spec'
13
-
14
- task :environment => 'dm:environment'
15
-
16
- dm = namespace :dm do
17
-
18
- desc "Setup Environment"
19
- task :environment do
20
- require 'environment'
21
- end
22
-
23
- desc "Run specifications"
24
- Spec::Rake::SpecTask.new('spec') do |t|
25
- t.spec_opts = ["--format", "specdoc", "--colour"]
26
- t.spec_files = FileList[(ENV['FILES'] || 'spec/**/*_spec.rb')]
27
- unless ENV['NO_RCOV']
28
- t.rcov = true
29
- t.rcov_opts = ['--exclude', 'examples,spec,environment.rb']
30
- end
31
- end
32
-
33
- desc "Run comparison with ActiveRecord"
34
- task :perf do
35
- load 'performance.rb'
36
- end
37
-
38
- desc "Profile DataMapper"
39
- task :profile do
40
- load 'profile_data_mapper.rb'
41
- end
42
-
43
- namespace :spec do
44
- def set_model_mode(fl, mode)
45
- fl.each do |fname|
46
- contents = File.open(fname, 'r') { |f| f.read }
47
-
48
- if mode == :compat
49
- contents.gsub!(/#< DataMapper::Base #/, '< DataMapper::Base #')
50
- contents.gsub!(/include DataMapper::Persistence/, '#include DataMapper::Persistence')
51
- elsif mode == :normal
52
- contents.gsub!(/< DataMapper::Base #/, '#< DataMapper::Base #')
53
- contents.gsub!(/#include DataMapper::Persistence/, 'include DataMapper::Persistence')
54
- else
55
- raise "Unknown mode #{mode}."
56
- end
57
-
58
- File.open(fname, 'w') do |f|
59
- f.write(contents)
60
- end
61
- end
62
- end
63
-
64
- desc "Run specifications with DataMapper::Base compatibilty"
65
- task :compat do
66
- fl = FileList['spec/**/*.rb'].exclude(/\b\.svn/)
67
-
68
- set_model_mode(fl, :compat)
69
-
70
- begin
71
- dm[:spec].execute
72
- ensure
73
- set_model_mode(fl, :normal)
74
- end
75
- end
76
- end
77
- end
78
-
79
- PACKAGE_VERSION = '0.3.2'
80
-
81
- PACKAGE_FILES = FileList[
82
- 'README',
83
- 'FAQ',
84
- 'QUICKLINKS',
85
- 'CHANGELOG',
86
- 'MIT-LICENSE',
87
- '*.rb',
88
- 'lib/**/*.rb',
89
- 'spec/**/*.{rb,yaml}',
90
- 'tasks/**/*',
91
- 'plugins/**/*'
92
- ].to_a.reject { |path| path =~ /(\/db|Makefile|\.bundle|\.log|\.o)$/ }
93
-
94
- DOCUMENTED_FILES = PACKAGE_FILES.reject do |path|
95
- FileTest.directory?(path) || path =~ /(^spec|\/spec|\/swig\_)/
96
- end
97
-
98
- PROJECT = 'datamapper'
99
-
100
- task :ls do
101
- p PACKAGE_FILES
102
- end
103
-
104
- desc "Generate Documentation"
105
- rd = Rake::RDocTask.new do |rdoc|
106
- rdoc.rdoc_dir = 'doc'
107
- rdoc.title = "DataMapper -- An Object/Relational Mapper for Ruby"
108
- rdoc.options << '--line-numbers' << '--inline-source' << '--main' << 'README'
109
- rdoc.rdoc_files.include(*DOCUMENTED_FILES)
110
- end
111
-
112
- gem_spec = Gem::Specification.new do |s|
113
- s.platform = Gem::Platform::RUBY
114
- s.name = PROJECT
115
- s.summary = "An Object/Relational Mapper for Ruby"
116
- s.description = "Faster, Better, Simpler."
117
- s.version = PACKAGE_VERSION
118
-
119
- s.authors = 'Sam Smoot'
120
- s.email = 'ssmoot@gmail.com'
121
- s.rubyforge_project = PROJECT
122
- s.homepage = 'http://datamapper.org'
123
-
124
- s.files = PACKAGE_FILES
125
-
126
- s.require_path = 'lib'
127
- s.requirements << 'none'
128
- s.autorequire = 'data_mapper'
129
- s.add_dependency('fastthread')
130
- s.add_dependency('json')
131
- s.add_dependency('rspec')
132
- s.add_dependency('validatable')
133
-
134
- s.has_rdoc = true
135
- s.rdoc_options << '--line-numbers' << '--inline-source' << '--main' << 'README'
136
- s.extra_rdoc_files = DOCUMENTED_FILES
137
- end
138
-
139
- Rake::GemPackageTask.new(gem_spec) do |p|
140
- p.gem_spec = gem_spec
141
- p.need_tar = true
142
- p.need_zip = true
143
- end
144
-
145
- desc "Publish to RubyForge"
146
- task :rubyforge => [ :rdoc, :gem ] do
147
- Rake::SshDirPublisher.new("#{ENV['RUBYFORGE_USER']}@rubyforge.org", "/var/www/gforge-projects/#{PROJECT}", 'doc').upload
148
- end
149
-
150
- task :install => :package do
151
- sh %{sudo gem install pkg/#{PROJECT}-#{PACKAGE_VERSION}}
152
- end
153
-
154
- namespace :dev do
155
- desc "Install for development (for windows)"
156
- task :winstall => :gem do
157
- system %{gem install --no-rdoc --no-ri -l pkg/#{PROJECT}-#{PACKAGE_VERSION}.gem}
158
- end
159
- end
@@ -1,67 +0,0 @@
1
- require File.dirname(__FILE__) + "/spec_helper"
2
-
3
- describe('A tree') do
4
-
5
- before(:all) do
6
- class Node #< DataMapper::Base # please do not remove this
7
- include DataMapper::Persistence
8
-
9
- property :name, :string
10
-
11
- belongs_to :parent, :class => 'Node'
12
- has_many :children, :class => 'Node', :foreign_key => 'parent_id'
13
-
14
- def <=>(other)
15
- name <=> other.name
16
- end
17
- end
18
-
19
- Node.auto_migrate!
20
- end
21
-
22
- after(:all) do
23
- database.table(Node).drop!
24
- end
25
-
26
- it 'should work' do
27
- root = Node.new(:name => 'root')
28
-
29
- one = Node.new(:name => 'one')
30
- two = Node.new(:name => 'two')
31
-
32
- root.children << one << two
33
-
34
- root.parent_id.should be_nil
35
-
36
- one_one = Node.new(:name => 'one_one')
37
- one_two = Node.new(:name => 'one_two')
38
- one.children << one_one << one_two
39
-
40
- two_one = Node.new(:name => 'two_one')
41
- two_two = Node.new(:name => 'two_two')
42
- two.children << two_one << two_two
43
-
44
- root.save.should == true
45
- root.parent_id.should be_nil
46
-
47
- root.should have(2).children
48
- one.should have(2).children
49
- two.should have(2).children
50
-
51
- Node.all(:name => 'root').should have(1).entries
52
-
53
- grand = Node.first(:name => 'root')
54
-
55
- grand.should have(2).children
56
-
57
- root.should == grand # true since +root+ and +grand+ are objects with identical types and attributes.
58
- root.object_id.should_not eql(grand.object_id) # false since +root+ and +grand+ are in different sessions.
59
-
60
- grand.children.should include(one)
61
- one.reload
62
- one.children.should include(one_one)
63
-
64
- grand.children.first.children.first.should eql(one_one)
65
- end
66
-
67
- end
@@ -1,31 +0,0 @@
1
- require File.dirname(__FILE__) + "/../spec_helper"
2
-
3
- describe DataMapper::Adapters::DataObjectAdapter do
4
-
5
- before(:all) do
6
- fixtures(:zoos)
7
- end
8
-
9
- if ENV['ADAPTER'] == 'postgresql'
10
- it "should be able to be given a port" do
11
- options = {
12
- :adapter => 'postgresql',
13
- :database => 'data_mapper_1',
14
- :port => 4001
15
- }
16
- db = DataMapper::Database.setup(:my_postgres, options)
17
- db.port.should == 4001
18
- end
19
- end
20
-
21
- it "should use DB defaults when creating an empty record" do
22
- comment = Comment.create({})
23
- comment.new_record?.should be_false
24
- end
25
-
26
- it "should raise an argument error on create if an attribute value is not a primitive" do
27
- lambda { Zoo.create(:name => [nil, 'bob']) }.should raise_error(ArgumentError)
28
- end
29
-
30
- it "should accept a subclass as a valid type if the parent is a valid type"
31
- end
@@ -1,98 +0,0 @@
1
- require File.dirname(__FILE__) + "/../spec_helper"
2
-
3
- describe DataMapper::Associations::BelongsToAssociation do
4
- before(:all) do
5
- fixtures(:zoos)
6
- end
7
-
8
- before(:each) do
9
- @aviary = Exhibit.first(:name => 'Monkey Mayhem')
10
- end
11
-
12
- it "should provide a shallow_append method that doesn't impact the complementary association" do
13
- project = Project.new
14
- section = Section.new
15
- section.send(:project_association).shallow_append(project)
16
- project.sections.should be_empty
17
- end
18
-
19
- it 'has a zoo association' do
20
- @aviary.zoo.class.should == Zoo
21
- Exhibit.new.zoo.should == nil
22
- end
23
-
24
- it 'belongs to a zoo' do
25
- @aviary.zoo.should == @aviary.database_context.first(Zoo, :name => 'San Diego')
26
- end
27
-
28
- it "is assigned a zoo_id" do
29
- zoo = Zoo.first
30
- exhibit = Exhibit.new(:name => 'bob')
31
- exhibit.zoo = zoo
32
- exhibit.instance_variable_get("@zoo_id").should == zoo.id
33
-
34
- exhibit.save.should eql(true)
35
-
36
- zoo2 = Zoo.first
37
- zoo2.exhibits.should include(exhibit)
38
-
39
- exhibit.destroy!
40
-
41
- zoo = Zoo.new(:name => 'bob')
42
- bob = Exhibit.new(:name => 'bob')
43
- zoo.exhibits << bob
44
- zoo.save.should eql(true)
45
-
46
- zoo.exhibits.first.should_not be_a_new_record
47
-
48
- bob.destroy!
49
- zoo.destroy!
50
- end
51
-
52
- it "should not assign zoo_id when passed nil" do
53
- # pending "http://wm.lighthouseapp.com/projects/4819-datamapper/tickets/147"
54
- exhibit = Exhibit.first
55
- exhibit.zoo_id = nil
56
- exhibit.zoo_id.should be_nil
57
- exhibit.save.should == true
58
-
59
- exhibit.reload
60
- exhibit.zoo_id.should be_nil
61
- exhibit.zoo.should be_nil
62
- end
63
-
64
- it "should be marked dirty if the complementary association is a new_record and the instance is already saved" do
65
- zoo = Zoo.new(:name => "My Zoo")
66
- tiger = Exhibit.create(:name => "Tiger")
67
- zoo.exhibits << tiger
68
- tiger.should be_dirty
69
- end
70
-
71
- it 'can build its zoo' do
72
- database do |db|
73
- e = Exhibit.new({:name => 'Super Extra Crazy Monkey Cage'})
74
- e.zoo.should == nil
75
- e.build_zoo({:name => 'Monkey Zoo'})
76
- e.zoo.class == Zoo
77
- e.zoo.new_record?.should == true
78
-
79
- e.save
80
- end
81
- end
82
-
83
- it 'can build its zoo' do
84
- database do |db|
85
- e = Exhibit.new({:name => 'Super Extra Crazy Monkey Cage'})
86
- e.zoo.should == nil
87
- e.create_zoo({:name => 'Monkey Zoo'})
88
- e.zoo.class == Zoo
89
- e.zoo.new_record?.should == false
90
- e.save
91
- end
92
- end
93
-
94
- after(:all) do
95
- fixtures('zoos')
96
- fixtures('exhibits')
97
- end
98
- end