foreigner-matcher 0.2.0 → 0.2.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/.gitignore +1 -0
- data/.travis.yml +21 -0
- data/Gemfile +15 -8
- data/Gemfile.lock +85 -55
- data/README.md +26 -9
- data/Rakefile +42 -12
- data/ci/config/database.yml +18 -0
- data/ci/gemfiles/rspec2_9_rails3_0.gemfile +22 -0
- data/ci/gemfiles/rspec2_9_rails3_0.gemfile.lock +94 -0
- data/ci/gemfiles/rspec2_9_rails3_1.gemfile +22 -0
- data/ci/gemfiles/rspec2_9_rails3_1.gemfile.lock +106 -0
- data/ci/script/create_db.sh +10 -0
- data/lib/foreigner-matcher.rb +8 -3
- data/lib/foreigner-matcher/version.rb +1 -1
- data/spec/spec_helper.rb +24 -4
- data/spec/support/active_record_version_helpers.rb +8 -0
- data/spec/support/connection_helpers.rb +9 -0
- data/spec/support/foreign_key_definition_helpers.rb +5 -0
- data/spec/support/test_models.rb +7 -6
- data/spec/test_models/comment_spec.rb +4 -2
- data/spec/test_models/default_option_spec.rb +40 -0
- data/spec/test_models/search_spec.rb +4 -2
- data/spec/test_models/special_user_record_spec.rb +4 -2
- data/spec/test_models/table_without_foreign_key_spec.rb +4 -2
- data/spec/test_models/user_login_spec.rb +4 -2
- data/spec/test_models/user_type_spec.rb +10 -4
- metadata +21 -5
data/.gitignore
CHANGED
data/.travis.yml
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
language: ruby
|
2
|
+
rvm:
|
3
|
+
- 1.8.7
|
4
|
+
- 1.9.2
|
5
|
+
- 1.9.3
|
6
|
+
- ree
|
7
|
+
- rbx-18mode
|
8
|
+
- rbx-19mode
|
9
|
+
- jruby-18mode
|
10
|
+
- jruby-19mode
|
11
|
+
env:
|
12
|
+
- DB=mysql
|
13
|
+
- DB=postgres
|
14
|
+
gemfile:
|
15
|
+
- Gemfile
|
16
|
+
- ci/gemfiles/rspec2_9_rails3_1.gemfile
|
17
|
+
- ci/gemfiles/rspec2_9_rails3_0.gemfile
|
18
|
+
before_script:
|
19
|
+
- ci/script/create_db.sh
|
20
|
+
- bundle exec rake db:test:reset --trace
|
21
|
+
script: bundle exec rspec -b
|
data/Gemfile
CHANGED
@@ -3,13 +3,20 @@ source "http://rubygems.org"
|
|
3
3
|
# Specify your gem's dependencies in foreigner-matcher.gemspec
|
4
4
|
gemspec
|
5
5
|
|
6
|
-
group :development do
|
7
|
-
gem "kramdown", "~> 0.13.2"
|
8
|
-
end
|
9
|
-
|
10
6
|
group :test do
|
11
|
-
gem "
|
12
|
-
gem "
|
13
|
-
gem "
|
14
|
-
gem "
|
7
|
+
gem "rake"
|
8
|
+
gem "rspec", "~> 2.9.0"
|
9
|
+
gem "mocha", "~> 0.11.0"
|
10
|
+
gem "activerecord", "~> 3.2.0"
|
11
|
+
gem "railties", "~> 3.2.0"
|
12
|
+
|
13
|
+
platforms :ruby do
|
14
|
+
gem "mysql2", "~> 0.3.0"
|
15
|
+
gem "pg", "~> 0.13.2"
|
16
|
+
end
|
17
|
+
|
18
|
+
platforms :jruby do
|
19
|
+
gem "activerecord-jdbcmysql-adapter"
|
20
|
+
gem "activerecord-jdbcpostgresql-adapter"
|
21
|
+
end
|
15
22
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,74 +1,104 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
foreigner-matcher (0.2.
|
4
|
+
foreigner-matcher (0.2.1)
|
5
5
|
foreigner (>= 1.0.0)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: http://rubygems.org/
|
9
9
|
specs:
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
rack (~> 1.2
|
18
|
-
rack-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
10
|
+
actionpack (3.2.3)
|
11
|
+
activemodel (= 3.2.3)
|
12
|
+
activesupport (= 3.2.3)
|
13
|
+
builder (~> 3.0.0)
|
14
|
+
erubis (~> 2.7.0)
|
15
|
+
journey (~> 1.0.1)
|
16
|
+
rack (~> 1.4.0)
|
17
|
+
rack-cache (~> 1.2)
|
18
|
+
rack-test (~> 0.6.1)
|
19
|
+
sprockets (~> 2.1.2)
|
20
|
+
activemodel (3.2.3)
|
21
|
+
activesupport (= 3.2.3)
|
22
|
+
builder (~> 3.0.0)
|
23
|
+
activerecord (3.2.3)
|
24
|
+
activemodel (= 3.2.3)
|
25
|
+
activesupport (= 3.2.3)
|
26
|
+
arel (~> 3.0.2)
|
27
|
+
tzinfo (~> 0.3.29)
|
28
|
+
activerecord-jdbc-adapter (1.2.2)
|
29
|
+
activerecord-jdbcmysql-adapter (1.2.2)
|
30
|
+
activerecord-jdbc-adapter (~> 1.2.2)
|
31
|
+
jdbc-mysql (~> 5.1.0)
|
32
|
+
activerecord-jdbcpostgresql-adapter (1.2.2)
|
33
|
+
activerecord-jdbc-adapter (~> 1.2.2)
|
34
|
+
jdbc-postgres (>= 9.0, < 9.2)
|
35
|
+
activesupport (3.2.3)
|
36
|
+
i18n (~> 0.6)
|
37
|
+
multi_json (~> 1.0)
|
38
|
+
arel (3.0.2)
|
39
|
+
builder (3.0.0)
|
40
|
+
diff-lcs (1.1.3)
|
41
|
+
erubis (2.7.0)
|
42
|
+
foreigner (1.1.6)
|
37
43
|
activerecord (>= 3.0.0)
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
44
|
+
hike (1.2.1)
|
45
|
+
i18n (0.6.0)
|
46
|
+
jdbc-mysql (5.1.13)
|
47
|
+
jdbc-postgres (9.1.901)
|
48
|
+
journey (1.0.3)
|
49
|
+
json (1.7.0)
|
50
|
+
json (1.7.0-java)
|
51
|
+
metaclass (0.0.1)
|
52
|
+
mocha (0.11.3)
|
53
|
+
metaclass (~> 0.0.1)
|
54
|
+
multi_json (1.3.4)
|
55
|
+
mysql2 (0.3.11)
|
56
|
+
pg (0.13.2)
|
57
|
+
rack (1.4.1)
|
58
|
+
rack-cache (1.2)
|
59
|
+
rack (>= 0.4)
|
60
|
+
rack-ssl (1.3.2)
|
61
|
+
rack
|
62
|
+
rack-test (0.6.1)
|
45
63
|
rack (>= 1.0)
|
46
|
-
railties (3.
|
47
|
-
actionpack (= 3.
|
48
|
-
activesupport (= 3.
|
64
|
+
railties (3.2.3)
|
65
|
+
actionpack (= 3.2.3)
|
66
|
+
activesupport (= 3.2.3)
|
67
|
+
rack-ssl (~> 1.3.2)
|
49
68
|
rake (>= 0.8.7)
|
50
69
|
rdoc (~> 3.4)
|
51
|
-
thor (~> 0.14.
|
52
|
-
rake (0.9.2)
|
53
|
-
rdoc (3.
|
54
|
-
|
55
|
-
|
56
|
-
rspec-
|
57
|
-
rspec-
|
58
|
-
|
59
|
-
rspec-
|
60
|
-
|
61
|
-
|
70
|
+
thor (~> 0.14.6)
|
71
|
+
rake (0.9.2.2)
|
72
|
+
rdoc (3.12)
|
73
|
+
json (~> 1.4)
|
74
|
+
rspec (2.9.0)
|
75
|
+
rspec-core (~> 2.9.0)
|
76
|
+
rspec-expectations (~> 2.9.0)
|
77
|
+
rspec-mocks (~> 2.9.0)
|
78
|
+
rspec-core (2.9.0)
|
79
|
+
rspec-expectations (2.9.1)
|
80
|
+
diff-lcs (~> 1.1.3)
|
81
|
+
rspec-mocks (2.9.0)
|
82
|
+
sprockets (2.1.3)
|
83
|
+
hike (~> 1.2)
|
84
|
+
rack (~> 1.0)
|
85
|
+
tilt (~> 1.1, != 1.3.0)
|
62
86
|
thor (0.14.6)
|
63
|
-
|
87
|
+
tilt (1.3.3)
|
88
|
+
tzinfo (0.3.33)
|
64
89
|
|
65
90
|
PLATFORMS
|
91
|
+
java
|
66
92
|
ruby
|
67
93
|
|
68
94
|
DEPENDENCIES
|
69
|
-
activerecord (~> 3.
|
95
|
+
activerecord (~> 3.2.0)
|
96
|
+
activerecord-jdbcmysql-adapter
|
97
|
+
activerecord-jdbcpostgresql-adapter
|
70
98
|
foreigner-matcher!
|
71
|
-
|
72
|
-
mysql2 (~> 0.
|
73
|
-
|
74
|
-
|
99
|
+
mocha (~> 0.11.0)
|
100
|
+
mysql2 (~> 0.3.0)
|
101
|
+
pg (~> 0.13.2)
|
102
|
+
railties (~> 3.2.0)
|
103
|
+
rake
|
104
|
+
rspec (~> 2.9.0)
|
data/README.md
CHANGED
@@ -1,20 +1,22 @@
|
|
1
1
|
# foreigner-matcher
|
2
2
|
|
3
|
+
[](http://travis-ci.org/yellow5/foreigner-matcher)
|
4
|
+
|
3
5
|
RSpec matcher for the [Foreigner gem](https://github.com/matthuhiggins/foreigner), inspired by [Remarkable](https://github.com/remarkable/remarkable) ActiveRecord matchers.
|
4
6
|
|
5
7
|
## Version Information
|
6
8
|
|
7
|
-
Note that the matcher is exactly the same between
|
9
|
+
Note that the matcher is exactly the same between 0.1.1 and 0.2.0; all that changes is the Foreigner dependency. Why, you ask? Foreigner >= 1.0.0 is Rails 3.x only!
|
8
10
|
|
9
|
-
**Rails 3**
|
11
|
+
**Rails 3.x**
|
10
12
|
|
11
|
-
Foreigner >= 1.0.0 use foreigner-matcher ~> 0.2
|
13
|
+
Foreigner >= 1.0.0 use foreigner-matcher ~> 0.2.0
|
12
14
|
|
13
|
-
Foreigner ~> 0.9 use foreigner-matcher ~> 0.1
|
15
|
+
Foreigner ~> 0.9 use foreigner-matcher ~> 0.1.1
|
14
16
|
|
15
17
|
**Rails 2.3**
|
16
18
|
|
17
|
-
Use foreigner-matcher ~> 0.1
|
19
|
+
Use foreigner-matcher ~> 0.1.1
|
18
20
|
|
19
21
|
## Installation
|
20
22
|
|
@@ -22,7 +24,7 @@ Use foreigner-matcher ~> 0.1
|
|
22
24
|
|
23
25
|
For installation with bundler, add the following to the approrpriate group in your Gemfile:
|
24
26
|
|
25
|
-
gem "foreigner-matcher", "~> 0.2", :require => nil
|
27
|
+
gem "foreigner-matcher", "~> 0.2.0", :require => nil
|
26
28
|
|
27
29
|
For installation without bundler in Rails 2.3, add the following to your config/environments/test.rb:
|
28
30
|
|
@@ -52,6 +54,18 @@ For example. Given these two models:
|
|
52
54
|
belongs_to user
|
53
55
|
end
|
54
56
|
|
57
|
+
And given this migration for the foreign key:
|
58
|
+
|
59
|
+
class ChangeUserIdToForeignKeyOnUserLogins < ActiveRecord::Migration
|
60
|
+
def self.up
|
61
|
+
add_foreign_key :user_logins, :users
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.down
|
65
|
+
remove_foreign_key :user_logins, :users
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
55
69
|
The spec would look like this:
|
56
70
|
|
57
71
|
describe UserLogin do
|
@@ -70,10 +84,13 @@ These examples will also work passing <tt>:user</tt> as the table name. Why? The
|
|
70
84
|
|
71
85
|
## My Testing Environment
|
72
86
|
|
73
|
-
|
87
|
+
The project is tested on [Travis-CI](https://github.com/travis-ci/travis-ci). The rubies and databases that the matcher is regularly verified with can be seen in [.travis.yml](https://github.com/yellow5/foreigner-matcher/blob/master/.travis.yml)
|
88
|
+
|
89
|
+
The current gems that are tested:
|
74
90
|
|
75
|
-
* ActiveRecord ~> 3.
|
76
|
-
* ActiveRecord ~>
|
91
|
+
* ActiveRecord ~> 3.2.0, Rspec ~> 2.9.0, Foreigner >= 1.00
|
92
|
+
* ActiveRecord ~> 3.1.0, Rspec ~> 2.9.0, Foreigner >= 1.00
|
93
|
+
* ActiveRecord ~> 3.0.0, Rspec ~> 2.9.0, Foreigner >= 1.00
|
77
94
|
|
78
95
|
## Copyright
|
79
96
|
|
data/Rakefile
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
unless ENV['TRAVIS']
|
2
|
+
require 'bundler'
|
3
|
+
Bundler::GemHelper.install_tasks
|
4
|
+
end
|
3
5
|
|
4
6
|
namespace :db do
|
5
7
|
namespace :test do
|
@@ -22,13 +24,20 @@ namespace :db do
|
|
22
24
|
end
|
23
25
|
|
24
26
|
puts "Establishing connection to test db..."
|
25
|
-
|
27
|
+
db_config_yml = File.dirname(__FILE__)
|
28
|
+
db_config_yml << (ENV['TRAVIS'] ? '/ci' : '/spec')
|
29
|
+
db_config_yml << '/config/database.yml'
|
30
|
+
db_configs = YAML::load(File.open(db_config_yml))
|
31
|
+
db_adapter = ENV['DB']
|
32
|
+
db_adapter = 'jdbc-' + db_adapter if RUBY_PLATFORM == 'java'
|
33
|
+
db_config = db_configs[db_adapter]
|
34
|
+
ActiveRecord::Base.configurations = db_configs
|
26
35
|
ActiveRecord::Base.establish_connection(db_config)
|
27
36
|
conn = ActiveRecord::Base.connection
|
28
37
|
puts "Connected to #{db_config['database']} via a #{db_config['adapter']} connector"
|
29
38
|
|
30
39
|
puts "\nDropping test tables, if they exist"
|
31
|
-
%w( user_logins user_types comments searches special_user_records table_without_foreign_keys users ).each do |test_table|
|
40
|
+
%w( default_options user_logins user_types comments searches special_user_records table_without_foreign_keys users ).each do |test_table|
|
32
41
|
print "\tDropping #{test_table}..."
|
33
42
|
conn.execute("drop table if exists #{test_table}")
|
34
43
|
print "done\n"
|
@@ -46,7 +55,7 @@ namespace :db do
|
|
46
55
|
t.integer :special_user_id
|
47
56
|
end
|
48
57
|
end
|
49
|
-
[ :user_logins, :user_types, :comments, :searches, :table_without_foreign_keys ].each do |user_table|
|
58
|
+
[ :default_options, :user_logins, :user_types, :comments, :searches, :table_without_foreign_keys ].each do |user_table|
|
50
59
|
print_table_creation(user_table) do
|
51
60
|
conn.create_table(user_table) do |t|
|
52
61
|
t.integer :user_id
|
@@ -54,16 +63,37 @@ namespace :db do
|
|
54
63
|
end
|
55
64
|
end
|
56
65
|
|
66
|
+
# Include ActiveRecordVersionHelpers
|
67
|
+
require "#{File.dirname(__FILE__)}/spec/support/active_record_version_helpers.rb"
|
68
|
+
include ActiveRecordVersionHelpers
|
69
|
+
|
57
70
|
require 'foreigner'
|
58
|
-
|
59
|
-
|
71
|
+
if active_record_version > 3.0
|
72
|
+
Foreigner::Railtie.instance.run_initializers
|
73
|
+
else
|
74
|
+
foreigner_railtie = Foreigner::Railtie.new
|
75
|
+
foreigner_railtie.run_initializers(foreigner_railtie)
|
76
|
+
end
|
60
77
|
|
61
78
|
puts "\nCreating foreign keys"
|
62
|
-
print_foreign_key_creation('
|
63
|
-
|
64
|
-
|
65
|
-
print_foreign_key_creation('
|
66
|
-
|
79
|
+
print_foreign_key_creation('default_options') do
|
80
|
+
conn.add_foreign_key(:default_options, :users)
|
81
|
+
end
|
82
|
+
print_foreign_key_creation('user_logins') do
|
83
|
+
conn.add_foreign_key(:user_logins, :users, :dependent => :nullify)
|
84
|
+
end
|
85
|
+
print_foreign_key_creation('user_types') do
|
86
|
+
conn.add_foreign_key(:user_types, :users, :dependent => :restrict)
|
87
|
+
end
|
88
|
+
print_foreign_key_creation('comments') do
|
89
|
+
conn.add_foreign_key(:comments, :users, :dependent => :delete)
|
90
|
+
end
|
91
|
+
print_foreign_key_creation('searches') do
|
92
|
+
conn.add_foreign_key(:searches, :users, :name => "user_search_special_fk", :dependent => :delete)
|
93
|
+
end
|
94
|
+
print_foreign_key_creation('special_user_records') do
|
95
|
+
conn.add_foreign_key(:special_user_records, :users, :column => "special_user_id", :dependent => :delete)
|
96
|
+
end
|
67
97
|
end
|
68
98
|
end
|
69
99
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
mysql:
|
2
|
+
adapter: mysql2
|
3
|
+
database: foreigner-matcher_test
|
4
|
+
username: root
|
5
|
+
encoding: utf8
|
6
|
+
jdbc-mysql:
|
7
|
+
adapter: jdbcmysql
|
8
|
+
database: foreigner-matcher_test
|
9
|
+
username: root
|
10
|
+
encoding: utf8
|
11
|
+
postgres:
|
12
|
+
adapter: postgresql
|
13
|
+
database: foreigner-matcher_test
|
14
|
+
username: postgres
|
15
|
+
jdbc-postgres:
|
16
|
+
adapter: jdbcpostgresql
|
17
|
+
database: foreigner-matcher_test
|
18
|
+
username: postgres
|
@@ -0,0 +1,22 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in foreigner-matcher.gemspec
|
4
|
+
gemspec :path => '../../'
|
5
|
+
|
6
|
+
group :test do
|
7
|
+
gem "rake"
|
8
|
+
gem "rspec", "~> 2.9.0"
|
9
|
+
gem "mocha", "~> 0.11.0"
|
10
|
+
gem "activerecord", "~> 3.0.0"
|
11
|
+
gem "railties", "~> 3.0.0"
|
12
|
+
|
13
|
+
platforms :ruby do
|
14
|
+
gem "mysql2", "~> 0.2.0"
|
15
|
+
gem "pg", "~> 0.13.2"
|
16
|
+
end
|
17
|
+
|
18
|
+
platforms :jruby do
|
19
|
+
gem "activerecord-jdbcmysql-adapter"
|
20
|
+
gem "activerecord-jdbcpostgresql-adapter"
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
PATH
|
2
|
+
remote: /home/cameron/projects/my_stuff/foreigner-matcher
|
3
|
+
specs:
|
4
|
+
foreigner-matcher (0.2.1)
|
5
|
+
foreigner (>= 1.0.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
abstract (1.0.0)
|
11
|
+
actionpack (3.0.12)
|
12
|
+
activemodel (= 3.0.12)
|
13
|
+
activesupport (= 3.0.12)
|
14
|
+
builder (~> 2.1.2)
|
15
|
+
erubis (~> 2.6.6)
|
16
|
+
i18n (~> 0.5.0)
|
17
|
+
rack (~> 1.2.5)
|
18
|
+
rack-mount (~> 0.6.14)
|
19
|
+
rack-test (~> 0.5.7)
|
20
|
+
tzinfo (~> 0.3.23)
|
21
|
+
activemodel (3.0.12)
|
22
|
+
activesupport (= 3.0.12)
|
23
|
+
builder (~> 2.1.2)
|
24
|
+
i18n (~> 0.5.0)
|
25
|
+
activerecord (3.0.12)
|
26
|
+
activemodel (= 3.0.12)
|
27
|
+
activesupport (= 3.0.12)
|
28
|
+
arel (~> 2.0.10)
|
29
|
+
tzinfo (~> 0.3.23)
|
30
|
+
activerecord-jdbc-adapter (1.2.2)
|
31
|
+
activerecord-jdbcmysql-adapter (1.2.2)
|
32
|
+
activerecord-jdbc-adapter (~> 1.2.2)
|
33
|
+
jdbc-mysql (~> 5.1.0)
|
34
|
+
activerecord-jdbcpostgresql-adapter (1.2.2)
|
35
|
+
activerecord-jdbc-adapter (~> 1.2.2)
|
36
|
+
jdbc-postgres (>= 9.0, < 9.2)
|
37
|
+
activesupport (3.0.12)
|
38
|
+
arel (2.0.10)
|
39
|
+
builder (2.1.2)
|
40
|
+
diff-lcs (1.1.3)
|
41
|
+
erubis (2.6.6)
|
42
|
+
abstract (>= 1.0.0)
|
43
|
+
foreigner (1.1.6)
|
44
|
+
activerecord (>= 3.0.0)
|
45
|
+
i18n (0.5.0)
|
46
|
+
jdbc-mysql (5.1.13)
|
47
|
+
jdbc-postgres (9.1.901)
|
48
|
+
json (1.7.0)
|
49
|
+
json (1.7.0-java)
|
50
|
+
metaclass (0.0.1)
|
51
|
+
mocha (0.11.3)
|
52
|
+
metaclass (~> 0.0.1)
|
53
|
+
mysql2 (0.2.18)
|
54
|
+
pg (0.13.2)
|
55
|
+
rack (1.2.5)
|
56
|
+
rack-mount (0.6.14)
|
57
|
+
rack (>= 1.0.0)
|
58
|
+
rack-test (0.5.7)
|
59
|
+
rack (>= 1.0)
|
60
|
+
railties (3.0.12)
|
61
|
+
actionpack (= 3.0.12)
|
62
|
+
activesupport (= 3.0.12)
|
63
|
+
rake (>= 0.8.7)
|
64
|
+
rdoc (~> 3.4)
|
65
|
+
thor (~> 0.14.4)
|
66
|
+
rake (0.9.2.2)
|
67
|
+
rdoc (3.12)
|
68
|
+
json (~> 1.4)
|
69
|
+
rspec (2.9.0)
|
70
|
+
rspec-core (~> 2.9.0)
|
71
|
+
rspec-expectations (~> 2.9.0)
|
72
|
+
rspec-mocks (~> 2.9.0)
|
73
|
+
rspec-core (2.9.0)
|
74
|
+
rspec-expectations (2.9.1)
|
75
|
+
diff-lcs (~> 1.1.3)
|
76
|
+
rspec-mocks (2.9.0)
|
77
|
+
thor (0.14.6)
|
78
|
+
tzinfo (0.3.33)
|
79
|
+
|
80
|
+
PLATFORMS
|
81
|
+
java
|
82
|
+
ruby
|
83
|
+
|
84
|
+
DEPENDENCIES
|
85
|
+
activerecord (~> 3.0.0)
|
86
|
+
activerecord-jdbcmysql-adapter
|
87
|
+
activerecord-jdbcpostgresql-adapter
|
88
|
+
foreigner-matcher!
|
89
|
+
mocha (~> 0.11.0)
|
90
|
+
mysql2 (~> 0.2.0)
|
91
|
+
pg (~> 0.13.2)
|
92
|
+
railties (~> 3.0.0)
|
93
|
+
rake
|
94
|
+
rspec (~> 2.9.0)
|
@@ -0,0 +1,22 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in foreigner-matcher.gemspec
|
4
|
+
gemspec :path => '../../'
|
5
|
+
|
6
|
+
group :test do
|
7
|
+
gem "rake"
|
8
|
+
gem "rspec", "~> 2.9.0"
|
9
|
+
gem "mocha", "~> 0.11.0"
|
10
|
+
gem "activerecord", "~> 3.1.0"
|
11
|
+
gem "railties", "~> 3.1.0"
|
12
|
+
|
13
|
+
platforms :ruby do
|
14
|
+
gem "mysql2", "~> 0.3.0"
|
15
|
+
gem "pg", "~> 0.13.2"
|
16
|
+
end
|
17
|
+
|
18
|
+
platforms :jruby do
|
19
|
+
gem "activerecord-jdbcmysql-adapter"
|
20
|
+
gem "activerecord-jdbcpostgresql-adapter"
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
PATH
|
2
|
+
remote: /home/cameron/projects/my_stuff/foreigner-matcher
|
3
|
+
specs:
|
4
|
+
foreigner-matcher (0.2.1)
|
5
|
+
foreigner (>= 1.0.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
actionpack (3.1.4)
|
11
|
+
activemodel (= 3.1.4)
|
12
|
+
activesupport (= 3.1.4)
|
13
|
+
builder (~> 3.0.0)
|
14
|
+
erubis (~> 2.7.0)
|
15
|
+
i18n (~> 0.6)
|
16
|
+
rack (~> 1.3.6)
|
17
|
+
rack-cache (~> 1.1)
|
18
|
+
rack-mount (~> 0.8.2)
|
19
|
+
rack-test (~> 0.6.1)
|
20
|
+
sprockets (~> 2.0.3)
|
21
|
+
activemodel (3.1.4)
|
22
|
+
activesupport (= 3.1.4)
|
23
|
+
builder (~> 3.0.0)
|
24
|
+
i18n (~> 0.6)
|
25
|
+
activerecord (3.1.4)
|
26
|
+
activemodel (= 3.1.4)
|
27
|
+
activesupport (= 3.1.4)
|
28
|
+
arel (~> 2.2.3)
|
29
|
+
tzinfo (~> 0.3.29)
|
30
|
+
activerecord-jdbc-adapter (1.2.2)
|
31
|
+
activerecord-jdbcmysql-adapter (1.2.2)
|
32
|
+
activerecord-jdbc-adapter (~> 1.2.2)
|
33
|
+
jdbc-mysql (~> 5.1.0)
|
34
|
+
activerecord-jdbcpostgresql-adapter (1.2.2)
|
35
|
+
activerecord-jdbc-adapter (~> 1.2.2)
|
36
|
+
jdbc-postgres (>= 9.0, < 9.2)
|
37
|
+
activesupport (3.1.4)
|
38
|
+
multi_json (~> 1.0)
|
39
|
+
arel (2.2.3)
|
40
|
+
builder (3.0.0)
|
41
|
+
diff-lcs (1.1.3)
|
42
|
+
erubis (2.7.0)
|
43
|
+
foreigner (1.1.6)
|
44
|
+
activerecord (>= 3.0.0)
|
45
|
+
hike (1.2.1)
|
46
|
+
i18n (0.6.0)
|
47
|
+
jdbc-mysql (5.1.13)
|
48
|
+
jdbc-postgres (9.1.901)
|
49
|
+
json (1.7.0)
|
50
|
+
json (1.7.0-java)
|
51
|
+
metaclass (0.0.1)
|
52
|
+
mocha (0.11.3)
|
53
|
+
metaclass (~> 0.0.1)
|
54
|
+
multi_json (1.3.4)
|
55
|
+
mysql2 (0.3.11)
|
56
|
+
pg (0.13.2)
|
57
|
+
rack (1.3.6)
|
58
|
+
rack-cache (1.2)
|
59
|
+
rack (>= 0.4)
|
60
|
+
rack-mount (0.8.3)
|
61
|
+
rack (>= 1.0.0)
|
62
|
+
rack-ssl (1.3.2)
|
63
|
+
rack
|
64
|
+
rack-test (0.6.1)
|
65
|
+
rack (>= 1.0)
|
66
|
+
railties (3.1.4)
|
67
|
+
actionpack (= 3.1.4)
|
68
|
+
activesupport (= 3.1.4)
|
69
|
+
rack-ssl (~> 1.3.2)
|
70
|
+
rake (>= 0.8.7)
|
71
|
+
rdoc (~> 3.4)
|
72
|
+
thor (~> 0.14.6)
|
73
|
+
rake (0.9.2.2)
|
74
|
+
rdoc (3.12)
|
75
|
+
json (~> 1.4)
|
76
|
+
rspec (2.9.0)
|
77
|
+
rspec-core (~> 2.9.0)
|
78
|
+
rspec-expectations (~> 2.9.0)
|
79
|
+
rspec-mocks (~> 2.9.0)
|
80
|
+
rspec-core (2.9.0)
|
81
|
+
rspec-expectations (2.9.1)
|
82
|
+
diff-lcs (~> 1.1.3)
|
83
|
+
rspec-mocks (2.9.0)
|
84
|
+
sprockets (2.0.4)
|
85
|
+
hike (~> 1.2)
|
86
|
+
rack (~> 1.0)
|
87
|
+
tilt (~> 1.1, != 1.3.0)
|
88
|
+
thor (0.14.6)
|
89
|
+
tilt (1.3.3)
|
90
|
+
tzinfo (0.3.33)
|
91
|
+
|
92
|
+
PLATFORMS
|
93
|
+
java
|
94
|
+
ruby
|
95
|
+
|
96
|
+
DEPENDENCIES
|
97
|
+
activerecord (~> 3.1.0)
|
98
|
+
activerecord-jdbcmysql-adapter
|
99
|
+
activerecord-jdbcpostgresql-adapter
|
100
|
+
foreigner-matcher!
|
101
|
+
mocha (~> 0.11.0)
|
102
|
+
mysql2 (~> 0.3.0)
|
103
|
+
pg (~> 0.13.2)
|
104
|
+
railties (~> 3.1.0)
|
105
|
+
rake
|
106
|
+
rspec (~> 2.9.0)
|
data/lib/foreigner-matcher.rb
CHANGED
@@ -28,9 +28,10 @@ module ForeignerMatcher # :nodoc:
|
|
28
28
|
private
|
29
29
|
|
30
30
|
def foreign_key_definition
|
31
|
-
defaults
|
32
|
-
defaults[:name]
|
33
|
-
|
31
|
+
defaults = { :primary_key => "id", :column => "#{@parent.singularize}_id" }
|
32
|
+
defaults[:name] = "#{@child.class.table_name}_#{defaults[:column]}_fk"
|
33
|
+
defaults[:dependent] = nil if postgresql_db?
|
34
|
+
full_options = defaults.merge(@options)
|
34
35
|
Foreigner::ConnectionAdapters::ForeignKeyDefinition.new(@child.class.table_name, @parent.pluralize, full_options)
|
35
36
|
end
|
36
37
|
|
@@ -50,6 +51,10 @@ module ForeignerMatcher # :nodoc:
|
|
50
51
|
fks = child_foreign_keys
|
51
52
|
fks.empty? ? 'foreign keys' : fks
|
52
53
|
end
|
54
|
+
|
55
|
+
def postgresql_db?
|
56
|
+
ActiveRecord::Base.connection.adapter_name.downcase == 'postgresql'
|
57
|
+
end
|
53
58
|
end
|
54
59
|
|
55
60
|
# Ensures that parent table has foreign key
|
data/spec/spec_helper.rb
CHANGED
@@ -5,12 +5,32 @@ require 'rails/railtie'
|
|
5
5
|
require 'foreigner'
|
6
6
|
|
7
7
|
# Open a database connection
|
8
|
-
|
8
|
+
db_config_yml = File.dirname(__FILE__)
|
9
|
+
db_config_yml << '/../ci' if ENV['TRAVIS']
|
10
|
+
db_config_yml << '/config/database.yml'
|
11
|
+
db_configs = YAML::load(File.open(db_config_yml))
|
12
|
+
db_adapter = ENV['DB']
|
13
|
+
db_adapter = 'jdbc-' + db_adapter if RUBY_PLATFORM == 'java'
|
14
|
+
db_config = db_configs[db_adapter]
|
15
|
+
ActiveRecord::Base.configurations = db_configs
|
9
16
|
ActiveRecord::Base.establish_connection(db_config)
|
10
17
|
|
11
|
-
foreigner_railtie = Foreigner::Railtie.new
|
12
|
-
foreigner_railtie.run_initializers(foreigner_railtie)
|
13
|
-
|
14
18
|
# Requires supporting files with custom matchers and macros, etc,
|
15
19
|
# in ./support/ and its subdirectories.
|
16
20
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
21
|
+
|
22
|
+
include ActiveRecordVersionHelpers
|
23
|
+
if active_record_version > 3.0
|
24
|
+
Foreigner::Railtie.instance.run_initializers
|
25
|
+
else
|
26
|
+
foreigner_railtie = Foreigner::Railtie.new
|
27
|
+
foreigner_railtie.run_initializers(foreigner_railtie)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Configure rspec options
|
31
|
+
RSpec.configure do |config|
|
32
|
+
config.mock_framework = :mocha
|
33
|
+
|
34
|
+
config.include(ConnectionHelpers)
|
35
|
+
config.include(ForeignKeyDefinitionHelpers)
|
36
|
+
end
|
data/spec/support/test_models.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
class User < ActiveRecord::Base
|
2
|
-
class
|
3
|
-
class
|
4
|
-
class
|
5
|
-
class
|
6
|
-
class
|
1
|
+
class User < ActiveRecord::Base ; end
|
2
|
+
class DefaultOption < ActiveRecord::Base ; end
|
3
|
+
class UserLogin < ActiveRecord::Base ; end
|
4
|
+
class UserType < ActiveRecord::Base ; end
|
5
|
+
class Comment < ActiveRecord::Base ; end
|
6
|
+
class Search < ActiveRecord::Base ; end
|
7
|
+
class SpecialUserRecord < ActiveRecord::Base ; end
|
7
8
|
class TableWithoutForeignKey < ActiveRecord::Base ; end
|
@@ -8,15 +8,17 @@ describe Comment do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'should set failure_message_for_should message' do
|
11
|
+
stub_fkd_to_s_with('expected fk')
|
11
12
|
matcher = have_foreign_key_for(:comments)
|
12
13
|
matcher.matches?(subject)
|
13
|
-
matcher.failure_message_for_should.should == "expected #{
|
14
|
+
matcher.failure_message_for_should.should == "expected #{foreign_keys_for('comments')} to include expected fk"
|
14
15
|
end
|
15
16
|
|
16
17
|
it 'should set failure_message_for_should_not message' do
|
18
|
+
stub_fkd_to_s_with('unexpected fk')
|
17
19
|
matcher = have_foreign_key_for(:users, :dependent => :delete)
|
18
20
|
matcher.matches?(subject)
|
19
|
-
matcher.failure_message_for_should_not.should == "expected #{
|
21
|
+
matcher.failure_message_for_should_not.should == "expected #{foreign_keys_for('comments')} to exclude unexpected fk"
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe DefaultOption do
|
4
|
+
describe 'messages' do
|
5
|
+
it 'should contain a description' do
|
6
|
+
matcher = have_foreign_key_for(:users)
|
7
|
+
matcher.description.should == 'have a foreign key for users'
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should set failure_message_for_should message' do
|
11
|
+
stub_fkd_to_s_with('expected fk')
|
12
|
+
matcher = have_foreign_key_for(:default_options)
|
13
|
+
matcher.matches?(subject)
|
14
|
+
matcher.failure_message_for_should.should == "expected #{foreign_keys_for('default_options')} to include expected fk"
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should set failure_message_for_should_not message' do
|
18
|
+
stub_fkd_to_s_with('unexpected fk')
|
19
|
+
matcher = have_foreign_key_for(:users)
|
20
|
+
matcher.matches?(subject)
|
21
|
+
matcher.failure_message_for_should_not.should == "expected #{foreign_keys_for('default_options')} to exclude unexpected fk"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'matcher' do
|
26
|
+
class DefaultOptionTester
|
27
|
+
include ConnectionHelpers
|
28
|
+
end
|
29
|
+
|
30
|
+
it { should have_foreign_key_for(:user) }
|
31
|
+
it { should have_foreign_key_for(:users) }
|
32
|
+
|
33
|
+
if DefaultOptionTester.new.postgresql_db?
|
34
|
+
context 'with :dependent => nil option' do
|
35
|
+
it { should have_foreign_key_for(:user, :dependent => nil) }
|
36
|
+
it { should have_foreign_key_for(:users, :dependent => nil) }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -8,15 +8,17 @@ describe Search do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'should set failure_message_for_should message' do
|
11
|
+
stub_fkd_to_s_with('expected fk')
|
11
12
|
matcher = have_foreign_key_for(:searches)
|
12
13
|
matcher.matches?(subject)
|
13
|
-
matcher.failure_message_for_should.should == "expected #{
|
14
|
+
matcher.failure_message_for_should.should == "expected #{foreign_keys_for('searches')} to include expected fk"
|
14
15
|
end
|
15
16
|
|
16
17
|
it 'should set failure_message_for_should_not message' do
|
18
|
+
stub_fkd_to_s_with('unexpected fk')
|
17
19
|
matcher = have_foreign_key_for(:users, :name => 'user_search_special_fk', :dependent => :delete)
|
18
20
|
matcher.matches?(subject)
|
19
|
-
matcher.failure_message_for_should_not.should == "expected #{
|
21
|
+
matcher.failure_message_for_should_not.should == "expected #{foreign_keys_for('searches')} to exclude unexpected fk"
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
@@ -8,15 +8,17 @@ describe SpecialUserRecord do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'should set failure_message_for_should message' do
|
11
|
+
stub_fkd_to_s_with('expected fk')
|
11
12
|
matcher = have_foreign_key_for(:special_user_records)
|
12
13
|
matcher.matches?(subject)
|
13
|
-
matcher.failure_message_for_should.should == "expected #{
|
14
|
+
matcher.failure_message_for_should.should == "expected #{foreign_keys_for('special_user_records')} to include expected fk"
|
14
15
|
end
|
15
16
|
|
16
17
|
it 'should set failure_message_for_should_not message' do
|
18
|
+
stub_fkd_to_s_with('unexpected fk')
|
17
19
|
matcher = have_foreign_key_for(:users, :column => 'special_user_id', :name => 'special_user_records_special_user_id_fk', :dependent => :delete)
|
18
20
|
matcher.matches?(subject)
|
19
|
-
matcher.failure_message_for_should_not.should == "expected #{
|
21
|
+
matcher.failure_message_for_should_not.should == "expected #{foreign_keys_for('special_user_records')} to exclude unexpected fk"
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
@@ -9,13 +9,15 @@ describe TableWithoutForeignKey do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
it 'should set failure_message_for_should message' do
|
12
|
+
stub_fkd_to_s_with('expected fk')
|
12
13
|
matcher.matches?(subject)
|
13
|
-
matcher.failure_message_for_should.should == "expected foreign keys to include
|
14
|
+
matcher.failure_message_for_should.should == "expected foreign keys to include expected fk"
|
14
15
|
end
|
15
16
|
|
16
17
|
it 'should set failure_message_for_should_not message' do
|
18
|
+
stub_fkd_to_s_with('unexpected fk')
|
17
19
|
matcher.matches?(subject)
|
18
|
-
matcher.failure_message_for_should_not.should == "expected foreign keys to exclude
|
20
|
+
matcher.failure_message_for_should_not.should == "expected foreign keys to exclude unexpected fk"
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
@@ -8,15 +8,17 @@ describe UserLogin do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'should set failure_message_for_should message' do
|
11
|
+
stub_fkd_to_s_with('expected fk')
|
11
12
|
matcher = have_foreign_key_for(:user_logins)
|
12
13
|
matcher.matches?(subject)
|
13
|
-
matcher.failure_message_for_should.should == "expected #{
|
14
|
+
matcher.failure_message_for_should.should == "expected #{foreign_keys_for('user_logins')} to include expected fk"
|
14
15
|
end
|
15
16
|
|
16
17
|
it 'should set failure_message_for_should_not message' do
|
18
|
+
stub_fkd_to_s_with('unexpected fk')
|
17
19
|
matcher = have_foreign_key_for(:users, :dependent => :nullify)
|
18
20
|
matcher.matches?(subject)
|
19
|
-
matcher.failure_message_for_should_not.should == "expected #{
|
21
|
+
matcher.failure_message_for_should_not.should == "expected #{foreign_keys_for('user_logins')} to exclude unexpected fk"
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
@@ -8,20 +8,26 @@ describe UserType do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'should set failure_message_for_should message' do
|
11
|
+
stub_fkd_to_s_with('expected fk')
|
11
12
|
matcher = have_foreign_key_for(:user_types)
|
12
13
|
matcher.matches?(subject)
|
13
|
-
matcher.failure_message_for_should.should == "expected #{
|
14
|
+
matcher.failure_message_for_should.should == "expected #{foreign_keys_for('user_types')} to include expected fk"
|
14
15
|
end
|
15
16
|
|
16
17
|
it 'should set failure_message_for_should_not message' do
|
18
|
+
stub_fkd_to_s_with('unexpected fk')
|
17
19
|
matcher = have_foreign_key_for(:users)
|
18
20
|
matcher.matches?(subject)
|
19
|
-
matcher.failure_message_for_should_not.should == "expected #{
|
21
|
+
matcher.failure_message_for_should_not.should == "expected #{foreign_keys_for('user_types')} to exclude unexpected fk"
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
23
25
|
describe 'matcher' do
|
24
|
-
|
25
|
-
|
26
|
+
before do
|
27
|
+
@options = postgresql_db? ? { :dependent => :restrict } : {}
|
28
|
+
end
|
29
|
+
|
30
|
+
it { should have_foreign_key_for(:user, @options) }
|
31
|
+
it { should have_foreign_key_for(:users, @options) }
|
26
32
|
end
|
27
33
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreigner-matcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-04-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: foreigner
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,12 @@ dependencies:
|
|
21
21
|
version: 1.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.0.0
|
25
30
|
description: Adds rspec matcher to verify the presence of foreign keys generated by
|
26
31
|
Foreigner in a table schema
|
27
32
|
email:
|
@@ -31,19 +36,30 @@ extensions: []
|
|
31
36
|
extra_rdoc_files: []
|
32
37
|
files:
|
33
38
|
- .gitignore
|
39
|
+
- .travis.yml
|
34
40
|
- Gemfile
|
35
41
|
- Gemfile.lock
|
36
42
|
- LICENSE.txt
|
37
43
|
- README.md
|
38
44
|
- Rakefile
|
45
|
+
- ci/config/database.yml
|
46
|
+
- ci/gemfiles/rspec2_9_rails3_0.gemfile
|
47
|
+
- ci/gemfiles/rspec2_9_rails3_0.gemfile.lock
|
48
|
+
- ci/gemfiles/rspec2_9_rails3_1.gemfile
|
49
|
+
- ci/gemfiles/rspec2_9_rails3_1.gemfile.lock
|
50
|
+
- ci/script/create_db.sh
|
39
51
|
- foreigner-matcher.gemspec
|
40
52
|
- lib/foreigner-matcher.rb
|
41
53
|
- lib/foreigner-matcher/version.rb
|
42
54
|
- spec/config/database.yml.example
|
43
55
|
- spec/foreigner_matcher_spec.rb
|
44
56
|
- spec/spec_helper.rb
|
57
|
+
- spec/support/active_record_version_helpers.rb
|
58
|
+
- spec/support/connection_helpers.rb
|
59
|
+
- spec/support/foreign_key_definition_helpers.rb
|
45
60
|
- spec/support/test_models.rb
|
46
61
|
- spec/test_models/comment_spec.rb
|
62
|
+
- spec/test_models/default_option_spec.rb
|
47
63
|
- spec/test_models/search_spec.rb
|
48
64
|
- spec/test_models/special_user_record_spec.rb
|
49
65
|
- spec/test_models/table_without_foreign_key_spec.rb
|
@@ -69,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
69
85
|
version: '0'
|
70
86
|
requirements: []
|
71
87
|
rubyforge_project: foreigner-matcher
|
72
|
-
rubygems_version: 1.8.
|
88
|
+
rubygems_version: 1.8.23
|
73
89
|
signing_key:
|
74
90
|
specification_version: 3
|
75
91
|
summary: Rspec matcher for testing the presence of foreign keys generated by Foreigner
|