class_from_son 0.1.3 → 0.1.8
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/README.md +5 -2
- data/lib/class_from_SON.rb +43 -18
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64442ffab338e5be82ed2a8dd9da60904777f17c6aa397a1c41f3a03617823cb
|
4
|
+
data.tar.gz: 9f6145f03094e312ed5efd05c23cd93e67a5112ddd920b177a4dd91383e2ba6f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a8e7f6a45207f44a91043bda76f45c367d116c8498466d51e6946b14057de66e39ced63717304abcb0bf86623d19510a4b32023e5f3822c950ff419e4b0c97a4
|
7
|
+
data.tar.gz: 49894af656eb32ac4ce2d68637bc4998d737a3b2d7d2ab2f2afaf335dfa1153c09b1e62d136bf43318da898a330f34be30a28b9b195d3deb61183034a4b72b62
|
data/README.md
CHANGED
@@ -7,9 +7,10 @@ If the SON looks to have a nested object structure (e.g. a Contact object looks
|
|
7
7
|
Limitations :
|
8
8
|
|
9
9
|
SON : will only process JSON
|
10
|
-
Code : will only generate Ruby or Java
|
10
|
+
Code : will only generate Ruby or Java (to generate Java using Lombok, use the :java_lombok symbol)
|
11
11
|
|
12
12
|
Usage : require the gem, then invoke
|
13
|
+
|
13
14
|
```
|
14
15
|
require 'class_from_son'
|
15
16
|
|
@@ -21,6 +22,7 @@ ClassFromSON.generate :ruby, my_json_string, :json
|
|
21
22
|
```
|
22
23
|
|
23
24
|
or from the command line :
|
25
|
+
|
24
26
|
```
|
25
27
|
ruby -e "require 'class_from_son'; ClassFromSON.generate_from_file :ruby, 'a_file.json'"
|
26
28
|
|
@@ -30,6 +32,7 @@ ruby -e "require 'class_from_son'; ClassFromSON.generate :ruby, my_json_string,
|
|
30
32
|
```
|
31
33
|
|
32
34
|
Method parameter explanations :
|
35
|
+
|
33
36
|
```
|
34
37
|
# Will generate classes from a SON file
|
35
38
|
# Regardless of whether or not files are written, this will return an array of hashes; each hash represents a file, with two keys : :name for filename (without extension), and :contents for file contents
|
@@ -52,4 +55,4 @@ def ClassFromSON.generate_from_file(dest_lang, file, source_lang, make_file = tr
|
|
52
55
|
# make_file flag defaults to true; set to false if you do not want files to be created by this method
|
53
56
|
# force_file flag is false; set to true if you wish to overwrite matching destination files (use with caution!)
|
54
57
|
def ClassFromSON.generate(dest_lang, source, source_lang, make_file = true, force_file = false)
|
55
|
-
```
|
58
|
+
```
|
data/lib/class_from_SON.rb
CHANGED
@@ -5,7 +5,7 @@ require "more_ruby"
|
|
5
5
|
|
6
6
|
class ClassFromSON
|
7
7
|
|
8
|
-
@@target_languages = [:java, :ruby]
|
8
|
+
@@target_languages = [:java, :java_lombok, :ruby]
|
9
9
|
@@input_modes = [:json]
|
10
10
|
|
11
11
|
def error(message)
|
@@ -55,7 +55,7 @@ class ClassFromSON
|
|
55
55
|
# Translate "Fixnum" into the desired output language
|
56
56
|
def convert_fixnum_to_type
|
57
57
|
case @language
|
58
|
-
when :java
|
58
|
+
when :java, :java_lombok
|
59
59
|
return "int"
|
60
60
|
else
|
61
61
|
error_and_exit "Could not convert to output language #{@language}"
|
@@ -65,7 +65,7 @@ class ClassFromSON
|
|
65
65
|
# Translate "Fixnum" into the desired output language
|
66
66
|
def convert_float_to_type
|
67
67
|
case @language
|
68
|
-
when :java
|
68
|
+
when :java, :java_lombok
|
69
69
|
return "float"
|
70
70
|
else
|
71
71
|
error_and_exit "Could not convert to output language #{@language}"
|
@@ -75,7 +75,7 @@ class ClassFromSON
|
|
75
75
|
# Translate "Fixnum" into the desired output language
|
76
76
|
def convert_boolean_to_type
|
77
77
|
case @language
|
78
|
-
when :java
|
78
|
+
when :java, :java_lombok
|
79
79
|
return "boolean"
|
80
80
|
else
|
81
81
|
error_and_exit "Could not convert to output language #{@language}"
|
@@ -85,7 +85,7 @@ class ClassFromSON
|
|
85
85
|
# Translate "String" into the desired output language
|
86
86
|
def convert_string_to_type
|
87
87
|
case @language
|
88
|
-
when :java
|
88
|
+
when :java, :java_lombok
|
89
89
|
return "String"
|
90
90
|
else
|
91
91
|
error_and_exit "Could not convert to output language #{@language}"
|
@@ -97,7 +97,7 @@ class ClassFromSON
|
|
97
97
|
def convert_array_to_type(value_types)
|
98
98
|
error_and_exit "Detected an array, but could not determine the type of its children; found #{value_types.size} possibilities" unless value_types.size == 1
|
99
99
|
case @language
|
100
|
-
when :java
|
100
|
+
when :java, :java_lombok
|
101
101
|
return "List<#{convert_ruby_type_to_type(value_types[0])}>"
|
102
102
|
else
|
103
103
|
error_and_exit "Could not convert to output language #{@language}"
|
@@ -109,7 +109,7 @@ class ClassFromSON
|
|
109
109
|
def convert_hash_to_type(value_types)
|
110
110
|
error_and_exit "Detected a hash, but could not determine the type of its keys and values; found #{value_types.size} possibilities" unless value_types.size == 2
|
111
111
|
case @language
|
112
|
-
when :java
|
112
|
+
when :java, :java_lombok
|
113
113
|
return "HashMap<#{convert_ruby_type_to_type(value_types[0])}, #{convert_ruby_type_to_type(value_types[1])}>"
|
114
114
|
else
|
115
115
|
error_and_exit "Could not convert to output language #{@language}"
|
@@ -119,7 +119,7 @@ class ClassFromSON
|
|
119
119
|
# Returns code representing the start of the class
|
120
120
|
def convert_custom_class_type(type)
|
121
121
|
case @language
|
122
|
-
when :java, :ruby
|
122
|
+
when :java, :java_lombok, :ruby
|
123
123
|
return type.capitalize_first_letter_only
|
124
124
|
else
|
125
125
|
error_and_exit "Could not convert to output language #{@language}"
|
@@ -128,7 +128,7 @@ class ClassFromSON
|
|
128
128
|
|
129
129
|
def generate_top_level_name
|
130
130
|
case @language
|
131
|
-
when :java
|
131
|
+
when :java, :java_lombok
|
132
132
|
return "generatedFrom#{@mode.capitalize}"
|
133
133
|
when :ruby
|
134
134
|
return "generated_from_#{@mode}"
|
@@ -140,7 +140,7 @@ class ClassFromSON
|
|
140
140
|
# Returns an appropriately-formatted classname for the given name
|
141
141
|
def generate_classname(name)
|
142
142
|
case @language
|
143
|
-
when :java, :ruby
|
143
|
+
when :java, :java_lombok, :ruby
|
144
144
|
return name.capitalize_first_letter_only
|
145
145
|
else
|
146
146
|
error_and_exit "Could not convert to output language #{@language}"
|
@@ -150,7 +150,7 @@ class ClassFromSON
|
|
150
150
|
# Returns an appropriately-formatted filename for the given name
|
151
151
|
def generate_filename(name)
|
152
152
|
case @language
|
153
|
-
when :java
|
153
|
+
when :java, :java_lombok
|
154
154
|
return name.capitalize_first_letter_only + @extension
|
155
155
|
when :ruby
|
156
156
|
return name.snakecase + @extension
|
@@ -161,7 +161,7 @@ class ClassFromSON
|
|
161
161
|
|
162
162
|
def set_file_extension_for_language
|
163
163
|
case @language
|
164
|
-
when :java
|
164
|
+
when :java, :java_lombok
|
165
165
|
@extension = ".java"
|
166
166
|
when :ruby
|
167
167
|
@extension = ".rb"
|
@@ -178,6 +178,24 @@ class ClassFromSON
|
|
178
178
|
|
179
179
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
180
180
|
|
181
|
+
public class #{convert_custom_class_type(name)} {
|
182
|
+
START
|
183
|
+
when :java_lombok
|
184
|
+
start = <<-START
|
185
|
+
|
186
|
+
import com.fasterxml.jackson.annotation.JsonProperty;
|
187
|
+
import lombok.AllArgsConstructor;
|
188
|
+
import lombok.Builder;
|
189
|
+
import lombok.Getter;
|
190
|
+
import lombok.NoArgsConstructor;
|
191
|
+
import lombok.Setter;
|
192
|
+
|
193
|
+
@JsonInclude(Include.NON_NULL)
|
194
|
+
@NoArgsConstructor // Need @NoArgsConstructor for JSON deserialisation
|
195
|
+
@AllArgsConstructor // Need @AllArgsConstructor for @Builder
|
196
|
+
@Builder
|
197
|
+
@Getter
|
198
|
+
@Setter
|
181
199
|
public class #{convert_custom_class_type(name)} {
|
182
200
|
START
|
183
201
|
when :ruby
|
@@ -191,7 +209,7 @@ START
|
|
191
209
|
# Returns code representing the end of the class
|
192
210
|
def generate_class_end
|
193
211
|
case @language
|
194
|
-
when :java
|
212
|
+
when :java, :java_lombok
|
195
213
|
class_end = "}"
|
196
214
|
when :ruby
|
197
215
|
class_end = "end"
|
@@ -204,14 +222,20 @@ START
|
|
204
222
|
def generate_getter_and_setter(type, name)
|
205
223
|
lines = []
|
206
224
|
case @language
|
225
|
+
when :java_lombok
|
226
|
+
# do nothing - Lombok's raison d'etre is to avoid getters & setters
|
207
227
|
when :java
|
208
|
-
|
228
|
+
# This is safe even if the name is already in snakecase
|
229
|
+
field_name_for_getter = name.snakecase.pascalcase
|
230
|
+
|
231
|
+
name = name.camelcase if name.include? "_"
|
232
|
+
|
209
233
|
lines << "\t"
|
210
|
-
lines << "\tpublic #{type} get#{
|
234
|
+
lines << "\tpublic #{type} get#{field_name_for_getter}() {"
|
211
235
|
lines << "\t\treturn #{name};"
|
212
236
|
lines << "\t}"
|
213
237
|
lines << "\t"
|
214
|
-
lines << "\tpublic void set#{
|
238
|
+
lines << "\tpublic void set#{field_name_for_getter}(#{type} #{name}) {"
|
215
239
|
lines << "\t\tthis.#{name} = #{name};"
|
216
240
|
lines << "\t}"
|
217
241
|
else
|
@@ -223,7 +247,7 @@ START
|
|
223
247
|
# Returns code representing each of the supplied attributes
|
224
248
|
def generate_code_from_attributes(attributes)
|
225
249
|
case @language
|
226
|
-
when :java
|
250
|
+
when :java, :java_lombok
|
227
251
|
return generate_java_code_from_attributes(attributes)
|
228
252
|
when :ruby
|
229
253
|
return generate_ruby_code_from_attributes(attributes)
|
@@ -237,11 +261,12 @@ START
|
|
237
261
|
code = []
|
238
262
|
# Instance variables
|
239
263
|
attributes.each do |att|
|
240
|
-
if att.
|
264
|
+
if att[:name].include? "_"
|
241
265
|
snakecase_name = att[:name]
|
242
266
|
camelcase_name = att[:name].camelcase
|
243
267
|
code << "\t@JsonProperty(\"#{snakecase_name}\")"
|
244
268
|
code << "\tprivate #{convert_ruby_type_to_type(att[:type], att[:value_types])} #{camelcase_name};"
|
269
|
+
code << "" # add a new line so that fields are separated & easier to read
|
245
270
|
else
|
246
271
|
code << "\tprivate #{convert_ruby_type_to_type(att[:type], att[:value_types])} #{att[:name]};"
|
247
272
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: class_from_son
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Morrisby
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: This gem will attempt to generate code of a class of an object representing
|
14
14
|
the contents of a Serialised-Object-Notation (SON) string (or file). E.g. it will
|
@@ -22,7 +22,7 @@ files:
|
|
22
22
|
- README.md
|
23
23
|
- lib/class_from_SON.rb
|
24
24
|
- test/test_class_from_son.rb
|
25
|
-
homepage: https://
|
25
|
+
homepage: https://github.com/RMorrisby/class_from_son
|
26
26
|
licenses:
|
27
27
|
- MIT
|
28
28
|
metadata: {}
|