relation 0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 08e41d0cbb15099b476990c5439330536f2ea1e6
4
+ data.tar.gz: d76e0cd15e30ba8de2acea617d7a938ece0fcbb2
5
+ SHA512:
6
+ metadata.gz: f7a6736fa2a59aa8141e4ab2d9f36b0e027fc01f5412a92ed5a185848445e45c2dc3d479c9d599f1ddeed39cf5e90168670707939792c9dad00c6e8ca95a6df2
7
+ data.tar.gz: 882cbbd31bb2f884f3d3c19e182fd29cce03b50444c0012e6c762fcc72d34e73aea4db2a59de9dccc45477fa5ffbf35d02e86e07abad0aba27fe6c4c90f7c6e1
@@ -0,0 +1 @@
1
+ rails-5.0
@@ -0,0 +1 @@
1
+ ruby-2.3.1
@@ -0,0 +1,14 @@
1
+ language: ruby
2
+ bundler_args: --without production
3
+ before_install: rm -f Gemfile.lock
4
+
5
+ rvm:
6
+ # - 2.2.0 # failing with Rails 5
7
+ - 2.3.1
8
+
9
+ env:
10
+ - "RAILS_VERSION=4.2.3"
11
+ - "RAILS_VERSION=5.0.0"
12
+
13
+ notifications:
14
+ email: false
data/.watchr ADDED
@@ -0,0 +1,54 @@
1
+ HH = '#' * 22 unless defined?(HH)
2
+ H = '#' * 5 unless defined?(H)
3
+
4
+ def usage
5
+ puts <<-EOS
6
+ Ctrl-\\ or ctrl-4 Running all tests
7
+ Ctrl-C Exit
8
+ EOS
9
+ end
10
+
11
+ def run(cmd)
12
+ puts "#{HH} #{Time.now} #{HH}"
13
+ puts "#{H} #{cmd}"
14
+ system "/usr/bin/time --format '#{HH} Elapsed time %E' #{cmd}"
15
+ end
16
+
17
+ def run_it(type, file)
18
+ case type
19
+ when 'test'; run %Q{ruby -I"lib:test" -rubygems #{file}}
20
+ # when 'spec'; run %Q{spring rspec -X #{file}}
21
+ else; puts "#{H} unknown type: #{type}, file: #{file}"
22
+ end
23
+ end
24
+
25
+ def run_all_tests
26
+ puts "\n#{HH} Running all tests #{HH}\n"
27
+ # %w{test spec}.each { |dir| run "spring rake #{dir} RAILS_ENV=test" if File.exists?(dir) }
28
+ # %w{test}.each { |dir| run "spring rake #{dir} RAILS_ENV=test" if File.exists?(dir) }
29
+ %w{test}.each { |dir| run "rake #{dir} RAILS_ENV=test" if File.exists?(dir) }
30
+ end
31
+
32
+ def run_matching_files(base)
33
+ base = base.split('_').first
34
+ %w{test spec}.each { |type|
35
+ files = Dir["#{type}/**/*.rb"].select { |file| file =~ /#{base}_.*\.rb/ }
36
+ run_it type, files.join(' ') unless files.empty?
37
+ }
38
+ end
39
+
40
+ %w{test spec}.each { |type|
41
+ watch("#{type}/#{type}_helper\.rb") { run_all_tests }
42
+ watch("#{type}/.*/*_#{type}\.rb") { |match| run_it type, match[0] }
43
+ }
44
+ %w{rb erb haml slim}.each { |type|
45
+ watch("app/.*/.*\.#{type}") { |m|
46
+ run_matching_files("#{m[0].split('/').at(2).split('.').first}")
47
+ }
48
+ }
49
+
50
+ # Ctrl-\ or ctrl-4
51
+ Signal.trap('QUIT') { run_all_tests }
52
+ # Ctrl-C
53
+ Signal.trap('INT') { abort("Interrupted\n") }
54
+ usage
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ version = ENV["RAILS_VERSION"]
6
+ gem 'rails', version ? "~> #{version}" : ">= 5.0"
7
+
8
+ #group :test do
9
+ # gem 'minitest'
10
+ # gem 'rake'
11
+ #end
@@ -0,0 +1,128 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ relation (0.1.0)
5
+ activerecord
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ actioncable (5.0.0.1)
11
+ actionpack (= 5.0.0.1)
12
+ nio4r (~> 1.2)
13
+ websocket-driver (~> 0.6.1)
14
+ actionmailer (5.0.0.1)
15
+ actionpack (= 5.0.0.1)
16
+ actionview (= 5.0.0.1)
17
+ activejob (= 5.0.0.1)
18
+ mail (~> 2.5, >= 2.5.4)
19
+ rails-dom-testing (~> 2.0)
20
+ actionpack (5.0.0.1)
21
+ actionview (= 5.0.0.1)
22
+ activesupport (= 5.0.0.1)
23
+ rack (~> 2.0)
24
+ rack-test (~> 0.6.3)
25
+ rails-dom-testing (~> 2.0)
26
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
27
+ actionview (5.0.0.1)
28
+ activesupport (= 5.0.0.1)
29
+ builder (~> 3.1)
30
+ erubis (~> 2.7.0)
31
+ rails-dom-testing (~> 2.0)
32
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
33
+ activejob (5.0.0.1)
34
+ activesupport (= 5.0.0.1)
35
+ globalid (>= 0.3.6)
36
+ activemodel (5.0.0.1)
37
+ activesupport (= 5.0.0.1)
38
+ activerecord (5.0.0.1)
39
+ activemodel (= 5.0.0.1)
40
+ activesupport (= 5.0.0.1)
41
+ arel (~> 7.0)
42
+ activesupport (5.0.0.1)
43
+ concurrent-ruby (~> 1.0, >= 1.0.2)
44
+ i18n (~> 0.7)
45
+ minitest (~> 5.1)
46
+ tzinfo (~> 1.1)
47
+ arel (7.1.4)
48
+ builder (3.2.2)
49
+ concurrent-ruby (1.0.2)
50
+ docile (1.1.5)
51
+ erubis (2.7.0)
52
+ globalid (0.3.7)
53
+ activesupport (>= 4.1.0)
54
+ i18n (0.7.0)
55
+ json (2.0.2)
56
+ loofah (2.0.3)
57
+ nokogiri (>= 1.5.9)
58
+ mail (2.6.4)
59
+ mime-types (>= 1.16, < 4)
60
+ method_source (0.8.2)
61
+ mime-types (3.1)
62
+ mime-types-data (~> 3.2015)
63
+ mime-types-data (3.2016.0521)
64
+ mini_portile2 (2.1.0)
65
+ minitest (5.10.1)
66
+ nio4r (1.2.1)
67
+ nokogiri (1.6.8.1)
68
+ mini_portile2 (~> 2.1.0)
69
+ rack (2.0.1)
70
+ rack-test (0.6.3)
71
+ rack (>= 1.0)
72
+ rails (5.0.0.1)
73
+ actioncable (= 5.0.0.1)
74
+ actionmailer (= 5.0.0.1)
75
+ actionpack (= 5.0.0.1)
76
+ actionview (= 5.0.0.1)
77
+ activejob (= 5.0.0.1)
78
+ activemodel (= 5.0.0.1)
79
+ activerecord (= 5.0.0.1)
80
+ activesupport (= 5.0.0.1)
81
+ bundler (>= 1.3.0, < 2.0)
82
+ railties (= 5.0.0.1)
83
+ sprockets-rails (>= 2.0.0)
84
+ rails-dom-testing (2.0.1)
85
+ activesupport (>= 4.2.0, < 6.0)
86
+ nokogiri (~> 1.6.0)
87
+ rails-html-sanitizer (1.0.3)
88
+ loofah (~> 2.0)
89
+ railties (5.0.0.1)
90
+ actionpack (= 5.0.0.1)
91
+ activesupport (= 5.0.0.1)
92
+ method_source
93
+ rake (>= 0.8.7)
94
+ thor (>= 0.18.1, < 2.0)
95
+ rake (11.3.0)
96
+ simplecov (0.12.0)
97
+ docile (~> 1.1.0)
98
+ json (>= 1.8, < 3)
99
+ simplecov-html (~> 0.10.0)
100
+ simplecov-html (0.10.0)
101
+ sprockets (3.7.0)
102
+ concurrent-ruby (~> 1.0)
103
+ rack (> 1, < 3)
104
+ sprockets-rails (3.2.0)
105
+ actionpack (>= 4.0)
106
+ activesupport (>= 4.0)
107
+ sprockets (>= 3.0.0)
108
+ sqlite3 (1.3.12)
109
+ thor (0.19.4)
110
+ thread_safe (0.3.5)
111
+ tzinfo (1.2.2)
112
+ thread_safe (~> 0.1)
113
+ websocket-driver (0.6.4)
114
+ websocket-extensions (>= 0.1.0)
115
+ websocket-extensions (0.1.2)
116
+
117
+ PLATFORMS
118
+ ruby
119
+
120
+ DEPENDENCIES
121
+ minitest
122
+ rails (>= 5.0)
123
+ relation!
124
+ simplecov
125
+ sqlite3
126
+
127
+ BUNDLED WITH
128
+ 1.11.2
@@ -0,0 +1,20 @@
1
+ Copyright 2015 Dittmar Krall - http://matique.de
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,73 @@
1
+ # Relation
2
+ [![Build Status](http://img.shields.io/travis/matique/relation.svg)](https://travis-ci.org/matique/relation)
3
+ [![Dependency Status](http://img.shields.io/gemnasium/matique/relation.svg)](https://gemnasium.com/matique/relation)
4
+ [![Code Climate](http://img.shields.io/codeclimate/github/matique/relation.svg)](https://codeclimate.com/github/matique/relation)
5
+ [![Gem Version](http://img.shields.io/gem/v/relation.svg)](https://rubygems.org/gems/relation)
6
+
7
+ Relation is a Rails gem that adds relationships to
8
+ ActiveRecord items stored in tables.
9
+ The relationship is stored in an additional table;
10
+ no additional column/field is required in the particular tables.
11
+
12
+ A habtm (has and belong to many) association of Rails requires an
13
+ additional table containing the id's of the associated records.
14
+ The name of this table indicates which tables are being associated.
15
+ Relation just move the name of the association table into an additional
16
+ column enabling relationship between any ActiveRecords in any,
17
+ including themselves, tables.
18
+
19
+ Rails furthermore adds some "magic" to the habtm like additional methods
20
+ and administration of the association table.
21
+ These additions are not supported by Relation,
22
+ i.e. you are responsible for them.
23
+
24
+ ## Installation
25
+
26
+ As usual:
27
+
28
+ $ [sudo] gem install relation
29
+
30
+ or:
31
+
32
+ # Gemfile file
33
+ gem 'relation'
34
+
35
+ $ bundle
36
+
37
+ Furthermore the association table (an n-ways-join table) must be
38
+ installed and migrated.
39
+ You may copy the migration "db/migrate/20150810152808_relation.rb"
40
+ from the gem.
41
+ The migration is then done, as usual, by:
42
+
43
+ $ rake db:migrate
44
+
45
+ ## Usage
46
+
47
+ In short (order* and user* are ActiveRecords):
48
+
49
+ Relation.add order, user
50
+ Relation.add order, user2
51
+ Relation.add order2, user2
52
+
53
+ Relation.references order, User # -> [user, user2]
54
+ Relation.references order2, User # -> [user2]
55
+ Relation.followers Order, user # -> [order]
56
+ Relation.followers Order, user2 # -> [order, order2]
57
+
58
+ Relation.delete order2, user2
59
+ Relation.followers Order, user2 # -> [order]
60
+
61
+ See also the tests.
62
+
63
+ Dangling, i.e. inaccessible records, references are detected by:
64
+
65
+ hsh = Relation.dangling
66
+
67
+ and cleaned by:
68
+
69
+ Relation.remove_dangling hsh
70
+
71
+ ## License
72
+
73
+ Copyright (c) 2015-2016 [Dittmar Krall], released under the MIT license.
@@ -0,0 +1,9 @@
1
+ require 'bundler/gem_tasks'
2
+
3
+ desc "Run the tests."
4
+ task :test do
5
+ $: << "lib" << "test"
6
+ Dir["test/*_test.rb"].each { |f| require f[5..-4] }
7
+ end
8
+
9
+ task :default => :test
@@ -0,0 +1,78 @@
1
+ class Relation < ActiveRecord::Base
2
+
3
+ def self.add(row_from, row_to)
4
+ name_from, id_from = name_id(row_from)
5
+ name_to, id_to = name_id(row_to)
6
+ name = "#{name_from} #{name_to}"
7
+ hsh = { name: name, x_id: id_from, y_id: id_to }
8
+
9
+ Relation.create!(hsh) if Relation.where(hsh).first == nil
10
+ end
11
+
12
+ def self.delete(row_from, row_to)
13
+ name_from, id_from = name_id(row_from)
14
+ name_to, id_to = name_id(row_to)
15
+ name = "#{name_from} #{name_to}"
16
+ hsh = { name: name, x_id: id_from, y_id: id_to }
17
+ Relation.where(hsh).delete_all
18
+ end
19
+
20
+ def self.references(row, kind)
21
+ klass = kind
22
+ klass = kind.constantize unless klass.kind_of?(Class)
23
+ ids = self.references_ids(row, klass)
24
+ klass.where(id: ids)
25
+ end
26
+
27
+ def self.followers(kind, row)
28
+ klass = kind
29
+ klass = kind.constantize unless klass.kind_of?(Class)
30
+ ids = self.followers_ids(klass, row)
31
+ klass.where(id: ids)
32
+ end
33
+
34
+ def self.dangling
35
+ names = Relation.pluck(:name).uniq
36
+ models = []
37
+ names.each { |name|
38
+ models |= name.split(' ')
39
+ }
40
+ hsh = {}
41
+ models.each { |class_name|
42
+ klass = class_name.constantize
43
+ ids = klass.pluck(:id)
44
+ idx = Relation.where('name like ?', "#{class_name} %").pluck(:x_id)
45
+ idy = Relation.where('name like ?', "% #{class_name}").pluck(:y_id)
46
+ arr = (idx | idy) - ids
47
+ hsh[class_name] = arr if arr.length > 0
48
+ }
49
+ hsh
50
+ end
51
+
52
+ def self.remove_dangling(hsh)
53
+ hsh.each { |name, arr|
54
+ arr.each { |idx|
55
+ Relation.where(x_id: idx).where('name like ?', "#{name} %").delete_all
56
+ Relation.where(y_id: idx).where('name like ?', "% #{name}").delete_all
57
+ }
58
+ }
59
+ end
60
+
61
+ private
62
+ def self.name_id(resource)
63
+ raise 'missing resource' unless resource
64
+ [resource.class.name, resource.id]
65
+ end
66
+
67
+ def self.references_ids(row, klass)
68
+ name_from, id_from = name_id(row)
69
+ name = "#{name_from} #{klass.name}"
70
+ Relation.where(name: name, x_id: id_from).pluck(:y_id)
71
+ end
72
+
73
+ def self.followers_ids(klass, row)
74
+ name_to, id_to = name_id(row)
75
+ name = "#{klass.name} #{name_to}"
76
+ Relation.where(name: name, y_id: id_to).pluck(:x_id)
77
+ end
78
+ end
@@ -0,0 +1,14 @@
1
+ class CreateRelations < ActiveRecord::Migration
2
+ def change
3
+ create_table :relations, id: false do |t|
4
+ t.string :name
5
+ t.references :x, null: false
6
+ t.references :y, null: false
7
+ t.timestamps
8
+
9
+ t.index :name
10
+ t.index :x
11
+ t.index :y
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,2 @@
1
+ class Engine < Rails::Engine
2
+ end
@@ -0,0 +1 @@
1
+ VERSION = '0.1.1'
@@ -0,0 +1,25 @@
1
+ $:.push File.expand_path('../lib', __FILE__)
2
+ require 'relation/version'
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'relation'
6
+ s.version = VERSION
7
+ s.authors = ['Dittmar Krall']
8
+ s.email = ['dittmar.krall@matique.de']
9
+ s.homepage = 'https://github.com/matique/relation'
10
+ s.summary = %q{Provides a simple directed relationship between active_record models.}
11
+ s.description = %q{A gem that adds simple support for organizing ActiveRecord models.}
12
+
13
+ s.files = `git ls-files`.split("\n")
14
+ s.test_files = `git ls-files -- {test,features}/*`.split("\n")
15
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ s.require_paths = ['lib']
17
+
18
+ s.add_dependency 'activerecord'
19
+
20
+ # Dependencies (installed via 'bundle install')...
21
+ s.add_development_dependency 'sqlite3'
22
+ s.add_development_dependency 'minitest'
23
+ s.add_development_dependency 'simplecov'
24
+ # s.add_development_dependency 'coveralls'
25
+ end
@@ -0,0 +1,53 @@
1
+ require 'test_helper'
2
+
3
+ describe Relation do
4
+ let(:user) { User.create! name: 'user' }
5
+ let(:user2) { User.create! name: 'user2' }
6
+ let(:order) { Order.create! name: 'order' }
7
+ let(:order2) { Order.create! name: 'order2' }
8
+
9
+ def setup
10
+ DB.setup
11
+
12
+ Relation.add user, order
13
+ Relation.add user2, order
14
+ Relation.add user2, order2
15
+ end
16
+
17
+ def teardown
18
+ DB.teardown
19
+ end
20
+
21
+ it "test remove dangling #1" do
22
+ hsh = { 'User' => [user.id] }
23
+ assert_difference('Relation.count', -1) do
24
+ Relation.remove_dangling(hsh)
25
+ end
26
+ end
27
+
28
+ it "test remove dangling #2" do
29
+ hsh = { 'User' => [user2.id] }
30
+ assert_difference('Relation.count', -2) do
31
+ Relation.remove_dangling(hsh)
32
+ end
33
+ end
34
+
35
+ it "test remove dangling #3" do
36
+ hsh = { 'Order' => [order.id] }
37
+ assert_difference('Relation.count', -2) do
38
+ Relation.remove_dangling(hsh)
39
+ end
40
+ end
41
+
42
+ it "test dangling" do
43
+ assert_equal({}, Relation.dangling)
44
+ user.destroy
45
+ assert_equal({"User"=>[user.id]}, Relation.dangling)
46
+ user2.destroy
47
+ assert_equal({"User"=>[user.id, user2.id]}, Relation.dangling)
48
+ order.destroy
49
+ assert_equal({"User"=>[user.id, user2.id].sort, "Order"=>[order.id]},
50
+ Relation.dangling)
51
+ end
52
+
53
+ end
@@ -0,0 +1,73 @@
1
+ require 'test_helper'
2
+
3
+ describe Relation do
4
+ let(:user) { User.create! name: 'user' }
5
+ let(:user2) { User.create! name: 'user2' }
6
+ let(:order) { Order.create! name: 'order' }
7
+ let(:order2) { Order.create! name: 'order2' }
8
+
9
+ def setup
10
+ DB.setup
11
+
12
+ Relation.add user, order
13
+ Relation.add user2, order
14
+ Relation.add user2, order2
15
+ end
16
+
17
+ def teardown
18
+ DB.teardown
19
+ end
20
+
21
+ it "should add a connection" do
22
+ assert_difference('Relation.count') do
23
+ Relation.add user2, user
24
+ end
25
+ end
26
+
27
+ it "should delete a connection" do
28
+ Relation.add user2, user
29
+ assert_difference('Relation.count', -1) do
30
+ Relation.delete user2, user
31
+ end
32
+ end
33
+
34
+ it "should return references (using class name)" do
35
+ arr = Relation.references(user, 'Order')
36
+ assert_equal [order].sort, arr.sort
37
+
38
+ arr = Relation.references(user2, 'Order')
39
+ assert_equal [order, order2].sort, arr.sort
40
+ end
41
+
42
+ it "should return references (using class)" do
43
+ arr = Relation.references(user, Order)
44
+ assert_equal [order].sort, arr.sort
45
+ end
46
+
47
+ it "should return followers (using class name)" do
48
+ arr = Relation.followers('User', order)
49
+ assert_equal [user, user2].sort, arr.sort
50
+
51
+ arr = Relation.followers('User', order2)
52
+ assert_equal [user2].sort, arr.sort
53
+ end
54
+
55
+ it "should return followers (using class)" do
56
+ arr = Relation.followers(User, order)
57
+ assert_equal [user, user2].sort, arr.sort
58
+ end
59
+
60
+ it "should not add twice the same connection" do
61
+ assert_difference('Relation.count') do
62
+ Relation.add user2, user
63
+ Relation.add user2, user
64
+ end
65
+ end
66
+
67
+ it "should handle unexistent connection" do
68
+ assert_difference('Relation.count', 0) do
69
+ Relation.delete user2, user
70
+ end
71
+ end
72
+
73
+ end
@@ -0,0 +1,57 @@
1
+ class DB
2
+ ActiveRecord::Base.establish_connection adapter: "sqlite3",
3
+ database: ":memory:"
4
+
5
+ def self.setup
6
+ capture_stdout do
7
+ ActiveRecord::Base.logger
8
+ ActiveRecord::Schema.define(version: 1) do
9
+ create_table :orders do |t|
10
+ t.column :name, :string
11
+ end
12
+ create_table :users do |t|
13
+ t.column :name, :string
14
+ end
15
+ create_table :relations, id: false do |t|
16
+ t.string :name
17
+ t.references :x, null: false
18
+ t.references :y, null: false
19
+ end
20
+ end
21
+
22
+ Order.reset_column_information
23
+ end
24
+ end
25
+
26
+ def self.teardown
27
+ if ActiveRecord::Base.connection.respond_to?(:data_sources)
28
+ ActiveRecord::Base.connection.data_sources.each do |table|
29
+ ActiveRecord::Base.connection.drop_table(table)
30
+ end
31
+ else
32
+ ActiveRecord::Base.connection.tables.each do |table|
33
+ ActiveRecord::Base.connection.drop_table(table)
34
+ end
35
+ end
36
+ end
37
+
38
+ private
39
+ def self.capture_stdout(&block)
40
+ real_stdout = $stdout
41
+
42
+ $stdout = StringIO.new
43
+ yield
44
+ $stdout.string
45
+ ensure
46
+ $stdout = real_stdout
47
+ end
48
+
49
+ end
50
+
51
+ class Order < ActiveRecord::Base
52
+ end
53
+
54
+ class User < ActiveRecord::Base
55
+ end
56
+
57
+ require_relative ('../../app/models/relation')
@@ -0,0 +1,17 @@
1
+ require 'simplecov'
2
+ SimpleCov.start do
3
+ # add_filter '/spec/'
4
+ add_filter '/test/'
5
+ end
6
+
7
+ ENV["RAILS_ENV"] = "test"
8
+ require 'active_record'
9
+ require 'minitest/autorun'
10
+
11
+ # Load support files
12
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
13
+
14
+ class Minitest::Test
15
+ require 'active_support/testing/assertions'
16
+ include ActiveSupport::Testing::Assertions
17
+ end
metadata ADDED
@@ -0,0 +1,118 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: relation
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Dittmar Krall
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-12-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sqlite3
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: A gem that adds simple support for organizing ActiveRecord models.
70
+ email:
71
+ - dittmar.krall@matique.de
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".ruby-gemset"
77
+ - ".ruby-version"
78
+ - ".travis.yml"
79
+ - ".watchr"
80
+ - Gemfile
81
+ - Gemfile.lock
82
+ - MIT-LICENSE
83
+ - README.md
84
+ - Rakefile
85
+ - app/models/relation.rb
86
+ - db/migrate/20150810152808_relation.rb
87
+ - lib/relation.rb
88
+ - lib/relation/version.rb
89
+ - relation.gemspec
90
+ - test/dangling_test.rb
91
+ - test/relation_test.rb
92
+ - test/support/database.rb
93
+ - test/test_helper.rb
94
+ homepage: https://github.com/matique/relation
95
+ licenses: []
96
+ metadata: {}
97
+ post_install_message:
98
+ rdoc_options: []
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubyforge_project:
113
+ rubygems_version: 2.5.1
114
+ signing_key:
115
+ specification_version: 4
116
+ summary: Provides a simple directed relationship between active_record models.
117
+ test_files: []
118
+ has_rdoc: