shale-builder 0.1.2 → 0.1.4
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/.ruby-version +1 -1
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +3 -2
- data/lib/shale/builder/version.rb +1 -1
- data/lib/tapioca/dsl/compilers/shale.rb +103 -0
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf1a615a9515f8312498f25d2c15163b42c472cde871ddb73fccabe9b0135854
|
4
|
+
data.tar.gz: b014989e7ece28fe8f88a9b49e6e543c0606e382927b8ec2f86a9f9ddad00210
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36d8c81ec9eae051dd80ce8cdcd342fa92eac54962834212e22bda6c9dcef9c0068812dad6e50590a41ab3d135fce072e5a9bfd8900c4c97270ce2d268d76dae
|
7
|
+
data.tar.gz: 7ac199ea4dcdaeba2be4205414d7bb9d2612fe3113bb99b39276107815da02d4db0ff8e98b4c1e0886d0dfb8bc90728adb8137703b8d62eb178ff299ff252ad5
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.2.
|
1
|
+
3.2.2
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
shale-builder (0.1.
|
5
|
-
shale (<
|
4
|
+
shale-builder (0.1.4)
|
5
|
+
shale (< 2.0)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
@@ -75,6 +75,7 @@ GEM
|
|
75
75
|
|
76
76
|
PLATFORMS
|
77
77
|
arm64-darwin-20
|
78
|
+
arm64-darwin-22
|
78
79
|
x86_64-linux
|
79
80
|
|
80
81
|
DEPENDENCIES
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Tapioca
|
5
|
+
module Compilers
|
6
|
+
class Shale < Tapioca::Dsl::Compiler
|
7
|
+
ConstantType = type_member { { fixed: T.class_of(::Shale::Mapper) } }
|
8
|
+
|
9
|
+
class << self
|
10
|
+
sig { override.returns(T::Enumerable[Module]) }
|
11
|
+
def gather_constants
|
12
|
+
# Collect all the classes that inherit from Shale::Mapper
|
13
|
+
all_classes.select { |c| c < ::Shale::Mapper }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
sig { override.void }
|
18
|
+
def decorate
|
19
|
+
# Create a RBI definition for each class that inherits from Shale::Mapper
|
20
|
+
root.create_path(constant) do |klass|
|
21
|
+
has_shale_builder = includes_shale_builder(constant)
|
22
|
+
|
23
|
+
# For each attribute defined in the class
|
24
|
+
constant.attributes.each_value do |attribute|
|
25
|
+
non_nilable_type, nilable_type = shale_type_to_sorbet_type(attribute)
|
26
|
+
type = nilable_type
|
27
|
+
if attribute.collection?
|
28
|
+
type = "T.nilable(T::Array[#{non_nilable_type}])"
|
29
|
+
end
|
30
|
+
|
31
|
+
if has_shale_builder && attribute.type < ::Shale::Mapper
|
32
|
+
sigs = T.let([], T::Array[RBI::Sig])
|
33
|
+
# simple getter
|
34
|
+
sigs << klass.create_sig(
|
35
|
+
parameters: { block: 'NilClass' },
|
36
|
+
return_type: type,
|
37
|
+
)
|
38
|
+
# getter with block
|
39
|
+
sigs << klass.create_sig(
|
40
|
+
parameters: { block: "T.proc.params(arg0: #{non_nilable_type}).void" },
|
41
|
+
return_type: non_nilable_type
|
42
|
+
)
|
43
|
+
klass.create_method_with_sigs(
|
44
|
+
attribute.name,
|
45
|
+
sigs: sigs,
|
46
|
+
parameters: [RBI::BlockParam.new('block')],
|
47
|
+
)
|
48
|
+
else
|
49
|
+
klass.create_method(attribute.name, return_type: type)
|
50
|
+
end
|
51
|
+
|
52
|
+
# setter
|
53
|
+
klass.create_method(
|
54
|
+
"#{attribute.name}=",
|
55
|
+
parameters: [create_param('value', type: type)],
|
56
|
+
return_type: type,
|
57
|
+
)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
sig { params(klass: Class).returns(T.nilable(T::Boolean)) }
|
66
|
+
def includes_shale_builder(klass)
|
67
|
+
return false unless defined?(::Shale::Builder)
|
68
|
+
|
69
|
+
klass < ::Shale::Builder
|
70
|
+
end
|
71
|
+
|
72
|
+
SHALE_TYPES_MAP = T.let(
|
73
|
+
{
|
74
|
+
::Shale::Type::Value => Object,
|
75
|
+
::Shale::Type::String => String,
|
76
|
+
::Shale::Type::Float => Float,
|
77
|
+
::Shale::Type::Integer => Integer,
|
78
|
+
::Shale::Type::Time => Time,
|
79
|
+
::Shale::Type::Date => Date,
|
80
|
+
}.freeze,
|
81
|
+
T::Hash[Class, Class],
|
82
|
+
)
|
83
|
+
|
84
|
+
sig { params(attribute: ::Shale::Attribute).returns([String, String]) }
|
85
|
+
def shale_type_to_sorbet_type(attribute)
|
86
|
+
return_type = SHALE_TYPES_MAP[attribute.type]
|
87
|
+
return complex_shale_type_to_sorbet_type(attribute) unless return_type
|
88
|
+
return [T.must(return_type.name), T.must(return_type.name)] if attribute.collection? || attribute.default.is_a?(return_type)
|
89
|
+
|
90
|
+
[T.must(return_type.name), "T.nilable(#{return_type.name})"]
|
91
|
+
end
|
92
|
+
|
93
|
+
sig { params(attribute: ::Shale::Attribute).returns([String, String]) }
|
94
|
+
def complex_shale_type_to_sorbet_type(attribute)
|
95
|
+
return [T.cast(attribute.type.to_s, String), "T.nilable(#{attribute.type})"] unless attribute.type.respond_to?(:return_type)
|
96
|
+
|
97
|
+
return_type_string = attribute.type.return_type.to_s
|
98
|
+
[return_type_string, return_type_string]
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shale-builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mateusz Drewniak
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-05-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: shale
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "<"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "<"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.0'
|
27
27
|
description: An addon to the shale Ruby gem which adds a simple yet powerful builder
|
28
28
|
DSL.
|
29
29
|
email:
|
@@ -42,6 +42,7 @@ files:
|
|
42
42
|
- Rakefile
|
43
43
|
- lib/shale/builder.rb
|
44
44
|
- lib/shale/builder/version.rb
|
45
|
+
- lib/tapioca/dsl/compilers/shale.rb
|
45
46
|
- sig/shale/builder.rbs
|
46
47
|
homepage: https://github.com/Verseth/ruby-shale-builder
|
47
48
|
licenses:
|
@@ -66,7 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
66
67
|
- !ruby/object:Gem::Version
|
67
68
|
version: '0'
|
68
69
|
requirements: []
|
69
|
-
rubygems_version: 3.4.
|
70
|
+
rubygems_version: 3.4.21
|
70
71
|
signing_key:
|
71
72
|
specification_version: 4
|
72
73
|
summary: An addon to the shale Ruby gem which adds a simple yet powerful builder DSL.
|