dm-adjust 0.9.7 → 0.9.8

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1 +1,7 @@
1
+ === 0.9.8 / 2008-12-07
1
2
 
3
+ * 3 minor enhancements:
4
+
5
+ * Added Resource#adjust! method
6
+ * Added Resource#adjust and Model#adjust (validation respecting) stubs
7
+ * Preparations for dkubb/dm-core
data/Manifest.txt CHANGED
@@ -9,7 +9,10 @@ lib/dm-adjust/adapters/data_objects_adapter.rb
9
9
  lib/dm-adjust/collection.rb
10
10
  lib/dm-adjust/model.rb
11
11
  lib/dm-adjust/repository.rb
12
+ lib/dm-adjust/resource.rb
12
13
  lib/dm-adjust/version.rb
13
14
  spec/integration/adjust_spec.rb
14
15
  spec/spec.opts
15
16
  spec/spec_helper.rb
17
+ tasks/install.rb
18
+ tasks/spec.rb
data/README.txt CHANGED
@@ -5,8 +5,8 @@ DataMapper plugin providing methods to increment and decrement properties
5
5
 
6
6
  It provides the following function (for collections and resources):
7
7
 
8
- == adjust
8
+ == adjust!
9
9
 
10
- Person.adjust(:salary => 1000) # increases the salary of all people with 1000.
11
- Person.all(:age.gte => 40).adjust(:salary => 2000) # increase salary of them oldies.
12
- Children.adjust(:allowance => -100) # less money for candy and concerts
10
+ Person.adjust!(:salary => 1000) # increases the salary of all people with 1000.
11
+ Person.all(:age.gte => 40).adjust!(:salary => 2000) # increase salary of them oldies.
12
+ @child.adjust!(:allowance => -100) # less money for candy and concerts
data/Rakefile CHANGED
@@ -1,53 +1,25 @@
1
- require 'rubygems'
2
- require 'spec'
3
- require 'spec/rake/spectask'
4
1
  require 'pathname'
2
+ require 'rubygems'
5
3
 
6
- ROOT = Pathname(__FILE__).dirname.expand_path
7
- require ROOT + 'lib/dm-adjust/version'
8
-
9
- AUTHOR = "Sindre Aarsaether"
10
- EMAIL = "sindre [a] identu [d] no"
11
- GEM_NAME = "dm-adjust"
12
- GEM_VERSION = DataMapper::More::Adjust::VERSION
13
- GEM_DEPENDENCIES = [["dm-core", GEM_VERSION]]
14
- GEM_CLEAN = ["log", "pkg"]
15
- GEM_EXTRAS = { :has_rdoc => true, :extra_rdoc_files => %w[ README.txt LICENSE TODO ] }
16
-
17
- PROJECT_NAME = "datamapper"
18
- PROJECT_URL = "http://github.com/sam/dm-more/tree/master/dm-adjust"
19
- PROJECT_DESCRIPTION = PROJECT_SUMMARY = "DataMapper plugin providing methods to increment and decrement properties"
20
-
21
- require ROOT.parent + 'tasks/hoe'
22
-
23
- task :default => [ :spec ]
24
-
25
- WIN32 = (RUBY_PLATFORM =~ /win32|mingw|cygwin/) rescue nil
26
- SUDO = WIN32 ? '' : ('sudo' unless ENV['SUDOLESS'])
4
+ ROOT = Pathname(__FILE__).dirname.expand_path
5
+ JRUBY = RUBY_PLATFORM =~ /java/
6
+ WINDOWS = Gem.win_platform?
7
+ SUDO = (WINDOWS || JRUBY) ? '' : ('sudo' unless ENV['SUDOLESS'])
27
8
 
28
- desc "Install #{GEM_NAME} #{GEM_VERSION} (default ruby)"
29
- task :install => [ :package ] do
30
- sh "#{SUDO} gem install --local pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources", :verbose => false
31
- end
9
+ require ROOT + 'lib/dm-adjust/version'
32
10
 
33
- namespace :jruby do
34
- desc "Install #{GEM_NAME} #{GEM_VERSION} with JRuby"
35
- task :install => [ :package ] do
36
- sh %{#{SUDO} jruby -S gem install --local pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources}, :verbose => false
37
- end
38
- end
11
+ AUTHOR = 'Sindre Aarsaether'
12
+ EMAIL = 'sindre [a] identu [d] no'
13
+ GEM_NAME = 'dm-adjust'
14
+ GEM_VERSION = DataMapper::Adjust::VERSION
15
+ GEM_DEPENDENCIES = [['dm-core', "~>#{GEM_VERSION}"]]
16
+ GEM_CLEAN = %w[ log pkg coverage ]
17
+ GEM_EXTRAS = { :has_rdoc => true, :extra_rdoc_files => %w[ README.txt LICENSE TODO History.txt ] }
39
18
 
40
- desc 'Run specifications'
41
- Spec::Rake::SpecTask.new(:spec) do |t|
42
- t.spec_opts << '--options' << 'spec/spec.opts' if File.exists?('spec/spec.opts')
43
- t.spec_files = Pathname.glob((ROOT + 'spec/**/*_spec.rb').to_s)
19
+ PROJECT_NAME = 'datamapper'
20
+ PROJECT_URL = "http://github.com/sam/dm-more/tree/master/#{GEM_NAME}"
21
+ PROJECT_DESCRIPTION = PROJECT_SUMMARY = 'DataMapper plugin providing methods to increment and decrement properties'
44
22
 
45
- begin
46
- t.rcov = ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true
47
- t.rcov_opts << '--exclude' << 'spec'
48
- t.rcov_opts << '--text-summary'
49
- t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
50
- rescue Exception
51
- # rcov not installed
52
- end
23
+ [ ROOT, ROOT.parent ].each do |dir|
24
+ Pathname.glob(dir.join('tasks/**/*.rb').to_s).each { |f| require f }
53
25
  end
data/TODO CHANGED
@@ -1,6 +0,0 @@
1
- TODO
2
- ====
3
-
4
- ---
5
- TODO tickets may also be found in the DataMapper Issue Tracker:
6
- http://wm.lighthouseapp.com/projects/4819-datamapper/overview
data/lib/dm-adjust.rb CHANGED
@@ -3,7 +3,7 @@ require 'pathname'
3
3
 
4
4
  require Pathname(__FILE__).dirname + 'dm-adjust/version'
5
5
 
6
- gem 'dm-core', DataMapper::More::Adjust::VERSION
6
+ gem 'dm-core', '~>0.9.8'
7
7
  require 'dm-core'
8
8
 
9
9
  dir = Pathname(__FILE__).dirname.expand_path / 'dm-adjust'
@@ -11,4 +11,5 @@ dir = Pathname(__FILE__).dirname.expand_path / 'dm-adjust'
11
11
  require dir / 'collection'
12
12
  require dir / 'model'
13
13
  require dir / 'repository'
14
+ require dir / 'resource'
14
15
  require dir / 'adapters' / 'data_objects_adapter'
@@ -32,9 +32,16 @@ module DataMapper
32
32
  # if the query contains a raw sql-string, we cannot (truly) know, and must load.
33
33
  altered = query.conditions.detect{|c| adjust_attributes.include?(c[1]) || c[0] == :raw }
34
34
 
35
+ identity_map = repository.identity_map(model)
36
+ key_properties = model.key(repository.name)
37
+
35
38
  if identity_map.any? && reload
36
- reload_query = @key_properties.zip(identity_map.keys.transpose).to_hash
37
- reload_query = all(reload_query.merge(:fields => @key_properties)).send(:keys) if altered
39
+ reload_query = key_properties.zip(identity_map.keys.transpose).to_hash
40
+
41
+ if altered
42
+ keys = all(reload_query.merge(:fields => key_properties)).map { |r| r.key }
43
+ reload_query = model.key(repository.name).zip(keys.transpose).to_hash
44
+ end
38
45
  end
39
46
 
40
47
  repository.adjust(adjust_attributes,scoped_query)
@@ -53,8 +60,7 @@ module DataMapper
53
60
  end
54
61
  end if altered
55
62
 
56
- return true
57
-
58
- end # adjust
63
+ true
64
+ end
59
65
  end # Collection
60
66
  end # DataMapper
@@ -1,6 +1,10 @@
1
1
  module DataMapper
2
2
  module Model
3
3
 
4
+ def adjust(attributes = {}, reload = false)
5
+ raise NotImplementedError, 'adjust *with* validations has not be written yet, try adjust!'
6
+ end
7
+
4
8
  ##
5
9
  # increment or decrement attributes on all objects in a resource
6
10
  #
@@ -13,5 +17,5 @@ module DataMapper
13
17
  def adjust!(attributes,reload=false)
14
18
  all.adjust!(attributes,reload)
15
19
  end
16
- end
17
- end
20
+ end # Model
21
+ end # DataMapper
@@ -0,0 +1,23 @@
1
+ module DataMapper
2
+ module Resource
3
+ def adjust(attributes = {}, reload = false)
4
+ raise NotImplementedError, 'adjust *with* validations has not be written yet, try adjust!'
5
+ end
6
+
7
+ def adjust!(attributes = {}, reload = false)
8
+ return true if attributes.empty?
9
+
10
+ adjust_attributes = {}
11
+
12
+ model.properties(repository.name).slice(*attributes.keys).each do |property|
13
+ adjust_attributes[property] = attributes[property.name] if property
14
+ end
15
+
16
+ repository.adapter.adjust(adjust_attributes, to_query)
17
+
18
+ collection.reload(:fields => adjust_attributes.keys) if reload
19
+
20
+ true
21
+ end
22
+ end # Resource
23
+ end # DataMapper
@@ -1,7 +1,5 @@
1
1
  module DataMapper
2
- module More
3
- module Adjust
4
- VERSION = "0.9.7"
5
- end
2
+ module Adjust
3
+ VERSION = '0.9.8'
6
4
  end
7
5
  end
@@ -13,7 +13,7 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
13
13
 
14
14
  describe 'Adjust' do
15
15
 
16
- before :all do
16
+ before do
17
17
  Person.auto_migrate!(:default)
18
18
  Person.create(:name => 'George', :age => 15)
19
19
  Person.create(:name => 'Puff', :age => 18)
@@ -23,11 +23,9 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
23
23
  Person.create(:name => 'Amadeus',:age => 60)
24
24
  end
25
25
 
26
- describe 'Resource#adjust!' do
26
+ describe 'Model#adjust!' do
27
27
  it 'should adjust values' do
28
28
  repository(:default) do
29
- p = Person.get(1)
30
- p.salary.should == 20000
31
29
  Person.adjust!({:salary => 1000},true)
32
30
  Person.all.each{|p| p.salary.should == 21000}
33
31
  end
@@ -51,9 +49,20 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
51
49
 
52
50
  it 'should load the query if conditions were adjusted' do
53
51
  repository(:default) do |repos|
54
- @specific = Person.all(:salary => 25000)
52
+ @specific = Person.all(:salary => 20000)
55
53
  @specific.adjust!({:salary => 5000},true)
56
- @specific.length.should == 2
54
+ @specific.length.should == 6
55
+ end
56
+ end
57
+ end
58
+
59
+ describe 'Resource#adjust' do
60
+ it 'should adjust the value' do
61
+ repository(:default) do |repos|
62
+ p = Person.get(1)
63
+ p.salary.should == 20000
64
+ p.adjust!({:salary => 1000},true)
65
+ p.salary.should == 21000
57
66
  end
58
67
  end
59
68
  end
data/spec/spec.opts CHANGED
@@ -1,2 +1 @@
1
- --format specdoc
2
1
  --colour
data/spec/spec_helper.rb CHANGED
@@ -1,21 +1,18 @@
1
- require 'rubygems'
2
1
  require 'pathname'
2
+ require 'rubygems'
3
+
3
4
  require Pathname(__FILE__).dirname.expand_path.parent + 'lib/dm-adjust'
4
5
 
5
6
  def load_driver(name, default_uri)
6
7
  return false if ENV['ADAPTER'] != name.to_s
7
8
 
8
- lib = "do_#{name}"
9
-
10
9
  begin
11
- gem lib, '~>0.9.7'
12
- require lib
13
10
  DataMapper.setup(name, ENV["#{name.to_s.upcase}_SPEC_URI"] || default_uri)
14
11
  DataMapper::Repository.adapters[:default] = DataMapper::Repository.adapters[name]
15
12
  # DataObjects::Sqlite3.logger = DataObjects::Logger.new(Pathname(__FILE__).dirname+'dm.log',0)
16
13
  true
17
- rescue Gem::LoadError => e
18
- warn "Could not load #{lib}: #{e}"
14
+ rescue LoadError => e
15
+ warn "Could not load do_#{name}: #{e}"
19
16
  false
20
17
  end
21
18
  end
data/tasks/install.rb ADDED
@@ -0,0 +1,13 @@
1
+ def sudo_gem(cmd)
2
+ sh "#{SUDO} #{RUBY} -S gem #{cmd}", :verbose => false
3
+ end
4
+
5
+ desc "Install #{GEM_NAME} #{GEM_VERSION}"
6
+ task :install => [ :package ] do
7
+ sudo_gem "install --local pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources"
8
+ end
9
+
10
+ desc "Uninstall #{GEM_NAME} #{GEM_VERSION}"
11
+ task :uninstall => [ :clobber ] do
12
+ sudo_gem "uninstall #{GEM_NAME} -v#{GEM_VERSION} -Ix"
13
+ end
data/tasks/spec.rb ADDED
@@ -0,0 +1,25 @@
1
+ begin
2
+ gem 'rspec', '~>1.1.11'
3
+ require 'spec'
4
+ require 'spec/rake/spectask'
5
+
6
+ task :default => [ :spec ]
7
+
8
+ desc 'Run specifications'
9
+ Spec::Rake::SpecTask.new(:spec) do |t|
10
+ t.spec_opts << '--options' << 'spec/spec.opts' if File.exists?('spec/spec.opts')
11
+ t.spec_files = Pathname.glob((ROOT + 'spec/**/*_spec.rb').to_s)
12
+
13
+ begin
14
+ gem 'rcov', '~>0.8'
15
+ t.rcov = JRUBY ? false : (ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true)
16
+ t.rcov_opts << '--exclude' << 'spec'
17
+ t.rcov_opts << '--text-summary'
18
+ t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
19
+ rescue LoadError
20
+ # rcov not installed
21
+ end
22
+ end
23
+ rescue LoadError
24
+ # rspec not installed
25
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm-adjust
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.7
4
+ version: 0.9.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sindre Aarsaether
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-11-18 00:00:00 -08:00
12
+ date: 2008-12-07 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -18,19 +18,9 @@ dependencies:
18
18
  version_requirement:
19
19
  version_requirements: !ruby/object:Gem::Requirement
20
20
  requirements:
21
- - - "="
21
+ - - ~>
22
22
  - !ruby/object:Gem::Version
23
- version: 0.9.7
24
- version:
25
- - !ruby/object:Gem::Dependency
26
- name: hoe
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 1.8.2
23
+ version: 0.9.8
34
24
  version:
35
25
  description: DataMapper plugin providing methods to increment and decrement properties
36
26
  email:
@@ -43,6 +33,7 @@ extra_rdoc_files:
43
33
  - README.txt
44
34
  - LICENSE
45
35
  - TODO
36
+ - History.txt
46
37
  files:
47
38
  - History.txt
48
39
  - LICENSE
@@ -55,10 +46,13 @@ files:
55
46
  - lib/dm-adjust/collection.rb
56
47
  - lib/dm-adjust/model.rb
57
48
  - lib/dm-adjust/repository.rb
49
+ - lib/dm-adjust/resource.rb
58
50
  - lib/dm-adjust/version.rb
59
51
  - spec/integration/adjust_spec.rb
60
52
  - spec/spec.opts
61
53
  - spec/spec_helper.rb
54
+ - tasks/install.rb
55
+ - tasks/spec.rb
62
56
  has_rdoc: true
63
57
  homepage: http://github.com/sam/dm-more/tree/master/dm-adjust
64
58
  post_install_message: