active_record-union_relation 0.1.1 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7bc17659336cfc5c3f2420d5e91dda2abaf245bce0dcd2f0538ddf706f22c3be
4
- data.tar.gz: 9e9d3407293eafa3bdb81e5f4630751a17bb31c4c151985ad4b268b4a0da3092
3
+ metadata.gz: d75105a966e30a6a18ed59c42c39bd22d5685e60b3f8d96eba472a2f5b894507
4
+ data.tar.gz: 86a4699ab3cb5f6af0d2748607d16de5ab4b1b100cf0cd41ab26b1707686b79e
5
5
  SHA512:
6
- metadata.gz: 82eae8d80a46a0d3ad4c59292a5fe945ca14d5fe8779740883fe65f5165a92413f17b10aee87e6031284bf7929243d074dddd58103d2a37d81c03eab5f072180
7
- data.tar.gz: 0ce40b1c7776054681389ac31bd3ab05121ac926c60c7dbcaa13401e8e9bed2e24f045661aedd52fb1288c834e0719089d7cfb5a3970bf085cbca6633d0c3541
6
+ metadata.gz: 4ba4ea419535dc83c1466220fc6546a76c3970fb3152d210a98dc7a40eac7fef54b127d3e1056bc9e257c4fd30a419bf3a186da5334205ef096de74248effd5f
7
+ data.tar.gz: 4cac1923b62d6505ee0cb0701329d61164a8e2301bad505d93c01b31a70fb1bc4d981cf87cf9ea68455be35458bde4c76a2eca67570ff527026bfb8f500e4592
data/CHANGELOG.md CHANGED
@@ -6,6 +6,19 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.2.1] - 2024-05-29
10
+
11
+ ### Changed
12
+
13
+ - Limit files in packaged gem.
14
+
15
+ ## [0.2.0] - 2024-02-09
16
+
17
+ ### Added
18
+
19
+ - Support for sqlite.
20
+ - Support for scoped column names.
21
+
9
22
  ## [0.1.1] - 2021-11-17
10
23
 
11
24
  ### Changed
@@ -18,6 +31,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
18
31
 
19
32
  - 🎉 Initial release. 🎉
20
33
 
21
- [unreleased]: https://github.com/kddnewton/active_record-union_relation/compare/v0.1.1...HEAD
34
+ [unreleased]: https://github.com/kddnewton/active_record-union_relation/compare/v0.2.1...HEAD
35
+ [0.2.1]: https://github.com/kddnewton/active_record-union_relation/compare/v0.2.0...v0.2.1
36
+ [0.2.0]: https://github.com/kddnewton/active_record-union_relation/compare/v0.1.1...v0.2.0
22
37
  [0.1.1]: https://github.com/kddnewton/active_record-union_relation/compare/v0.1.0...v0.1.1
23
38
  [0.1.0]: https://github.com/kddnewton/active_record-union_relation/compare/a71bb8...v0.1.0
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # ActiveRecord::UnionRelation
2
2
 
3
3
  [![Build Status](https://github.com/kddnewton/active_record-union_relation/workflows/Main/badge.svg)](https://github.com/kddnewton/active_record-union_relation/actions)
4
+ [![Gem Version](https://img.shields.io/gem/v/active_record-union_relation.svg)](https://rubygems.org/gems/active_record-union_relation)
4
5
 
5
6
  There are times when you want to use SQL's [UNION](https://www.w3schools.com/sql/sql_union.asp) operator to pull rows from multiple relations, but you still want to maintain the query-builder interface of ActiveRecord. This gem allows you to do that with minimal syntax.
6
7
 
@@ -9,7 +10,7 @@ There are times when you want to use SQL's [UNION](https://www.w3schools.com/sql
9
10
  Add this line to your application's Gemfile:
10
11
 
11
12
  ```ruby
12
- gem 'active_record-union_relation'
13
+ gem "active_record-union_relation"
13
14
  ```
14
15
 
15
16
  And then execute:
@@ -46,7 +47,7 @@ Now, let's pull all of the records matching a specific term. For `Post`, we'll p
46
47
  ```ruby
47
48
  # Let's get a local variable that we'll use to reference within each of our
48
49
  # subqueries. Presumably this would come from some kind of user input.
49
- term = 'foo'
50
+ term = "foo"
50
51
 
51
52
  # First, we call ActiveRecord::union. The arguments are the names of the columns
52
53
  # that will be aliased from each source relation. It also accepts a block that
@@ -58,7 +59,7 @@ relation =
58
59
  # just for this one table. That can include any kind of
59
60
  # joins/conditions/orders etc. that it needs to. In this case we'll need
60
61
  # published: true and a matching query.
61
- posts = Post.where(published: true).where('title LIKE ?', "%#{term}%")
62
+ posts = Post.where(published: true).where("title LIKE ?", "%#{term}%")
62
63
 
63
64
  # Next, we'll add that posts relation as a subquery into the union. The
64
65
  # number of arguments here must directly align with the number of arguments
@@ -73,12 +74,12 @@ relation =
73
74
  # explicitly pulling post_id, we'll actually be able to call .post on the
74
75
  # comment records that get pulled since we alias them back when we
75
76
  # instantiate the objects.
76
- comments = Comment.where('body LIKE ?', "%#{term}%")
77
+ comments = Comment.where("body LIKE ?", "%#{term}%")
77
78
  union.add comments, :id, :post_id, :body
78
79
 
79
80
  # Finally, we'll pull the tag records that we want and add them into the
80
81
  # overall union as well.
81
- tags = Tag.where('name LIKE ?', "%#{term}%")
82
+ tags = Tag.where("name LIKE ?", "%#{term}%")
82
83
  union.add tags, :id, nil, :name
83
84
  end
84
85
 
@@ -114,15 +115,6 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
114
115
 
115
116
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
116
117
 
117
- To check types using `rbs`, you can run:
118
-
119
- ```sh
120
- RBS_TEST_TARGET='ActiveRecord::UnionRelation::*' \
121
- ruby -rrbs/test/setup \
122
- -Itest -Isig/active_record/union_relation.rbs \
123
- test/active_record/union_relation_test.rb
124
- ```
125
-
126
118
  ## Contributing
127
119
 
128
120
  Bug reports and pull requests are welcome on GitHub at https://github.com/kddnewton/active_record-union_relation.
@@ -1,41 +1,43 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'lib/active_record/union_relation/version'
3
+ require_relative "lib/active_record/union_relation/version"
4
4
 
5
5
  version = ActiveRecord::UnionRelation::VERSION
6
- repository = 'https://github.com/kddnewton/active_record-union_relation'
6
+ repository = "https://github.com/kddnewton/active_record-union_relation"
7
7
 
8
8
  Gem::Specification.new do |spec|
9
- spec.name = 'active_record-union_relation'
10
- spec.version = version
11
- spec.authors = ['Kevin Newton']
12
- spec.email = ['kddnewton@gmail.com']
13
-
14
- spec.summary = 'Create ActiveRecord relations from UNIONs'
15
- spec.homepage = repository
16
- spec.license = 'MIT'
17
-
18
- spec.metadata = {
19
- 'bug_tracker_uri' => "#{repository}/issues",
20
- 'changelog_uri' => "#{repository}/blob/v#{version}/CHANGELOG.md",
21
- 'source_code_uri' => repository,
22
- 'rubygems_mfa_required' => 'true'
9
+ spec.name = "active_record-union_relation"
10
+ spec.version = version
11
+ spec.authors = ["Kevin Newton"]
12
+ spec.email = ["kddnewton@gmail.com"]
13
+
14
+ spec.summary = "Create ActiveRecord relations from UNIONs"
15
+ spec.homepage = repository
16
+ spec.license = "MIT"
17
+
18
+ spec.metadata = {
19
+ "bug_tracker_uri" => "#{repository}/issues",
20
+ "changelog_uri" => "#{repository}/blob/v#{version}/CHANGELOG.md",
21
+ "source_code_uri" => repository,
22
+ "rubygems_mfa_required" => "true"
23
23
  }
24
24
 
25
- spec.files = Dir.chdir(__dir__) do
26
- `git ls-files -z`.split("\x0").reject do |f|
27
- f.match(%r{^(test|spec|features)/})
28
- end
29
- end
25
+ spec.files = %w[
26
+ CHANGELOG.md
27
+ CODE_OF_CONDUCT.md
28
+ LICENSE
29
+ README.md
30
+ active_record-union_relation.gemspec
31
+ lib/active_record/union_relation.rb
32
+ lib/active_record/union_relation/version.rb
33
+ ]
30
34
 
31
- spec.bindir = 'exe'
32
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
33
- spec.require_paths = ['lib']
35
+ spec.require_paths = ["lib"]
34
36
 
35
- spec.add_dependency 'activerecord', '>= 6'
37
+ spec.add_dependency "activerecord", ">= 6"
36
38
 
37
- spec.add_development_dependency 'minitest', '~> 5.14'
38
- spec.add_development_dependency 'pg', '~> 1.2'
39
- spec.add_development_dependency 'rails', '~> 6.1'
40
- spec.add_development_dependency 'rake', '~> 13.0'
39
+ spec.add_development_dependency "minitest"
40
+ spec.add_development_dependency "rails"
41
+ spec.add_development_dependency "rake"
42
+ spec.add_development_dependency "syntax_tree"
41
43
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module ActiveRecord
4
4
  class UnionRelation
5
- VERSION = '0.1.1'
5
+ VERSION = "0.2.1"
6
6
  end
7
7
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_record'
4
- require 'active_record/union_relation/version'
3
+ require "active_record"
4
+ require "active_record/union_relation/version"
5
5
 
6
6
  module ActiveRecord
7
7
  class UnionRelation
@@ -21,7 +21,7 @@ module ActiveRecord
21
21
  # raise this error so there's not some weird undefined method behavior.
22
22
  class NoConfiguredSubqueriesError < Error
23
23
  def initialize
24
- super('No subqueries have been configured for this union')
24
+ super("No subqueries have been configured for this union")
25
25
  end
26
26
  end
27
27
 
@@ -31,7 +31,7 @@ module ActiveRecord
31
31
  # Sometimes you need some columns in some subqeries that you don't need in
32
32
  # others. In order to accomplish that and still maintain the matching
33
33
  # number of columns, you can put a null in space of a column instead.
34
- NULL = Arel.sql('NULL')
34
+ NULL = Arel.sql("NULL")
35
35
 
36
36
  attr_reader :relation, :model_name, :sources
37
37
 
@@ -42,18 +42,20 @@ module ActiveRecord
42
42
  end
43
43
 
44
44
  def to_arel(columns, discriminator)
45
- relation
46
- .select(
47
- Arel.sql("'#{model_name}'").as(quote_column_name(discriminator)),
48
- *sources.zip(columns).map do |(source, column)|
45
+ relation.select(
46
+ Arel.sql("'#{model_name}'").as(quote_column_name(discriminator)),
47
+ *sources
48
+ .zip(columns)
49
+ .map do |(source, column)|
49
50
  Arel.sql(source.to_s).as(quote_column_name(column))
50
51
  end
51
- )
52
- .arel
52
+ ).arel
53
53
  end
54
54
 
55
55
  def to_mapping(columns)
56
- [model_name, columns.zip(sources).to_h]
56
+ # Remove the scope_name/table_name when using table_name.column
57
+ sources_without_scope = sources.map { _1.split(".").last }
58
+ [model_name, columns.zip(sources_without_scope).to_h]
57
59
  end
58
60
 
59
61
  private
@@ -96,16 +98,45 @@ module ActiveRecord
96
98
  mappings = subqueries.to_h { |subquery| subquery.to_mapping(columns) }
97
99
 
98
100
  Class.new(model) do
99
- define_singleton_method(:inheritance_column) { discriminator }
100
- define_singleton_method(:instantiate) do |attributes, column_types = {}, &block|
101
- type = attributes.delete(inheritance_column)
102
-
103
- instantiate_instance_of(
104
- Object.const_get(type),
105
- attributes.transform_keys(&mappings[type]),
106
- column_types,
107
- &block
108
- )
101
+ # Set the inheritance column and register the discriminator as a string
102
+ # column so that Active Record will instantiate the right subclass.
103
+ self.inheritance_column = discriminator
104
+ attribute inheritance_column, :string
105
+
106
+ define_singleton_method(:instantiate) do |attrs, columns = {}, &block|
107
+ mapped = {}
108
+ mapping = mappings[attrs[inheritance_column]]
109
+
110
+ # Map the result set columns back to their original source column
111
+ # names. This ensures that even though the UNION saw them as the same
112
+ # columns our resulting records see them as their original names.
113
+ attrs.each do |key, value|
114
+ case mapping[key]
115
+ when Subquery::NULL
116
+ # Ignore columns that didn't have a value.
117
+ when nil
118
+ # If we don't have a mapping for this column, then it's the
119
+ # discriminator. Map that column directly.
120
+ mapped[key] = value
121
+ else
122
+ # Otherwise, use the mapping to map the column back to its
123
+ # original name.
124
+ mapped[mapping[key]] = value
125
+ end
126
+ end
127
+
128
+ # Now that we've mapped all of the columns, we can call super with the
129
+ # mapped values.
130
+ super(mapped, columns, &block)
131
+ end
132
+
133
+ # Override the default find_sti_class method because it does sanity
134
+ # checks to ensure that the class you're trying to instantiate is a
135
+ # subclass of the current class. Since we want to explicitly _not_ do
136
+ # that, we will instead just check that it is a valid model class.
137
+ define_singleton_method(:find_sti_class) do |type_name|
138
+ type = type_name.constantize
139
+ type < ActiveRecord::Base ? type : super(type_name)
109
140
  end
110
141
  end
111
142
  end
@@ -113,9 +144,9 @@ module ActiveRecord
113
144
  def union_for(model)
114
145
  Arel::Nodes::As.new(
115
146
  subqueries
116
- .map { |subquery| subquery.to_arel(columns, discriminator) }
147
+ .map { |subquery| subquery.to_arel(columns, discriminator).ast }
117
148
  .inject { |left, right| Arel::Nodes::Union.new(left, right) },
118
- Arel.sql(model.connection.quote_table_name('union'))
149
+ Arel.sql(model.connection.quote_table_name("union"))
119
150
  )
120
151
  end
121
152
  end
@@ -129,7 +160,7 @@ module ActiveRecord
129
160
  # One additional column will be added to the query in order to discriminate
130
161
  # between all of the unioned types. Then when the objects are going to be
131
162
  # instantiated, we map the columns back to their original names.
132
- def self.union(*columns, discriminator: 'discriminator')
163
+ def self.union(*columns, discriminator: "discriminator")
133
164
  UnionRelation.new(columns, discriminator).tap { |union| yield union }.all
134
165
  end
135
166
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record-union_relation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Newton
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-17 00:00:00.000000000 Z
11
+ date: 2024-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -28,58 +28,58 @@ dependencies:
28
28
  name: minitest
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '5.14'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '5.14'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: pg
42
+ name: rails
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '1.2'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '1.2'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rails
56
+ name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '6.1'
61
+ version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '6.1'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rake
70
+ name: syntax_tree
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '13.0'
75
+ version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '13.0'
82
+ version: '0'
83
83
  description:
84
84
  email:
85
85
  - kddnewton@gmail.com
@@ -87,19 +87,11 @@ executables: []
87
87
  extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
- - ".github/dependabot.yml"
91
- - ".github/workflows/main.yml"
92
- - ".gitignore"
93
90
  - CHANGELOG.md
94
91
  - CODE_OF_CONDUCT.md
95
- - Gemfile
96
- - Gemfile.lock
97
92
  - LICENSE
98
93
  - README.md
99
- - Rakefile
100
94
  - active_record-union_relation.gemspec
101
- - bin/console
102
- - bin/setup
103
95
  - lib/active_record/union_relation.rb
104
96
  - lib/active_record/union_relation/version.rb
105
97
  homepage: https://github.com/kddnewton/active_record-union_relation
@@ -107,7 +99,7 @@ licenses:
107
99
  - MIT
108
100
  metadata:
109
101
  bug_tracker_uri: https://github.com/kddnewton/active_record-union_relation/issues
110
- changelog_uri: https://github.com/kddnewton/active_record-union_relation/blob/v0.1.1/CHANGELOG.md
102
+ changelog_uri: https://github.com/kddnewton/active_record-union_relation/blob/v0.2.1/CHANGELOG.md
111
103
  source_code_uri: https://github.com/kddnewton/active_record-union_relation
112
104
  rubygems_mfa_required: 'true'
113
105
  post_install_message:
@@ -125,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
117
  - !ruby/object:Gem::Version
126
118
  version: '0'
127
119
  requirements: []
128
- rubygems_version: 3.2.3
120
+ rubygems_version: 3.5.3
129
121
  signing_key:
130
122
  specification_version: 4
131
123
  summary: Create ActiveRecord relations from UNIONs
@@ -1,6 +0,0 @@
1
- version: 2
2
- updates:
3
- - package-ecosystem: "bundler"
4
- directory: "/"
5
- schedule:
6
- interval: "daily"
@@ -1,46 +0,0 @@
1
- name: Main
2
- on:
3
- - push
4
- - pull_request_target
5
- jobs:
6
- ci:
7
- name: CI
8
- runs-on: ubuntu-latest
9
- env:
10
- CI: true
11
- DATABASE_URL: postgres://postgres:@localhost:5432/postgres
12
- RAILS_ENV: test
13
- services:
14
- postgres:
15
- image: postgres:11.5
16
- ports:
17
- - 5432:5432
18
- options: >-
19
- --health-cmd pg_isready
20
- --health-interval 10s
21
- --health-timeout 5s
22
- --health-retries 5
23
- steps:
24
- - run: sudo apt-get -yqq install libpq-dev
25
- - uses: actions/checkout@master
26
- - uses: ruby/setup-ruby@v1
27
- with:
28
- ruby-version: 3.0
29
- bundler-cache: true
30
- - name: Test
31
- run: |
32
- bundle exec rake test
33
- automerge:
34
- name: AutoMerge
35
- needs: ci
36
- runs-on: ubuntu-latest
37
- if: github.event_name == 'pull_request_target' && (github.actor == github.repository_owner || github.actor == 'dependabot[bot]')
38
- steps:
39
- - uses: actions/github-script@v3
40
- with:
41
- script: |
42
- github.pulls.merge({
43
- owner: context.payload.repository.owner.login,
44
- repo: context.payload.repository.name,
45
- pull_number: context.payload.pull_request.number
46
- })
data/.gitignore DELETED
@@ -1,8 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
data/Gemfile DELETED
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- gemspec
data/Gemfile.lock DELETED
@@ -1,149 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- active_record-union_relation (0.1.1)
5
- activerecord (>= 6)
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- actioncable (6.1.4.1)
11
- actionpack (= 6.1.4.1)
12
- activesupport (= 6.1.4.1)
13
- nio4r (~> 2.0)
14
- websocket-driver (>= 0.6.1)
15
- actionmailbox (6.1.4.1)
16
- actionpack (= 6.1.4.1)
17
- activejob (= 6.1.4.1)
18
- activerecord (= 6.1.4.1)
19
- activestorage (= 6.1.4.1)
20
- activesupport (= 6.1.4.1)
21
- mail (>= 2.7.1)
22
- actionmailer (6.1.4.1)
23
- actionpack (= 6.1.4.1)
24
- actionview (= 6.1.4.1)
25
- activejob (= 6.1.4.1)
26
- activesupport (= 6.1.4.1)
27
- mail (~> 2.5, >= 2.5.4)
28
- rails-dom-testing (~> 2.0)
29
- actionpack (6.1.4.1)
30
- actionview (= 6.1.4.1)
31
- activesupport (= 6.1.4.1)
32
- rack (~> 2.0, >= 2.0.9)
33
- rack-test (>= 0.6.3)
34
- rails-dom-testing (~> 2.0)
35
- rails-html-sanitizer (~> 1.0, >= 1.2.0)
36
- actiontext (6.1.4.1)
37
- actionpack (= 6.1.4.1)
38
- activerecord (= 6.1.4.1)
39
- activestorage (= 6.1.4.1)
40
- activesupport (= 6.1.4.1)
41
- nokogiri (>= 1.8.5)
42
- actionview (6.1.4.1)
43
- activesupport (= 6.1.4.1)
44
- builder (~> 3.1)
45
- erubi (~> 1.4)
46
- rails-dom-testing (~> 2.0)
47
- rails-html-sanitizer (~> 1.1, >= 1.2.0)
48
- activejob (6.1.4.1)
49
- activesupport (= 6.1.4.1)
50
- globalid (>= 0.3.6)
51
- activemodel (6.1.4.1)
52
- activesupport (= 6.1.4.1)
53
- activerecord (6.1.4.1)
54
- activemodel (= 6.1.4.1)
55
- activesupport (= 6.1.4.1)
56
- activestorage (6.1.4.1)
57
- actionpack (= 6.1.4.1)
58
- activejob (= 6.1.4.1)
59
- activerecord (= 6.1.4.1)
60
- activesupport (= 6.1.4.1)
61
- marcel (~> 1.0.0)
62
- mini_mime (>= 1.1.0)
63
- activesupport (6.1.4.1)
64
- concurrent-ruby (~> 1.0, >= 1.0.2)
65
- i18n (>= 1.6, < 2)
66
- minitest (>= 5.1)
67
- tzinfo (~> 2.0)
68
- zeitwerk (~> 2.3)
69
- builder (3.2.4)
70
- concurrent-ruby (1.1.9)
71
- crass (1.0.6)
72
- erubi (1.10.0)
73
- globalid (0.5.2)
74
- activesupport (>= 5.0)
75
- i18n (1.8.10)
76
- concurrent-ruby (~> 1.0)
77
- loofah (2.12.0)
78
- crass (~> 1.0.2)
79
- nokogiri (>= 1.5.9)
80
- mail (2.7.1)
81
- mini_mime (>= 0.1.1)
82
- marcel (1.0.1)
83
- method_source (1.0.0)
84
- mini_mime (1.1.0)
85
- mini_portile2 (2.6.1)
86
- minitest (5.14.4)
87
- nio4r (2.5.8)
88
- nokogiri (1.12.3)
89
- mini_portile2 (~> 2.6.1)
90
- racc (~> 1.4)
91
- pg (1.2.3)
92
- racc (1.5.2)
93
- rack (2.2.3)
94
- rack-test (1.1.0)
95
- rack (>= 1.0, < 3)
96
- rails (6.1.4.1)
97
- actioncable (= 6.1.4.1)
98
- actionmailbox (= 6.1.4.1)
99
- actionmailer (= 6.1.4.1)
100
- actionpack (= 6.1.4.1)
101
- actiontext (= 6.1.4.1)
102
- actionview (= 6.1.4.1)
103
- activejob (= 6.1.4.1)
104
- activemodel (= 6.1.4.1)
105
- activerecord (= 6.1.4.1)
106
- activestorage (= 6.1.4.1)
107
- activesupport (= 6.1.4.1)
108
- bundler (>= 1.15.0)
109
- railties (= 6.1.4.1)
110
- sprockets-rails (>= 2.0.0)
111
- rails-dom-testing (2.0.3)
112
- activesupport (>= 4.2.0)
113
- nokogiri (>= 1.6)
114
- rails-html-sanitizer (1.4.1)
115
- loofah (~> 2.3)
116
- railties (6.1.4.1)
117
- actionpack (= 6.1.4.1)
118
- activesupport (= 6.1.4.1)
119
- method_source
120
- rake (>= 0.13)
121
- thor (~> 1.0)
122
- rake (13.0.6)
123
- sprockets (4.0.2)
124
- concurrent-ruby (~> 1.0)
125
- rack (> 1, < 3)
126
- sprockets-rails (3.2.2)
127
- actionpack (>= 4.0)
128
- activesupport (>= 4.0)
129
- sprockets (>= 3.0.0)
130
- thor (1.1.0)
131
- tzinfo (2.0.4)
132
- concurrent-ruby (~> 1.0)
133
- websocket-driver (0.7.5)
134
- websocket-extensions (>= 0.1.0)
135
- websocket-extensions (0.1.5)
136
- zeitwerk (2.4.2)
137
-
138
- PLATFORMS
139
- ruby
140
-
141
- DEPENDENCIES
142
- active_record-union_relation!
143
- minitest (~> 5.14)
144
- pg (~> 1.2)
145
- rails (~> 6.1)
146
- rake (~> 13.0)
147
-
148
- BUNDLED WITH
149
- 2.2.3
data/Rakefile DELETED
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/gem_tasks'
4
- require 'rake/testtask'
5
-
6
- Rake::TestTask.new(:test) do |t|
7
- t.libs << 'test'
8
- t.libs << 'lib'
9
- t.test_files = FileList['test/**/*_test.rb']
10
- end
11
-
12
- task default: :test
data/bin/console DELETED
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'bundler/setup'
4
- require 'active_record/union_relation'
5
-
6
- require 'irb'
7
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install