dm-ambition 1.0.0 → 1.1.0.rc1

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.
data/Gemfile ADDED
@@ -0,0 +1,77 @@
1
+ source 'http://rubygems.org'
2
+
3
+ DATAMAPPER = 'git://github.com/datamapper'
4
+ DM_VERSION = '~> 1.0.2'
5
+
6
+ group :runtime do
7
+
8
+ if ENV['EXTLIB']
9
+ gem 'extlib', '~> 0.9.15', SOURCE => "#{DATAMAPPER}/extlib#{REPO_POSTFIX}", :require => nil
10
+ else
11
+ gem 'activesupport', '~> 3.0.4', :require => nil
12
+ gem 'i18n', '~> 0.5.0'
13
+ end
14
+
15
+ gem 'dm-core', DM_VERSION, :git => "#{DATAMAPPER}/dm-core.git"
16
+ gem 'ParseTree', '~> 3.0.7', :platforms => :mri_18
17
+ gem 'ruby2ruby', '~> 1.2.5'
18
+ gem 'sourcify', '~> 0.4.2'
19
+
20
+ end
21
+
22
+ group :development do
23
+
24
+ gem 'dm-migrations', DM_VERSION, :git => "#{DATAMAPPER}/dm-migrations.git"
25
+ gem 'jeweler', '~> 1.5.2'
26
+ gem 'rake', '~> 0.8.7'
27
+ gem 'rspec', '~> 1.3.1'
28
+
29
+ end
30
+
31
+ platforms :mri_18 do
32
+ group :quality do
33
+
34
+ gem 'metric_fu', '~> 1.3'
35
+ gem 'rcov', '~> 0.9.9'
36
+ gem 'reek', '~> 1.2.8'
37
+ gem 'roodi', '~> 2.1'
38
+ gem 'yard', '~> 0.6'
39
+ gem 'yardstick', '~> 0.2'
40
+
41
+ end
42
+ end
43
+
44
+ group :datamapper do
45
+
46
+ adapters = ENV['ADAPTER'] || ENV['ADAPTERS']
47
+ adapters = adapters.to_s.tr(',', ' ').split.uniq - %w[ in_memory ]
48
+
49
+ DO_VERSION = '~> 0.10.2'
50
+ DM_DO_ADAPTERS = %w[ sqlite postgres mysql oracle sqlserver ]
51
+
52
+ if (do_adapters = DM_DO_ADAPTERS & adapters).any?
53
+ options = {}
54
+ options[:git] = "#{DATAMAPPER}/do.git" if ENV['DO_GIT'] == 'true'
55
+
56
+ gem 'data_objects', DO_VERSION, options.dup
57
+
58
+ do_adapters.each do |adapter|
59
+ adapter = 'sqlite3' if adapter == 'sqlite'
60
+ gem "do_#{adapter}", DO_VERSION, options.dup
61
+ end
62
+
63
+ gem 'dm-do-adapter', DM_VERSION, :git => "#{DATAMAPPER}/dm-do-adapter.git"
64
+ end
65
+
66
+ adapters.each do |adapter|
67
+ gem "dm-#{adapter}-adapter", DM_VERSION, :git => "#{DATAMAPPER}/dm-#{adapter}-adapter.git"
68
+ end
69
+
70
+ plugins = ENV['PLUGINS'] || ENV['PLUGIN']
71
+ plugins = plugins.to_s.tr(',', ' ').split.push('dm-migrations').uniq
72
+
73
+ plugins.each do |plugin|
74
+ gem plugin, DM_VERSION, :git => "#{DATAMAPPER}/#{plugin}.git"
75
+ end
76
+
77
+ end
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010 Dan Kubb
1
+ Copyright (c) 2011 Dan Kubb
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.rdoc CHANGED
@@ -7,9 +7,8 @@ accessing DataMapper models.
7
7
 
8
8
  With Rubygems:
9
9
 
10
- $ sudo gem install dm-ambition
10
+ $ gem install dm-ambition
11
11
  $ irb -rubygems
12
- >> require 'dm-core'
13
12
  >> require 'dm-ambition'
14
13
  => true
15
14
 
@@ -17,12 +16,19 @@ With git and local working copy:
17
16
 
18
17
  $ git clone git://github.com/dkubb/dm-ambition.git
19
18
  $ cd dm-ambition
20
- $ rake build && sudo rake install
19
+ $ rake install
21
20
  $ irb -rubygems
22
- >> require 'dm-core'
23
21
  >> require 'dm-ambition'
24
22
  => true
25
23
 
24
+ == Testing
25
+
26
+ The simplest way to test is with Bundler since it handles all dependencies:
27
+
28
+ $ rake local_gemfile
29
+ $ BUNDLE_GEMFILE="Gemfile.local" ADAPTER="in_memory" bundle install --without=quality --relock
30
+ $ BUNDLE_GEMFILE="Gemfile.local" ADAPTER="in_memory" bundle exec rake spec
31
+
26
32
  == Examples
