camel_snake_struct 0.3.0 → 0.3.1
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/CHANGELOG.md +3 -0
- data/README.md +43 -0
- data/camel_snake_struct.gemspec +1 -1
- data/lib/camel_snake_struct.rb +5 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f4978b18cb18f1bd33284ad21a540552ef8a558fcdcff4fb0296c0f2d1c444f
|
4
|
+
data.tar.gz: a830f31ca20fcff51e85832afa26e5cfa6c02d0a52d080427223c6e3bdd16342
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 309e7c1c9df867de7930257defd3588433f12248bc43e448f38c8132d66b20d34ebeb41ea58b9198414ed81769467853e98ddec1ed90319c3ea16d31db1cc2a3
|
7
|
+
data.tar.gz: aa718371a22f920b35ad630f344d4bae3ed07081bd8a85771bf37c3b059f541985ea646d375c2df7a2e7bc0c1f9781602cbdaf99421c09dff3c92c9994c3fa62
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# 0.3.1
|
2
|
+
* handle situation where the key of the hash will not make a valid method, EG { "2020-01-02 19:00:00 UTC" => [""] }
|
3
|
+
|
1
4
|
# 0.3.0
|
2
5
|
* Learning Structs store meta data about the shape of the hash from the examples provided. This can be used with tapioca custom DSL compilers to generate sorbet types
|
3
6
|
|
data/README.md
CHANGED
@@ -78,6 +78,49 @@ puts MyLoadedStruct.types_meta_data
|
|
78
78
|
# {"data"=>#<struct CamelSnakeStruct::Type__Meta__Data class_types=#<Set: {MyLoadedStruct::Datum}>, array=true>, "errors"=>#<struct CamelSnakeStruct::Type__Meta__Data class_types=#<Set: {}>, array=true>, "date"=>#<struct CamelSnakeStruct::Type__Meta__Data class_types=#<Set: {MyLoadedStruct::Date}>, array=false>}
|
79
79
|
```
|
80
80
|
|
81
|
+
```ruby
|
82
|
+
# typed: true
|
83
|
+
|
84
|
+
module Tapioca
|
85
|
+
module Compilers
|
86
|
+
class CamelSnakeStructCompiler < Tapioca::Dsl::Compiler
|
87
|
+
extend T::Sig
|
88
|
+
|
89
|
+
ConstantType = type_member {{ fixed: T.class_of(CamelSnakeStruct) }}
|
90
|
+
|
91
|
+
sig { override.returns(T::Enumerable[Module]) }
|
92
|
+
def self.gather_constants
|
93
|
+
all_classes.select do |c|
|
94
|
+
c < ::CamelSnakeStruct && !c.types_meta_data.empty?
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
sig { override.void }
|
99
|
+
def decorate
|
100
|
+
root.create_path(constant) do |klass|
|
101
|
+
constant.types_meta_data.each do |name, meta_data|
|
102
|
+
classes = meta_data.classes.to_a.map{|a| [TrueClass,FalseClass].include?(a) ? "T::Boolean" : a.to_s }.uniq
|
103
|
+
return_type = if classes.size == 1
|
104
|
+
classes.first.to_s
|
105
|
+
else
|
106
|
+
"T.any(#{classes.join(', ')})"
|
107
|
+
end
|
108
|
+
if meta_data.array
|
109
|
+
klass.create_method(name.to_s, parameters: [], return_type: "T::Array[#{return_type}]")
|
110
|
+
elsif return_type == 'NilClass' || return_type == 'String'
|
111
|
+
klass.create_method(name.to_s, parameters: [], return_type: 'T.nilable(String)')
|
112
|
+
else
|
113
|
+
klass.create_method(name.to_s, parameters: [], return_type: return_type)
|
114
|
+
end
|
115
|
+
klass.create_method("#{name}?", parameters: [], return_type: 'T::Boolean')
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
```
|
123
|
+
|
81
124
|
|
82
125
|
### Limitations
|
83
126
|
|
data/camel_snake_struct.gemspec
CHANGED
data/lib/camel_snake_struct.rb
CHANGED
@@ -45,9 +45,11 @@ class CamelSnakeStruct
|
|
45
45
|
def initialize(hash)
|
46
46
|
@_raw_hash = hash&.to_h || {}
|
47
47
|
@_method_to_key = @_raw_hash.keys.each_with_object({}) do |key, mapping|
|
48
|
-
|
49
|
-
|
50
|
-
|
48
|
+
if key =~ /^[A-Za-z]/
|
49
|
+
normalize_key = key.gsub('@', '').gsub(/\.|\s/, '_')
|
50
|
+
mapping[normalize_key] = key
|
51
|
+
mapping[normalize_key.underscore] = key
|
52
|
+
end
|
51
53
|
end
|
52
54
|
end
|
53
55
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: camel_snake_struct
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Grant Petersen-Speelman
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|