rein 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -2,10 +2,14 @@
2
2
 
3
3
  Database constraints made easy for ActiveRecord.
4
4
 
5
+
5
6
  ## Introduction
6
7
 
8
+ Rein adds bunch of methods to your ActiveRecord migrations so you can easily tame your database.
9
+
7
10
  ActiveRecord doesn't make it easy for you to weild the power of your database.
8
11
 
12
+
9
13
  ## Quick Start
10
14
 
11
15
  First, install the gem:
@@ -14,4 +18,4 @@ First, install the gem:
14
18
 
15
19
  Then slap some constraints in your migrations. For example:
16
20
 
17
- add_numericality_constraint :my_table, :my_field, :greater_than_or_equal_to => 0
21
+ add_numericality_constraint :books, :publication_month, :greater_than_or_equal_to => 1, :less_than_or_equal_to => 12
data/lib/rein.rb CHANGED
@@ -7,5 +7,15 @@ end
7
7
 
8
8
  RC = Rein::Constraint
9
9
 
10
+ require 'rein/constraint/foreign_key'
10
11
  require 'rein/constraint/numericality'
11
12
  require 'rein/version'
13
+
14
+ if defined?(ActiveRecord)
15
+ module ActiveRecord::ConnectionAdapters
16
+ class PostgreSQLAdapter < AbstractAdapter
17
+ include RC::ForeignKey
18
+ include RC::Numericality
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,31 @@
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"
5
+ referenced_attribute = "id"
6
+ constraint_name = options[:name] || "#{referencing_attribute}_fk"
7
+
8
+ sql = "ALTER TABLE #{referencing_table} ADD CONSTRAINT #{constraint_name} FOREIGN KEY (#{referencing_attribute}) REFERENCES #{referenced_table} (#{referenced_attribute})"
9
+ sql << " ON DELETE #{referential_action(options[:on_delete])}" if options[:on_delete]
10
+ sql << " ON UPDATE #{referential_action(options[:on_update])}" if options[:on_update]
11
+
12
+ execute(sql)
13
+ end
14
+
15
+ private
16
+ def referential_action(action)
17
+ case action.to_sym
18
+ when :cascade
19
+ "CASCADE"
20
+ when :restrict
21
+ "RESTRICT"
22
+ when :nullify
23
+ "SET NULL"
24
+ when :default
25
+ "SET DEFAULT"
26
+ else
27
+ raise "Unknown referential action '#{action}'"
28
+ end
29
+ end
30
+ end
31
+ end
@@ -8,15 +8,16 @@ module RC
8
8
  :less_than_or_equal_to => :<=
9
9
  }.freeze
10
10
 
11
- def self.add_numericality_constraint(table, attribute, options)
11
+ def add_numericality_constraint(table, attribute, options = {})
12
12
  conditions = OPERATORS.slice(*options.keys).map do |key, operator|
13
13
  value = options[key]
14
14
  [attribute, operator, value].join(" ")
15
15
  end
16
16
 
17
17
  conditions_sql = conditions.map {|condition| "(#{condition})" }.join(" AND ")
18
+ conditions_sql = "(#{conditions_sql})" if conditions.length > 1
18
19
 
19
- "ALTER TABLE #{table} ADD CONSTRAINT #{attribute} CHECK #{conditions_sql}"
20
+ execute "ALTER TABLE #{table} ADD CONSTRAINT #{attribute} CHECK #{conditions_sql}"
20
21
  end
21
22
  end
22
23
  end
data/lib/rein/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rein
2
- VERSION = "0.1.0" unless defined?(Rein::VERSION)
2
+ VERSION = "0.2.0" unless defined?(Rein::VERSION)
3
3
  end
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rein
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
- - 1
7
+ - 2
9
8
  - 0
10
- version: 0.1.0
9
+ version: 0.2.0
11
10
  platform: ruby
12
11
  authors:
13
12
  - Josh Bassett
@@ -19,119 +18,127 @@ date: 2010-08-28 00:00:00 +10:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
21
+ name: activesupport
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
23
  none: false
24
24
  requirements:
25
25
  - - ~>
26
26
  - !ruby/object:Gem::Version
27
- hash: 7712042
28
27
  segments:
29
28
  - 3
30
29
  - 0
31
30
  - 0
32
31
  - rc
33
32
  version: 3.0.0.rc
34
- requirement: *id001
35
- name: activesupport
36
- prerelease: false
37
33
  type: :runtime
34
+ prerelease: false
35
+ version_requirements: *id001
38
36
  - !ruby/object:Gem::Dependency
39
- version_requirements: &id002 !ruby/object:Gem::Requirement
37
+ name: bundler
38
+ requirement: &id002 !ruby/object:Gem::Requirement
40
39
  none: false
41
40
  requirements:
42
41
  - - ~>
43
42
  - !ruby/object:Gem::Version
44
- hash: 23
45
43
  segments:
46
44
  - 1