27
33
 
28
34
  # with == operator
@@ -67,9 +73,12 @@ With git and local working copy:
67
73
  # with double-negated conditions
68
74
  User.select { |u| !(!(u.id == 1)) }
69
75
 
70
- # with receiver matching
76
+ # with matching from receiver
71
77
  User.select { |u| u == user }
72
78
 
79
+ # with matching to receiver
80
+ User.select { |u| user == u }
81
+
73
82
  # using send on receiver
74
83
  User.select { |u| u.send(:name) == 'Dan Kubb' }
75
84
 
@@ -96,7 +105,7 @@ With git and local working copy:
96
105
 
97
106
  == License
98
107
 
99
- Copyright (c) 2010 Dan Kubb
108
+ Copyright (c) 2011 Dan Kubb
100
109
 
101
110
  Permission is hereby granted, free of charge, to any person obtaining
102
111
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
@@ -4,7 +4,7 @@ require 'rake'
4
4
  require File.expand_path('../lib/dm-ambition/version', __FILE__)
5
5
 
6
6
  begin
7
- gem 'jeweler', '~> 1.4'
7
+ gem 'jeweler', '~> 1.5.2'
8
8
  require 'jeweler'
9
9
 
10
10
  Jeweler::Tasks.new do |gem|
@@ -14,19 +14,13 @@ begin
14
14
  gem.email = 'dan.kubb@gmail.com'
15
15
  gem.homepage = 'http://github.com/dkubb/%s' % gem.name
16
16
  gem.authors = [ 'Dan Kubb' ]
17
+ gem.has_rdoc = 'yard'
17
18
 
18
19
  gem.version = DataMapper::Ambition::VERSION
19
20
 
20
- gem.required_ruby_version = '~> 1.8.6'
21
+ gem.required_ruby_version = '~> 1.8.7'
21
22
 
22
23
  gem.rubyforge_project = 'dm-ambition'
23
-
24
- gem.add_dependency 'dm-core', '~> 1.0.0'
25
- gem.add_dependency 'ParseTree', '~> 3.0.5'
26
- gem.add_dependency 'ruby2ruby', '~> 1.2.4'
27
-
28
- gem.add_development_dependency 'dm-migrations', '~> 1.0.0'
29
- gem.add_development_dependency 'rspec', '~> 1.3'
30
24
  end
31
25
 
32
26
  Jeweler::GemcutterTasks.new
data/TODO CHANGED
@@ -0,0 +1,13 @@
1
+ * Heckle the methods to make sure that the specs cover all branches
2
+ within the code.
3
+ * The purpose of this is to make sure we have good test cases
4
+ to use with a Veritas port in the future.
5
+
6
+ * Refactor specs to use one spec file per public method
7
+
8
+ * Add to Model and Collection:
9
+ * Add #empty?
10
+ * Add #any? (handle with and without block)
11
+ * Add #all? (handle with and without block)
12
+ * Add #none? (handle with and without block) (add to LazyArray for < 1.9)
13
+ * Add #one? (handle with and without block) (add to LazyArray for < 1.9)
data/dm-ambition.gemspec CHANGED
@@ -1,90 +1,104 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{dm-ambition}
8
- s.version = "1.0.0"
8
+ s.version = "1.1.0.rc1"
9
9
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
10
+ s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Dan Kubb"]
12
- s.date = %q{2010-06-08}
12
+ s.date = %q{2011-02-28}
13
13
  s.description = %q{DataMapper plugin providing an Ambition-like API}
14
14
  s.email = %q{dan.kubb@gmail.com}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
17
- "README.rdoc",
18
- "TODO"
17
+ "README.rdoc",
18
+ "TODO"
19
19
  ]
