shale-builder 0.1.2 → 0.1.4

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: 5173a85d5d039ce2e3207ce624bd40d15eea0910f4ee07d24bafa0a73306e6ae
4
- data.tar.gz: 9a703d6acb6d821a57254bca2af2716ead533d650a74d3e6b87e09a18fb380b2
3
+ metadata.gz: bf1a615a9515f8312498f25d2c15163b42c472cde871ddb73fccabe9b0135854
4
+ data.tar.gz: b014989e7ece28fe8f88a9b49e6e543c0606e382927b8ec2f86a9f9ddad00210
5
5
  SHA512:
6
- metadata.gz: db1d70904eb858eb841b10373ae2c14889552eeda5764785d70c8e430955e659c259ca91499a772a885653201526f2e229b11dcd4ce0d4449217d7c77b83b1e1
7
- data.tar.gz: e5e744a3a88ad1feb0a0f8606392403d8b2c15a06d9d5e133bea8d8c8e8c4eacc4edf204f4f2677044ff12980340ccadc9d8f94949f51819fab7e29f2ea5eb86
6
+ metadata.gz: 36d8c81ec9eae051dd80ce8cdcd342fa92eac54962834212e22bda6c9dcef9c0068812dad6e50590a41ab3d135fce072e5a9bfd8900c4c97270ce2d268d76dae
7
+ data.tar.gz: 7ac199ea4dcdaeba2be4205414d7bb9d2612fe3113bb99b39276107815da02d4db0ff8e98b4c1e0886d0dfb8bc90728adb8137703b8d62eb178ff299ff252ad5
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.2.1
1
+ 3.2.2
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## [0.1.4] - 2024-05-13
2
+
3
+ - Add a tapioca compiler for shale and shale builder
4
+
5
+ ## [0.1.3] - 2023-11-23
6
+
7
+ - Change shale version dependency from `< 1.0` to `< 2.0`
8
+
1
9
  ## [0.1.2] - 2023-10-11
2
10
 
3
11
  - Add support for collections
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- shale-builder (0.1.2)
5
- shale (< 1.0)
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
@@ -3,6 +3,6 @@
3
3
  module Shale
4
4
  module Builder
5
5
  # @return [String]
6
- VERSION = '0.1.2'
6
+ VERSION = '0.1.4'
7
7
  end
8
8
  end
@@ -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.2
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: 2023-10-11 00:00:00.000000000 Z
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: '1.0'
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: '1.0'
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.7
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.