tapioca 0.13.1 → 0.13.2
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 +4 -4
- data/README.md +5 -0
- data/lib/tapioca/dsl/compilers/active_record_relations.rb +55 -57
- data/lib/tapioca/loaders/dsl.rb +4 -4
- data/lib/tapioca/rbi_ext/model.rb +6 -5
- data/lib/tapioca/version.rb +1 -1
- 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: 160e94dc5b5280b1b9e1cb84813fbc8f5f137c56ac2f0222693e35beaa647b2e
|
4
|
+
data.tar.gz: ca8e98b7e4685f71fdb8b104a55df21e4d9c0bc2001eb6490508f22661a430d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d61c8c74b3d7f05818a43814c3d876df6a849ebecb6cd86f853a14b2bc19ec34186eb7f9185ca4cab43baf88bdac90191923fbc5b59577b1548659ee618c336a
|
7
|
+
data.tar.gz: b474f48b7e0e427919d154a9da43877c0a9de1ef1e5ec9284299cbcb0b26a9178b9225eb264f1e55dcbea2cbd909c17d4161a3f23b02b7cedf36dbb467c91cb3
|
data/README.md
CHANGED
@@ -52,6 +52,7 @@ Tapioca makes it easy to work with [Sorbet](https://sorbet.org) in your codebase
|
|
52
52
|
* [RBI files for missing constants and methods](#rbi-files-for-missing-constants-and-methods)
|
53
53
|
* [Configuration](#configuration)
|
54
54
|
* [Contributing](#contributing)
|
55
|
+
* [DSL compilers](#dsl-compilers)
|
55
56
|
* [License](#license)
|
56
57
|
<!-- END_TOC -->
|
57
58
|
|
@@ -973,6 +974,10 @@ annotations:
|
|
973
974
|
|
974
975
|
Bug reports and pull requests are welcome on GitHub at https://github.com/Shopify/tapioca. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](https://github.com/Shopify/tapioca/blob/main/CODE_OF_CONDUCT.md) code of conduct.
|
975
976
|
|
977
|
+
### DSL compilers
|
978
|
+
|
979
|
+
Contributions to existing DSL compilers are welcome. However, new compilers that support DSLs for gems other than Rails should live outside of Tapioca. Please refer to [writing custom dsl compilers](https://github.com/Shopify/tapioca?tab=readme-ov-file#writing-custom-dsl-compilers) for more information.
|
980
|
+
|
976
981
|
## License
|
977
982
|
|
978
983
|
The gem is available as open source under the terms of the [MIT License](https://github.com/Shopify/tapioca/blob/main/LICENSE.txt).
|
@@ -667,18 +667,25 @@ module Tapioca
|
|
667
667
|
end
|
668
668
|
sigs = [
|
669
669
|
common_relation_methods_module.create_sig(
|
670
|
-
parameters:
|
670
|
+
parameters: { args: id_types },
|
671
671
|
return_type: constant_name,
|
672
672
|
),
|
673
673
|
common_relation_methods_module.create_sig(
|
674
|
-
parameters:
|
674
|
+
parameters: { args: array_type },
|
675
675
|
return_type: "T::Enumerable[#{constant_name}]",
|
676
676
|
),
|
677
|
+
common_relation_methods_module.create_sig(
|
678
|
+
parameters: {
|
679
|
+
args: "NilClass",
|
680
|
+
block: "T.proc.params(object: #{constant_name}).void)",
|
681
|
+
},
|
682
|
+
return_type: as_nilable_type(constant_name),
|
683
|
+
),
|
677
684
|
]
|
678
685
|
common_relation_methods_module.create_method_with_sigs(
|
679
686
|
"find",
|
680
687
|
sigs: sigs,
|
681
|
-
parameters: [RBI::
|
688
|
+
parameters: [RBI::OptParam.new("args", "nil"), RBI::BlockParam.new("block")],
|
682
689
|
)
|
683
690
|
when :find_by
|
684
691
|
create_common_method(
|
@@ -714,11 +721,11 @@ module Tapioca
|
|
714
721
|
when :first, :last, :take
|
715
722
|
sigs = [
|
716
723
|
common_relation_methods_module.create_sig(
|
717
|
-
parameters:
|
724
|
+
parameters: { limit: "NilClass" },
|
718
725
|
return_type: as_nilable_type(constant_name),
|
719
726
|
),
|
720
727
|
common_relation_methods_module.create_sig(
|
721
|
-
parameters:
|
728
|
+
parameters: { limit: "Integer" },
|
722
729
|
return_type: "T::Array[#{constant_name}]",
|
723
730
|
),
|
724
731
|
]
|
@@ -786,12 +793,23 @@ module Tapioca
|
|
786
793
|
return_type: "Numeric",
|
787
794
|
)
|
788
795
|
when :count
|
789
|
-
|
796
|
+
sigs = [
|
797
|
+
common_relation_methods_module.create_sig(
|
798
|
+
parameters: { column_name: "T.nilable(T.any(String, Symbol))" },
|
799
|
+
return_type: "Integer",
|
800
|
+
),
|
801
|
+
common_relation_methods_module.create_sig(
|
802
|
+
parameters: { column_name: "NilClass", block: "T.proc.params(object: #{constant_name}).void" },
|
803
|
+
return_type: "Integer",
|
804
|
+
),
|
805
|
+
]
|
806
|
+
common_relation_methods_module.create_method_with_sigs(
|
790
807
|
"count",
|
808
|
+
sigs: sigs,
|
791
809
|
parameters: [
|
792
|
-
|
810
|
+
RBI::OptParam.new("column_name", "nil"),
|
811
|
+
RBI::BlockParam.new("block"),
|
793
812
|
],
|
794
|
-
return_type: "Integer",
|
795
813
|
)
|
796
814
|
when :ids
|
797
815
|
create_common_method("ids", return_type: "Array")
|
@@ -819,26 +837,20 @@ module Tapioca
|
|
819
837
|
case method_name
|
820
838
|
when :find_each
|
821
839
|
order = ActiveRecord::Batches.instance_method(:find_each).parameters.include?([:key, :order])
|
840
|
+
parameters = {
|
841
|
+
start: "T.untyped",
|
842
|
+
finish: "T.untyped",
|
843
|
+
batch_size: "Integer",
|
844
|
+
error_on_ignore: "T.untyped",
|
845
|
+
order: ("Symbol" if order),
|
846
|
+
}.compact
|
822
847
|
sigs = [
|
823
848
|
common_relation_methods_module.create_sig(
|
824
|
-
parameters:
|
825
|
-
create_kw_opt_param("start", type: "T.untyped", default: "nil"),
|
826
|
-
create_kw_opt_param("finish", type: "T.untyped", default: "nil"),
|
827
|
-
create_kw_opt_param("batch_size", type: "Integer", default: "1000"),
|
828
|
-
create_kw_opt_param("error_on_ignore", type: "T.untyped", default: "nil"),
|
829
|
-
*(create_kw_opt_param("order", type: "Symbol", default: ":asc") if order),
|
830
|
-
create_block_param("block", type: "T.proc.params(object: #{constant_name}).void"),
|
831
|
-
],
|
849
|
+
parameters: parameters.merge(block: "T.proc.params(object: #{constant_name}).void"),
|
832
850
|
return_type: "void",
|
833
851
|
),
|
834
852
|
common_relation_methods_module.create_sig(
|
835
|
-
parameters:
|
836
|
-
create_kw_opt_param("start", type: "T.untyped", default: "nil"),
|
837
|
-
create_kw_opt_param("finish", type: "T.untyped", default: "nil"),
|
838
|
-
create_kw_opt_param("batch_size", type: "Integer", default: "1000"),
|
839
|
-
create_kw_opt_param("error_on_ignore", type: "T.untyped", default: "nil"),
|
840
|
-
*(create_kw_opt_param("order", type: "Symbol", default: ":asc") if order),
|
841
|
-
],
|
853
|
+
parameters: parameters,
|
842
854
|
return_type: "T::Enumerator[#{constant_name}]",
|
843
855
|
),
|
844
856
|
]
|
@@ -856,26 +868,20 @@ module Tapioca
|
|
856
868
|
)
|
857
869
|
when :find_in_batches
|
858
870
|
order = ActiveRecord::Batches.instance_method(:find_in_batches).parameters.include?([:key, :order])
|
871
|
+
parameters = {
|
872
|
+
start: "T.untyped",
|
873
|
+
finish: "T.untyped",
|
874
|
+
batch_size: "Integer",
|
875
|
+
error_on_ignore: "T.untyped",
|
876
|
+
order: ("Symbol" if order),
|
877
|
+
}.compact
|
859
878
|
sigs = [
|
860
879
|
common_relation_methods_module.create_sig(
|
861
|
-
parameters: [
|
862
|
-
create_kw_opt_param("start", type: "T.untyped", default: "nil"),
|
863
|
-
create_kw_opt_param("finish", type: "T.untyped", default: "nil"),
|
864
|
-
create_kw_opt_param("batch_size", type: "Integer", default: "1000"),
|
865
|
-
create_kw_opt_param("error_on_ignore", type: "T.untyped", default: "nil"),
|
866
|
-
*(create_kw_opt_param("order", type: "Symbol", default: ":asc") if order),
|
867
|
-
create_block_param("block", type: "T.proc.params(object: T::Array[#{constant_name}]).void"),
|
868
|
-
],
|
880
|
+
parameters: parameters.merge(block: "T.proc.params(object: T::Array[#{constant_name}]).void"),
|
869
881
|
return_type: "void",
|
870
882
|
),
|
871
883
|
common_relation_methods_module.create_sig(
|
872
|
-
parameters:
|
873
|
-
create_kw_opt_param("start", type: "T.untyped", default: "nil"),
|
874
|
-
create_kw_opt_param("finish", type: "T.untyped", default: "nil"),
|
875
|
-
create_kw_opt_param("batch_size", type: "Integer", default: "1000"),
|
876
|
-
create_kw_opt_param("error_on_ignore", type: "T.untyped", default: "nil"),
|
877
|
-
*(create_kw_opt_param("order", type: "Symbol", default: ":asc") if order),
|
878
|
-
],
|
884
|
+
parameters: parameters,
|
879
885
|
return_type: "T::Enumerator[T::Enumerator[#{constant_name}]]",
|
880
886
|
),
|
881
887
|
]
|
@@ -894,30 +900,22 @@ module Tapioca
|
|
894
900
|
when :in_batches
|
895
901
|
order = ActiveRecord::Batches.instance_method(:in_batches).parameters.include?([:key, :order])
|
896
902
|
use_ranges = ActiveRecord::Batches.instance_method(:in_batches).parameters.include?([:key, :use_ranges])
|
903
|
+
parameters = {
|
904
|
+
of: "Integer",
|
905
|
+
start: "T.untyped",
|
906
|
+
finish: "T.untyped",
|
907
|
+
load: "T.untyped",
|
908
|
+
error_on_ignore: "T.untyped",
|
909
|
+
order: ("Symbol" if order),
|
910
|
+
use_ranges: ("T.untyped" if use_ranges),
|
911
|
+
}.compact
|
897
912
|
sigs = [
|
898
913
|
common_relation_methods_module.create_sig(
|
899
|
-
parameters:
|
900
|
-
create_kw_opt_param("of", type: "Integer", default: "1000"),
|
901
|
-
create_kw_opt_param("start", type: "T.untyped", default: "nil"),
|
902
|
-
create_kw_opt_param("finish", type: "T.untyped", default: "nil"),
|
903
|
-
create_kw_opt_param("load", type: "T.untyped", default: "false"),
|
904
|
-
create_kw_opt_param("error_on_ignore", type: "T.untyped", default: "nil"),
|
905
|
-
*(create_kw_opt_param("order", type: "Symbol", default: ":asc") if order),
|
906
|
-
*(create_kw_opt_param("use_ranges", type: "T.untyped", default: "nil") if use_ranges),
|
907
|
-
create_block_param("block", type: "T.proc.params(object: #{RelationClassName}).void"),
|
908
|
-
],
|
914
|
+
parameters: parameters.merge(block: "T.proc.params(object: #{RelationClassName}).void"),
|
909
915
|
return_type: "void",
|
910
916
|
),
|
911
917
|
common_relation_methods_module.create_sig(
|
912
|
-
parameters:
|
913
|
-
create_kw_opt_param("of", type: "Integer", default: "1000"),
|
914
|
-
create_kw_opt_param("start", type: "T.untyped", default: "nil"),
|
915
|
-
create_kw_opt_param("finish", type: "T.untyped", default: "nil"),
|
916
|
-
create_kw_opt_param("load", type: "T.untyped", default: "false"),
|
917
|
-
create_kw_opt_param("error_on_ignore", type: "T.untyped", default: "nil"),
|
918
|
-
*(create_kw_opt_param("order", type: "Symbol", default: ":asc") if order),
|
919
|
-
*(create_kw_opt_param("use_ranges", type: "T.untyped", default: "nil") if use_ranges),
|
920
|
-
],
|
918
|
+
parameters: parameters,
|
921
919
|
return_type: "::ActiveRecord::Batches::BatchEnumerator",
|
922
920
|
),
|
923
921
|
]
|
data/lib/tapioca/loaders/dsl.rb
CHANGED
@@ -63,6 +63,10 @@ module Tapioca
|
|
63
63
|
def load_dsl_compilers
|
64
64
|
say("Loading DSL compiler classes... ")
|
65
65
|
|
66
|
+
::Gem.find_files("tapioca/dsl/compilers/*.rb").each do |compiler|
|
67
|
+
require File.expand_path(compiler)
|
68
|
+
end
|
69
|
+
|
66
70
|
Dir.glob([
|
67
71
|
"#{@tapioca_path}/generators/**/*.rb", # TODO: Here for backcompat, remove later
|
68
72
|
"#{@tapioca_path}/compilers/**/*.rb",
|
@@ -70,10 +74,6 @@ module Tapioca
|
|
70
74
|
require File.expand_path(compiler)
|
71
75
|
end
|
72
76
|
|
73
|
-
::Gem.find_files("tapioca/dsl/compilers/*.rb").each do |compiler|
|
74
|
-
require File.expand_path(compiler)
|
75
|
-
end
|
76
|
-
|
77
77
|
say("Done", :green)
|
78
78
|
end
|
79
79
|
|
@@ -88,7 +88,8 @@ module RBI
|
|
88
88
|
end
|
89
89
|
def create_method(name, parameters: [], return_type: "T.untyped", class_method: false, visibility: RBI::Public.new,
|
90
90
|
comments: [])
|
91
|
-
|
91
|
+
sig_params = parameters.to_h { |param| [param.param.name, param.type] }
|
92
|
+
sig = create_sig(parameters: sig_params, return_type: return_type)
|
92
93
|
create_method_with_sigs(
|
93
94
|
name,
|
94
95
|
sigs: [sig],
|
@@ -126,13 +127,13 @@ module RBI
|
|
126
127
|
|
127
128
|
sig do
|
128
129
|
params(
|
129
|
-
parameters: T::
|
130
|
+
parameters: T::Hash[T.any(String, Symbol), String],
|
130
131
|
return_type: String,
|
131
132
|
).returns(RBI::Sig)
|
132
133
|
end
|
133
|
-
def create_sig(parameters
|
134
|
-
params = parameters.map do |
|
135
|
-
RBI::SigParam.new(
|
134
|
+
def create_sig(parameters:, return_type: "T.untyped")
|
135
|
+
params = parameters.map do |name, type|
|
136
|
+
RBI::SigParam.new(name.to_s, type)
|
136
137
|
end
|
137
138
|
RBI::Sig.new(params: params, return_type: return_type)
|
138
139
|
end
|
data/lib/tapioca/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tapioca
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.13.
|
4
|
+
version: 0.13.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ufuk Kayserilioglu
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: exe
|
13
13
|
cert_chain: []
|
14
|
-
date: 2024-
|
14
|
+
date: 2024-04-12 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: bundler
|
@@ -288,7 +288,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
288
288
|
- !ruby/object:Gem::Version
|
289
289
|
version: '0'
|
290
290
|
requirements: []
|
291
|
-
rubygems_version: 3.5.
|
291
|
+
rubygems_version: 3.5.9
|
292
292
|
signing_key:
|
293
293
|
specification_version: 4
|
294
294
|
summary: A Ruby Interface file generator for gems, core types and the Ruby standard
|