sorbet-rails 0.7.27 → 0.7.33
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci-master.yml +2 -0
- data/.github/workflows/publish-gem.yml +9 -19
- data/README.md +14 -2
- data/lib/sorbet-rails/active_record_rbi_formatter.rb +3 -3
- data/lib/sorbet-rails/gem_plugins/aasm_plugin.rb +7 -2
- data/lib/sorbet-rails/model_column_utils.rb +1 -1
- data/lib/sorbet-rails/model_plugins/active_record_assoc.rb +1 -1
- data/lib/sorbet-rails/model_plugins/active_record_querying.rb +13 -0
- data/lib/sorbet-rails/model_rbi_formatter.rb +3 -3
- data/lib/sorbet-rails/rails_mixins/custom_finder_methods.rb +8 -0
- data/sorbet-rails.gemspec +2 -2
- data/spec/custom_finder_methods_spec.rb +23 -0
- data/spec/sorbet_spec.rb +3 -0
- data/spec/support/v5.2/Gemfile.lock +76 -67
- data/spec/support/v6.0/Gemfile.lock +93 -85
- data/spec/support/v6.1/Gemfile +1 -1
- data/spec/support/v6.1/Gemfile.lock +115 -108
- data/spec/support/v6.1/sorbet_test_cases.rb +3 -0
- data/spec/test_data/v5.2/expected_active_record_relation.rbi +2 -2
- data/spec/test_data/v5.2/expected_attachment.rbi +3 -3
- data/spec/test_data/v5.2/expected_blob.rbi +3 -3
- data/spec/test_data/v5.2/expected_habtm_subjects.rbi +3 -3
- data/spec/test_data/v5.2/expected_habtm_wizards.rbi +3 -3
- data/spec/test_data/v5.2/expected_headmaster.rbi +3 -3
- data/spec/test_data/v5.2/expected_internal_metadata.rbi +3 -3
- data/spec/test_data/v5.2/expected_potion.rbi +3 -3
- data/spec/test_data/v5.2/expected_robe.rbi +3 -3
- data/spec/test_data/v5.2/expected_schema_migration.rbi +3 -3
- data/spec/test_data/v5.2/expected_school.rbi +3 -3
- data/spec/test_data/v5.2/expected_spell/habtm_spell_books.rbi +3 -3
- data/spec/test_data/v5.2/expected_spell.rbi +3 -3
- data/spec/test_data/v5.2/expected_spell_book/habtm_spell_books.rbi +3 -3
- data/spec/test_data/v5.2/expected_spell_book/habtm_spells.rbi +3 -3
- data/spec/test_data/v5.2/expected_spell_book.rbi +3 -3
- data/spec/test_data/v5.2/expected_squib.rbi +3 -3
- data/spec/test_data/v5.2/expected_subject/habtm_wizards.rbi +3 -3
- data/spec/test_data/v5.2/expected_subject.rbi +3 -3
- data/spec/test_data/v5.2/expected_wand.rbi +3 -3
- data/spec/test_data/v5.2/expected_wizard/habtm_subjects.rbi +3 -3
- data/spec/test_data/v5.2/expected_wizard.rbi +3 -3
- data/spec/test_data/v5.2/expected_wizard_wo_spellbook.rbi +6 -6
- data/spec/test_data/v6.0/expected_active_record_relation.rbi +2 -2
- data/spec/test_data/v6.0/expected_attachment.rbi +3 -3
- data/spec/test_data/v6.0/expected_blob.rbi +3 -3
- data/spec/test_data/v6.0/expected_habtm_subjects.rbi +3 -3
- data/spec/test_data/v6.0/expected_habtm_wizards.rbi +3 -3
- data/spec/test_data/v6.0/expected_headmaster.rbi +3 -3
- data/spec/test_data/v6.0/expected_internal_metadata.rbi +3 -3
- data/spec/test_data/v6.0/expected_potion.rbi +3 -3
- data/spec/test_data/v6.0/expected_robe.rbi +3 -3
- data/spec/test_data/v6.0/expected_schema_migration.rbi +3 -3
- data/spec/test_data/v6.0/expected_school.rbi +3 -3
- data/spec/test_data/v6.0/expected_spell/habtm_spell_books.rbi +3 -3
- data/spec/test_data/v6.0/expected_spell.rbi +3 -3
- data/spec/test_data/v6.0/expected_spell_book/habtm_spell_books.rbi +3 -3
- data/spec/test_data/v6.0/expected_spell_book/habtm_spells.rbi +3 -3
- data/spec/test_data/v6.0/expected_spell_book.rbi +3 -3
- data/spec/test_data/v6.0/expected_squib.rbi +3 -3
- data/spec/test_data/v6.0/expected_subject/habtm_wizards.rbi +3 -3
- data/spec/test_data/v6.0/expected_subject.rbi +3 -3
- data/spec/test_data/v6.0/expected_wand.rbi +3 -3
- data/spec/test_data/v6.0/expected_wizard/habtm_subjects.rbi +3 -3
- data/spec/test_data/v6.0/expected_wizard.rbi +3 -3
- data/spec/test_data/v6.0/expected_wizard_wo_spellbook.rbi +6 -6
- data/spec/test_data/v6.1/expected_active_record_relation.rbi +2 -2
- data/spec/test_data/v6.1/expected_attachment.rbi +9 -3
- data/spec/test_data/v6.1/expected_blob.rbi +9 -3
- data/spec/test_data/v6.1/expected_habtm_subjects.rbi +3 -3
- data/spec/test_data/v6.1/expected_habtm_wizards.rbi +3 -3
- data/spec/test_data/v6.1/expected_headmaster.rbi +9 -3
- data/spec/test_data/v6.1/expected_internal_metadata.rbi +9 -3
- data/spec/test_data/v6.1/expected_potion.rbi +9 -3
- data/spec/test_data/v6.1/expected_record.rbi +9 -3
- data/spec/test_data/v6.1/expected_robe.rbi +9 -3
- data/spec/test_data/v6.1/expected_schema_migration.rbi +9 -3
- data/spec/test_data/v6.1/expected_school.rbi +9 -3
- data/spec/test_data/v6.1/expected_spell/habtm_spell_books.rbi +9 -3
- data/spec/test_data/v6.1/expected_spell.rbi +9 -3
- data/spec/test_data/v6.1/expected_spell_book/habtm_spell_books.rbi +3 -3
- data/spec/test_data/v6.1/expected_spell_book/habtm_spells.rbi +9 -3
- data/spec/test_data/v6.1/expected_spell_book.rbi +9 -3
- data/spec/test_data/v6.1/expected_squib.rbi +9 -3
- data/spec/test_data/v6.1/expected_subject/habtm_wizards.rbi +9 -3
- data/spec/test_data/v6.1/expected_subject.rbi +9 -3
- data/spec/test_data/v6.1/expected_variant_record.rbi +9 -3
- data/spec/test_data/v6.1/expected_wand.rbi +9 -3
- data/spec/test_data/v6.1/expected_wizard/habtm_subjects.rbi +9 -3
- data/spec/test_data/v6.1/expected_wizard.rbi +9 -3
- data/spec/test_data/v6.1/expected_wizard_wo_spellbook.rbi +12 -6
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c85a4b2dec82b9ff5e78fd20ca40964639474ae84d03641f4d7a2f2ee7afe1ae
|
4
|
+
data.tar.gz: 62fd90904255f58f2c494a51c170077e347b0746b426717829514aa38df79b48
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d57f6492a27063b71f6f02d5731a6b4b05f97395f6ec61cfccf0af782544bd1bd0c9c8205338535dc4563c2be15f51745d03a52d51cd02e53d937c99fbba0b3
|
7
|
+
data.tar.gz: 8141acaf0b835f523b75f255a647e615017015aab6e40e2d50bd3ff5a523b74589583964553e1fbe6d959f3234722434757cb7aa9a68cc68381a1a5761b5a493
|
@@ -1,27 +1,17 @@
|
|
1
1
|
name: publish-gem
|
2
2
|
|
3
3
|
on:
|
4
|
-
|
5
|
-
push:
|
6
|
-
branches: # Trigger only on the main branch to avoid duplicate runs on PR branches
|
7
|
-
- master
|
4
|
+
workflow_dispatch:
|
8
5
|
|
9
6
|
jobs:
|
10
7
|
build:
|
11
8
|
runs-on: ubuntu-latest
|
12
|
-
|
13
|
-
env:
|
14
|
-
RAILS_VERSION: 6.0
|
15
|
-
|
16
9
|
steps:
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
uses: dawidd6/action-publish-gem@v1
|
26
|
-
with:
|
27
|
-
api_key: ${{secrets.RUBYGEMS_API_KEY}}
|
10
|
+
- uses: actions/checkout@v2
|
11
|
+
- uses: ruby/setup-ruby@v1
|
12
|
+
with:
|
13
|
+
ruby-version: 2.7
|
14
|
+
- name: Release Gem
|
15
|
+
uses: dawidd6/action-publish-gem@v1
|
16
|
+
with:
|
17
|
+
api_key: ${{secrets.RUBYGEMS_API_KEY}}
|
data/README.md
CHANGED
@@ -9,8 +9,6 @@ This gem adds a few Rake tasks to generate Ruby Interface (RBI) files for dynami
|
|
9
9
|
|
10
10
|
`sorbet-rails` supports Rails 5+ or later.
|
11
11
|
|
12
|
-
**Notice**: we automatically creates a new release on Rubygems with every merges to the master branch
|
13
|
-
|
14
12
|
**Notice**: we no longer support Rails 4.2. [Version 0.5.6](https://github.com/chanzuckerberg/sorbet-rails/releases/tag/v0.5.6) is the last version supporting Rails 4.2.
|
15
13
|
|
16
14
|
## Initial Setup
|
@@ -287,6 +285,7 @@ specific environment group (eg. `development` only).
|
|
287
285
|
|
288
286
|
- Model: The gem provides some helper method to a model to make type-checking easier:
|
289
287
|
- `find_n`, `first_n`, `last_n`
|
288
|
+
- `where_missing`
|
290
289
|
- `pluck_to_tstruct`
|
291
290
|
- `typed_enum`
|
292
291
|
|
@@ -365,6 +364,7 @@ Following are the list of attribute dynamic methods and their static counterpart
|
|
365
364
|
- `<attribute>_was` -> `attribute_was(<attribute>)`
|
366
365
|
- `saved_change_to_<attribute>?` -> `saved_change_to_attribute?(<attribute>)`
|
367
366
|
- `<attribute>_before_type_cast` -> `read_attribute_before_type_cast(<attribute>)`
|
367
|
+
- `will_save_change_to_<attribute>?` -> `will_save_change_to_attribute?(<attribute>)`
|
368
368
|
|
369
369
|
### `after_commit` and other callbacks
|
370
370
|
|
@@ -454,6 +454,18 @@ If you run into the following issue when running rspec, it's likely because you'
|
|
454
454
|
if you're really stuck.
|
455
455
|
```
|
456
456
|
|
457
|
+
### `where.missing` does not exist on `ActiveRecord::Relation` ###
|
458
|
+
|
459
|
+
The [`where` method](https://apidock.com/rails/ActiveRecord/QueryMethods/where) in Rails has two modes: it can be passed no arguments where it will return an `ActiveRecord::QueryMethods::WhereChain` object, or when given arguments, returns an `ActiveRecord::Relation` object. By default we've opted to support `where` with arguments and have provided a `where_missing` method to avoid conflicts during static typing.
|
460
|
+
|
461
|
+
```
|
462
|
+
Wizard.where.missing(:wand) # sorbet error, use `where_missing` instead
|
463
|
+
|
464
|
+
Wizard.where_missing(:wand) # valid, returns a relation
|
465
|
+
```
|
466
|
+
|
467
|
+
**Note:** `where.missing` / `where_missing` are only available in Rails 6.1 or above
|
468
|
+
|
457
469
|
## Extending RBI Generation logic
|
458
470
|
|
459
471
|
### Extending Model Generation Task with Custom Plugins
|
@@ -40,7 +40,7 @@ class SorbetRails::ActiveRecordRbiFormatter
|
|
40
40
|
class_rbi.create_include("Enumerable")
|
41
41
|
# class_rbi.create_constant(
|
42
42
|
# "Elem",
|
43
|
-
# value: "type_member
|
43
|
+
# value: "type_member {{fixed: T.untyped}}",
|
44
44
|
# )
|
45
45
|
|
46
46
|
create_elem_specific_query_methods(class_rbi, type: 'Elem', class_method: false)
|
@@ -75,7 +75,7 @@ class SorbetRails::ActiveRecordRbiFormatter
|
|
75
75
|
parlour.root.create_class("ActiveRecord::AssociationRelation", superclass: "ActiveRecord::Relation") do |class_rbi|
|
76
76
|
class_rbi.create_constant(
|
77
77
|
"Elem",
|
78
|
-
value: "type_member
|
78
|
+
value: "type_member {{fixed: T.untyped}}",
|
79
79
|
)
|
80
80
|
|
81
81
|
# Ideally we shouldn't need to define these since this class inherits from
|
@@ -110,7 +110,7 @@ class SorbetRails::ActiveRecordRbiFormatter
|
|
110
110
|
parlour.root.create_class("ActiveRecord::Associations::CollectionProxy", superclass: "ActiveRecord::Relation") do |class_rbi|
|
111
111
|
class_rbi.create_constant(
|
112
112
|
"Elem",
|
113
|
-
value: "type_member
|
113
|
+
value: "type_member {{fixed: T.untyped}}",
|
114
114
|
)
|
115
115
|
|
116
116
|
# This _should_ work which would let us remove it from the enumerable_collections
|
@@ -38,13 +38,18 @@ class AasmPlugin < SorbetRails::ModelPlugins::Base
|
|
38
38
|
)
|
39
39
|
end
|
40
40
|
|
41
|
-
# - If you have a state like :baz, you get
|
42
|
-
# - `baz?`
|
41
|
+
# - If you have a state like :baz, you get:
|
42
|
+
# - a method `baz?`
|
43
|
+
# - a constant `STATE_BAZ`
|
43
44
|
aasm_states.each do |state|
|
44
45
|
model_rbi.create_method(
|
45
46
|
"#{state}?",
|
46
47
|
return_type: 'T::Boolean'
|
47
48
|
)
|
49
|
+
|
50
|
+
root.create_module(
|
51
|
+
"#{model_class_name}::STATE_#{state.to_s.upcase}"
|
52
|
+
)
|
48
53
|
end
|
49
54
|
end
|
50
55
|
end
|
@@ -17,7 +17,7 @@ module SorbetRails::ModelColumnUtils
|
|
17
17
|
type = base_type.to_s
|
18
18
|
# A nullable array column should be T.nilable(T::Array[column_type]) not T::Array[T.nilable(column_type)]
|
19
19
|
type = "T::Array[#{type}]" if array_type
|
20
|
-
type = "T.nilable(#{type})" if nilable
|
20
|
+
type = "T.nilable(#{type})" if nilable && type != "T.untyped"
|
21
21
|
type
|
22
22
|
end
|
23
23
|
end
|
@@ -34,7 +34,7 @@ class SorbetRails::ModelPlugins::ActiveRecordAssoc < SorbetRails::ModelPlugins::
|
|
34
34
|
def populate_single_assoc_getter_setter(assoc_module_rbi, assoc_name, reflection)
|
35
35
|
# TODO allow people to specify the possible values of polymorphic associations
|
36
36
|
assoc_class = assoc_should_be_untyped?(reflection) ? "T.untyped" : "::#{reflection.klass.name}"
|
37
|
-
assoc_type = (belongs_to_and_required?(reflection) || has_one_and_required?(reflection)) ? assoc_class : "T.nilable(#{assoc_class})"
|
37
|
+
assoc_type = (belongs_to_and_required?(reflection) || has_one_and_required?(reflection) || assoc_class == "T.untyped") ? assoc_class : "T.nilable(#{assoc_class})"
|
38
38
|
|
39
39
|
params = [
|
40
40
|
Parameter.new("*args", type: "T.untyped"),
|
@@ -64,6 +64,19 @@ class SorbetRails::ModelPlugins::ActiveRecordQuerying < SorbetRails::ModelPlugin
|
|
64
64
|
)
|
65
65
|
end
|
66
66
|
|
67
|
+
# https://api.rubyonrails.org/v6.1.4/classes/ActiveRecord/QueryMethods/WhereChain.html#method-i-missing
|
68
|
+
# where.missing is only available in Rails 6.1 and above
|
69
|
+
if Rails.version >= "6.1"
|
70
|
+
add_relation_query_method(
|
71
|
+
root,
|
72
|
+
"where_missing", # where_missing is injected by sorbet-rails
|
73
|
+
parameters: [
|
74
|
+
Parameter.new("*args", type: "Symbol"),
|
75
|
+
],
|
76
|
+
builtin_query_method: true,
|
77
|
+
)
|
78
|
+
end
|
79
|
+
|
67
80
|
add_relation_query_method(
|
68
81
|
root,
|
69
82
|
"extending",
|
@@ -80,7 +80,7 @@ class SorbetRails::ModelRbiFormatter
|
|
80
80
|
model_relation_rbi.create_include(self.model_query_methods_returning_relation_module_name)
|
81
81
|
model_relation_rbi.create_constant(
|
82
82
|
"Elem",
|
83
|
-
value: "type_member
|
83
|
+
value: "type_member {{fixed: #{model_class_name}}}",
|
84
84
|
)
|
85
85
|
|
86
86
|
model_assoc_relation_rbi = root.create_class(
|
@@ -90,7 +90,7 @@ class SorbetRails::ModelRbiFormatter
|
|
90
90
|
model_assoc_relation_rbi.create_include(self.model_query_methods_returning_assoc_relation_module_name)
|
91
91
|
model_assoc_relation_rbi.create_constant(
|
92
92
|
"Elem",
|
93
|
-
value: "type_member
|
93
|
+
value: "type_member {{fixed: #{model_class_name}}}",
|
94
94
|
)
|
95
95
|
|
96
96
|
collection_proxy_rbi = root.create_class(
|
@@ -100,7 +100,7 @@ class SorbetRails::ModelRbiFormatter
|
|
100
100
|
collection_proxy_rbi.create_include(self.model_query_methods_returning_assoc_relation_module_name)
|
101
101
|
collection_proxy_rbi.create_constant(
|
102
102
|
"Elem",
|
103
|
-
value: "type_member
|
103
|
+
value: "type_member {{fixed: #{self.model_class_name}}}",
|
104
104
|
)
|
105
105
|
|
106
106
|
model_rbi = root.create_class(
|
@@ -26,5 +26,13 @@ module SorbetRails
|
|
26
26
|
def find_by_id!(id)
|
27
27
|
find_by!(id: id)
|
28
28
|
end
|
29
|
+
|
30
|
+
# where.missing is only available in Rails 6.1 and above
|
31
|
+
if Rails.version >= "6.1"
|
32
|
+
# https://api.rubyonrails.org/v6.1.4/classes/ActiveRecord/QueryMethods/WhereChain.html#method-i-missing
|
33
|
+
def where_missing(*args)
|
34
|
+
where.missing(*args)
|
35
|
+
end
|
36
|
+
end
|
29
37
|
end
|
30
38
|
end
|
data/sorbet-rails.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{sorbet-rails}
|
3
|
-
s.version = "0.7
|
3
|
+
s.version = "0.7.33"
|
4
4
|
s.date = %q{2019-04-18}
|
5
5
|
s.summary = %q{Set of tools to make Sorbet work with Rails seamlessly.}
|
6
6
|
s.authors = ["Chan Zuckerberg Initiative"]
|
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
end
|
17
17
|
|
18
18
|
s.add_dependency 'parlour', '>= 4.0.1'
|
19
|
-
s.add_dependency 'sorbet-runtime', '>= 0.5'
|
19
|
+
s.add_dependency 'sorbet-runtime', '>= 0.5.9892'
|
20
20
|
s.add_dependency 'sorbet-coerce', '>= 0.2.6'
|
21
21
|
s.add_dependency 'method_source', '>= 0.9.2'
|
22
22
|
s.add_dependency 'parser', '>= 2.7'
|
@@ -77,4 +77,27 @@ RSpec.describe SorbetRails::CustomFinderMethods do
|
|
77
77
|
expect(wizards_3).to eq([harry, ron, hermione])
|
78
78
|
end
|
79
79
|
end
|
80
|
+
|
81
|
+
context 'test where_missing' do
|
82
|
+
# where.missing is only available in Rails 6.1 and above
|
83
|
+
if Rails.version < "6.1"
|
84
|
+
it 'raises an error' do
|
85
|
+
expect { Wizard.where_missing(:wand) }.to raise_error(NoMethodError)
|
86
|
+
end
|
87
|
+
else
|
88
|
+
it 'works with no arguments' do
|
89
|
+
missing_with_no_args = Wizard.where_missing
|
90
|
+
all_wizards = Wizard.all
|
91
|
+
|
92
|
+
expect(missing_with_no_args).to eq(all_wizards)
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'retrieves wizards with missing wands' do
|
96
|
+
elder_wand = Wand.create!(wizard: harry, wood_type: :holly, core_type: :phoenix_feather)
|
97
|
+
wizards_without_wands = Wizard.where_missing(:wand).to_a
|
98
|
+
|
99
|
+
expect(wizards_without_wands).to eq(Wizard.all.to_a - [harry])
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
80
103
|
end
|
data/spec/sorbet_spec.rb
CHANGED
@@ -63,6 +63,9 @@ RSpec.describe 'sorbet' do
|
|
63
63
|
# run sorbet-rails rake tasks
|
64
64
|
Rake::Task['rails_rbi:all'].invoke
|
65
65
|
|
66
|
+
# ensure we remove sorbet-rails.rbi as there are conflicts which cause srb tc to fail
|
67
|
+
FileUtils.rm_f(Rails.root.join('sorbet/rbi/gems/sorbet-rails.rbi'))
|
68
|
+
|
66
69
|
# Regenerate hidden-definitions because there might be conflicts between signature
|
67
70
|
# generated by sorbet-rails & by hidden-definitions
|
68
71
|
# They should be resolved when re-running this script
|
@@ -1,53 +1,53 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../../..
|
3
3
|
specs:
|
4
|
-
sorbet-rails (0.7.
|
4
|
+
sorbet-rails (0.7.32)
|
5
5
|
method_source (>= 0.9.2)
|
6
6
|
parlour (>= 4.0.1)
|
7
7
|
parser (>= 2.7)
|
8
8
|
sorbet-coerce (>= 0.2.6)
|
9
|
-
sorbet-runtime (>= 0.5)
|
9
|
+
sorbet-runtime (>= 0.5.9892)
|
10
10
|
|
11
11
|
GEM
|
12
12
|
remote: https://rubygems.org/
|
13
13
|
specs:
|
14
|
-
actioncable (5.2.
|
15
|
-
actionpack (= 5.2.
|
14
|
+
actioncable (5.2.7)
|
15
|
+
actionpack (= 5.2.7)
|
16
16
|
nio4r (~> 2.0)
|
17
17
|
websocket-driver (>= 0.6.1)
|
18
|
-
actionmailer (5.2.
|
19
|
-
actionpack (= 5.2.
|
20
|
-
actionview (= 5.2.
|
21
|
-
activejob (= 5.2.
|
18
|
+
actionmailer (5.2.7)
|
19
|
+
actionpack (= 5.2.7)
|
20
|
+
actionview (= 5.2.7)
|
21
|
+
activejob (= 5.2.7)
|
22
22
|
mail (~> 2.5, >= 2.5.4)
|
23
23
|
rails-dom-testing (~> 2.0)
|
24
|
-
actionpack (5.2.
|
25
|
-
actionview (= 5.2.
|
26
|
-
activesupport (= 5.2.
|
24
|
+
actionpack (5.2.7)
|
25
|
+
actionview (= 5.2.7)
|
26
|
+
activesupport (= 5.2.7)
|
27
27
|
rack (~> 2.0, >= 2.0.8)
|
28
28
|
rack-test (>= 0.6.3)
|
29
29
|
rails-dom-testing (~> 2.0)
|
30
30
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
31
|
-
actionview (5.2.
|
32
|
-
activesupport (= 5.2.
|
31
|
+
actionview (5.2.7)
|
32
|
+
activesupport (= 5.2.7)
|
33
33
|
builder (~> 3.1)
|
34
34
|
erubi (~> 1.4)
|
35
35
|
rails-dom-testing (~> 2.0)
|
36
36
|
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
37
|
-
activejob (5.2.
|
38
|
-
activesupport (= 5.2.
|
37
|
+
activejob (5.2.7)
|
38
|
+
activesupport (= 5.2.7)
|
39
39
|
globalid (>= 0.3.6)
|
40
|
-
activemodel (5.2.
|
41
|
-
activesupport (= 5.2.
|
42
|
-
activerecord (5.2.
|
43
|
-
activemodel (= 5.2.
|
44
|
-
activesupport (= 5.2.
|
40
|
+
activemodel (5.2.7)
|
41
|
+
activesupport (= 5.2.7)
|
42
|
+
activerecord (5.2.7)
|
43
|
+
activemodel (= 5.2.7)
|
44
|
+
activesupport (= 5.2.7)
|
45
45
|
arel (>= 9.0)
|
46
|
-
activestorage (5.2.
|
47
|
-
actionpack (= 5.2.
|
48
|
-
activerecord (= 5.2.
|
46
|
+
activestorage (5.2.7)
|
47
|
+
actionpack (= 5.2.7)
|
48
|
+
activerecord (= 5.2.7)
|
49
49
|
marcel (~> 1.0.0)
|
50
|
-
activesupport (5.2.
|
50
|
+
activesupport (5.2.7)
|
51
51
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
52
52
|
i18n (>= 0.7, < 2)
|
53
53
|
minitest (~> 5.1)
|
@@ -59,89 +59,98 @@ GEM
|
|
59
59
|
byebug (11.1.3)
|
60
60
|
commander (4.6.0)
|
61
61
|
highline (~> 2.0.0)
|
62
|
-
concurrent-ruby (1.1.
|
62
|
+
concurrent-ruby (1.1.10)
|
63
63
|
crass (1.0.6)
|
64
64
|
erubi (1.10.0)
|
65
|
-
globalid (0.
|
66
|
-
activesupport (>=
|
65
|
+
globalid (1.0.0)
|
66
|
+
activesupport (>= 5.0)
|
67
67
|
highline (2.0.3)
|
68
|
-
i18n (1.
|
68
|
+
i18n (1.10.0)
|
69
69
|
concurrent-ruby (~> 1.0)
|
70
|
-
jbuilder (2.11.
|
70
|
+
jbuilder (2.11.5)
|
71
|
+
actionview (>= 5.0.0)
|
71
72
|
activesupport (>= 5.0.0)
|
72
|
-
loofah (2.
|
73
|
+
loofah (2.16.0)
|
73
74
|
crass (~> 1.0.2)
|
74
75
|
nokogiri (>= 1.5.9)
|
75
76
|
mail (2.7.1)
|
76
77
|
mini_mime (>= 0.1.1)
|
77
|
-
marcel (1.0.
|
78
|
+
marcel (1.0.2)
|
78
79
|
method_source (1.0.0)
|
79
|
-
mini_mime (1.1.
|
80
|
-
mini_portile2 (2.
|
81
|
-
minitest (5.
|
82
|
-
nio4r (2.5.
|
83
|
-
nokogiri (1.
|
84
|
-
mini_portile2 (~> 2.
|
80
|
+
mini_mime (1.1.2)
|
81
|
+
mini_portile2 (2.8.0)
|
82
|
+
minitest (5.15.0)
|
83
|
+
nio4r (2.5.8)
|
84
|
+
nokogiri (1.13.4)
|
85
|
+
mini_portile2 (~> 2.8.0)
|
85
86
|
racc (~> 1.4)
|
86
|
-
nokogiri (1.
|
87
|
+
nokogiri (1.13.4-x86_64-darwin)
|
87
88
|
racc (~> 1.4)
|
88
|
-
parlour (
|
89
|
+
parlour (7.0.0)
|
89
90
|
commander (~> 4.5)
|
90
91
|
parser
|
91
92
|
rainbow (~> 3.0)
|
92
93
|
sorbet-runtime (>= 0.5)
|
93
|
-
parser (3.
|
94
|
+
parser (3.1.2.0)
|
94
95
|
ast (~> 2.4.1)
|
95
96
|
polyfill (1.9.0)
|
96
97
|
puma (3.12.6)
|
97
|
-
racc (1.
|
98
|
+
racc (1.6.0)
|
98
99
|
rack (2.2.3)
|
99
100
|
rack-test (1.1.0)
|
100
101
|
rack (>= 1.0, < 3)
|
101
|
-
rails (5.2.
|
102
|
-
actioncable (= 5.2.
|
103
|
-
actionmailer (= 5.2.
|
104
|
-
actionpack (= 5.2.
|
105
|
-
actionview (= 5.2.
|
106
|
-
activejob (= 5.2.
|
107
|
-
activemodel (= 5.2.
|
108
|
-
activerecord (= 5.2.
|
109
|
-
activestorage (= 5.2.
|
110
|
-
activesupport (= 5.2.
|
102
|
+
rails (5.2.7)
|
103
|
+
actioncable (= 5.2.7)
|
104
|
+
actionmailer (= 5.2.7)
|
105
|
+
actionpack (= 5.2.7)
|
106
|
+
actionview (= 5.2.7)
|
107
|
+
activejob (= 5.2.7)
|
108
|
+
activemodel (= 5.2.7)
|
109
|
+
activerecord (= 5.2.7)
|
110
|
+
activestorage (= 5.2.7)
|
111
|
+
activesupport (= 5.2.7)
|
111
112
|
bundler (>= 1.3.0)
|
112
|
-
railties (= 5.2.
|
113
|
+
railties (= 5.2.7)
|
113
114
|
sprockets-rails (>= 2.0.0)
|
114
115
|
rails-dom-testing (2.0.3)
|
115
116
|
activesupport (>= 4.2.0)
|
116
117
|
nokogiri (>= 1.6)
|
117
|
-
rails-html-sanitizer (1.
|
118
|
+
rails-html-sanitizer (1.4.2)
|
118
119
|
loofah (~> 2.3)
|
119
|
-
railties (5.2.
|
120
|
-
actionpack (= 5.2.
|
121
|
-
activesupport (= 5.2.
|
120
|
+
railties (5.2.7)
|
121
|
+
actionpack (= 5.2.7)
|
122
|
+
activesupport (= 5.2.7)
|
122
123
|
method_source
|
123
124
|
rake (>= 0.8.7)
|
124
125
|
thor (>= 0.19.0, < 2.0)
|
125
|
-
rainbow (3.
|
126
|
+
rainbow (3.1.1)
|
126
127
|
rake (13.0.6)
|
127
128
|
safe_type (1.1.1)
|
128
|
-
sorbet (0.5.
|
129
|
-
sorbet-static (= 0.5.
|
129
|
+
sorbet (0.5.9892)
|
130
|
+
sorbet-static (= 0.5.9892)
|
130
131
|
sorbet-coerce (0.5.0)
|
131
132
|
polyfill (~> 1.8)
|
132
133
|
safe_type (~> 1.1, >= 1.1.1)
|
133
134
|
sorbet-runtime (>= 0.4.4704)
|
134
|
-
sorbet-runtime (0.5.
|
135
|
-
sorbet-static (0.5.
|
136
|
-
|
135
|
+
sorbet-runtime (0.5.9892)
|
136
|
+
sorbet-static (0.5.9892-universal-darwin-14)
|
137
|
+
sorbet-static (0.5.9892-universal-darwin-15)
|
138
|
+
sorbet-static (0.5.9892-universal-darwin-16)
|
139
|
+
sorbet-static (0.5.9892-universal-darwin-17)
|
140
|
+
sorbet-static (0.5.9892-universal-darwin-18)
|
141
|
+
sorbet-static (0.5.9892-universal-darwin-19)
|
142
|
+
sorbet-static (0.5.9892-universal-darwin-20)
|
143
|
+
sorbet-static (0.5.9892-universal-darwin-21)
|
144
|
+
sorbet-static (0.5.9892-x86_64-linux)
|
145
|
+
sprockets (4.0.3)
|
137
146
|
concurrent-ruby (~> 1.0)
|
138
147
|
rack (> 1, < 3)
|
139
|
-
sprockets-rails (3.
|
140
|
-
actionpack (>=
|
141
|
-
activesupport (>=
|
148
|
+
sprockets-rails (3.4.2)
|
149
|
+
actionpack (>= 5.2)
|
150
|
+
activesupport (>= 5.2)
|
142
151
|
sprockets (>= 3.0.0)
|
143
152
|
sqlite3 (1.4.2)
|
144
|
-
thor (1.1
|
153
|
+
thor (1.2.1)
|
145
154
|
thread_safe (0.3.6)
|
146
155
|
tzinfo (1.2.9)
|
147
156
|
thread_safe (~> 0.1)
|
@@ -171,4 +180,4 @@ DEPENDENCIES
|
|
171
180
|
web-console (>= 3.3.0)
|
172
181
|
|
173
182
|
BUNDLED WITH
|
174
|
-
2.2.
|
183
|
+
2.2.32
|