dm-core 0.9.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/.autotest +26 -0
  2. data/{CHANGELOG → History.txt} +78 -77
  3. data/Manifest.txt +123 -0
  4. data/{README → README.txt} +0 -0
  5. data/Rakefile +29 -0
  6. data/SPECS +63 -0
  7. data/TODO +1 -0
  8. data/lib/dm-core.rb +6 -1
  9. data/lib/dm-core/adapters/data_objects_adapter.rb +29 -32
  10. data/lib/dm-core/adapters/mysql_adapter.rb +1 -1
  11. data/lib/dm-core/adapters/postgres_adapter.rb +1 -1
  12. data/lib/dm-core/adapters/sqlite3_adapter.rb +2 -2
  13. data/lib/dm-core/associations.rb +26 -0
  14. data/lib/dm-core/associations/many_to_many.rb +34 -25
  15. data/lib/dm-core/associations/many_to_one.rb +4 -4
  16. data/lib/dm-core/associations/one_to_many.rb +48 -13
  17. data/lib/dm-core/associations/one_to_one.rb +4 -4
  18. data/lib/dm-core/associations/relationship.rb +144 -42
  19. data/lib/dm-core/associations/relationship_chain.rb +31 -24
  20. data/lib/dm-core/auto_migrations.rb +0 -4
  21. data/lib/dm-core/collection.rb +40 -7
  22. data/lib/dm-core/dependency_queue.rb +31 -0
  23. data/lib/dm-core/hook.rb +2 -2
  24. data/lib/dm-core/is.rb +2 -2
  25. data/lib/dm-core/logger.rb +10 -10
  26. data/lib/dm-core/model.rb +94 -41
  27. data/lib/dm-core/property.rb +72 -41
  28. data/lib/dm-core/property_set.rb +8 -14
  29. data/lib/dm-core/query.rb +34 -9
  30. data/lib/dm-core/repository.rb +0 -0
  31. data/lib/dm-core/resource.rb +13 -13
  32. data/lib/dm-core/scope.rb +25 -2
  33. data/lib/dm-core/type.rb +3 -3
  34. data/lib/dm-core/types/discriminator.rb +10 -8
  35. data/lib/dm-core/types/object.rb +4 -0
  36. data/lib/dm-core/types/paranoid_boolean.rb +15 -4
  37. data/lib/dm-core/types/paranoid_datetime.rb +15 -4
  38. data/lib/dm-core/version.rb +3 -0
  39. data/script/all +5 -0
  40. data/script/performance.rb +191 -0
  41. data/script/profile.rb +86 -0
  42. data/spec/integration/association_spec.rb +288 -204
  43. data/spec/integration/association_through_spec.rb +9 -3
  44. data/spec/integration/associations/many_to_many_spec.rb +97 -31
  45. data/spec/integration/associations/many_to_one_spec.rb +41 -6
  46. data/spec/integration/associations/one_to_many_spec.rb +18 -2
  47. data/spec/integration/auto_migrations_spec.rb +0 -0
  48. data/spec/integration/collection_spec.rb +89 -42
  49. data/spec/integration/dependency_queue_spec.rb +58 -0
  50. data/spec/integration/model_spec.rb +67 -8
  51. data/spec/integration/postgres_adapter_spec.rb +19 -20
  52. data/spec/integration/property_spec.rb +17 -8
  53. data/spec/integration/query_spec.rb +273 -191
  54. data/spec/integration/resource_spec.rb +108 -10
  55. data/spec/integration/strategic_eager_loading_spec.rb +138 -0
  56. data/spec/integration/transaction_spec.rb +3 -3
  57. data/spec/integration/type_spec.rb +121 -0
  58. data/spec/lib/logging_helper.rb +18 -0
  59. data/spec/lib/model_loader.rb +91 -0
  60. data/spec/lib/publicize_methods.rb +28 -0
  61. data/spec/models/vehicles.rb +34 -0
  62. data/spec/models/zoo.rb +48 -0
  63. data/spec/spec.opts +3 -0
  64. data/spec/spec_helper.rb +25 -62
  65. data/spec/unit/adapters/data_objects_adapter_spec.rb +1 -0
  66. data/spec/unit/associations/many_to_many_spec.rb +3 -0
  67. data/spec/unit/associations/many_to_one_spec.rb +9 -1
  68. data/spec/unit/associations/one_to_many_spec.rb +12 -4
  69. data/spec/unit/associations/relationship_spec.rb +19 -15
  70. data/spec/unit/associations_spec.rb +37 -0
  71. data/spec/unit/collection_spec.rb +8 -0
  72. data/spec/unit/data_mapper_spec.rb +14 -0
  73. data/spec/unit/model_spec.rb +2 -2
  74. data/spec/unit/property_set_spec.rb +0 -13
  75. data/spec/unit/property_spec.rb +92 -21
  76. data/spec/unit/query_spec.rb +49 -4
  77. data/spec/unit/resource_spec.rb +122 -60
  78. data/spec/unit/scope_spec.rb +11 -0
  79. data/tasks/ci.rb +68 -0
  80. data/tasks/dm.rb +63 -0
  81. data/tasks/doc.rb +20 -0
  82. data/tasks/hoe.rb +38 -0
  83. data/tasks/install.rb +20 -0
  84. metadata +63 -22
@@ -75,6 +75,17 @@ describe DataMapper::Scope do
75
75
  Article.query.should be_nil
76
76
  end
77
77
  end
78
+
79
+ it "should ignore the default_scope when using an exclusive scope" do
80
+ Article.default_scope.update(:blog_id => 1)
81
+ Article.publicize_methods do
82
+ Article.with_exclusive_scope(:author => 'dkubb') do
83
+ Article.query.should == DataMapper::Query.new(repository(:mock), Article, :author => 'dkubb')
84
+ end
85
+ end
86
+ Article.default_scope.delete(:blog_id)
87
+ end
88
+
78
89
  end
79
90
 
80
91
  describe '.scope_stack' do
data/tasks/ci.rb ADDED
@@ -0,0 +1,68 @@
1
+ task 'ci:doc' => :doc
2
+
3
+ namespace :ci do
4
+
5
+ task :prepare do
6
+ rm_rf ROOT + "ci"
7
+ mkdir_p ROOT + "ci"
8
+ mkdir_p ROOT + "ci/doc"
9
+ mkdir_p ROOT + "ci/cyclomatic"
10
+ mkdir_p ROOT + "ci/token"
11
+ end
12
+
13
+ Spec::Rake::SpecTask.new("spec:unit" => :prepare) do |t|
14
+ t.spec_opts = ["--format", "specdoc", "--format", "html:#{ROOT}/ci/unit_rspec_report.html", "--diff"]
15
+ t.spec_files = Pathname.glob(ROOT + "spec/unit/**/*_spec.rb")
16
+ unless ENV['NO_RCOV']
17
+ t.rcov = true
18
+ t.rcov_opts << '--exclude' << "spec,gems"
19
+ t.rcov_opts << '--text-summary'
20
+ t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
21
+ t.rcov_opts << '--only-uncovered'
22
+ end
23
+ end
24
+
25
+ Spec::Rake::SpecTask.new("spec:integration" => :prepare) do |t|
26
+ t.spec_opts = ["--format", "specdoc", "--format", "html:#{ROOT}/ci/integration_rspec_report.html", "--diff"]
27
+ t.spec_files = Pathname.glob(ROOT + "spec/integration/**/*_spec.rb")
28
+ unless ENV['NO_RCOV']
29
+ t.rcov = true
30
+ t.rcov_opts << '--exclude' << "spec,gems"
31
+ t.rcov_opts << '--text-summary'
32
+ t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
33
+ t.rcov_opts << '--only-uncovered'
34
+ end
35
+ end
36
+
37
+ task :spec do
38
+ Rake::Task["ci:spec:unit"].invoke
39
+ mv ROOT + "coverage", ROOT + "ci/unit_coverage"
40
+
41
+ Rake::Task["ci:spec:integration"].invoke
42
+ mv ROOT + "coverage", ROOT + "ci/integration_coverage"
43
+ end
44
+
45
+ task :saikuro => :prepare do
46
+ system "saikuro -c -i lib -y 0 -w 10 -e 15 -o ci/cyclomatic"
47
+ mv 'ci/cyclomatic/index_cyclo.html', 'ci/cyclomatic/index.html'
48
+
49
+ system "saikuro -t -i lib -y 0 -w 20 -e 30 -o ci/token"
50
+ mv 'ci/token/index_token.html', 'ci/token/index.html'
51
+ end
52
+
53
+ task :publish do
54
+ out = ENV['CC_BUILD_ARTIFACTS'] || "out"
55
+ mkdir_p out unless File.directory? out
56
+
57
+ mv "ci/unit_rspec_report.html", "#{out}/unit_rspec_report.html"
58
+ mv "ci/unit_coverage", "#{out}/unit_coverage"
59
+ mv "ci/integration_rspec_report.html", "#{out}/integration_rspec_report.html"
60
+ mv "ci/integration_coverage", "#{out}/integration_coverage"
61
+ mv "ci/doc", "#{out}/doc"
62
+ mv "ci/cyclomatic", "#{out}/cyclomatic_complexity"
63
+ mv "ci/token", "#{out}/token_complexity"
64
+ end
65
+ end
66
+
67
+ #task :ci => %w[ ci:spec ci:doc ci:saikuro install ci:publish ] # yard-related tasks do not work yet
68
+ task :ci => %w[ ci:spec ci:saikuro install ]
data/tasks/dm.rb ADDED
@@ -0,0 +1,63 @@
1
+ task :default => 'dm:spec'
2
+ task :spec => 'dm:spec'
3
+ task :rcov => 'dm:rcov'
4
+
5
+ namespace :spec do
6
+ task :unit => 'dm:spec:unit'
7
+ task :integration => 'dm:spec:integration'
8
+ end
9
+
10
+ namespace :rcov do
11
+ task :unit => 'dm:rcov:unit'
12
+ task :integration => 'dm:rcov:integration'
13
+ end
14
+
15
+ namespace :dm do
16
+ def run_spec(name, files, rcov)
17
+ Spec::Rake::SpecTask.new(name) do |t|
18
+ t.spec_opts << '--colour' << '--loadby' << 'random'
19
+ t.spec_files = Pathname.glob(ENV['FILES'] || files)
20
+ t.rcov = rcov
21
+ t.rcov_opts << '--exclude' << 'spec,environment.rb'
22
+ t.rcov_opts << '--text-summary'
23
+ t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
24
+ t.rcov_opts << '--only-uncovered'
25
+ end
26
+ end
27
+
28
+ unit_specs = ROOT + 'spec/unit/**/*_spec.rb'
29
+ integration_specs = ROOT + 'spec/integration/**/*_spec.rb'
30
+ all_specs = ROOT + 'spec/**/*_spec.rb'
31
+
32
+ desc "Run all specifications"
33
+ run_spec('spec', all_specs, false)
34
+
35
+ desc "Run all specifications with rcov"
36
+ run_spec('rcov', all_specs, true)
37
+
38
+ namespace :spec do
39
+ desc "Run unit specifications"
40
+ run_spec('unit', unit_specs, false)
41
+
42
+ desc "Run integration specifications"
43
+ run_spec('integration', integration_specs, false)
44
+ end
45
+
46
+ namespace :rcov do
47
+ desc "Run unit specifications with rcov"
48
+ run_spec('unit', unit_specs, true)
49
+
50
+ desc "Run integration specifications with rcov"
51
+ run_spec('integration', integration_specs, true)
52
+ end
53
+
54
+ desc "Run all comparisons with ActiveRecord"
55
+ task :perf do
56
+ sh ROOT + 'script/performance.rb'
57
+ end
58
+
59
+ desc "Profile DataMapper"
60
+ task :profile do
61
+ sh ROOT + 'script/profile.rb'
62
+ end
63
+ end
data/tasks/doc.rb ADDED
@@ -0,0 +1,20 @@
1
+ # when yard's ready, it'll have to come back, but for now...
2
+ Rake::RDocTask.new("doc") do |t|
3
+ t.rdoc_dir = 'doc'
4
+ t.title = "DataMapper - Ruby Object Relational Mapper"
5
+ t.options = ['--line-numbers', '--inline-source', '--all']
6
+ t.rdoc_files.include("README.txt", "QUICKLINKS", "FAQ", "lib/**/**/*.rb")
7
+ end
8
+
9
+ begin
10
+ gem 'yard', '>=0.2.1'
11
+ require 'yard'
12
+
13
+ YARD::Rake::YardocTask.new("yardoc") do |t|
14
+ t.options << '--protected'
15
+ # t.options << '-q'
16
+ # t.files << '...anyglobshere...'
17
+ end
18
+ rescue Exception
19
+ # yard not installed
20
+ end
data/tasks/hoe.rb ADDED
@@ -0,0 +1,38 @@
1
+ require 'hoe'
2
+
3
+ @config_file = "~/.rubyforge/user-config.yml"
4
+ @config = nil
5
+ RUBYFORGE_USERNAME = "unknown"
6
+ def rubyforge_username
7
+ unless @config
8
+ begin
9
+ @config = YAML.load(File.read(File.expand_path(@config_file)))
10
+ rescue
11
+ puts <<-EOS
12
+ ERROR: No rubyforge config file found: #{@config_file}
13
+ Run 'rubyforge setup' to prepare your env for access to Rubyforge
14
+ - See http://newgem.rubyforge.org/rubyforge.html for more details
15
+ EOS
16
+ exit
17
+ end
18
+ end
19
+ RUBYFORGE_USERNAME.replace @config["username"]
20
+ end
21
+
22
+ hoe = Hoe.new(GEM_NAME, GEM_VERSION) do |p|
23
+
24
+ p.developer(AUTHOR, EMAIL)
25
+
26
+ p.description = PROJECT_DESCRIPTION
27
+ p.summary = PROJECT_SUMMARY
28
+ p.url = PROJECT_URL
29
+
30
+ p.rubyforge_name = PROJECT_NAME if PROJECT_NAME
31
+
32
+ p.clean_globs |= ["{coverage,doc,log}/", "**/*.db", "profile_results.*", "**/.*.sw?", "*.gem", ".config", "**/.DS_Store"]
33
+
34
+ GEM_DEPENDENCIES.each do |dep|
35
+ p.extra_deps << dep
36
+ end
37
+
38
+ end
data/tasks/install.rb ADDED
@@ -0,0 +1,20 @@
1
+ WIN32 = (RUBY_PLATFORM =~ /win32|mingw|bccwin|cygwin/) rescue nil
2
+ SUDO = WIN32 ? '' : ('sudo' unless ENV['SUDOLESS'])
3
+
4
+ desc "Install #{GEM_NAME}"
5
+ if WIN32
6
+ task :install => :gem do
7
+ system %{gem install --no-rdoc --no-ri -l pkg/#{GEM_NAME}-#{GEM_VERSION}.gem}
8
+ end
9
+ namespace :dev do
10
+ desc 'Install for development (for windows)'
11
+ task :winstall => :gem do
12
+ warn "You can now call 'rake install' instead of 'rake dev:winstall'."
13
+ system %{gem install --no-rdoc --no-ri -l pkg/#{GEM_NAME}-#{GEM_VERSION}.gem}
14
+ end
15
+ end
16
+ else
17
+ task :install => :package do
18
+ sh %{#{SUDO} gem install --local pkg/#{GEM_NAME}-#{GEM_VERSION}.gem}
19
+ end
20
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Smoot
@@ -9,29 +9,32 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-06-25 00:00:00 -05:00
12
+ date: 2008-07-24 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: data_objects
17
+ type: :runtime
17
18
  version_requirement:
18
19
  version_requirements: !ruby/object:Gem::Requirement
19
20
  requirements:
20
21
  - - "="
21
22
  - !ruby/object:Gem::Version
22
- version: 0.9.2
23
+ version: 0.9.3
23
24
  version:
24
25
  - !ruby/object:Gem::Dependency
25
26
  name: extlib
27
+ type: :runtime
26
28
  version_requirement:
27
29
  version_requirements: !ruby/object:Gem::Requirement
28
30
  requirements:
29
31
  - - "="
30
32
  - !ruby/object:Gem::Version
31
- version: 0.9.2
33
+ version: 0.9.3
32
34
  version:
33
35
  - !ruby/object:Gem::Dependency
34
36
  name: rspec
37
+ type: :runtime
35
38
  version_requirement:
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
@@ -41,6 +44,7 @@ dependencies:
41
44
  version:
42
45
  - !ruby/object:Gem::Dependency
43
46
  name: addressable
47
+ type: :runtime
44
48
  version_requirement:
45
49
  version_requirements: !ruby/object:Gem::Requirement
46
50
  requirements:
@@ -48,35 +52,55 @@ dependencies:
48
52
  - !ruby/object:Gem::Version
49
53
  version: 1.0.4
50
54
  version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: hoe
57
+ type: :development
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 1.7.0
64
+ version:
51
65
  description: Faster, Better, Simpler.
52
- email: ssmoot@gmail.com
66
+ email:
67
+ - ssmoot@gmail.com
53
68
  executables: []
54
69
 
55
70
  extensions: []
56
71
 
57
- extra_rdoc_files: []
58
-
72
+ extra_rdoc_files:
73
+ - History.txt
74
+ - Manifest.txt
75
+ - README.txt
59
76
  files:
60
- - README
77
+ - .autotest
61
78
  - FAQ
62
- - QUICKLINKS
63
- - CHANGELOG
79
+ - History.txt
64
80
  - MIT-LICENSE
81
+ - Manifest.txt
82
+ - QUICKLINKS
83
+ - README.txt
84
+ - Rakefile
85
+ - SPECS
86
+ - TODO
87
+ - lib/dm-core.rb
88
+ - lib/dm-core/adapters.rb
65
89
  - lib/dm-core/adapters/abstract_adapter.rb
66
90
  - lib/dm-core/adapters/data_objects_adapter.rb
67
91
  - lib/dm-core/adapters/mysql_adapter.rb
68
92
  - lib/dm-core/adapters/postgres_adapter.rb
69
93
  - lib/dm-core/adapters/sqlite3_adapter.rb
70
- - lib/dm-core/adapters.rb
94
+ - lib/dm-core/associations.rb
71
95
  - lib/dm-core/associations/many_to_many.rb
72
96
  - lib/dm-core/associations/many_to_one.rb
73
97
  - lib/dm-core/associations/one_to_many.rb
74
98
  - lib/dm-core/associations/one_to_one.rb
75
99
  - lib/dm-core/associations/relationship.rb
76
100
  - lib/dm-core/associations/relationship_chain.rb
77
- - lib/dm-core/associations.rb
78
101
  - lib/dm-core/auto_migrations.rb
79
102
  - lib/dm-core/collection.rb
103
+ - lib/dm-core/dependency_queue.rb
80
104
  - lib/dm-core/hook.rb
81
105
  - lib/dm-core/identity_map.rb
82
106
  - lib/dm-core/is.rb
@@ -91,15 +115,16 @@ files:
91
115
  - lib/dm-core/repository.rb
92
116
  - lib/dm-core/resource.rb
93
117
  - lib/dm-core/scope.rb
118
+ - lib/dm-core/support.rb
94
119
  - lib/dm-core/support/array.rb
95
120
  - lib/dm-core/support/assertions.rb
96
121
  - lib/dm-core/support/errors.rb
97
122
  - lib/dm-core/support/kernel.rb
98
123
  - lib/dm-core/support/symbol.rb
99
- - lib/dm-core/support.rb
100
124
  - lib/dm-core/transaction.rb
101
125
  - lib/dm-core/type.rb
102
126
  - lib/dm-core/type_map.rb
127
+ - lib/dm-core/types.rb
103
128
  - lib/dm-core/types/boolean.rb
104
129
  - lib/dm-core/types/discriminator.rb
105
130
  - lib/dm-core/types/object.rb
@@ -107,8 +132,10 @@ files:
107
132
  - lib/dm-core/types/paranoid_datetime.rb
108
133
  - lib/dm-core/types/serial.rb
109
134
  - lib/dm-core/types/text.rb
110
- - lib/dm-core/types.rb
111
- - lib/dm-core.rb
135
+ - lib/dm-core/version.rb
136
+ - script/all
137
+ - script/performance.rb
138
+ - script/profile.rb
112
139
  - spec/integration/association_spec.rb
113
140
  - spec/integration/association_through_spec.rb
114
141
  - spec/integration/associations/many_to_many_spec.rb
@@ -117,6 +144,7 @@ files:
117
144
  - spec/integration/auto_migrations_spec.rb
118
145
  - spec/integration/collection_spec.rb
119
146
  - spec/integration/data_objects_adapter_spec.rb
147
+ - spec/integration/dependency_queue_spec.rb
120
148
  - spec/integration/model_spec.rb
121
149
  - spec/integration/mysql_adapter_spec.rb
122
150
  - spec/integration/postgres_adapter_spec.rb
@@ -126,9 +154,16 @@ files:
126
154
  - spec/integration/resource_spec.rb
127
155
  - spec/integration/sqlite3_adapter_spec.rb
128
156
  - spec/integration/sti_spec.rb
157
+ - spec/integration/strategic_eager_loading_spec.rb
129
158
  - spec/integration/transaction_spec.rb
130
159
  - spec/integration/type_spec.rb
160
+ - spec/lib/logging_helper.rb
131
161
  - spec/lib/mock_adapter.rb
162
+ - spec/lib/model_loader.rb
163
+ - spec/lib/publicize_methods.rb
164
+ - spec/models/vehicles.rb
165
+ - spec/models/zoo.rb
166
+ - spec/spec.opts
132
167
  - spec/spec_helper.rb
133
168
  - spec/unit/adapters/abstract_adapter_spec.rb
134
169
  - spec/unit/adapters/adapter_shared_spec.rb
@@ -157,11 +192,17 @@ files:
157
192
  - spec/unit/transaction_spec.rb
158
193
  - spec/unit/type_map_spec.rb
159
194
  - spec/unit/type_spec.rb
160
- has_rdoc: false
195
+ - tasks/ci.rb
196
+ - tasks/dm.rb
197
+ - tasks/doc.rb
198
+ - tasks/hoe.rb
199
+ - tasks/install.rb
200
+ has_rdoc: true
161
201
  homepage: http://datamapper.org
162
202
  post_install_message:
163
- rdoc_options: []
164
-
203
+ rdoc_options:
204
+ - --main
205
+ - README.txt
165
206
  require_paths:
166
207
  - lib
167
208
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -176,10 +217,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
217
  - !ruby/object:Gem::Version
177
218
  version: "0"
178
219
  version:
179
- requirements:
180
- - none
181
- rubyforge_project: dm-core
182
- rubygems_version: 1.0.1
220
+ requirements: []
221
+
222
+ rubyforge_project: datamapper
223
+ rubygems_version: 1.2.0
183
224
  signing_key:
184
225
  specification_version: 2
185
226
  summary: An Object/Relational Mapper for Ruby