redhillonrails_core 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,5 @@
1
+ 1.1.1
2
+ * quote values for foreign key definition
1
3
  1.1.0
2
4
  * standard gem layout (no more RedHillConsulting module)
3
5
  * got rid of table comments support
@@ -4,6 +4,10 @@ module RedhillonrailsCore
4
4
  class ForeignKeyDefinition < Struct.new(:name, :table_name, :column_names, :references_table_name, :references_column_names, :on_update, :on_delete, :deferrable)
5
5
  ACTIONS = { :cascade => "CASCADE", :restrict => "RESTRICT", :set_null => "SET NULL", :set_default => "SET DEFAULT", :no_action => "NO ACTION" }.freeze
6
6
 
7
+ def initialize(name, table_name, column_names, references_table_name, references_column_names, on_update = nil, on_delete = nil, deferrable = nil)
8
+ super(name, unquote(table_name), unquote(column_names), unquote(references_table_name), unquote(references_column_names), on_update, on_delete, deferrable)
9
+ end
10
+
7
11
  def to_dump
8
12
  dump = "add_foreign_key"
9
13
  dump << " #{table_name.inspect}, [#{Array(column_names).collect{ |name| name.inspect }.join(', ')}]"
@@ -16,14 +20,48 @@ module RedhillonrailsCore
16
20
  end
17
21
 
18
22
  def to_sql
19
- sql = name ? "CONSTRAINT #{name} " : ""
20
- sql << "FOREIGN KEY (#{Array(column_names).join(", ")}) REFERENCES #{references_table_name} (#{Array(references_column_names).join(", ")})"
23
+ sql = name ? "CONSTRAINT #{quote(name)} " : ""
24
+ sql << "FOREIGN KEY (#{quoted_column_names.join(", ")}) REFERENCES #{quoted_references_table_name} (#{quoted_references_column_names.join(", ")})"
21
25
  sql << " ON UPDATE #{ACTIONS[on_update]}" if on_update
22
26
  sql << " ON DELETE #{ACTIONS[on_delete]}" if on_delete
23
27
  sql << " DEFERRABLE" if deferrable
24
28
  sql
25
29
  end
30
+
26
31
  alias :to_s :to_sql