20
20
  s.files = [
21
21
  ".document",
22
- ".gitignore",
23
- "LICENSE",
24
- "Manifest.txt",
25
- "README.rdoc",
26
- "Rakefile",
27
- "TODO",
28
- "dm-ambition.gemspec",
29
- "lib/dm-ambition.rb",
30
- "lib/dm-ambition/collection.rb",
31
- "lib/dm-ambition/model.rb",
32
- "lib/dm-ambition/query.rb",
33
- "lib/dm-ambition/query/filter_processor.rb",
34
- "lib/dm-ambition/version.rb",
35
- "spec/public/collection_spec.rb",
36
- "spec/public/model_spec.rb",
37
- "spec/public/shared/filter_shared_spec.rb",
38
- "spec/rcov.opts",
39
- "spec/semipublic/query_spec.rb",
40
- "spec/spec.opts",
41
- "spec/spec_helper.rb",
42
- "tasks/ci.rake",
43
- "tasks/clean.rake",
44
- "tasks/heckle.rake",
45
- "tasks/metrics.rake",
46
- "tasks/spec.rake",
47
- "tasks/yard.rake",
48
- "tasks/yardstick.rake"
22
+ "Gemfile",
23
+ "LICENSE",
24
+ "Manifest.txt",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "TODO",
28
+ "dm-ambition.gemspec",
29
+ "lib/dm-ambition.rb",
30
+ "lib/dm-ambition/collection.rb",
31
+ "lib/dm-ambition/model.rb",
32
+ "lib/dm-ambition/query.rb",
33
+ "lib/dm-ambition/query/filter_processor.rb",
34
+ "lib/dm-ambition/version.rb",
35
+ "spec/public/collection_spec.rb",
36
+ "spec/public/model_spec.rb",
37
+ "spec/public/shared/filter_shared_spec.rb",
38
+ "spec/rcov.opts",
39
+ "spec/semipublic/query_spec.rb",
40
+ "spec/spec.opts",
41
+ "spec/spec_helper.rb",
42
+ "tasks/ci.rake",
43
+ "tasks/clean.rake",
44
+ "tasks/heckle.rake",
45
+ "tasks/local_gemfile.rake",
46
+ "tasks/metrics.rake",
47
+ "tasks/spec.rake",
48
+ "tasks/yard.rake",
49
+ "tasks/yardstick.rake"
49
50
  ]
