sorbet-rails 0.6.2 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -0
- data/README.md +3 -3
- data/lib/bundled_rbi/typed_enum.rbi +7 -0
- data/lib/sorbet-rails.rb +0 -2
- data/lib/sorbet-rails/active_record_rbi_formatter.rb +301 -0
- data/lib/sorbet-rails/config.rb +0 -1
- data/lib/sorbet-rails/dependent_gem_rbis/activerecord.rbi +11 -0
- data/lib/sorbet-rails/deprecation.rb +5 -0
- data/lib/sorbet-rails/gem_plugins/active_flag_plugin.rb +0 -1
- data/lib/sorbet-rails/gem_plugins/paperclip_plugin.rb +0 -1
- data/lib/sorbet-rails/model_plugins/active_record_assoc.rb +36 -8
- data/lib/sorbet-rails/model_plugins/active_record_attribute.rb +20 -9
- data/lib/sorbet-rails/model_plugins/active_record_enum.rb +0 -1
- data/lib/sorbet-rails/model_plugins/active_record_named_scope.rb +15 -6
- data/lib/sorbet-rails/model_plugins/active_record_querying.rb +34 -3
- data/lib/sorbet-rails/model_plugins/active_storage_methods.rb +1 -1
- data/lib/sorbet-rails/model_plugins/base.rb +10 -0
- data/lib/sorbet-rails/model_plugins/enumerable_collections.rb +0 -50
- data/lib/sorbet-rails/model_plugins/plugins.rb +0 -3
- data/lib/sorbet-rails/model_rbi_formatter.rb +6 -10
- data/lib/sorbet-rails/model_utils.rb +83 -36
- data/lib/sorbet-rails/rails_mixins/generated_url_helpers.rb +2 -3
- data/lib/sorbet-rails/railtie.rb +0 -2
- data/lib/sorbet-rails/tasks/rails_rbi.rake +32 -24
- data/sorbet-rails.gemspec +2 -2
- data/spec/active_record_rbi_formatter_spec.rb +24 -0
- data/spec/generators/rails-template.rb +90 -6
- data/spec/generators/sorbet_test_cases.rb +204 -122
- data/spec/model_rbi_formatter_spec.rb +1 -1
- data/spec/rails_helper.rb +14 -1
- data/spec/rake_rails_rbi_active_record_spec.rb +21 -0
- data/spec/rake_rails_rbi_models_spec.rb +7 -0
- data/spec/sorbet_spec.rb +12 -1
- data/spec/support/v5.0/Gemfile.lock +8 -8
- data/spec/support/v5.0/app/models/headmaster.rb +8 -0
- data/spec/support/v5.0/app/models/school.rb +2 -0
- data/spec/support/v5.0/app/models/spell.rb +5 -0
- data/spec/support/v5.0/app/models/spell_book.rb +5 -0
- data/spec/support/v5.0/app/models/subject.rb +5 -0
- data/spec/support/v5.0/app/models/wizard.rb +6 -1
- data/spec/support/v5.0/db/migrate/20190620000010_add_subject.rb +8 -0
- data/spec/support/v5.0/db/migrate/20190620000011_add_subjects_wizards.rb +8 -0
- data/spec/support/v5.0/db/migrate/20190620000012_add_spell.rb +8 -0
- data/spec/support/v5.0/db/migrate/20190620000013_add_spells_spell_books.rb +8 -0
- data/spec/support/v5.0/db/migrate/20190620000014_create_headmasters.rb +9 -0
- data/spec/support/v5.0/db/schema.rb +28 -1
- data/spec/support/v5.0/lib/mythical_rbi_plugin.rb +1 -1
- data/spec/support/v5.0/sorbet_test_cases.rb +204 -122
- data/spec/support/v5.1/Gemfile.lock +8 -8
- data/spec/support/v5.1/app/models/headmaster.rb +8 -0
- data/spec/support/v5.1/app/models/school.rb +2 -0
- data/spec/support/v5.1/app/models/spell.rb +5 -0
- data/spec/support/v5.1/app/models/spell_book.rb +5 -0
- data/spec/support/v5.1/app/models/subject.rb +5 -0
- data/spec/support/v5.1/app/models/wizard.rb +6 -1
- data/spec/support/v5.1/db/migrate/20190620000010_add_subject.rb +8 -0
- data/spec/support/v5.1/db/migrate/20190620000011_add_subjects_wizards.rb +8 -0
- data/spec/support/v5.1/db/migrate/20190620000012_add_spell.rb +8 -0
- data/spec/support/v5.1/db/migrate/20190620000013_add_spells_spell_books.rb +8 -0
- data/spec/support/v5.1/db/migrate/20190620000014_create_headmasters.rb +9 -0
- data/spec/support/v5.1/db/schema.rb +28 -1
- data/spec/support/v5.1/lib/mythical_rbi_plugin.rb +1 -1
- data/spec/support/v5.1/sorbet_test_cases.rb +204 -122
- data/spec/support/v5.2/Gemfile +1 -1
- data/spec/support/v5.2/Gemfile.lock +9 -9
- data/spec/support/v5.2/app/models/headmaster.rb +8 -0
- data/spec/support/v5.2/app/models/school.rb +2 -0
- data/spec/support/v5.2/app/models/spell.rb +5 -0
- data/spec/support/v5.2/app/models/spell_book.rb +5 -0
- data/spec/support/v5.2/app/models/subject.rb +5 -0
- data/spec/support/v5.2/app/models/wizard.rb +5 -0
- data/spec/support/v5.2/config/puma.rb +3 -0
- data/spec/support/v5.2/db/migrate/20190620000010_add_subject.rb +8 -0
- data/spec/support/v5.2/db/migrate/20190620000011_add_subjects_wizards.rb +8 -0
- data/spec/support/v5.2/db/migrate/20190620000012_add_spell.rb +8 -0
- data/spec/support/v5.2/db/migrate/20190620000013_add_spells_spell_books.rb +8 -0
- data/spec/support/v5.2/db/migrate/20190620000014_create_headmasters.rb +9 -0
- data/spec/support/v5.2/db/schema.rb +28 -1
- data/spec/support/v5.2/lib/mythical_rbi_plugin.rb +1 -1
- data/spec/support/v5.2/sorbet_test_cases.rb +204 -122
- data/spec/support/v6.0/Gemfile.lock +8 -8
- data/spec/support/v6.0/app/models/headmaster.rb +8 -0
- data/spec/support/v6.0/app/models/school.rb +2 -0
- data/spec/support/v6.0/app/models/spell.rb +5 -0
- data/spec/support/v6.0/app/models/spell_book.rb +5 -0
- data/spec/support/v6.0/app/models/subject.rb +5 -0
- data/spec/support/v6.0/app/models/wizard.rb +6 -1
- data/spec/support/v6.0/db/migrate/20190620000010_add_subject.rb +8 -0
- data/spec/support/v6.0/db/migrate/20190620000011_add_subjects_wizards.rb +8 -0
- data/spec/support/v6.0/db/migrate/20190620000012_add_spell.rb +8 -0
- data/spec/support/v6.0/db/migrate/20190620000013_add_spells_spell_books.rb +8 -0
- data/spec/support/v6.0/db/migrate/20190620000014_create_headmasters.rb +9 -0
- data/spec/support/v6.0/db/schema.rb +28 -1
- data/spec/support/v6.0/lib/mythical_rbi_plugin.rb +1 -1
- data/spec/support/v6.0/sorbet_test_cases.rb +204 -122
- data/spec/test_data/v5.0/expected_active_record_base.rbi +113 -0
- data/spec/test_data/v5.0/expected_active_record_relation.rbi +199 -0
- data/spec/test_data/v5.0/expected_habtm_subjects.rbi +660 -0
- data/spec/test_data/v5.0/expected_habtm_wizards.rbi +660 -0
- data/spec/test_data/v5.0/expected_headmaster.rbi +304 -0
- data/spec/test_data/v5.0/expected_internal_metadata.rbi +38 -401
- data/spec/test_data/v5.0/expected_potion.rbi +38 -401
- data/spec/test_data/v5.0/expected_robe.rbi +38 -403
- data/spec/test_data/v5.0/expected_schema_migration.rbi +38 -401
- data/spec/test_data/v5.0/expected_school.rbi +47 -401
- data/spec/test_data/v5.0/expected_spell.rbi +292 -0
- data/spec/test_data/v5.0/expected_spell/habtm_spell_books.rbi +295 -0
- data/spec/test_data/v5.0/expected_spell_book.rbi +86 -432
- data/spec/test_data/v5.0/expected_spell_book/habtm_spell_books.rbi +637 -0
- data/spec/test_data/v5.0/expected_spell_book/habtm_spells.rbi +295 -0
- data/spec/test_data/v5.0/expected_squib.rbi +122 -477
- data/spec/test_data/v5.0/expected_subject.rbi +292 -0
- data/spec/test_data/v5.0/expected_subject/habtm_wizards.rbi +295 -0
- data/spec/test_data/v5.0/expected_wand.rbi +75 -442
- data/spec/test_data/v5.0/expected_wizard.rbi +144 -498
- data/spec/test_data/v5.0/expected_wizard/habtm_subjects.rbi +295 -0
- data/spec/test_data/v5.0/expected_wizard_wo_spellbook.rbi +138 -498
- data/spec/test_data/v5.1/expected_active_record_base.rbi +113 -0
- data/spec/test_data/v5.1/expected_active_record_relation.rbi +178 -0
- data/spec/test_data/v5.1/expected_habtm_subjects.rbi +672 -0
- data/spec/test_data/v5.1/expected_habtm_wizards.rbi +672 -0
- data/spec/test_data/v5.1/expected_headmaster.rbi +310 -0
- data/spec/test_data/v5.1/expected_internal_metadata.rbi +38 -407
- data/spec/test_data/v5.1/expected_potion.rbi +38 -407
- data/spec/test_data/v5.1/expected_robe.rbi +38 -409
- data/spec/test_data/v5.1/expected_schema_migration.rbi +38 -407
- data/spec/test_data/v5.1/expected_school.rbi +47 -407
- data/spec/test_data/v5.1/expected_spell.rbi +298 -0
- data/spec/test_data/v5.1/expected_spell/habtm_spell_books.rbi +301 -0
- data/spec/test_data/v5.1/expected_spell_book.rbi +86 -438
- data/spec/test_data/v5.1/expected_spell_book/habtm_spell_books.rbi +649 -0
- data/spec/test_data/v5.1/expected_spell_book/habtm_spells.rbi +301 -0
- data/spec/test_data/v5.1/expected_squib.rbi +123 -484
- data/spec/test_data/v5.1/expected_subject.rbi +298 -0
- data/spec/test_data/v5.1/expected_subject/habtm_wizards.rbi +301 -0
- data/spec/test_data/v5.1/expected_wand.rbi +75 -448
- data/spec/test_data/v5.1/expected_wizard.rbi +145 -505
- data/spec/test_data/v5.1/expected_wizard/habtm_subjects.rbi +301 -0
- data/spec/test_data/v5.1/expected_wizard_wo_spellbook.rbi +139 -505
- data/spec/test_data/v5.2/expected_active_record_base.rbi +113 -0
- data/spec/test_data/v5.2/expected_active_record_relation.rbi +175 -0
- data/spec/test_data/v5.2/expected_attachment.rbi +38 -407
- data/spec/test_data/v5.2/expected_blob.rbi +60 -426
- data/spec/test_data/v5.2/expected_habtm_subjects.rbi +672 -0
- data/spec/test_data/v5.2/expected_habtm_wizards.rbi +672 -0
- data/spec/test_data/v5.2/expected_headmaster.rbi +310 -0
- data/spec/test_data/v5.2/expected_internal_metadata.rbi +38 -407
- data/spec/test_data/v5.2/expected_potion.rbi +38 -407
- data/spec/test_data/v5.2/expected_robe.rbi +38 -409
- data/spec/test_data/v5.2/expected_schema_migration.rbi +38 -407
- data/spec/test_data/v5.2/expected_school.rbi +47 -407
- data/spec/test_data/v5.2/expected_spell.rbi +298 -0
- data/spec/test_data/v5.2/expected_spell/habtm_spell_books.rbi +301 -0
- data/spec/test_data/v5.2/expected_spell_book.rbi +86 -438
- data/spec/test_data/v5.2/expected_spell_book/habtm_spell_books.rbi +649 -0
- data/spec/test_data/v5.2/expected_spell_book/habtm_spells.rbi +301 -0
- data/spec/test_data/v5.2/expected_squib.rbi +133 -488
- data/spec/test_data/v5.2/expected_subject.rbi +298 -0
- data/spec/test_data/v5.2/expected_subject/habtm_wizards.rbi +301 -0
- data/spec/test_data/v5.2/expected_wand.rbi +75 -448
- data/spec/test_data/v5.2/expected_wizard.rbi +155 -509
- data/spec/test_data/v5.2/expected_wizard/habtm_subjects.rbi +301 -0
- data/spec/test_data/v5.2/expected_wizard_wo_spellbook.rbi +149 -509
- data/spec/test_data/v6.0/expected_active_record_base.rbi +113 -0
- data/spec/test_data/v6.0/expected_active_record_relation.rbi +175 -0
- data/spec/test_data/v6.0/expected_attachment.rbi +38 -431
- data/spec/test_data/v6.0/expected_blob.rbi +60 -450
- data/spec/test_data/v6.0/expected_habtm_subjects.rbi +720 -0
- data/spec/test_data/v6.0/expected_habtm_wizards.rbi +720 -0
- data/spec/test_data/v6.0/expected_headmaster.rbi +334 -0
- data/spec/test_data/v6.0/expected_internal_metadata.rbi +38 -431
- data/spec/test_data/v6.0/expected_potion.rbi +38 -431
- data/spec/test_data/v6.0/expected_robe.rbi +38 -433
- data/spec/test_data/v6.0/expected_routes.rbi +14 -7
- data/spec/test_data/v6.0/expected_schema_migration.rbi +38 -431
- data/spec/test_data/v6.0/expected_school.rbi +47 -431
- data/spec/test_data/v6.0/expected_spell.rbi +322 -0
- data/spec/test_data/v6.0/expected_spell/habtm_spell_books.rbi +325 -0
- data/spec/test_data/v6.0/expected_spell_book.rbi +98 -474
- data/spec/test_data/v6.0/expected_spell_book/habtm_spell_books.rbi +697 -0
- data/spec/test_data/v6.0/expected_spell_book/habtm_spells.rbi +325 -0
- data/spec/test_data/v6.0/expected_squib.rbi +162 -541
- data/spec/test_data/v6.0/expected_subject.rbi +322 -0
- data/spec/test_data/v6.0/expected_subject/habtm_wizards.rbi +325 -0
- data/spec/test_data/v6.0/expected_wand.rbi +91 -488
- data/spec/test_data/v6.0/expected_wizard.rbi +184 -562
- data/spec/test_data/v6.0/expected_wizard/habtm_subjects.rbi +325 -0
- data/spec/test_data/v6.0/expected_wizard_wo_spellbook.rbi +178 -562
- metadata +170 -24
- data/lib/bundled_rbi/active_record_base.rbi +0 -83
- data/lib/bundled_rbi/active_record_relation.rbi +0 -122
- data/lib/bundled_rbi/parameters.rbi +0 -28
- data/lib/sorbet-rails/custom_types/boolean_string.rb +0 -32
- data/lib/sorbet-rails/custom_types/integer_string.rb +0 -35
- data/lib/sorbet-rails/model_plugins/active_record_finder_methods.rb +0 -131
- data/lib/sorbet-rails/rails_mixins/custom_params_methods.rb +0 -46
- data/spec/boolean_string_spec.rb +0 -59
- data/spec/custom_params_methods_spec.rb +0 -138
- data/spec/integer_string_spec.rb +0 -46
- data/spec/support/v5.0/typed-override.yaml +0 -2
- data/spec/support/v5.1/typed-override.yaml +0 -2
- data/spec/support/v5.2/typed-override.yaml +0 -2
- data/spec/support/v6.0/typed-override.yaml +0 -2
data/spec/boolean_string_spec.rb
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
require 'sorbet-rails/custom_types/boolean_string'
|
3
|
-
require 'sorbet-runtime'
|
4
|
-
|
5
|
-
RSpec.describe BooleanString do
|
6
|
-
shared_examples 'boolean string' do |str|
|
7
|
-
it 'acts as BooleanString perfectly' do
|
8
|
-
expect(str.is_a?(BooleanString)).to be(true)
|
9
|
-
expect(str.kind_of?(BooleanString)).to be(true)
|
10
|
-
expect(str.instance_of?(BooleanString)).to be(true)
|
11
|
-
expect(BooleanString === str).to be(true)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
include_examples 'boolean string', 'true'
|
16
|
-
include_examples 'boolean string', 'false'
|
17
|
-
include_examples 'boolean string', 'True'
|
18
|
-
include_examples 'boolean string', 'False'
|
19
|
-
|
20
|
-
shared_examples 'non boolean string' do |str|
|
21
|
-
it 'does not acts as BooleanString' do
|
22
|
-
expect(str.is_a?(BooleanString)).to be(false)
|
23
|
-
expect(str.kind_of?(BooleanString)).to be(false)
|
24
|
-
expect(str.instance_of?(BooleanString)).to be(false)
|
25
|
-
expect(BooleanString === str).to be(false)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
include_examples 'non boolean string', 'yes'
|
30
|
-
include_examples 'non boolean string', 'no'
|
31
|
-
include_examples 'non boolean string', 'alala'
|
32
|
-
|
33
|
-
context 'sorbet recognizes it at runtime' do
|
34
|
-
it 'lets boolean string pass runtime check' do
|
35
|
-
expect(T.let('true', BooleanString)).to eql('true')
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'doesnt let normal string pass runtime typecheck' do
|
39
|
-
expect {
|
40
|
-
T.let('yes', BooleanString)
|
41
|
-
}.to raise_error(TypeError)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
context 'using with TypeAssert' do
|
46
|
-
let!(:ta) { TA[BooleanString].new }
|
47
|
-
|
48
|
-
it 'lets boolean string pass runtime typecheck' do
|
49
|
-
expect(ta.assert('true')).to eql('true')
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'doesnt let normal string pass runtime typecheck' do
|
53
|
-
expect {
|
54
|
-
ta.assert('yes')
|
55
|
-
}.to raise_error(TypeError)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
@@ -1,138 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
|
3
|
-
describe ActionController::Parameters do
|
4
|
-
let!(:params) do
|
5
|
-
ActionController::Parameters.new({
|
6
|
-
age: 11,
|
7
|
-
name: 'Harry Potter',
|
8
|
-
info: {
|
9
|
-
birthday: Date.parse('1980-07-31'),
|
10
|
-
friends: [
|
11
|
-
'Hermione',
|
12
|
-
'Ron',
|
13
|
-
],
|
14
|
-
grandson: nil,
|
15
|
-
},
|
16
|
-
})
|
17
|
-
end
|
18
|
-
let!(:params_info) { params.require(:info) }
|
19
|
-
|
20
|
-
context 'require_typed' do
|
21
|
-
it 'gets basic param correctly' do
|
22
|
-
val = params.require_typed(:age, TA[Integer].new)
|
23
|
-
expect(val).to eql(11)
|
24
|
-
|
25
|
-
val = params.require_typed(:name, TA[String].new)
|
26
|
-
expect(val).to eql('Harry Potter')
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'gets param with complex type correctly' do
|
30
|
-
val = params.require_typed(:age, TA[T.any(String, Integer)].new)
|
31
|
-
expect(val).to eql(11)
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'gets param object correctly' do
|
35
|
-
val = params.require_typed(:info, TA[ActionController::Parameters].new)
|
36
|
-
expect(val.is_a?(ActionController::Parameters))
|
37
|
-
expect(val).to eql(params_info)
|
38
|
-
|
39
|
-
friends = val.require_typed(:friends, TA[T::Array[String]].new)
|
40
|
-
expect(friends).to eql([
|
41
|
-
'Hermione',
|
42
|
-
'Ron',
|
43
|
-
])
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'raises error when param doesnt exist' do
|
47
|
-
expect {
|
48
|
-
params.require_typed(:nonexistence, TA[String].new)
|
49
|
-
}.to raise_error(ActionController::ParameterMissing)
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'raises error when param is nil' do
|
53
|
-
expect {
|
54
|
-
params_info.require_typed(:grandson, TA[T::Array[String]].new)
|
55
|
-
}.to raise_error(ActionController::ParameterMissing)
|
56
|
-
end
|
57
|
-
|
58
|
-
it 'raises error when param has wrong type' do
|
59
|
-
expect {
|
60
|
-
params.require_typed(:age, TA[String].new)
|
61
|
-
}.to raise_error(ActionController::BadRequest)
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'raises error when param has wrong complex type' do
|
65
|
-
expect {
|
66
|
-
params.require_typed(:age, TA[T::Array[String]].new)
|
67
|
-
}.to raise_error(ActionController::BadRequest)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
context 'fetch_typed' do
|
72
|
-
it 'gets basic param correctly' do
|
73
|
-
val = params.fetch_typed(:age, TA[Integer].new)
|
74
|
-
expect(val).to eql(11)
|
75
|
-
|
76
|
-
val = params.fetch_typed(:name, TA[String].new)
|
77
|
-
expect(val).to eql('Harry Potter')
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'gets param object correctly' do
|
81
|
-
val = params.fetch_typed(:info, TA[ActionController::Parameters].new)
|
82
|
-
expect(val.is_a?(ActionController::Parameters))
|
83
|
-
expect(val).to eql(params_info)
|
84
|
-
|
85
|
-
friends = val.fetch_typed(:friends, TA[T::Array[String]].new)
|
86
|
-
expect(friends).to eql([
|
87
|
-
'Hermione',
|
88
|
-
'Ron',
|
89
|
-
])
|
90
|
-
end
|
91
|
-
|
92
|
-
it 'raises error when param doesnt exist' do
|
93
|
-
expect {
|
94
|
-
val = params.fetch_typed(:nonexistence, TA[String].new)
|
95
|
-
}.to raise_error(ActionController::ParameterMissing)
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'raises error when param has wrong type' do
|
99
|
-
expect {
|
100
|
-
val = params.fetch_typed(:age, TA[String].new)
|
101
|
-
}.to raise_error(ActionController::BadRequest)
|
102
|
-
end
|
103
|
-
|
104
|
-
it 'returns nil when param is nil' do
|
105
|
-
grandson = params_info.fetch_typed(:grandson, TA[T.nilable(T::Array[String])].new)
|
106
|
-
expect(grandson).to eql(nil)
|
107
|
-
end
|
108
|
-
|
109
|
-
context 'when there is a default value' do
|
110
|
-
it 'uses default value when param is nil and has a default' do
|
111
|
-
fetched = params.fetch_typed(:nonexistence, TA[T::Array[String]].new, [])
|
112
|
-
expect(fetched).to eql([])
|
113
|
-
end
|
114
|
-
|
115
|
-
it 'ignores default value when there is a real value' do
|
116
|
-
name = params.fetch_typed(:name, TA[String].new, 'John Doe')
|
117
|
-
expect(name).to eql('Harry Potter')
|
118
|
-
end
|
119
|
-
|
120
|
-
it 'converts hash default value into a params' do
|
121
|
-
# this is `fetch` documented behavior
|
122
|
-
fetched = params.fetch_typed(
|
123
|
-
:nonexistence,
|
124
|
-
TA[ActionController::Parameters].new,
|
125
|
-
{ unknown: "baby" },
|
126
|
-
)
|
127
|
-
expect(fetched.is_a?(ActionController::Parameters)).to be(true)
|
128
|
-
expect(fetched.permit(:unknown).to_h).to eql({ "unknown" => "baby" })
|
129
|
-
end
|
130
|
-
|
131
|
-
it 'raises error when param is nil and given a wrong default' do
|
132
|
-
expect {
|
133
|
-
fetched = params.fetch_typed(:nonexistence, TA[T::Array].new, 5)
|
134
|
-
}.to raise_error(ActionController::BadRequest)
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
data/spec/integer_string_spec.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
require 'sorbet-rails/custom_types/integer_string'
|
3
|
-
require 'sorbet-runtime'
|
4
|
-
|
5
|
-
RSpec.describe IntegerString do
|
6
|
-
it 'lets integer string acts as IntegerString perfectly' do
|
7
|
-
expect('1'.is_a?(IntegerString)).to be(true)
|
8
|
-
expect('12'.kind_of?(IntegerString)).to be(true)
|
9
|
-
expect('123'.instance_of?(IntegerString)).to be(true)
|
10
|
-
expect(IntegerString === '1234').to be(true)
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'does not let other string acts as IntegerString' do
|
14
|
-
expect('a1'.is_a?(IntegerString)).to be(false)
|
15
|
-
expect('a12'.kind_of?(IntegerString)).to be(false)
|
16
|
-
expect('a123'.instance_of?(IntegerString)).to be(false)
|
17
|
-
expect(IntegerString === 'a1234').to be(false)
|
18
|
-
end
|
19
|
-
|
20
|
-
context 'sorbet recognizes it at runtime' do
|
21
|
-
it 'lets integer string pass runtime check' do
|
22
|
-
expect(T.let('123', IntegerString)).to eql('123')
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'doesnt let normal string pass runtime typecheck' do
|
26
|
-
expect {
|
27
|
-
T.let('a123', IntegerString)
|
28
|
-
}.to raise_error(TypeError)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context 'using with TypeAssert' do
|
33
|
-
let!(:ta) { TA[IntegerString].new }
|
34
|
-
|
35
|
-
it 'lets integer string pass runtime typecheck' do
|
36
|
-
expect(ta.assert('123')).to eql('123')
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'doesnt let normal string pass runtime typecheck' do
|
40
|
-
expect {
|
41
|
-
ta.assert('a123')
|
42
|
-
}.to raise_error(TypeError)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|