32
+
33
+ def quoted_column_names
34
+ Array(column_names).collect { |name| ::ActiveRecord::Base.connection.quote_column_name(name) }
35
+ end
36
+
37
+ def quoted_references_column_names
38
+ Array(references_column_names).collect { |name| ::ActiveRecord::Base.connection.quote_column_name(name) }
39
+ end
40
+
41
+ def quoted_table_name
42
+ ::ActiveRecord::Base.connection.quote_table_name(table_name)
43
+ end
44
+
45
+ def quoted_references_table_name
46
+ ::ActiveRecord::Base.connection.quote_table_name(references_table_name)
47
+ end
48
+
49
+ def quote(name)
50
+ ::ActiveRecord::Base.connection.quote(name)
51
+ end
52
+
53
+ def unquote(names)
54
+ if names.is_a?(Array)
55
+ names.collect { |name| __unqoute(name) }
56
+ else
57
+ __unqoute(names)
58
+ end
59
+ end
60
+
61
+ def __unqoute(value)
62
+ value.to_s.sub(/^["`](.*)["`]$/, '\1')
63
+ end
64
+
27
65
  end
28
66
  end
29
67
  end
@@ -1,15 +1,15 @@
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{redhillonrails_core}
8
- s.version = "1.1.0"
8
+ s.version = "1.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Micha\305\202 \305\201omnicki"]
12
- s.date = %q{2011-01-09}
11
+ s.authors = ["Michał Łomnicki"]
12
+ s.date = %q{2011-01-10}
13
13
  s.description = %q{Adds support in ActiveRecord for foreign_keys, complex indexes and other database-related stuff. Easily create foreign_keys, complex indexes and views.}
14
14
  s.email = %q{michal.lomnicki@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -17,57 +17,91 @@ Gem::Specification.new do |s|
17
17
  ]
18
18
  s.files = [
19
19
  "CHANGELOG",
20
- "MIT-LICENSE",
21
- "README.rdoc",
22
- "init.rb",
23
- "lib/redhillonrails_core.rb",
24
- "lib/redhillonrails_core/active_record/base.rb",
25
- "lib/redhillonrails_core/active_record/connection_adapters/abstract_adapter.rb",
26
- "lib/redhillonrails_core/active_record/connection_adapters/column.rb",
27
- "lib/redhillonrails_core/active_record/connection_adapters/foreign_key_definition.rb",
28
- "lib/redhillonrails_core/active_record/connection_adapters/index_definition.rb",
29
- "lib/redhillonrails_core/active_record/connection_adapters/mysql_adapter.rb",
30
- "lib/redhillonrails_core/active_record/connection_adapters/mysql_column.rb",
31
- "lib/redhillonrails_core/active_record/connection_adapters/postgresql_adapter.rb",
32
- "lib/redhillonrails_core/active_record/connection_adapters/sqlite3_adapter.rb",
33
- "lib/redhillonrails_core/active_record/connection_adapters/table_definition.rb",
34
- "lib/redhillonrails_core/active_record/schema.rb",
35
- "lib/redhillonrails_core/active_record/schema_dumper.rb",
36
- "redhillonrails_core.gemspec"
20
+ "MIT-LICENSE",
21
+ "README.rdoc",
22
+ "init.rb",
23
+ "lib/redhillonrails_core.rb",
24
+ "lib/redhillonrails_core/active_record/base.rb",
25
+ "lib/redhillonrails_core/active_record/connection_adapters/abstract_adapter.rb",
26
+ "lib/redhillonrails_core/active_record/connection_adapters/column.rb",
27
+ "lib/redhillonrails_core/active_record/connection_adapters/foreign_key_definition.rb",
28
+ "lib/redhillonrails_core/active_record/connection_adapters/index_definition.rb",
29
+ "lib/redhillonrails_core/active_record/connection_adapters/mysql_adapter.rb",
30
+ "lib/redhillonrails_core/active_record/connection_adapters/mysql_column.rb",
31
+ "lib/redhillonrails_core/active_record/connection_adapters/postgresql_adapter.rb",
32
+ "lib/redhillonrails_core/active_record/connection_adapters/sqlite3_adapter.rb",
33
+ "lib/redhillonrails_core/active_record/connection_adapters/table_definition.rb",
34
+ "lib/redhillonrails_core/active_record/schema.rb",
35
+ "lib/redhillonrails_core/active_record/schema_dumper.rb",
36
+ "redhillonrails_core.gemspec",
37
+ "spec/connections/mysql/connection.rb",
38
+ "spec/connections/mysql2/connection.rb",
39
+ "spec/connections/postgresql/connection.rb",
40
+ "spec/connections/sqlite3/connection.rb",
41
+ "spec/connections/sqlite3/redhillonrails_core.db",
42
+ "spec/foreign_key_definition_spec.rb",
43
+ "spec/foreign_key_spec.rb",
44
+ "spec/index_definition_spec.rb",
45
+ "spec/index_spec.rb",
46
+ "spec/models/comment.rb",
47
+ "spec/models/post.rb",
48
+ "spec/models/user.rb",
49
+ "spec/schema/schema.rb",
50
+ "spec/schema_dumper_spec.rb",
51
+ "spec/spec_helper.rb",
52
+ "spec/support/reference.rb"
37
53
  ]
38
54
  s.homepage = %q{http://github.com/mlomnicki/redhillonrails_core}
39
- s.rdoc_options = ["--charset=UTF-8"]
40
55
  s.require_paths = ["lib"]
41
- s.rubygems_version = %q{1.3.6}
56
+ s.rubygems_version = %q{1.3.7}
42
57
  s.summary = %q{Adds support in ActiveRecord for foreign_keys, complex indexes and other database-related stuff}
43
58
  s.test_files = [
59
+ "spec/connections/mysql/connection.rb",
60
+ "spec/connections/mysql2/connection.rb",
61
+ "spec/connections/postgresql/connection.rb",
62
+ "spec/connections/sqlite3/connection.rb",
63
+ "spec/foreign_key_definition_spec.rb",
64
+ "spec/foreign_key_spec.rb",
65
+ "spec/index_definition_spec.rb",
66
+ "spec/index_spec.rb",
67
+ "spec/models/comment.rb",
68
+ "spec/models/post.rb",
69
+ "spec/models/user.rb",
44
70
  "spec/schema/schema.rb",
45
- "spec/foreign_key_spec.rb",
46
- "spec/schema_dumper_spec.rb",
47
- "spec/connections/mysql2/connection.rb",
48
- "spec/connections/postgresql/connection.rb",
49
- "spec/connections/sqlite3/connection.rb",
50
- "spec/connections/mysql/connection.rb",
51
- "spec/support/reference.rb",
52
- "spec/index_definition_spec.rb",
53
- "spec/spec_helper.rb",
54
- "spec/index_spec.rb",
55
- "spec/models/user.rb",
56
- "spec/models/post.rb",
57
- "spec/models/comment.rb"
71
+ "spec/schema_dumper_spec.rb",
72
+ "spec/spec_helper.rb",
73
+ "spec/support/reference.rb"
58
74
  ]
59
75
 
60
76
  if s.respond_to? :specification_version then
61
77
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
62
78
  s.specification_version = 3
63
79
 
64
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
80
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
65
81
  s.add_runtime_dependency(%q<activerecord>, [">= 0"])
82
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5"])
83
+ s.add_development_dependency(%q<rspec>, ["~> 1.3"])
84
+ s.add_development_dependency(%q<pg>, [">= 0"])
85
+ s.add_development_dependency(%q<mysql>, [">= 0"])
86
+ s.add_development_dependency(%q<mysql2>, [">= 0"])
87
+ s.add_development_dependency(%q<sqlite3-ruby>, ["~> 1.3.1"])
66
88
  else
67
89
  s.add_dependency(%q<activerecord>, [">= 0"])
90
+ s.add_dependency(%q<jeweler>, ["~> 1.5"])
91
+ s.add_dependency(%q<rspec>, ["~> 1.3"])
92
+ s.add_dependency(%q<pg>, [">= 0"])
93
+ s.add_dependency(%q<mysql>, [">= 0"])
94
+ s.add_dependency(%q<mysql2>, [">= 0"])
95
+ s.add_dependency(%q<sqlite3-ruby>, ["~> 1.3.1"])
68
96
  end
69
97
  else
70
98
  s.add_dependency(%q<activerecord>, [">= 0"])
99
+ s.add_dependency(%q<jeweler>, ["~> 1.5"])
100
+ s.add_dependency(%q<rspec>, ["~> 1.3"])
101
+ s.add_dependency(%q<pg>, [">= 0"])
102
+ s.add_dependency(%q<mysql>, [">= 0"])
103
+ s.add_dependency(%q<mysql2>, [">= 0"])
104
+ s.add_dependency(%q<sqlite3-ruby>, ["~> 1.3.1"])
71
105
  end
72
106
  end
73
107
 
File without changes
@@ -0,0 +1,25 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ require 'models/user'
4
+
5
+ describe "Foreign Key definition" do
6
+
7
+ let(:definition) { RedhillonrailsCore::ActiveRecord::ConnectionAdapters::ForeignKeyDefinition.new("posts_user_fkey", :posts, :user, :users, :id) }
8
+
9
+ it "it is dumped to sql with quoted values" do
10
+ definition.to_sql.should == %Q{CONSTRAINT #{quote('posts_user_fkey')} FOREIGN KEY (#{quote_column_name('user')}) REFERENCES #{quote_table_name('users')} (#{quote_column_name('id')})}
11
+ end
12
+
13
+ def quote_table_name(table)
14
+ ActiveRecord::Base.connection.quote_table_name(table)
15
+ end
16
+
17
+ def quote_column_name(column)
18
+ ActiveRecord::Base.connection.quote_column_name(column)
19
+ end
20
+
21
+ def quote(name)
22
+ ActiveRecord::Base.connection.quote(name)
23
+ end
24
+
25
+ end
@@ -14,7 +14,7 @@ module RedhillonrailsCoreMatchers
14
14
  if @references_table_name
15
15
  @result = @model.foreign_keys.select do |fk|
16
16
  fk.references_table_name == @references_table_name &&
17
- fk.references_column_names == @references_column_names
17
+ @references_column_names.empty? ? true : fk.references_column_names == @references_column_names
18
18
  end
19
19
  else
20
20
  @result = @model.foreign_keys
@@ -26,7 +26,7 @@ module RedhillonrailsCoreMatchers
26
26
  (@on_delete ? fk.on_delete == @on_delete : true)
27
27
  end
28
28
  else
29
- !!@result
29
+ !@result.empty?
30
30
  end
31
31
  end
32
32
 
@@ -34,7 +34,7 @@ module RedhillonrailsCoreMatchers
34
34
  target_column_names = @column_names.present? ? "(#{@column_names.join(', ')})" : ""
35
35
  destinantion_column_names = @references_table_name ? "#{@references_table_name}(#{@references_column_names.join(', ')})" : "anything"
36
36
  invert = should_not ? 'not' : ''
37
- "Expected #{@model.table_name}#{target_column_names} #{invert} to reference #{destinantion_column_names}"
37
+ "Expected #{@model.table_name}#{target_column_names} to #{invert} reference #{destinantion_column_names}"
38
38
  end
39
39
 
40
40
  def failure_message_for_should_not
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 1
8
- - 0
9
- version: 1.1.0
8
+ - 1
9
+ version: 1.1.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - "Micha\xC5\x82 \xC5\x81omnicki"
@@ -14,13 +14,13 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-01-09 00:00:00 +01:00
17
+ date: 2011-01-10 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: activerecord
22
- prerelease: false
23
22
  requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
@@ -28,7 +28,90 @@ dependencies:
28
28
  - 0
29
29
  version: "0"
30
30
  type: :runtime
31
+ prerelease: false
31
32
  version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: jeweler
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ segments:
41
+ - 1
42
+ - 5
43
+ version: "1.5"
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *id002
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: &id003 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 1
56
+ - 3
57
+ version: "1.3"
58
+ type: :development
59
+ prerelease: false
60
+ version_requirements: *id003
61
+ - !ruby/object:Gem::Dependency
62
+ name: pg
63
+ requirement: &id004 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ segments:
69
+ - 0
70
+ version: "0"
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: *id004
74
+ - !ruby/object:Gem::Dependency
75
+ name: mysql
76
+ requirement: &id005 !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ segments:
82
+ - 0
83
+ version: "0"
84
+ type: :development
85
+ prerelease: false
86
+ version_requirements: *id005
87
+ - !ruby/object:Gem::Dependency
88
+ name: mysql2
89
+ requirement: &id006 !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ segments:
95
+ - 0
96
+ version: "0"
97
+ type: :development
98
+ prerelease: false
99
+ version_requirements: *id006
100
+ - !ruby/object:Gem::Dependency
101
+ name: sqlite3-ruby
102
+ requirement: &id007 !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ~>
106
+ - !ruby/object:Gem::Version
107
+ segments:
108
+ - 1
109
+ - 3
110
+ - 1
111
+ version: 1.3.1
112
+ type: :development
113
+ prerelease: false
114
+ version_requirements: *id007
32
115
  description: Adds support in ActiveRecord for foreign_keys, complex indexes and other database-related stuff. Easily create foreign_keys, complex indexes and views.
33
116
  email: michal.lomnicki@gmail.com
34
117
  executables: []
@@ -56,23 +139,42 @@ files:
56
139
  - lib/redhillonrails_core/active_record/schema.rb
57
140
  - lib/redhillonrails_core/active_record/schema_dumper.rb
58
141
  - redhillonrails_core.gemspec
142
+ - spec/connections/mysql/connection.rb
143
+ - spec/connections/mysql2/connection.rb
144
+ - spec/connections/postgresql/connection.rb
145
+ - spec/connections/sqlite3/connection.rb
146
+ - spec/connections/sqlite3/redhillonrails_core.db
147
+ - spec/foreign_key_definition_spec.rb
148
+ - spec/foreign_key_spec.rb
149
+ - spec/index_definition_spec.rb
150
+ - spec/index_spec.rb
151
+ - spec/models/comment.rb
152
+ - spec/models/post.rb
153
+ - spec/models/user.rb
154
+ - spec/schema/schema.rb
155
+ - spec/schema_dumper_spec.rb
156
+ - spec/spec_helper.rb
157
+ - spec/support/reference.rb
59
158
  has_rdoc: true
60
159
  homepage: http://github.com/mlomnicki/redhillonrails_core
61
160
  licenses: []
62
161
 
63
162
  post_install_message:
64
- rdoc_options:
65
- - --charset=UTF-8
163
+ rdoc_options: []
164
+
66
165
  require_paths:
67
166
  - lib
68
167
  required_ruby_version: !ruby/object:Gem::Requirement
168
+ none: false
69
169
  requirements:
70
170
  - - ">="
71
171
  - !ruby/object:Gem::Version
172
+ hash: 428669949
72
173
  segments:
73
174
  - 0
74
175
  version: "0"
75
176
  required_rubygems_version: !ruby/object:Gem::Requirement
177
+ none: false
76
178
  requirements:
77
179
  - - ">="
78
180
  - !ruby/object:Gem::Version
@@ -82,22 +184,23 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
184
  requirements: []
83
185
 
84
186
  rubyforge_project:
85
- rubygems_version: 1.3.6
187
+ rubygems_version: 1.3.7
86
188
  signing_key:
87
189
  specification_version: 3
88
190
  summary: Adds support in ActiveRecord for foreign_keys, complex indexes and other database-related stuff
89
191
  test_files:
90
- - spec/schema/schema.rb
91
- - spec/foreign_key_spec.rb
92
- - spec/schema_dumper_spec.rb
192
+ - spec/connections/mysql/connection.rb
93
193
  - spec/connections/mysql2/connection.rb
94
194
  - spec/connections/postgresql/connection.rb
95
195
  - spec/connections/sqlite3/connection.rb
96
- - spec/connections/mysql/connection.rb
97
- - spec/support/reference.rb
196
+ - spec/foreign_key_definition_spec.rb
197
+ - spec/foreign_key_spec.rb
98
198
  - spec/index_definition_spec.rb
99
- - spec/spec_helper.rb
100
199
  - spec/index_spec.rb
101
- - spec/models/user.rb
102
- - spec/models/post.rb
103
200
  - spec/models/comment.rb
201
+ - spec/models/post.rb
202
+ - spec/models/user.rb
203
+ - spec/schema/schema.rb
204
+ - spec/schema_dumper_spec.rb
205
+ - spec/spec_helper.rb
206
+ - spec/support/reference.rb