class_from_son 0.1.2 → 0.1.7
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 → class_from_SON.rb} +57 -20
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 454e1aeddc02a92ce61a486b46b82c9843c4a030e3acf3e11c82161c4059926c
|
4
|
+
data.tar.gz: bc60bfad91c5fc55003bc46032f3895bb884217f0e2a2f6e43747bd6a587f3ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8cd190dcaff59b3c252093ec4dce5289e44ada71e21e358c4e5ac41bcab0a8753c0570712ea1bf4c0ae48144a0894d5f6e0669a8d41ed82d5118bf44c542ecf
|
7
|
+
data.tar.gz: 50959148d2c3212298f13aaf00c81bda79cf78d75708ba72fda514fc742c466bc934ee5ab09a6d9015270b54bcc8df2b94826074931d502f53ad2c161eab98f9
|
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
|
+
```
|
@@ -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,10 +150,10 @@ 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
|
-
return name.
|
156
|
+
return name.snakecase + @extension
|
157
157
|
else
|
158
158
|
error_and_exit "Could not convert to output language #{@language}"
|
159
159
|
end
|
@@ -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"
|
@@ -174,7 +174,30 @@ class ClassFromSON
|
|
174
174
|
def generate_class_start(name)
|
175
175
|
case @language
|
176
176
|
when :java
|
177
|
-
start =
|
177
|
+
start = <<-START
|
178
|
+
|
179
|
+
import com.fasterxml.jackson.annotation.JsonProperty;
|
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
|
199
|
+
public class #{convert_custom_class_type(name)} {
|
200
|
+
START
|
178
201
|
when :ruby
|
179
202
|
start = "class #{convert_custom_class_type(name)}"
|
180
203
|
else
|
@@ -186,7 +209,7 @@ class ClassFromSON
|
|
186
209
|
# Returns code representing the end of the class
|
187
210
|
def generate_class_end
|
188
211
|
case @language
|
189
|
-
when :java
|
212
|
+
when :java, :java_lombok
|
190
213
|
class_end = "}"
|
191
214
|
when :ruby
|
192
215
|
class_end = "end"
|
@@ -199,14 +222,20 @@ class ClassFromSON
|
|
199
222
|
def generate_getter_and_setter(type, name)
|
200
223
|
lines = []
|
201
224
|
case @language
|
225
|
+
when :java_lombok
|
226
|
+
# do nothing - Lombok's raison d'etre is to avoid getters & setters
|
202
227
|
when :java
|
203
|
-
|
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
|
+
|
204
233
|
lines << "\t"
|
205
|
-
lines << "\tpublic #{type} get#{
|
234
|
+
lines << "\tpublic #{type} get#{field_name_for_getter}() {"
|
206
235
|
lines << "\t\treturn #{name};"
|
207
236
|
lines << "\t}"
|
208
237
|
lines << "\t"
|
209
|
-
lines << "\tpublic void set#{
|
238
|
+
lines << "\tpublic void set#{field_name_for_getter}(#{type} #{name}) {"
|
210
239
|
lines << "\t\tthis.#{name} = #{name};"
|
211
240
|
lines << "\t}"
|
212
241
|
else
|
@@ -218,7 +247,7 @@ class ClassFromSON
|
|
218
247
|
# Returns code representing each of the supplied attributes
|
219
248
|
def generate_code_from_attributes(attributes)
|
220
249
|
case @language
|
221
|
-
when :java
|
250
|
+
when :java, :java_lombok
|
222
251
|
return generate_java_code_from_attributes(attributes)
|
223
252
|
when :ruby
|
224
253
|
return generate_ruby_code_from_attributes(attributes)
|
@@ -232,7 +261,15 @@ class ClassFromSON
|
|
232
261
|
code = []
|
233
262
|
# Instance variables
|
234
263
|
attributes.each do |att|
|
235
|
-
|
264
|
+
if att[:name].include? "_"
|
265
|
+
snakecase_name = att[:name]
|
266
|
+
camelcase_name = att[:name].camelcase
|
267
|
+
code << "\t@JsonProperty(\"#{snakecase_name}\")"
|
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
|
270
|
+
else
|
271
|
+
code << "\tprivate #{convert_ruby_type_to_type(att[:type], att[:value_types])} #{att[:name]};"
|
272
|
+
end
|
236
273
|
end
|
237
274
|
|
238
275
|
#TODO constructor
|
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.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Morrisby
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-08-20 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
|
@@ -20,7 +20,7 @@ extra_rdoc_files:
|
|
20
20
|
- README.md
|
21
21
|
files:
|
22
22
|
- README.md
|
23
|
-
- lib/
|
23
|
+
- lib/class_from_SON.rb
|
24
24
|
- test/test_class_from_son.rb
|
25
25
|
homepage: https://rubygems.org/gems/class_from_son
|
26
26
|
licenses:
|
@@ -41,7 +41,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: '0'
|
43
43
|
requirements: []
|
44
|
-
rubygems_version: 3.
|
44
|
+
rubygems_version: 3.0.3
|
45
45
|
signing_key:
|
46
46
|
specification_version: 4
|
47
47
|
summary: Generates classes from Serialised-Object-Notation (e.g. JSON)
|