solara 0.7.3 → 0.7.4

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: 58813f26f146e2116b645174ff1c07b4d55fd681c95aeac51d14816668b44211
4
- data.tar.gz: 212aebb78263261836b669f60c78fcb3148c79c0aee218cd90477458865ecc96
3
+ metadata.gz: 77f9761ea65efa893a892df04d7d5fad6a24c9a5437dc4e2ace86b741feb5df3
4
+ data.tar.gz: edb89227453aa0d01ee0f43129c8196dbcd74dffa8abfe69f1bd2053ce63e92f
5
5
  SHA512:
6
- metadata.gz: 4f31381757be0faeeb566131c45a9242b63a8b89fb610ccd6b6abd5bb7b99937890ee6f2e5420ac95022d3e534aeeb48e29dc427206f18217871768caaa84a58
7
- data.tar.gz: aa9af4d947d47c5a5ae7d43f336e4ee1c4d16b8c4224778f19579061f8215e3508887143607688f831d89229ba7d2c89a5925f9c6f4b0487d73632fb7356f33c
6
+ metadata.gz: 561614f023227070c3a24577d8bad4b8a6bb37024a251e3145a1702df798bc1e203fb6772fcd5bf7eee8ffe1bcb91dfe15ac0bef21b29dadab4065cd09a2d595
7
+ data.tar.gz: b1be57455047e46a966211cbd612cd16179a3d5789affca52dc0e8f68308b7138d4a6ae6cc8c3e488b34453f9c2ee681da57fa7f62ab20343a4e55353a8e1ac4
@@ -14,7 +14,7 @@ class DartCodeGenerator
14
14
 
15
15
  private
16
16
 
17
- def generate_class(json_obj, class_name)
17
+ def generate_class(json_obj, class_name, list_items = nil)
18
18
  @registry.register(class_name, class_name)
19
19
  class_name = @registry.get_class_name(class_name, class_name)
20
20
  return if @generated_classes.any? { |c| c.include?("class #{class_name}") }
@@ -34,36 +34,70 @@ class DartCodeGenerator
34
34
  if value.is_a?(Hash)
35
35
  generate_class(value, nested_class_name)
36
36
  companion_values << "static final #{key}Value = #{nested_class_name}.instance;"
37
+ instance_values << "#{key}: #{nested_class_name}.instance"
37
38
  elsif value.is_a?(Array) && !value.empty? && value.first.is_a?(Hash)
38
- generate_class(value.first, nested_class_name)
39
+ generate_class(value.first, nested_class_name, value)
39
40
  type = "List<#{nested_class_name}>"
40
- list_values = value.map { |_| "#{nested_class_name}.instance" }
41
- companion_values << "static final #{key}Value = <#{nested_class_name}>[#{list_values.join(", ")}];"
41
+ companion_values << "static final #{key}Value = #{nested_class_name}.instances;"
42
+ instance_values << "#{key}: #{nested_class_name}.instances"
42
43
  else
43
44
  companion_values << "static final #{key}Value = #{dart_value(value)};"
45
+ instance_values << "#{key}: #{key}Value"
44
46
  end
45
47
 
46
48
  properties << "final #{type} #{key};"
47
49
  constructor_params << "required this.#{key}"
48
- instance_values << "#{key}: #{key}Value"
49
50
  end
50
51
 
