active_record-union_relation 0.1.1 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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