redhillonrails_core 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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