dm-constraints 0.9.4

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt ADDED
@@ -0,0 +1 @@
1
+
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 Dirkjan Bussink
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Manifest.txt ADDED
@@ -0,0 +1,20 @@
1
+ History.txt
2
+ LICENSE
3
+ Manifest.txt
4
+ README.txt
5
+ Rakefile
6
+ TODO
7
+ lib/dm-constraints.rb
8
+ lib/dm-constraints/data_objects_adapter.rb
9
+ lib/dm-constraints/mysql_adapter.rb
10
+ lib/dm-constraints/postgres_adapter.rb
11
+ lib/dm-constraints/version.rb
12
+ spec/integration/constraints_spec.rb
13
+ spec/spec.opts
14
+ spec/spec_helper.rb
15
+ tasks/ci.rb
16
+ tasks/dm.rb
17
+ tasks/doc.rb
18
+ tasks/gemspec.rb
19
+ tasks/hoe.rb
20
+ tasks/install.rb
data/README.txt ADDED
@@ -0,0 +1,4 @@
1
+ = dm-constraints
2
+
3
+ Plugin that adds foreign key constraints to associations.
4
+ Currently supports only PostgreSQL and MySQL
data/Rakefile ADDED
@@ -0,0 +1,26 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+ require 'spec/rake/spectask'
4
+ require 'pathname'
5
+
6
+ ROOT = Pathname(__FILE__).dirname.expand_path
7
+ require ROOT + 'lib/dm-constraints/version'
8
+
9
+ AUTHOR = "Dirkjan Bussink"
10
+ EMAIL = "d.bussink@gmail.com"
11
+ GEM_NAME = "dm-constraints"
12
+ GEM_VERSION = DataMapper::Constraints::VERSION
13
+ GEM_DEPENDENCIES = [["dm-core", GEM_VERSION]]
14
+ GEM_CLEAN = ["log", "pkg", "coverage"]
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-constraints"
19
+ PROJECT_DESCRIPTION = PROJECT_SUMMARY = "DataMapper plugin for performing validations on data models"
20
+
21
+ require ROOT + 'tasks/hoe'
22
+ require ROOT + 'tasks/gemspec'
23
+ require ROOT + 'tasks/install'
24
+ require ROOT + 'tasks/dm'
25
+ require ROOT + 'tasks/doc'
26
+ require ROOT + 'tasks/ci'
data/TODO ADDED
@@ -0,0 +1,3 @@
1
+ TODO
2
+ ====
3
+ Everything :)
@@ -0,0 +1,90 @@
1
+ module DataMapper
2
+ module Constraints
3
+ module DataObjectsAdapter
4
+ module SQL
5
+ def create_constraints_statements(repository_name, model)
6
+ model.many_to_one_relationships.map do |relationship|
7
+ table_name = model.storage_name(repository_name)
8
+ constraint_name = constraint_name(table_name, relationship.name)
9
+ next if constraint_exists?(table_name, constraint_name)
10
+
11
+ keys = relationship.child_key.map { |key| property_to_column_name(model.repository(repository_name), key, false) }
12
+ parent = relationship.parent_model
13
+ foreign_table = parent.storage_name(repository_name)
14
+ foreign_keys = parent.key.map { |key| property_to_column_name(parent.repository(repository_name), key, false) }
15
+
16
+ create_constraints_statement(table_name, constraint_name, keys, foreign_table, foreign_keys)
17
+ end.compact
18
+ end
19
+
20
+ def destroy_constraints_statements(repository_name, model)
21
+ model.many_to_one_relationships.map do |relationship|
22
+ table_name = model.storage_name(repository_name)
23
+ constraint_name = constraint_name(table_name, relationship.name)
24
+ next unless constraint_exists?(table_name, constraint_name)
25
+
26
+ destroy_constraints_statement(table_name, constraint_name)
27
+ end.compact
28
+ end
29
+
30
+ private
31
+
32
+ def create_constraints_statement(table_name, constraint_name, keys, foreign_table, foreign_keys)
33
+ <<-EOS.compress_lines
34
+ ALTER TABLE #{quote_table_name(table_name)}
35
+ ADD CONSTRAINT #{quote_constraint_name(constraint_name)}
36
+ FOREIGN KEY (#{keys * ', '})
37
+ REFERENCES #{quote_table_name(foreign_table)} (#{foreign_keys * ', '})
38
+ ON DELETE NO ACTION
39
+ ON UPDATE NO ACTION
40
+ EOS
41
+ end
42
+
43
+ def destroy_constraints_statement(table_name, constraint_name)
44
+ <<-EOS.compress_lines
45
+ ALTER TABLE #{quote_table_name(table_name)}
46
+ DROP CONSTRAINT #{quote_constraint_name(constraint_name)}
47
+ EOS
48
+ end
49
+
50
+ def constraint_name(table_name, relationship_name)
51
+ "#{table_name}_#{relationship_name}_fk"
52
+ end
53
+
54
+ def quote_constraint_name(foreign_key)
55
+ quote_table_name(foreign_key)
56
+ end
57
+ end
58
+
59
+ module Migration
60
+ def self.included(migrator)
61
+ migrator.extend(ClassMethods)
62
+ migrator.before_class_method :auto_migrate_down, :auto_migrate_constraints_down
63
+ migrator.after_class_method :auto_migrate_up, :auto_migrate_constraints_up
64
+ end
65
+
66
+ module ClassMethods
67
+ def auto_migrate_constraints_down(repository_name, *descendants)
68
+ descendants = DataMapper::Resource.descendants.to_a if descendants.empty?
69
+ descendants.each do |model|
70
+ if model.storage_exists?(repository_name)
71
+ adapter = model.repository(repository_name).adapter
72
+ statements = adapter.destroy_constraints_statements(repository_name, model)
73
+ statements.each {|stmt| adapter.execute(stmt) }
74
+ end
75
+ end
76
+ end
77
+
78
+ def auto_migrate_constraints_up(retval, repository_name, *descendants)
79
+ descendants = DataMapper::Resource.descendants.to_a if descendants.empty?
80
+ descendants.each do |model|
81
+ adapter = model.repository(repository_name).adapter
82
+ statements = adapter.create_constraints_statements(repository_name, model)
83
+ statements.each {|stmt| adapter.execute(stmt) }
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,28 @@
1
+ module DataMapper
2
+ module Constraints
3
+ module MysqlAdapter
4
+ module SQL
5
+ private
6
+
7
+ def destroy_constraints_statement(table_name, constraint_name)
8
+ <<-EOS.compress_lines
9
+ ALTER TABLE #{quote_table_name(table_name)}
10
+ DROP FOREIGN KEY #{quote_constraint_name(constraint_name)}
11
+ EOS
12
+ end
13
+
14
+ def constraint_exists?(storage_name, constraint_name)
15
+ statement = <<-EOS.compress_lines
16
+ SELECT COUNT(*)
17
+ FROM `information_schema`.`table_constraints`
18
+ WHERE `constraint_type` = 'FOREIGN KEY'
19
+ AND `table_schema` = ?
20
+ AND `table_name` = ?
21
+ AND `constraint_name` = ?
22
+ EOS
23
+ query(statement, db_name, storage_name, constraint_name).first > 0
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,20 @@
1
+ module DataMapper
2
+ module Constraints
3
+ module PostgresAdapter
4
+ module SQL
5
+ private
6
+
7
+ def constraint_exists?(storage_name, constraint_name)
8
+ statement = <<-EOS.compress_lines
9
+ SELECT COUNT(*)
10
+ FROM "information_schema"."table_constraints"
11
+ WHERE "table_schema" = current_schema()
12
+ AND "table_name" = ?
13
+ AND "constraint_name" = ?
14
+ EOS
15
+ query(statement, storage_name, constraint_name).first > 0
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,5 @@
1
+ module DataMapper
2
+ module Constraints
3
+ VERSION = "0.9.4"
4
+ end
5
+ end
@@ -0,0 +1,33 @@
1
+ # Needed to import datamapper and other gems
2
+ require 'rubygems'
3
+ require 'pathname'
4
+
5
+ # Add all external dependencies for the plugin here
6
+ gem 'dm-core', '=0.9.4'
7
+ require 'dm-core'
8
+
9
+ # Require plugin-files
10
+ require Pathname(__FILE__).dirname.expand_path / 'dm-constraints' / 'data_objects_adapter'
11
+ require Pathname(__FILE__).dirname.expand_path / 'dm-constraints' / 'postgres_adapter'
12
+ require Pathname(__FILE__).dirname.expand_path / 'dm-constraints' / 'mysql_adapter'
13
+
14
+ module DataMapper
15
+ class AutoMigrator
16
+ include Extlib::Hook
17
+ include DataMapper::Constraints::DataObjectsAdapter::Migration
18
+ end
19
+
20
+ module Adapters
21
+ class DataObjectsAdapter
22
+ include DataMapper::Constraints::DataObjectsAdapter::SQL
23
+ end
24
+
25
+ class MysqlAdapter
26
+ include DataMapper::Constraints::MysqlAdapter::SQL
27
+ end
28
+
29
+ class PostgresAdapter
30
+ include DataMapper::Constraints::PostgresAdapter::SQL
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,68 @@
1
+ require 'pathname'
2
+ require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
3
+
4
+ [HAS_MYSQL, HAS_POSTGRES].each do |adapter|
5
+
6
+ describe 'DataMapper::Constraints' do
7
+
8
+ before :all do
9
+ DataMapper::Repository.adapters[:default] = DataMapper::Repository.adapters[adapter]
10
+
11
+ class Stable
12
+ include DataMapper::Resource
13
+
14
+ property :id, Serial
15
+ property :location, String
16
+ property :size, Integer
17
+ end
18
+
19
+ class Farmer
20
+ include DataMapper::Resource
21
+
22
+ property :first_name, String, :key => true
23
+ property :last_name, String, :key => true
24
+ end
25
+
26
+ class Cow
27
+ include DataMapper::Resource
28
+ include DataMapper::Constraints
29
+
30
+ property :id, Serial
31
+ property :name, String
32
+ property :breed, String
33
+ belongs_to :stable
34
+ belongs_to :farmer
35
+ end
36
+
37
+ class Stable
38
+ has n, :cows
39
+ end
40
+
41
+ class Farmer
42
+ has n, :cows
43
+ end
44
+
45
+ DataMapper.auto_migrate!
46
+ end
47
+
48
+ it "is included when DataMapper::Searchable is loaded" do
49
+ Cow.new.should be_kind_of(DataMapper::Constraints)
50
+ end
51
+
52
+ it "should be able to create related objects with a foreign key constraint" do
53
+ @s = Stable.create(:location => "Hometown")
54
+ @c1 = Cow.create(:name => "Bea", :stable => @s)
55
+ end
56
+
57
+ it "should be able to create related objects with a composite foreign key constraint" do
58
+ @f = Farmer.create(:first_name => "John", :last_name => "Doe")
59
+ @c1 = Cow.create(:name => "Bea", :farmer => @f)
60
+ end
61
+
62
+ it "should not be able to create related objects with a failing foreign key constraint" do
63
+ s = Stable.first(:order => [:id.desc])
64
+ lambda { @c1 = Cow.create(:name => "Bea", :stable_id => s.id + 1) }.should raise_error
65
+ end
66
+
67
+ end
68
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,2 @@
1
+ --format specdoc
2
+ --colour
@@ -0,0 +1,27 @@
1
+ require 'rubygems'
2
+ gem 'rspec', '>=1.1.3'
3
+ require 'spec'
4
+ require 'pathname'
5
+
6
+ gem 'dm-core', '>=0.9.4'
7
+ require 'dm-core'
8
+
9
+ def load_driver(name, default_uri)
10
+
11
+ lib = "do_#{name}"
12
+ begin
13
+ gem lib, '>=0.9.4'
14
+ require lib
15
+ DataMapper.setup(name, ENV["#{name.to_s.upcase}_SPEC_URI"] || default_uri)
16
+ DataMapper::Repository.adapters[:default] = DataMapper::Repository.adapters[name]
17
+ name
18
+ rescue Gem::LoadError => e
19
+ warn "Could not load #{lib}: #{e}"
20
+ false
21
+ end
22
+ end
23
+
24
+ HAS_POSTGRES = load_driver(:postgres, 'postgres://postgres@localhost/dm_core_test')
25
+ HAS_MYSQL = load_driver(:mysql, 'mysql://localhost/dm_core_test')
26
+
27
+ require Pathname(__FILE__).dirname.expand_path.parent + 'lib/dm-constraints'
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/gemspec.rb ADDED
@@ -0,0 +1,23 @@
1
+ desc "Generate gemspec"
2
+ task :gemspec do |x|
3
+ # Clean up extraneous files before checking manifest
4
+ %x[rake clean]
5
+
6
+ # Check the manifest before generating the gemspec
7
+ manifest = %x[rake check_manifest]
8
+ manifest.gsub!("(in /usr/local/projects/dm/dm-core)\n", "")
9
+
10
+ unless manifest.empty?
11
+ print "\n", "#"*68, "\n"
12
+ print <<-EOS
13
+ Manifest.txt is not up-to-date. Please review the changes below.
14
+ If the changes are correct, run 'rake check_manifest | patch'
15
+ and then run this command again.
16
+ EOS
17
+ print "#"*68, "\n\n"
18
+ puts manifest
19
+ else
20
+ %x[rake debug_gem > #{GEM_NAME}.gemspec]
21
+ puts "Successfully created gemspec for #{GEM_NAME}!"
22
+ end
23
+ end
data/tasks/hoe.rb ADDED
@@ -0,0 +1,46 @@
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
+ # Remove hoe dependency
23
+ class Hoe
24
+ def extra_dev_deps
25
+ @extra_dev_deps.reject! { |dep| dep[0] == "hoe" }
26
+ @extra_dev_deps
27
+ end
28
+ end
29
+
30
+ hoe = Hoe.new(GEM_NAME, GEM_VERSION) do |p|
31
+
32
+ p.developer(AUTHOR, EMAIL)
33
+
34
+ p.description = PROJECT_DESCRIPTION
35
+ p.summary = PROJECT_SUMMARY
36
+ p.url = PROJECT_URL
37
+
38
+ p.rubyforge_name = PROJECT_NAME if PROJECT_NAME
39
+
40
+ p.clean_globs |= ["{coverage,doc,log,tmp}", "**/*.{log,db}", "profile_results.*", "**/.DS_Store"]
41
+
42
+ GEM_DEPENDENCIES.each do |dep|
43
+ p.extra_deps << dep
44
+ end
45
+
46
+ 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 ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dm-constraints
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.4
5
+ platform: ruby
6
+ authors:
7
+ - Dirkjan Bussink
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-08-21 00:00:00 -05:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: dm-core
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - "="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.9.4
24
+ version:
25
+ description: DataMapper plugin for performing validations on data models
26
+ email:
27
+ - d.bussink@gmail.com
28
+ executables: []
29
+
30
+ extensions: []
31
+
32
+ extra_rdoc_files:
33
+ - History.txt
34
+ - Manifest.txt
35
+ - README.txt
36
+ files:
37
+ - History.txt
38
+ - LICENSE
39
+ - Manifest.txt
40
+ - README.txt
41
+ - Rakefile
42
+ - TODO
43
+ - lib/dm-constraints.rb
44
+ - lib/dm-constraints/data_objects_adapter.rb
45
+ - lib/dm-constraints/mysql_adapter.rb
46
+ - lib/dm-constraints/postgres_adapter.rb
47
+ - lib/dm-constraints/version.rb
48
+ - spec/integration/constraints_spec.rb
49
+ - spec/spec.opts
50
+ - spec/spec_helper.rb
51
+ - tasks/ci.rb
52
+ - tasks/dm.rb
53
+ - tasks/doc.rb
54
+ - tasks/gemspec.rb
55
+ - tasks/hoe.rb
56
+ - tasks/install.rb
57
+ has_rdoc: true
58
+ homepage: http://github.com/sam/dm-more/tree/master/dm-constraints
59
+ post_install_message:
60
+ rdoc_options:
61
+ - --main
62
+ - README.txt
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: "0"
70
+ version:
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: "0"
76
+ version:
77
+ requirements: []
78
+
79
+ rubyforge_project: datamapper
80
+ rubygems_version: 1.2.0
81
+ signing_key:
82
+ specification_version: 2
83
+ summary: DataMapper plugin for performing validations on data models
84
+ test_files: []
85
+