51
- class_code = <<~DART
52
- class #{class_name} {
53
- #{properties.join("\n ")}
54
-
55
- const #{class_name}({#{constructor_params.join(", ")}});
56
-
52
+ static_instances = if list_items
53
+ items_code = list_items.map.with_index do |item, index|
54
+ values = item.map do |key, value|
55
+ if value.is_a?(Hash)
56
+ nested_class_name = "#{class_name}#{StringCase.capitalize(key)}"
57
+ @registry.register(nested_class_name, nested_class_name)
58
+ nested_class_name = @registry.get_class_name(nested_class_name, nested_class_name)
59
+ "#{key}: #{nested_class_name}.instance"
60
+ elsif value.is_a?(Array) && !value.empty? && value.first.is_a?(Hash)
61
+ nested_class_name = "#{class_name}#{StringCase.capitalize(key)}"
62
+ @registry.register(nested_class_name, nested_class_name)
63
+ nested_class_name = @registry.get_class_name(nested_class_name, nested_class_name)
64
+ "#{key}: #{nested_class_name}.instances"
65
+ else
66
+ "#{key}: #{dart_value(value)}"
67
+ end
68
+ end.join(",\n ")
69
+ " static final instance#{index + 1} = #{class_name}(\n #{values}\n );"
70
+ end.join("\n")
71
+
72
+ instances_list = (1..list_items.length).map { |i| "instance#{i}" }.join(", ")
73
+
74
+ <<~DART
75
+ #{items_code}
76
+
77
+ static final instances = <#{class_name}>[#{instances_list}];
78
+ DART
79
+ else
80
+ <<~DART
57
81
  static #{class_name}? _instance;
58
82
 
59
- #{companion_values.join("\n ")}
60
-
61
83
  static #{class_name} get instance {
62
84
  _instance ??= #{class_name}(
63
85
  #{instance_values.join(",\n ")}
64
86
  );
65
87
  return _instance!;
66
88
  }
89
+ DART
90
+ end
91
+
92
+ class_code = <<~DART
93
+ class #{class_name} {
94
+ #{properties.join("\n ")}
95
+
96
+ const #{class_name}({#{constructor_params.join(", ")}});
97
+
98
+ #{companion_values.join("\n ")}
99
+
100
+ #{static_instances}
67
101
  }
68
102
  DART
69
103
 
@@ -14,13 +14,14 @@ class KotlinCodeGenerator
14
14
 
15
15
  private
16
16
 
17
- def generate_class(json_obj, class_name)
17
+ def generate_class(json_obj, class_name, list_items = nil)
18
18
  @registry.register(class_name, class_name)
19
19
  class_name = @registry.get_class_name(class_name, class_name)
20
20
  return if @generated_classes.any? { |c| c.include?("data class #{class_name}") }
21
21
 
22
22
  properties = []
23
23
  companion_values = []
24
+ instance_values = []
24
25
 
25
26
  json_obj.each do |key, value|
26
27
  nested_class_name = "#{class_name}#{StringCase.capitalize(key)}"
@@ -32,37 +33,74 @@ class KotlinCodeGenerator
32
33
  if value.is_a?(Hash)
33
34
  generate_class(value, nested_class_name)
34
35
  companion_values << "private val #{key}Value = #{nested_class_name}.instance"
36
+ instance_values << "#{key} = #{nested_class_name}.instance"
35
37
  elsif value.is_a?(Array) && !value.empty? && value.first.is_a?(Hash)
36
- generate_class(value.first, nested_class_name)
38
+ generate_class(value.first, nested_class_name, value)
37
39
  type = "List<#{nested_class_name}>"
38
- list_values = value.map { |_| "#{nested_class_name}.instance" }
39
- companion_values << "private val #{key}Value = listOf(#{list_values.join(", ")})"
40
+ companion_values << "private val #{key}Value = #{nested_class_name}.instances"
41
+ instance_values << "#{key} = #{nested_class_name}.instances"
40
42
  else
41
43
  companion_values << "private val #{key}Value = #{kotlin_value(value)}"
44
+ instance_values << "#{key} = #{key}Value"
42
45
  end
43
46
 
44
47
  properties << "val #{key}: #{type}"
45
48
  end
46
49
 