50
51
  s.homepage = %q{http://github.com/dkubb/dm-ambition}
51
- s.rdoc_options = ["--charset=UTF-8"]
52
52
  s.require_paths = ["lib"]
53
- s.required_ruby_version = Gem::Requirement.new("~> 1.8.6")
53
+ s.required_ruby_version = Gem::Requirement.new("~> 1.8.7")
54
54
  s.rubyforge_project = %q{dm-ambition}
55
- s.rubygems_version = %q{1.3.7}
55
+ s.rubygems_version = %q{1.5.2}
56
56
  s.summary = %q{DataMapper plugin providing an Ambition-like API}
57
57
  s.test_files = [
58
58
  "spec/public/collection_spec.rb",
59
- "spec/public/model_spec.rb",
60
- "spec/public/shared/filter_shared_spec.rb",
61
- "spec/semipublic/query_spec.rb",
62
- "spec/spec_helper.rb"
59
+ "spec/public/model_spec.rb",
60
+ "spec/public/shared/filter_shared_spec.rb",
61
+ "spec/semipublic/query_spec.rb",
62
+ "spec/spec_helper.rb"
63
63
  ]
64
64
 
65
65
  if s.respond_to? :specification_version then
66
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
67
66
  s.specification_version = 3
68
67
 
69
68
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
70
- s.add_runtime_dependency(%q<dm-core>, ["~> 1.0.0"])
71
- s.add_runtime_dependency(%q<ParseTree>, ["~> 3.0.5"])
72
- s.add_runtime_dependency(%q<ruby2ruby>, ["~> 1.2.4"])
73
- s.add_development_dependency(%q<dm-migrations>, ["~> 1.0.0"])
74
- s.add_development_dependency(%q<rspec>, ["~> 1.3"])
69
+ s.add_runtime_dependency(%q<activesupport>, ["~> 3.0.4"])
70
+ s.add_runtime_dependency(%q<i18n>, ["~> 0.5.0"])
71
+ s.add_runtime_dependency(%q<dm-core>, ["~> 1.0.2"])
72
+ s.add_runtime_dependency(%q<ParseTree>, ["~> 3.0.7"])
73
+ s.add_runtime_dependency(%q<ruby2ruby>, ["~> 1.2.5"])
74
+ s.add_runtime_dependency(%q<sourcify>, ["~> 0.4.2"])
75
+ s.add_development_dependency(%q<dm-migrations>, ["~> 1.0.2"])
76
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
77
+ s.add_development_dependency(%q<rake>, ["~> 0.8.7"])
78
+ s.add_development_dependency(%q<rspec>, ["~> 1.3.1"])
75
79
  else
76
- s.add_dependency(%q<dm-core>, ["~> 1.0.0"])
77
- s.add_dependency(%q<ParseTree>, ["~> 3.0.5"])
78
- s.add_dependency(%q<ruby2ruby>, ["~> 1.2.4"])
79
- s.add_dependency(%q<dm-migrations>, ["~> 1.0.0"])
80
- s.add_dependency(%q<rspec>, ["~> 1.3"])
80
+ s.add_dependency(%q<activesupport>, ["~> 3.0.4"])
81
+ s.add_dependency(%q<i18n>, ["~> 0.5.0"])
82
+ s.add_dependency(%q<dm-core>, ["~> 1.0.2"])
83
+ s.add_dependency(%q<ParseTree>, ["~> 3.0.7"])
84
+ s.add_dependency(%q<ruby2ruby>, ["~> 1.2.5"])
85
+ s.add_dependency(%q<sourcify>, ["~> 0.4.2"])
86
+ s.add_dependency(%q<dm-migrations>, ["~> 1.0.2"])
87
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
88
+ s.add_dependency(%q<rake>, ["~> 0.8.7"])
89
+ s.add_dependency(%q<rspec>, ["~> 1.3.1"])
81
90
  end
82
91
  else
83
- s.add_dependency(%q<dm-core>, ["~> 1.0.0"])
84
- s.add_dependency(%q<ParseTree>, ["~> 3.0.5"])
85
- s.add_dependency(%q<ruby2ruby>, ["~> 1.2.4"])
86
- s.add_dependency(%q<dm-migrations>, ["~> 1.0.0"])
87
- s.add_dependency(%q<rspec>, ["~> 1.3"])
92
+ s.add_dependency(%q<activesupport>, ["~> 3.0.4"])
93
+ s.add_dependency(%q<i18n>, ["~> 0.5.0"])
94
+ s.add_dependency(%q<dm-core>, ["~> 1.0.2"])
95
+ s.add_dependency(%q<ParseTree>, ["~> 3.0.7"])
96
+ s.add_dependency(%q<ruby2ruby>, ["~> 1.2.5"])
97
+ s.add_dependency(%q<sourcify>, ["~> 0.4.2"])
98
+ s.add_dependency(%q<dm-migrations>, ["~> 1.0.2"])
99
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
100
+ s.add_dependency(%q<rake>, ["~> 0.8.7"])
101
+ s.add_dependency(%q<rspec>, ["~> 1.3.1"])
88
102
  end
89
103
  end
90
104
 
@@ -1,73 +1,43 @@
1
- # TODO: update Collection#select in dm-core to return a Collection
2
- # TODO: update Collection#reject in dm-core to return a Collection
3
-
4
1
  module DataMapper
5
2
  module Ambition
6
3
  module Collection
7
4
  def self.included(base)
8
- base.send(:alias_method, :find_all, :select)
9
5
  base.send(:alias_method, :find, :detect)
6
+ base.send(:alias_method, :find_all, :select)
10
7
  end
11
8
 
12
- # TODO: add empty?
13
- # TODO: add any? (handle with and without block)
14
- # TODO: add all? (handle with and without block)
15
- # TODO: add none? (handle with and without block) (add to LazyArray for < 1.9)
16
- # TODO: add one? (handle with and without block) (add to LazyArray for < 1.9)
17
-
18
9
  # TODO: document this
19
10
  # @api public
20
- def select(&block)
21
- query = self.query.filter(&block)
22
-
23
- if loaded?
24
- new_collection(query, super)
25
- else
26
- collection = all(query)
27
-
28
- if head.any?
29
- collection.unshift(*head.select(&block))
30
- end
31
-
32
- if tail.any?
33
- collection.concat(tail.select(&block))
34
- end
35
-
36
- collection
37
- end
11
+ def detect(&block)
12
+ return super if loaded?
13
+ head.detect(&block) || first(query.filter(&block))
38
14
  end
39
15
 
40
16
  # TODO: document this
41
17
  # @api public
42
- def detect(&block)
43
- if loaded?
44
- super
45
- else
46
- head.detect(&block) || first(query.filter(&block))
47
- end
18
+ def select(&block)
19
+ filter_collection(:&, block) { super }
48
20
  end
49
21
 
50
22
  # TODO: document this
51
23
  # @api public
52
24
  def reject(&block)
53
- query = self.query.filter(true, &block)
54
-
55
- if loaded?
56
- new_collection(query, super)
57
- else
58
- collection = all(query)
25
+ filter_collection(:-, block) { super }
26
+ end
59
27
 
60
- if head.any?
61
- collection.unshift(*head.reject(&block))
62
- end
28
+ private
63
29
 
64
- if tail.any?
65
- collection.concat(tail.reject(&block))
66
- end
30
+ # @api private
31
+ def filter_collection(operation, block)
32
+ new_query = query.filter(&block)
33
+ return new_collection(new_query, yield) if loaded?
67
34
 
68
- collection
69
- end
35
+ collection = send(operation, all(new_query))
36
+ collection.unshift(*head.send(operation, head.select(&block)))
37
+ collection.concat(tail.send(operation, tail.select(&block)))
38
+ collection
70
39
  end
40
+
71
41
  end # module Collection
72
42
  end # module Ambition
73
43
  end # module DataMapper
@@ -23,6 +23,7 @@ module DataMapper
23
23
  def reject(&block)
24
24
  all.reject(&block)
25
25
  end
26
+
26
27
  end # module Model
27
28
  end # module Ambition
28
29
  end # module DataMapper