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 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.