47
45
  - 0
48
46
  - 0
49
47
  version: 1.0.0
50
- requirement: *id002
51
- name: bundler
52
- prerelease: false
53
48
  type: :development
49
+ prerelease: false
50
+ version_requirements: *id002
54
51
  - !ruby/object:Gem::Dependency
55
- version_requirements: &id003 !ruby/object:Gem::Requirement
52
+ name: hirb
53
+ requirement: &id003 !ruby/object:Gem::Requirement
56
54
  none: false
57
55
  requirements:
58
56
  - - ~>
59
57
  - !ruby/object:Gem::Version
60
- hash: 23
61
58
  segments:
62
59
  - 0
63
60
  - 3
64
61
  - 2
65
62
  version: 0.3.2
66
- requirement: *id003
67
- name: hirb
68
- prerelease: false
69
63
  type: :development
64
+ prerelease: false
65
+ version_requirements: *id003
70
66
  - !ruby/object:Gem::Dependency
71
- version_requirements: &id004 !ruby/object:Gem::Requirement
67
+ name: rake
68
+ requirement: &id004 !ruby/object:Gem::Requirement
72
69
  none: false
73
70
  requirements:
74
71
  - - ~>
75
72
  - !ruby/object:Gem::Version
76
- hash: 49
77
73
  segments:
78
74
  - 0
79
75
  - 8
80
76
  - 7
81
77
  version: 0.8.7
82
- requirement: *id004
83
- name: rake
84
- prerelease: false
85
78
  type: :development
79
+ prerelease: false
80
+ version_requirements: *id004
86
81
  - !ruby/object:Gem::Dependency
87
- version_requirements: &id005 !ruby/object:Gem::Requirement
82
+ name: rcov
83
+ requirement: &id005 !ruby/object:Gem::Requirement
88
84
  none: false
89
85
  requirements:
90
86
  - - ~>
91
87
  - !ruby/object:Gem::Version
92
- hash: 43
93
88
  segments:
94
89
  - 0
95
90
  - 9
96
91
  - 8
97
92
  version: 0.9.8
98
- requirement: *id005
99
- name: rcov
100
- prerelease: false
101
93
  type: :development
94
+ prerelease: false
95
+ version_requirements: *id005
102
96
  - !ruby/object:Gem::Dependency
103
- version_requirements: &id006 !ruby/object:Gem::Requirement
97
+ name: rspec
98
+ requirement: &id006 !ruby/object:Gem::Requirement
104
99
  none: false
105
100
  requirements:
106
101
  - - ~>
107
102
  - !ruby/object:Gem::Version
108
- hash: 27
109
103
  segments:
110
104
  - 1
111
105
  - 3
112
106
  - 0
113
107
  version: 1.3.0
114
- requirement: *id006
115
- name: rspec
116
- prerelease: false
117
108
  type: :development
109
+ prerelease: false
110
+ version_requirements: *id006
118
111
  - !ruby/object:Gem::Dependency
119
- version_requirements: &id007 !ruby/object:Gem::Requirement
112
+ name: rr
113
+ requirement: &id007 !ruby/object:Gem::Requirement
120
114
  none: false
121
115
  requirements:
122
116
  - - ~>
123
117
  - !ruby/object:Gem::Version
124
- hash: 23
125
118
  segments:
126
119
  - 1
127
120
  - 0
128
121
  - 0
129
122
  version: 1.0.0
130
- requirement: *id007
131
- name: rr
123
+ type: :development
132
124
  prerelease: false
125
+ version_requirements: *id007
126
+ - !ruby/object:Gem::Dependency
127
+ name: wirble
128
+ requirement: &id008 !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ segments:
134
+ - 0
135
+ - 1
136
+ - 3
137
+ version: 0.1.3
133
138
  type: :development
134
- description: Rein provides a bunch of methods to make adding constraints to your database easier.
139
+ prerelease: false
140
+ version_requirements: *id008
141
+ description: Rein adds bunch of methods to your ActiveRecord migrations so you can easily tame your database.
135
142
  email: josh.bassett@gmail.com
136
143
  executables: []
137
144
 
@@ -141,6 +148,7 @@ extra_rdoc_files: []
141
148
 
142
149
  files:
143
150
  - lib/rein/alone.rb
151
+ - lib/rein/constraint/foreign_key.rb
144
152
  - lib/rein/constraint/numericality.rb
145
153
  - lib/rein/version.rb
146
154
  - lib/rein.rb
@@ -160,7 +168,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
160
168
  requirements:
161
169
  - - ">="
162
170
  - !ruby/object:Gem::Version
163
- hash: 3
171
+ hash: 1844054734367271197
164
172
  segments:
165
173
  - 0
166
174
  version: "0"
@@ -169,7 +177,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
177
  requirements:
170
178
  - - ">="
171
179
  - !ruby/object:Gem::Version
172
- hash: 23
173
180
  segments:
174
181
  - 1
175
182
  - 3