50
+ static_instances = if list_items
51
+ items_code = list_items.map.with_index do |item, index|
52
+ values = item.map do |key, value|
53
+ if value.is_a?(Hash)
54
+ nested_class_name = "#{class_name}#{StringCase.capitalize(key)}"
55
+ @registry.register(nested_class_name, nested_class_name)
56
+ nested_class_name = @registry.get_class_name(nested_class_name, nested_class_name)
57
+ "#{key} = #{nested_class_name}.instance"
58
+ elsif value.is_a?(Array) && !value.empty? && value.first.is_a?(Hash)
59
+ nested_class_name = "#{class_name}#{StringCase.capitalize(key)}"
60
+ @registry.register(nested_class_name, nested_class_name)
61
+ nested_class_name = @registry.get_class_name(nested_class_name, nested_class_name)
62
+ "#{key} = #{nested_class_name}.instances"
63
+ else
64
+ "#{key} = #{kotlin_value(value)}"
65
+ end
66
+ end.join(",\n ")
67
+ " private val instance#{index + 1} = #{class_name}(\n #{values}\n )"
68
+ end.join("\n")
69
+
70
+ instances_list = (1..list_items.length).map { |i| "instance#{i}" }.join(", ")
71
+
72
+ <<~KOTLIN
73
+ companion object {
74
+ #{items_code}
75
+
76
+ val instances = listOf(#{instances_list})
77
+ }
78
+ KOTLIN
79
+ else
80
+ <<~KOTLIN
81
+ companion object {
82
+ private var _instance: #{class_name}? = null
83
+
84
+ #{companion_values.join("\n ")}
85
+
86
+ val instance: #{class_name}
87
+ get() {
88
+ if (_instance == null) {
89
+ _instance = #{class_name}(
90
+ #{instance_values.join(",\n ")}
91
+ )
92
+ }
93
+ return _instance!!
94
+ }
95
+ }
96
+ KOTLIN
97
+ end
98
+
47
99
  class_code = <<~KOTLIN
48
100
  data class #{class_name}(
49
101
  #{properties.join(",\n ")}
50
102
  ) {
51
- companion object {
52
- private var _instance: #{class_name}? = null
53
-
54
- #{companion_values.join("\n ")}
55
-
56
- val instance: #{class_name}
57
- get() {
58
- if (_instance == null) {
59
- _instance = #{class_name}(
60
- #{json_obj.keys.map { |key| "#{key} = #{key}Value" }.join(",\n ")}
61
- )
62
- }
63
- return _instance!!
64
- }
65
- }
103
+ #{static_instances}
66
104
  }
67
105
  KOTLIN
68
106
 
@@ -1,26 +1,27 @@
1
1
  class SwiftCodeGenerator
2
- def initialize(json, parent_class_name, registry = nil)
3
- @json = json
4
- @parent_class_name = parent_class_name
5
- @registry = registry || ClassNameRegistry.new
6
- @generated_classes = []
7
- end
8
-
9
- def generate
10
- imports = "import UIKit\n\n"
11
- generate_class(@json, @parent_class_name)
12
- imports + @generated_classes.reverse.join("\n\n")
13
- end
14
-
15
- private
16
-
17
- def generate_class(json_obj, class_name)
2
+ def initialize(json, parent_class_name, registry = nil)
3
+ @json = json
4
+ @parent_class_name = parent_class_name
5
+ @registry = registry || ClassNameRegistry.new
6
+ @generated_classes = []
7
+ end
8
+
9
+ def generate
10
+ imports = "import UIKit\n\n"
11
+ generate_class(@json, @parent_class_name)
12
+ imports + @generated_classes.reverse.join("\n\n")
13
+ end
14
+
15
+ private
16
+
17
+ def generate_class(json_obj, class_name, list_items = nil)
18
18
  @registry.register(class_name, class_name)
19
19
  class_name = @registry.get_class_name(class_name, class_name)
20
20
  return if @generated_classes.any? { |c| c.include?("struct #{class_name}") }
21
21
 
22
22
  properties = []
23
23
  static_values = []
24
+ instance_values = []
24
25
 
25
26
  json_obj.each do |key, value|
26
27
  nested_class_name = "#{class_name}#{StringCase.capitalize(key)}"
@@ -32,34 +33,69 @@ class SwiftCodeGenerator
32
33
  if value.is_a?(Hash)
33
34
  generate_class(value, nested_class_name)
34
35
  static_values << "private static let #{key}Value = #{nested_class_name}.shared"
36
+ instance_values << "#{key}: #{nested_class_name}.shared"
35
37
  elsif value.is_a?(Array) && !value.empty? && value.first.is_a?(Hash)
36
- generate_class(value.first, nested_class_name)
38
+ generate_class(value.first, nested_class_name, value)
37
39
  type = "[#{nested_class_name}]"
38
- list_values = value.map { |_| "#{nested_class_name}.shared" }
39
- static_values << "private static let #{key}Value = [#{list_values.join(", ")}]"
40
+ static_values << "private static let #{key}Value = #{nested_class_name}.instances"
41
+ instance_values << "#{key}: #{nested_class_name}.instances"
40
42
  else
41
43
  static_values << "private static let #{key}Value = #{swift_value(value)}"
44
+ instance_values << "#{key}: #{key}Value"
42
45
  end
43
46
 
44
47
  properties << "let #{key}: #{type}"
45
48
  end
46
49
 
50
+ static_instances = if list_items
51
+ items_code = list_items.map.with_index do |item, index|
52
+ values = item.map do |key, value|
53
+ if value.is_a?(Hash)
54
+ nested_class_name = "#{class_name}#{StringCase.capitalize(key)}"
55
+ @registry.register(nested_class_name, nested_class_name)
56
+ nested_class_name = @registry.get_class_name(nested_class_name, nested_class_name)
57
+ "#{key}: #{nested_class_name}.shared"
58
+ elsif value.is_a?(Array) && !value.empty? && value.first.is_a?(Hash)
59
+ nested_class_name = "#{class_name}#{StringCase.capitalize(key)}"
60
+ @registry.register(nested_class_name, nested_class_name)
61
+ nested_class_name = @registry.get_class_name(nested_class_name, nested_class_name)
62
+ "#{key}: #{nested_class_name}.instances"
63
+ else
64
+ "#{key}: #{swift_value(value)}"
65
+ end
66
+ end.join(",\n ")
67
+ " private static let instance#{index + 1} = #{class_name}(\n #{values}\n )"
68
+ end.join("\n")
69
+
70
+ instances_list = (1..list_items.length).map { |i| "instance#{i}" }.join(", ")
71
+
72
+ <<~SWIFT
73
+ #{items_code}
74
+
75
+ static let instances: [#{class_name}] = [#{instances_list}]
76
+ SWIFT
77
+ else
78
+ <<~SWIFT
79
+ private static var _shared: #{class_name}?
80
+
81
+ #{static_values.join("\n ")}
82
+
83
+ static var shared: #{class_name} {
84
+ if _shared == nil {
85
+ _shared = #{class_name}(
86
+ #{instance_values.join(",\n ")}
87
+ )
88
+ }
89
+ return _shared!
90
+ }
91
+ SWIFT
92
+ end
93
+
47
94
  class_code = <<~SWIFT
48
95
  struct #{class_name} {
49
- #{properties.join("\n ")}
50
-
51
- private static var _shared: #{class_name}?
52
-
53
- #{static_values.join("\n ")}
96
+ #{properties.join("\n ")}
54
97
 
55
- static var shared: #{class_name} {
56
- if _shared == nil {
57
- _shared = #{class_name}(
58
- #{json_obj.keys.map { |key| "#{key}: #{key}Value" }.join(",\n ")}
59
- )
60
- }
61
- return _shared!
62
- }
98
+ #{static_instances}
63
99
  }
64
100
  SWIFT
65
101
 
@@ -105,4 +141,4 @@ class SwiftCodeGenerator
105
141
  return "nil" if value.nil?
106
142
  value.to_s
107
143
  end
108
- end
144
+ end
@@ -1,3 +1,3 @@
1
1
  module Solara
2
- VERSION = "0.7.3"
2
+ VERSION = "0.7.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solara
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.3
4
+ version: 0.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Malek Kamel