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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 19cacf8a8dd3f5e1758672ed4ba28f90784c0017cf65bd39947293eab12d86a6
4
- data.tar.gz: b4282acdaad784ebc5f7cf4aea44af63cccf5ef23e1c86cc8b6b876b9afcf8d1
3
+ metadata.gz: 7f4978b18cb18f1bd33284ad21a540552ef8a558fcdcff4fb0296c0f2d1c444f
4
+ data.tar.gz: a830f31ca20fcff51e85832afa26e5cfa6c02d0a52d080427223c6e3bdd16342
5
5
  SHA512:
6
- metadata.gz: 200e79a30d0e957e8833d757a6ea342bd79778459a7cfad2ac20c6e07859cf556c00092c8f0050325535e8982a6a7ae15f174e9a413bb1182bd0ca206684bad2
7
- data.tar.gz: d5229f7d105c08f93b869acd0d33875026788a09133a227a82ba006f2b99ddc782b4d856fbd49fbf2d5069b4a3ef933d352e3111f6a45b5ce7656e60a1a791ac
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
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "camel_snake_struct"
3
- spec.version = "0.3.0"
3
+ spec.version = "0.3.1"
4
4
  spec.authors = ["Grant Petersen-Speelman"]
5
5
  spec.email = ["grant@nexl.io"]
6
6
 
@@ -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
- normalize_key = key.gsub('@', '').gsub('.', '_')
49
- mapping[normalize_key] = key
50
- mapping[normalize_key.underscore] = key
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.0
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-04-18 00:00:00.000000000 Z
11
+ date: 2023-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport