rein 0.8.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: '059c6905ac22b82e4b73c05511b549eec26803f6'
4
+ data.tar.gz: c77740f464a4d9b203dffabc4afb67a764416206
5
+ SHA512:
6
+ metadata.gz: 8ae2b21f190d38839fbe44a28bea29ab3188ef9411f11c0e691e89a67d1646e31c77489cc8b36dd5560d977791116d57076317bed24467cee6feab554a5badff
7
+ data.tar.gz: e8c19eb0e51beb7d11a47198a26564692418bf65256e8382bfc87f6aa079f1ec568aacd4c050326455e5a7ac1245e1c28cdd161cc8bd521b6d5bad4bd51e2eaa
data/.gitignore CHANGED
@@ -1,4 +1,4 @@
1
1
  *.gem
2
2
  .bundle
3
- coverage
3
+ .yardoc
4
4
  Gemfile.lock
data/.rspec CHANGED
@@ -1 +1,2 @@
1
- --colour
1
+ --format documentation
2
+ --color
@@ -0,0 +1,35 @@
1
+ AllCops:
2
+ Exclude:
3
+ - "bin/**/*"
4
+ - "rein.gemspec"
5
+
6
+ Metrics/AbcSize:
7
+ Max: 27
8
+
9
+ Metrics/BlockLength:
10
+ ExcludedMethods: describe
11
+
12
+ Metrics/CyclomaticComplexity:
13
+ Max: 7
14
+
15
+ Metrics/LineLength:
16
+ Enabled: false
17
+
18
+ Metrics/MethodLength:
19
+ Max: 11
20
+
21
+ Style/BlockDelimiters:
22
+ Enabled: false
23
+
24
+ Style/Documentation:
25
+ Exclude:
26
+ - "spec/**/*"
27
+
28
+ Style/FrozenStringLiteralComment:
29
+ Enabled: false
30
+
31
+ Style/SpaceInsideHashLiteralBraces:
32
+ Enabled: false
33
+
34
+ Style/StringLiterals:
35
+ EnforcedStyle: double_quotes
@@ -0,0 +1,2 @@
1
+ language: ruby
2
+ before_install: gem install bundler -v 1.14.5
@@ -0,0 +1 @@
1
+ --markup markdown
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010 Josh Bassett
1
+ Copyright (c) 2017 Joshua Bassett
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.md CHANGED
@@ -1,27 +1,19 @@
1
1
  # Rein
2
2
 
3
- Database constraints made easy for ActiveRecord. Rein currently supports PostgreSQL and MySQL (foreign keys only) for both Rails 2 & 3.
4
-
3
+ Database constraints made easy for ActiveRecord. Rein currently supports
4
+ PostgreSQL and MySQL (foreign keys only).
5
5
 
6
6
  ## Introduction
7
7
 
