camel_snake_struct 0.3.0 → 0.3.1

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