8
- [Database integrity](http://en.wikipedia.org/wiki/Database_integrity) is a "good thing". Constraining the allowed values in your database at the database-level (rather than solely at the application-level) is a much more robust way of ensuring your data stays sane.
9
-
10
- Unfortunately, ActiveRecord doesn't encourage (or even allow) you to use database integrity without resorting to hand-crafted SQL. Rein adds a handful of methods to your ActiveRecord migrations so that you can easily tame your database.
11
-
12
-
13
- ## FAQ
14
-
15
- ### How is Rein different to other gems like [foreigner](http://github.com/matthuhiggins/foreigner) or [redhillonrails](http://github.com/mlomnicki/redhillonrails_core), which do the same thing?
16
-
17
- If you're using MySQL then there is no difference, Rein should work as a drop-in replacement. If you're using PostgreSQL however, then Rein provides you with extra methods for placing check constraints on your data.
18
-
19
- ### If [DHH](http://en.wikipedia.org/wiki/David_Heinemeier_Hansson) wanted my app to have database constraints then Rails would have been born with them?
20
-
21
- Rails is an opinionated piece of software. One opinion is that your database should simply function as a "dumb" container which your application controls. This is the opinion of Rails.
22
-
23
- Another opinion is that your database is actually a powerful [DBMS](http://en.wikipedia.org/wiki/Database_management_system) which has already solved problems like data integrity, and your application should wield this power.
8
+ [Database integrity](http://en.wikipedia.org/wiki/Database_integrity) is a
9
+ "good thing". Constraining the allowed values in your database at the
10
+ database-level (rather than solely at the application-level) is a much more
11
+ robust way of ensuring your data stays sane.
24
12
 
13
+ Unfortunately, ActiveRecord doesn't encourage (or even allow) you to use
14
+ database integrity without resorting to hand-crafted SQL. Rein adds a handful
15
+ of methods to your ActiveRecord migrations so that you can easily tame your
16
+ database.
25
17
 
26
18
  ## Quick Start
27
19
 
@@ -41,7 +33,6 @@ Add an inclusion constraint (PostgreSQL only):
41
33
 
42
34
  add_inclusion_constraint :books, :state, :in => %w(available on_loan)
43
35
 
44
-
45
36
  ## Example
46
37
 
47
38
  Let's look at constraining values for this simple library application.
@@ -79,9 +70,6 @@ And here we have a table of books:
79
70
  # State is always either "available" or "on_loan".
80
71
  add_inclusion_constraint :books, :state, :in => %w(available on_loan)
81
72
 
73
+ ## License
82
74
 
83
- ## Credits
84
-
85
- * [Marcus Crafter](http://github.com/crafterm)
86
- * [Tim Lucas](http://github.com/toolmantim)
87
- * [Xavier Shay](http://github.com/xaviershay)
75
+ This project is licensed under the [MIT License](/LICENSE).
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
+ require "rubocop/rake_task"
3
4
 
4
- RSpec::Core::RakeTask.new
5
+ RSpec::Core::RakeTask.new(:spec)
6
+ RuboCop::RakeTask.new
5
7
 
6
- task default: :spec
8
+ task default: [:spec, :rubocop]
@@ -1,13 +1,5 @@
1
- module Rein
2
- module Constraint
3
- end
4
- end
5
-
6
- RC = Rein::Constraint
7
-
8
1
  require "active_record"
9
- require "active_support/core_ext/hash"
10
- require "active_support/inflector"
2
+ require "active_record/connection_adapters/abstract_mysql_adapter"
11
3
 
12
4
  require "rein/constraint/primary_key"
13
5
  require "rein/constraint/foreign_key"
@@ -16,25 +8,27 @@ require "rein/constraint/numericality"
16
8
  require "rein/constraint/presence"
17
9
  require "rein/view"
18
10
 
19
- module ActiveRecord::ConnectionAdapters
20
- class MysqlAdapter < AbstractAdapter
21
- include RC::PrimaryKey
22
- include RC::ForeignKey
23
- include Rein::View
24
- end
11
+ module ActiveRecord
12
+ module ConnectionAdapters # :nodoc:
13
+ class MysqlAdapter < AbstractAdapter # :nodoc:
14
+ include Rein::Constraint::PrimaryKey
15
+ include Rein::Constraint::ForeignKey
16
+ include Rein::View
17
+ end
25
18
 
26
- class Mysql2Adapter < AbstractAdapter
27
- include RC::PrimaryKey
28
- include RC::ForeignKey
29
- include Rein::View
30
- end
19
+ class Mysql2Adapter < AbstractMysqlAdapter # :nodoc:
20
+ include Rein::Constraint::PrimaryKey
21
+ include Rein::Constraint::ForeignKey
22
+ include Rein::View
23
+ end
31
24
 
32
- class PostgreSQLAdapter < AbstractAdapter
33
- include RC::PrimaryKey
34
- include RC::ForeignKey
35
- include RC::Inclusion
36
- include RC::Numericality
37
- include RC::Presence
38
- include Rein::View
25
+ class PostgreSQLAdapter < AbstractAdapter # :nodoc:
26
+ include Rein::Constraint::PrimaryKey
27
+ include Rein::Constraint::ForeignKey
28
+ include Rein::Constraint::Inclusion
29
+ include Rein::Constraint::Numericality
30
+ include Rein::Constraint::Presence
31
+ include Rein::View
32
+ end
39
33
  end
40
34
  end
@@ -1,66 +1,64 @@
1
- module RC
2
- module ForeignKey
3
- def add_foreign_key_constraint(referencing_table, referenced_table, options = {})
4
- referencing_attribute = (options[:referencing] || "#{referenced_table.to_s.singularize}_id").to_sym
5
- referenced_attribute = (options[:referenced] || "id").to_sym
1
+ module Rein
2
+ module Constraint
3
+ # This module contains methods for defining foreign key constraints.
4
+ module ForeignKey
5
+ def add_foreign_key_constraint(referencing_table, referenced_table, options = {})
6
+ referencing_attribute = (options[:referencing] || "#{referenced_table.to_s.singularize}_id").to_sym
7
+ referenced_attribute = (options[:referenced] || "id").to_sym
6
8
 
7
- name = options[:name] || default_constraint_name(referencing_table, referencing_attribute)
9
+ name = options[:name] || default_constraint_name(referencing_table, referencing_attribute)
8
10
 
9
- sql = "ALTER TABLE #{referencing_table}".tap do |sql|
11
+ sql = "ALTER TABLE #{referencing_table}"
10
12
  sql << " ADD CONSTRAINT #{name}"
11
13
  sql << " FOREIGN KEY (#{referencing_attribute})"
12
14
  sql << " REFERENCES #{referenced_table} (#{referenced_attribute})"
13
15
  sql << " ON DELETE #{referential_action(options[:on_delete])}" if options[:on_delete].present?
14
16
  sql << " ON UPDATE #{referential_action(options[:on_update])}" if options[:on_update].present?
15
- end
16
17
 
17
- execute(sql)
18
+ execute(sql)
18
19
 
19
- # A foreign key constraint doesn't have an implicit index.
20
- add_index(referencing_table, referencing_attribute) if options[:add_index] == true
21
- end
22
- alias_method :add_foreign_key, :add_foreign_key_constraint
20
+ # A foreign key constraint doesn't have an implicit index.
21
+ add_index(referencing_table, referencing_attribute) if options[:add_index] == true
22
+ end
23
+ alias add_foreign_key add_foreign_key_constraint
23
24
 
24
- def remove_foreign_key_constraint(referencing_table, referenced_table, options = {})
25
- referencing_attribute = options[:referencing] || "#{referenced_table.to_s.singularize}_id".to_sym
25
+ def remove_foreign_key_constraint(referencing_table, referenced_table, options = {})
26
+ referencing_attribute = options[:referencing] || "#{referenced_table.to_s.singularize}_id".to_sym
26
27
 
27
- name = options[:name] || default_constraint_name(referencing_table, referencing_attribute)
28
+ name = options[:name] || default_constraint_name(referencing_table, referencing_attribute)
28
29
 
29
- if is_a_mysql_adapter?
30
- execute "ALTER TABLE #{referencing_table} DROP FOREIGN KEY #{name}"
31
- else
32
- execute "ALTER TABLE #{referencing_table} DROP CONSTRAINT #{name}"
30
+ if mysql_adapter?
31
+ execute "ALTER TABLE #{referencing_table} DROP FOREIGN KEY #{name}"
32
+ else
33
+ execute "ALTER TABLE #{referencing_table} DROP CONSTRAINT #{name}"
34
+ end
35
+
36
+ # A foreign key constraint doesn't have an implicit index.
37
+ remove_index(referencing_table, referencing_attribute) if options[:remove_index] == true
33
38
  end
39
+ alias remove_foreign_key remove_foreign_key_constraint
34
40
 
35
- # A foreign key constraint doesn't have an implicit index.
36
- remove_index(referencing_table, referencing_attribute) if options[:remove_index] == true
37
- end
38
- alias_method :remove_foreign_key, :remove_foreign_key_constraint
41
+ private
39
42
 
40
- private
41
- def referential_action(action)
42
- case action.to_sym
43
- when :no_action
44
- "NO ACTION"
45
- when :cascade
46
- "CASCADE"
47
- when :restrict
48
- "RESTRICT"
49
- when :nullify
50
- "SET NULL"
51
- when :default
52
- "SET DEFAULT"
53
- else
54
- raise "Unknown referential action '#{action}'"
43
+ def referential_action(action)
44
+ case action.to_sym
45
+ when :no_action then "NO ACTION"
46
+ when :cascade then "CASCADE"
47
+ when :restrict then "RESTRICT"
48
+ when :nullify then "SET NULL"
49
+ when :default then "SET DEFAULT"
50
+ else
51
+ raise "Unknown referential action '#{action}'"
52
+ end
55
53
  end
56
- end
57
54
 
58
- def is_a_mysql_adapter?
59
- self.class.to_s =~ /Mysql[2]?Adapter/
60
- end
55
+ def mysql_adapter?
56
+ self.class.to_s =~ /Mysql[2]?Adapter/
57
+ end
61
58
 
62
- def default_constraint_name(referencing_table, referencing_attribute)
63
- "#{referencing_table}_#{referencing_attribute}_fk".to_sym
59
+ def default_constraint_name(referencing_table, referencing_attribute)
60
+ "#{referencing_table}_#{referencing_attribute}_fk".to_sym
61
+ end
64
62
  end
65
63
  end
66
64
  end
@@ -1,14 +1,17 @@
1
- require 'active_record/connection_adapters/abstract/quoting'
1
+ require "active_record/connection_adapters/abstract/quoting"
2
2
 
3
- module RC
4
- module Inclusion
5
- include ActiveRecord::ConnectionAdapters::Quoting
3
+ module Rein
4
+ module Constraint
5
+ # This module contains methods for defining inclusion constraints.
6
+ module Inclusion
7
+ include ActiveRecord::ConnectionAdapters::Quoting
6
8
 
7
- def add_inclusion_constraint(table, attribute, options = {})
8
- name = "#{table}_#{attribute}"
9
- values = options[:in].map {|value| quote(value) }.join(", ")
10
- conditions = "#{attribute} IN (#{values})"
11
- execute("ALTER TABLE #{table} ADD CONSTRAINT #{name} CHECK (#{conditions})")
9
+ def add_inclusion_constraint(table, attribute, options = {})
10
+ name = "#{table}_#{attribute}"
11
+ values = options[:in].map { |value| quote(value) }.join(", ")
12
+ conditions = "#{attribute} IN (#{values})"
13
+ execute("ALTER TABLE #{table} ADD CONSTRAINT #{name} CHECK (#{conditions})")
14
+ end
12
15
  end
13
16
  end
14
17
  end
@@ -1,23 +1,26 @@
1
- module RC
2
- module Numericality
3
- OPERATORS = {
4
- :greater_than => :>,
5
- :greater_than_or_equal_to => :>=,
6
- :equal_to => :"=",
7
- :not_equal_to => :"!=",
8
- :less_than => :<,
9
- :less_than_or_equal_to => :<=
10
- }.freeze
1
+ module Rein
2
+ module Constraint
3
+ # This module contains methods for defining numericality constraints.
4
+ module Numericality
5
+ OPERATORS = {
6
+ greater_than: :>,
7
+ greater_than_or_equal_to: :>=,
8
+ equal_to: :"=",
9
+ not_equal_to: :"!=",
10
+ less_than: :<,
11
+ less_than_or_equal_to: :<=
12
+ }.freeze
11
13
 
12
- def add_numericality_constraint(table, attribute, options = {})
13
- name = "#{table}_#{attribute}"
14
+ def add_numericality_constraint(table, attribute, options = {})
15
+ name = "#{table}_#{attribute}"
14
16
 
15
- conditions = OPERATORS.slice(*options.keys).map do |key, operator|
16
- value = options[key]
17
- [attribute, operator, value].join(" ")
18
- end.join(" AND ")
17
+ conditions = OPERATORS.slice(*options.keys).map do |key, operator|
18
+ value = options[key]
19
+ [attribute, operator, value].join(" ")
20
+ end.join(" AND ")
19
21
 
20
- execute("ALTER TABLE #{table} ADD CONSTRAINT #{name} CHECK (#{conditions})")
22
+ execute("ALTER TABLE #{table} ADD CONSTRAINT #{name} CHECK (#{conditions})")
23
+ end
21
24
  end
22
25
  end
23
26
  end
@@ -1,11 +1,14 @@
1
- module RC
2
- module Presence
3
- include ActiveRecord::ConnectionAdapters::Quoting
1
+ module Rein
2
+ module Constraint
3
+ # This module contains methods for defining presence constraints.
4
+ module Presence
5
+ include ActiveRecord::ConnectionAdapters::Quoting
4
6
 
5
- def add_presence_constraint(table, attribute)
6
- name = "#{table}_#{attribute}"
7
- conditions = "#{attribute} !~ '^\s*$'"
8
- execute("ALTER TABLE #{table} ADD CONSTRAINT #{name} CHECK (#{conditions})")
7
+ def add_presence_constraint(table, attribute)
8
+ name = "#{table}_#{attribute}"
9
+ conditions = "#{attribute} !~ '^\s*$'"
10
+ execute("ALTER TABLE #{table} ADD CONSTRAINT #{name} CHECK (#{conditions})")
11
+ end
9
12
  end
10
13
  end
11
14
  end
@@ -1,9 +1,12 @@
1
- module RC
2
- module PrimaryKey
3
- def add_primary_key(table, options = {})
4
- attribute = "id".to_sym
5
- sql = "ALTER TABLE #{table} ADD PRIMARY KEY (#{attribute})"
6
- execute(sql)
1
+ module Rein
2
+ module Constraint
3
+ # This module contains methods for defining primary key constraints.
4
+ module PrimaryKey
5
+ def add_primary_key(table, options = {})
6
+ attribute = (options[:column] || "id").to_sym
7
+ sql = "ALTER TABLE #{table} ADD PRIMARY KEY (#{attribute})"
8
+ execute(sql)
9
+ end
7
10
  end
8
11
  end
9
12
  end
@@ -1,3 +1,3 @@
1
1
  module Rein
2
- VERSION = "0.8.3"
2
+ VERSION = "1.0.0".freeze
3
3
  end
@@ -1,4 +1,5 @@
1
1
  module Rein
2
+ # This module contains methods for defining views.
2
3
  module View
3
4
  def create_view(view_name, sql)
4
5
  sql = "CREATE VIEW #{view_name} AS #{sql}"
@@ -1,28 +1,26 @@
1
- # encoding: utf-8
2
- #
3
- $:.push File.expand_path("../lib", __FILE__)
1
+ lib = File.expand_path("../lib", __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
 
5
4
  require "rein/version"
6
5
 
7
- Gem::Specification.new do |s|
8
- s.name = "rein"
9
- s.version = Rein::VERSION
10
- s.author = "Josh Bassett"
11
- s.email = "josh.bassett@gmail.com"
12
- s.homepage = "http://github.com/nullobject/rein"
13
- s.summary = "Database constraints made easy for ActiveRecord."
14
- s.description = "Rein adds bunch of methods to your ActiveRecord migrations so you can easily tame your database."
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rein"
8
+ spec.version = Rein::VERSION
9
+ spec.author = "Joshua Bassett"
10
+ spec.email = "josh.bassett@gmail.com"
11
+ spec.summary = "Database constraints made easy for ActiveRecord."
12
+ spec.description = "Rein adds bunch of methods to your ActiveRecord migrations so you can easily tame your database."
13
+ spec.homepage = "http://github.com/nullobject/rein"
14
+ spec.license = "MIT"
15
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
16
+ f.match(%r{^(test|spec|features)/})
17
+ end
18
+ spec.require_paths = ["lib"]
15
19
 
16
- s.rubyforge_project = "rein"
20
+ spec.add_runtime_dependency "activerecord", ">= 3.2.0"
17
21
 
18
- s.files = `git ls-files`.split("\n")
19
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
- s.executables = `git ls-files -- bin/*`.split("\n").map {|f| File.basename(f) }
21
-
22
- s.add_development_dependency "rake"
23
- s.add_development_dependency "rspec"
24
- s.add_development_dependency "rr"
25
- s.add_development_dependency "simplecov"
26
-
27
- s.add_runtime_dependency "activerecord"
22
+ spec.add_development_dependency "bundler", "~> 1.14"
23
+ spec.add_development_dependency "rake", "~> 12.0"
24
+ spec.add_development_dependency "rspec", "~> 3.5"
25
+ spec.add_development_dependency "rubocop", "~> 0.47"
28
26
  end
metadata CHANGED
@@ -1,96 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rein
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.3
5
- prerelease:
4
+ version: 1.0.0
6
5
  platform: ruby
7
6
  authors:
8
- - Josh Bassett
7
+ - Joshua Bassett
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-12-12 00:00:00.000000000 Z
11
+ date: 2017-03-14 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: rake
14
+ name: activerecord
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :development
19
+ version: 3.2.0
20
+ type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
- version: '0'
26
+ version: 3.2.0
30
27
  - !ruby/object:Gem::Dependency
31
- name: rspec
28
+ name: bundler
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - "~>"
36
32
  - !ruby/object:Gem::Version
37
- version: '0'
33
+ version: '1.14'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - "~>"
44
39
  - !ruby/object:Gem::Version
45
- version: '0'
40
+ version: '1.14'
46
41
  - !ruby/object:Gem::Dependency
47
- name: rr
42
+ name: rake
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - "~>"
52
46
  - !ruby/object:Gem::Version
53
- version: '0'
47
+ version: '12.0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - "~>"
60
53
  - !ruby/object:Gem::Version
61
- version: '0'
54
+ version: '12.0'
62
55
  - !ruby/object:Gem::Dependency
63
- name: simplecov
56
+ name: rspec
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - "~>"
68
60
  - !ruby/object:Gem::Version
69
- version: '0'
61
+ version: '3.5'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - "~>"
76
67
  - !ruby/object:Gem::Version
77
- version: '0'
68
+ version: '3.5'
78
69
  - !ruby/object:Gem::Dependency
79
- name: activerecord
70
+ name: rubocop
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - "~>"
84
74
  - !ruby/object:Gem::Version
85
- version: '0'
86
- type: :runtime
75
+ version: '0.47'
76
+ type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - "~>"
92
81
  - !ruby/object:Gem::Version
93
- version: '0'
82
+ version: '0.47'
94
83
  description: Rein adds bunch of methods to your ActiveRecord migrations so you can
95
84
  easily tame your database.
96
85
  email: josh.bassett@gmail.com
@@ -98,8 +87,11 @@ executables: []
98
87
  extensions: []
99
88
  extra_rdoc_files: []
100
89
  files:
101
- - .gitignore
102
- - .rspec
90
+ - ".gitignore"
91
+ - ".rspec"
92
+ - ".rubocop.yml"
93
+ - ".travis.yml"
94
+ - ".yardopts"
103
95
  - Gemfile
104
96
  - LICENSE
105
97
  - README.md
@@ -113,42 +105,28 @@ files:
113
105
  - lib/rein/version.rb
114
106
  - lib/rein/view.rb
115
107
  - rein.gemspec
116
- - spec/rein/constraint/foreign_key_spec.rb
117
- - spec/rein/constraint/inclusion_spec.rb
118
- - spec/rein/constraint/numericality_spec.rb
119
- - spec/rein/constraint/presence_spec.rb
120
- - spec/rein/constraint/primary_key_spec.rb
121
- - spec/rein/view_spec.rb
122
- - spec/spec_helper.rb
123
108
  homepage: http://github.com/nullobject/rein
124
- licenses: []
109
+ licenses:
110
+ - MIT
111
+ metadata: {}
125
112
  post_install_message:
126
113
  rdoc_options: []
127
114
  require_paths:
128
115
  - lib
129
116
  required_ruby_version: !ruby/object:Gem::Requirement
130
- none: false
131
117
  requirements:
132
- - - ! '>='
118
+ - - ">="
133
119
  - !ruby/object:Gem::Version
134
120
  version: '0'
135
121
  required_rubygems_version: !ruby/object:Gem::Requirement
136
- none: false
137
122
  requirements:
138
- - - ! '>='
123
+ - - ">="
139
124
  - !ruby/object:Gem::Version
140
125
  version: '0'
141
126
  requirements: []
142
- rubyforge_project: rein
143
- rubygems_version: 1.8.23
127
+ rubyforge_project:
128
+ rubygems_version: 2.5.2
144
129
  signing_key:
145
- specification_version: 3
130
+ specification_version: 4
146
131
  summary: Database constraints made easy for ActiveRecord.
147
- test_files:
148
- - spec/rein/constraint/foreign_key_spec.rb
149
- - spec/rein/constraint/inclusion_spec.rb
150
- - spec/rein/constraint/numericality_spec.rb
151
- - spec/rein/constraint/presence_spec.rb
152
- - spec/rein/constraint/primary_key_spec.rb
153
- - spec/rein/view_spec.rb
154
- - spec/spec_helper.rb
132
+ test_files: []
@@ -1,107 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RC::ForeignKey do
4
- let(:adapter) do
5
- Class.new do
6
- include RC::ForeignKey
7
- end.new
8
- end
9
-
10
- describe "#add_foreign_key_constraint" do
11
- subject { adapter }
12
-
13
- before do
14
- stub(adapter).execute
15
- stub(adapter).add_index
16
- end
17
-
18
- context "with no options" do
19
- before { adapter.add_foreign_key_constraint(:books, :people) }
20
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT books_person_id_fk FOREIGN KEY (person_id) REFERENCES people (id)") }
21
- end
22
-
23
- context "with a given referencing attribute" do
24
- before { adapter.add_foreign_key_constraint(:books, :people, :referencing => :author_id) }
25
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT books_author_id_fk FOREIGN KEY (author_id) REFERENCES people (id)") }
26
- end
27
-
28
- context "with a given referenced attribute" do
29
- before { adapter.add_foreign_key_constraint(:books, :people, :referenced => :person_id) }
30
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT books_person_id_fk FOREIGN KEY (person_id) REFERENCES people (person_id)") }
31
- end
32
-
33
- context "with a given referencing attribute and referenced attribute" do
34
- before { adapter.add_foreign_key_constraint(:books, :people, :referencing => :author_id, :referenced => :person_id) }
35
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT books_author_id_fk FOREIGN KEY (author_id) REFERENCES people (person_id)") }
36
- end
37
-
38
- context "with a given name" do
39
- before { adapter.add_foreign_key_constraint(:books, :people, :name => :foo) }
40
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT foo FOREIGN KEY (person_id) REFERENCES people (id)") }
41
- end
42
-
43
- context "with a given on delete referential action" do
44
- before { adapter.add_foreign_key_constraint(:books, :people, :on_delete => :cascade) }
45
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT books_person_id_fk FOREIGN KEY (person_id) REFERENCES people (id) ON DELETE CASCADE") }
46
- end
47
-
48
- context "with a given on update referential action" do
49
- before { adapter.add_foreign_key_constraint(:books, :people, :on_update => :cascade) }
50
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT books_person_id_fk FOREIGN KEY (person_id) REFERENCES people (id) ON UPDATE CASCADE") }
51
- end
52
-
53
- context "with a 'cascade' on delete and update referential action" do
54
- before { adapter.add_foreign_key_constraint(:books, :people, :on_delete => :cascade, :on_update => :cascade) }
55
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT books_person_id_fk FOREIGN KEY (person_id) REFERENCES people (id) ON DELETE CASCADE ON UPDATE CASCADE") }
56
- end
57
-
58
- context "with a 'no action' on delete and update referential action" do
59
- before { adapter.add_foreign_key_constraint(:books, :people, :on_delete => :no_action, :on_update => :no_action) }
60
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT books_person_id_fk FOREIGN KEY (person_id) REFERENCES people (id) ON DELETE NO ACTION ON UPDATE NO ACTION") }
61
- end
62
-
63
- describe "with a given add_index option" do
64
- before { adapter.add_foreign_key_constraint(:books, :people, :add_index => true) }
65
- it { should have_received.add_index(:books, :person_id) }
66
- end
67
-
68
- describe "with a referencing attribute and a add_index option" do
69
- before { adapter.add_foreign_key_constraint(:books, :people, :referencing => :author_id, :add_index => true) }
70
- it { should have_received.add_index(:books, :author_id) }
71
- end
72
- end
73
-
74
- describe "#remove_foreign_key_constraint" do
75
- subject { adapter }
76
-
77
- before do
78
- stub(adapter).execute
79
- stub(adapter).remove_index
80
- end
81
-
82
- context "with no options" do
83
- before { adapter.remove_foreign_key_constraint(:books, :people) }
84
- it { should have_received.execute("ALTER TABLE books DROP CONSTRAINT books_person_id_fk") }
85
- end
86
-
87
- context "with a given referencing attribute" do
88
- before { adapter.remove_foreign_key_constraint(:books, :people, :referencing => :author_id) }
89
- it { should have_received.execute("ALTER TABLE books DROP CONSTRAINT books_author_id_fk") }
90
- end
91
-
92
- context "with a given name" do
93
- before { adapter.remove_foreign_key_constraint(:books, :people, :name => :foo) }
94
- it { should have_received.execute("ALTER TABLE books DROP CONSTRAINT foo") }
95
- end
96
-
97
- describe "with a given remove_index option" do
98
- before { adapter.remove_foreign_key_constraint(:books, :people, :remove_index => true) }
99
- it { should have_received.remove_index(:books, :person_id) }
100
- end
101
-
102
- describe "with a referencing attribute and a remove_index option" do
103
- before { adapter.remove_foreign_key_constraint(:books, :people, :referencing => :author_id, :remove_index => true) }
104
- it { should have_received.remove_index(:books, :author_id) }
105
- end
106
- end
107
- end
@@ -1,23 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RC::Inclusion, "#add_inclusion_constraint" do
4
- let(:adapter) do
5
- Class.new do
6
- include RC::Inclusion
7
- end.new
8
- end
9
-
10
- subject { adapter }
11
-
12
- before { stub(adapter).execute }
13
-
14
- context "given an array of string values" do
15
- before { adapter.add_inclusion_constraint(:books, :state, :in => %w(available on_loan)) }
16
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT books_state CHECK (state IN ('available', 'on_loan'))") }
17
- end
18
-
19
- context "given an array of numeric values" do
20
- before { adapter.add_inclusion_constraint(:books, :state, :in => [1, 2, 3]) }
21
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT books_state CHECK (state IN (1, 2, 3))") }
22
- end
23
- end
@@ -1,48 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RC::Numericality, "#add_numericality_constraint" do
4
- let(:adapter) do
5
- Class.new do
6
- include RC::Numericality
7
- end.new
8
- end
9
-
10
- subject { adapter }
11
-
12
- before { stub(adapter).execute }
13
-
14
- context "greater_than" do
15
- before { adapter.add_numericality_constraint(:books, :published_month, :greater_than => 1) }
16
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT books_published_month CHECK (published_month > 1)") }
17
- end
18
-
19
- context "greater_than_or_equal_to" do
20
- before { adapter.add_numericality_constraint(:books, :published_month, :greater_than_or_equal_to => 2) }
21
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT books_published_month CHECK (published_month >= 2)") }
22
- end
23
-
24
- context "equal_to" do
25
- before { adapter.add_numericality_constraint(:books, :published_month, :equal_to => 3) }
26
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT books_published_month CHECK (published_month = 3)") }
27
- end
28
-
29
- context "not_equal_to" do
30
- before { adapter.add_numericality_constraint(:books, :published_month, :not_equal_to => 0) }
31
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT books_published_month CHECK (published_month != 0)") }
32
- end
33
-
34
- context "less_than" do
35
- before { adapter.add_numericality_constraint(:books, :published_month, :less_than => 4) }
36
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT books_published_month CHECK (published_month < 4)") }
37
- end
38
-
39
- context "less_than_or_equal_to" do
40
- before { adapter.add_numericality_constraint(:books, :published_month, :less_than_or_equal_to => 5) }
41
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT books_published_month CHECK (published_month <= 5)") }
42
- end
43
-
44
- context "greater_than_or_equal_to and less_than_or_equal_to" do
45
- before { adapter.add_numericality_constraint(:books, :published_month, :greater_than_or_equal_to => 5, :less_than_or_equal_to => 6) }
46
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT books_published_month CHECK (published_month >= 5 AND published_month <= 6)") }
47
- end
48
- end
@@ -1,18 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RC::Presence, "#add_presence_constraint" do
4
- let(:adapter) do
5
- Class.new do
6
- include RC::Presence
7
- end.new
8
- end
9
-
10
- subject { adapter }
11
-
12
- before { stub(adapter).execute }
13
-
14
- context "given a table and attribute" do
15
- before { adapter.add_presence_constraint(:books, :state) }
16
- it { should have_received.execute("ALTER TABLE books ADD CONSTRAINT books_state CHECK (state !~ '^\s*$')") }
17
- end
18
- end
@@ -1,18 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RC::PrimaryKey, "#add_primary_key" do
4
- let(:adapter) do
5
- Class.new do
6
- include RC::PrimaryKey
7
- end.new
8
- end
9
-
10
- subject { adapter }
11
-
12
- before { stub(adapter).execute }
13
-
14
- context "with no options" do
15
- before { adapter.add_primary_key(:books) }
16
- it { should have_received.execute("ALTER TABLE books ADD PRIMARY KEY (id)") }
17
- end
18
- end
@@ -1,23 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Rein::View do
4
- let(:adapter) do
5
- Class.new do
6
- include Rein::View
7
- end.new
8
- end
9
-
10
- subject { adapter }
11
-
12
- before { stub(adapter).execute }
13
-
14
- describe "#create_view" do
15
- before { adapter.create_view(:foo, "SELECT * FROM bar") }
16
- it { should have_received.execute("CREATE VIEW foo AS SELECT * FROM bar") }
17
- end
18
-
19
- describe "#drop_view" do
20
- before { adapter.drop_view(:foo) }
21
- it { should have_received.execute("DROP VIEW foo") }
22
- end
23
- end
@@ -1,17 +0,0 @@
1
- require "rr"
2
- require "rr/adapters/rspec"
3
- require "rspec"
4
- require "simplecov"
5
-
6
- SimpleCov.start
7
-
8
- require "rein"
9
-
10
- RSpec.configure do |config|
11
- config.mock_with :rr
12
- end
13
-
14
- # FIXME: This is a workaround to get RSpec 2 to play nicely with RR.
15
- def have_received(method = nil)
16
- RR::Adapters::Rspec::InvocationMatcher.new(method)
17
- end