gyro 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +201 -0
- data/README.md +840 -0
- data/bin/gyro +118 -0
- data/lib/gyro.rb +32 -0
- data/lib/gyro/realm/java/converter.rb +63 -0
- data/lib/gyro/realm/java/enum_generator.rb +128 -0
- data/lib/gyro/realm/java/generator.rb +183 -0
- data/lib/gyro/realm/java/templates.rb +67 -0
- data/lib/gyro/realm/objc/converter.rb +63 -0
- data/lib/gyro/realm/objc/enum_generator.rb +86 -0
- data/lib/gyro/realm/objc/generator.rb +373 -0
- data/lib/gyro/realm/objc/json_category_generator.rb +172 -0
- data/lib/gyro/realm/objc/protocol_generator.rb +59 -0
- data/lib/gyro/realm/objc/templates.rb +100 -0
- data/lib/gyro/realm/swift/converter.rb +74 -0
- data/lib/gyro/realm/swift/enum_generator.rb +73 -0
- data/lib/gyro/realm/swift/generator.rb +265 -0
- data/lib/gyro/realm/swift/object_mapper_generator.rb +124 -0
- data/lib/gyro/realm/swift/templates.rb +64 -0
- data/lib/gyro/utils/file_utils.rb +31 -0
- data/lib/gyro/utils/log.rb +68 -0
- data/lib/gyro/utils/raise.rb +23 -0
- data/lib/gyro/utils/string_xcdatamodel.rb +58 -0
- data/lib/gyro/xcdatamodel/parser/attribute.rb +98 -0
- data/lib/gyro/xcdatamodel/parser/entity.rb +234 -0
- data/lib/gyro/xcdatamodel/parser/relationship.rb +70 -0
- data/lib/gyro/xcdatamodel/parser/xcdatamodel.rb +59 -0
- metadata +77 -0
@@ -0,0 +1,265 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright 2016 - Niji
|
3
|
+
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
you may not use this file except in compliance with the License.
|
6
|
+
You may obtain a copy of the License at
|
7
|
+
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
See the License for the specific language governing permissions and
|
14
|
+
limitations under the License.
|
15
|
+
=end
|
16
|
+
|
17
|
+
require File.expand_path('../../utils/log', File.dirname(__FILE__))
|
18
|
+
require File.expand_path('../../utils/string_xcdatamodel', File.dirname(__FILE__))
|
19
|
+
require File.expand_path('../../utils/file_utils', File.dirname(__FILE__))
|
20
|
+
require File.expand_path('../../xcdatamodel/parser/relationship', File.dirname(__FILE__))
|
21
|
+
require File.expand_path('converter', File.dirname(__FILE__))
|
22
|
+
require File.expand_path('enum_generator', File.dirname(__FILE__))
|
23
|
+
require File.expand_path('templates', File.dirname(__FILE__))
|
24
|
+
require File.expand_path('object_mapper_generator', File.dirname(__FILE__))
|
25
|
+
|
26
|
+
module Gyro
|
27
|
+
module Realm
|
28
|
+
module Swift
|
29
|
+
|
30
|
+
class Generator
|
31
|
+
|
32
|
+
# INCLUDES #############################################################
|
33
|
+
|
34
|
+
include Gyro::XCDataModel::Parser
|
35
|
+
include Converter
|
36
|
+
include EnumGenerator
|
37
|
+
include Templates
|
38
|
+
include ObjectMapperGenerator
|
39
|
+
|
40
|
+
# PUBLIC METHODS #######################################################
|
41
|
+
|
42
|
+
def initialize(path, xcdatamodel, json = false)
|
43
|
+
puts "\n"
|
44
|
+
Gyro::Log::title('Swift Realm')
|
45
|
+
xcdatamodel.entities.each do |_, entity|
|
46
|
+
unless entity.abstract?
|
47
|
+
Gyro::Log::success("Generating entity #{entity.name}...")
|
48
|
+
generate_class(path, entity, json)
|
49
|
+
generate_object_mapper_categories(path, xcdatamodel) if json
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
private ################################################################
|
55
|
+
|
56
|
+
def generate_class(path, entity, json)
|
57
|
+
class_file = String.new
|
58
|
+
entity.name = entity.name.delete_objc_prefix
|
59
|
+
class_file << generate_header(entity)
|
60
|
+
class_file << generate_attributes(entity.attributes, entity.relationships, json)
|
61
|
+
class_file << generate_inverse_properties(entity)
|
62
|
+
class_file << generate_primary_key(entity)
|
63
|
+
class_file << generate_indexed_properties(entity)
|
64
|
+
class_file << generate_ignored_properties(entity)
|
65
|
+
class_file << '}' + "\n"
|
66
|
+
Gyro.write_file_with_name(path, SWIFT_FILE_TEMPLATE%[entity.name], class_file)
|
67
|
+
generate_enums(path, entity.attributes)
|
68
|
+
end
|
69
|
+
|
70
|
+
def generate_header(entity)
|
71
|
+
class_file = String.new
|
72
|
+
class_file << GENERATED_MESSAGE + "\n\n"
|
73
|
+
class_file << IMPORT_REALM + "\n\n"
|
74
|
+
class_file << CLASS_COMMENT_TEMPLATE%[entity.comment] + "\n" unless entity.comment.empty?
|
75
|
+
class_file << CLASS_TEMPLATE%[entity.name] + "\n\n"
|
76
|
+
class_file << generate_constants(entity)
|
77
|
+
end
|
78
|
+
|
79
|
+
def generate_constants(entity)
|
80
|
+
attribute_constants = String.new
|
81
|
+
unless entity.attributes.empty?
|
82
|
+
attribute_constants << ' ' + ENUM_STRING_DEF_TEMPLATE%['Attributes'] + "\n"
|
83
|
+
entity.attributes.each do |_, attribute|
|
84
|
+
unless attribute.realm_ignored? or attribute.read_only?
|
85
|
+
attribute_constants << ' ' + ATTRIBUTE_COMMENT_TEMPLATE%[attribute.comment] + "\n" unless attribute.comment.empty?
|
86
|
+
attribute_constants << ' ' + ENUM_STRING_CASE_TEMPLATE%[attribute.name.capitalize_first_letter, attribute.name] + "\n"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
attribute_constants << ' ' + '}'+ "\n\n"
|
90
|
+
end
|
91
|
+
relationship_constants = String.new
|
92
|
+
if not entity.relationships.empty? and not entity.has_only_inverse?
|
93
|
+
relationship_constants << ' ' + ENUM_STRING_DEF_TEMPLATE%['Relationships'] + "\n"
|
94
|
+
entity.relationships.each do |_, relationship|
|
95
|
+
relationship_constants << ' ' + ENUM_STRING_CASE_TEMPLATE%[relationship.name.capitalize_first_letter, relationship.name] + "\n" if not relationship.inverse?
|
96
|
+
end
|
97
|
+
relationship_constants << ' ' + '}'+ "\n\n"
|
98
|
+
end
|
99
|
+
attribute_constants + relationship_constants
|
100
|
+
end
|
101
|
+
|
102
|
+
def generate_attributes(attributes, relationships, json)
|
103
|
+
# "NORMAL" ATTRIBUTES
|
104
|
+
attributes_string = write_attributes(attributes, json)
|
105
|
+
# "RELATIONSHIP" ATTRIBUTES
|
106
|
+
relationships.each do |_, relationship|
|
107
|
+
unless relationship.inverse?
|
108
|
+
is_list = relationship.type == :to_many
|
109
|
+
name = relationship.name
|
110
|
+
type = relationship.inverse_type.delete_objc_prefix
|
111
|
+
if is_list
|
112
|
+
if json
|
113
|
+
attributes_string << ' ' + PROPERTY_LIST_VAR_TEMPLATE%[name, type] + "\n"
|
114
|
+
else
|
115
|
+
attributes_string << ' ' + PROPERTY_LIST_TEMPLATE%[name, type] + "\n"
|
116
|
+
end
|
117
|
+
else
|
118
|
+
attributes_string << ' ' + PROPERTY_OBJECT_TEMPLATE%[name, type] + "\n"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
attributes_string + "\n"
|
123
|
+
end
|
124
|
+
|
125
|
+
def write_attributes(attributes, json)
|
126
|
+
attributes_string = String.new
|
127
|
+
attributes.each_with_index do |(_, attribute)|
|
128
|
+
unless attribute.read_only?
|
129
|
+
if attribute.enum?
|
130
|
+
attributes_string << write_enum_attribute(attribute, json)
|
131
|
+
else
|
132
|
+
if attribute.optional?
|
133
|
+
attributes_string << write_optional_attribute(attribute, json) + "\n"
|
134
|
+
else
|
135
|
+
default_value = convert_default(attribute.type, attribute.has_default? ? attribute.default : nil)
|
136
|
+
attributes_string << ' ' + PROPERTY_DEFAULT_TEMPLATE%[attribute.name, convert_type(attribute.type), default_value] + "\n"
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
attributes_string
|
142
|
+
end
|
143
|
+
|
144
|
+
def write_optional_attribute(attribute, json)
|
145
|
+
optional_string = String.new
|
146
|
+
type = convert_type(attribute.type)
|
147
|
+
if attribute.is_number? or attribute.is_bool?
|
148
|
+
if json
|
149
|
+
optional_string << ' ' + PROPERTY_OPTIONAL_NUMBER_VAR_TEMPLATE%[attribute.name, type]
|
150
|
+
else
|
151
|
+
optional_string << ' ' + PROPERTY_OPTIONAL_NUMBER_TEMPLATE%[attribute.name, type]
|
152
|
+
end
|
153
|
+
else
|
154
|
+
optional_string << ' ' + PROPERTY_OPTIONAL_NON_NUMBER_TEMPLATE%[attribute.name, type]
|
155
|
+
end
|
156
|
+
optional_string
|
157
|
+
end
|
158
|
+
|
159
|
+
def write_enum_attribute(attribute, json)
|
160
|
+
enum_string = String.new
|
161
|
+
if attribute.optional?
|
162
|
+
enum_string << ' ' + PROPERTY_OPTIONAL_ENUM_TEMPLATE%[attribute.name] + "\n"
|
163
|
+
else
|
164
|
+
enum_string << ' ' + PROPERTY_ENUM_TEMPLATE%[attribute.name] + "\n"
|
165
|
+
end
|
166
|
+
enum_type = attribute.enum_type.delete_objc_prefix
|
167
|
+
enum_name = attribute.name + 'Enum'
|
168
|
+
|
169
|
+
enum_string << ' ' + PROPERTY_OPTIONAL_COMPUTED_TEMPLATE%[enum_name, enum_type] + "\n"
|
170
|
+
enum_string << ' ' + 'get {' + "\n"
|
171
|
+
if attribute.optional?
|
172
|
+
enum_string << ' ' + "guard let #{attribute.name} = #{attribute.name},\n"
|
173
|
+
enum_string << ' ' + " let enumValue = #{enum_type}(rawValue: #{attribute.name})\n"
|
174
|
+
enum_string << ' ' + " else { return nil }" + "\n"
|
175
|
+
else
|
176
|
+
enum_string << ' ' + "guard let enumValue = #{enum_type}(rawValue: #{attribute.name}) else { return nil }" + "\n"
|
177
|
+
end
|
178
|
+
enum_string << ' ' + "return enumValue" + "\n"
|
179
|
+
enum_string << ' ' + '}' + "\n"
|
180
|
+
|
181
|
+
if attribute.optional?
|
182
|
+
enum_string << ' ' + "set { #{attribute.name} = newValue?.rawValue ?? nil }" + "\n"
|
183
|
+
else
|
184
|
+
enum_string << ' ' + "set { #{attribute.name} = newValue?.rawValue ?? \"\" }" + "\n"
|
185
|
+
end
|
186
|
+
enum_string << ' ' + '}' + "\n\n"
|
187
|
+
end
|
188
|
+
|
189
|
+
def generate_primary_key(entity)
|
190
|
+
primary_key = String.new
|
191
|
+
if entity.has_primary_key?
|
192
|
+
primary_key << ' ' + 'override static func primaryKey() -> String? {' + "\n"
|
193
|
+
primary_key << ' ' + "return #{entity.identity_attribute.add_quotes}" + "\n"
|
194
|
+
primary_key << ' ' + '}' + "\n\n"
|
195
|
+
end
|
196
|
+
primary_key
|
197
|
+
end
|
198
|
+
|
199
|
+
def generate_ignored_properties(entity)
|
200
|
+
ignored_properties = String.new
|
201
|
+
if entity.has_ignored?
|
202
|
+
ignored_properties << ' ' + "// Specify properties to ignore (Realm won't persist these)" + "\n"
|
203
|
+
ignored_properties << ' ' +'override static func ignoredProperties() -> [String] {' + "\n"
|
204
|
+
ignored_properties << ' ' + 'return ['
|
205
|
+
entity.attributes.each do |_, attribute|
|
206
|
+
ignored_properties << ARRAY_TEMPLATE%[attribute.name.add_quotes] if attribute.realm_ignored?
|
207
|
+
end
|
208
|
+
entity.relationships.each do |_, relationship|
|
209
|
+
ignored_properties << ARRAY_TEMPLATE%[relationship.name.add_quotes] if relationship.realm_ignored?
|
210
|
+
end
|
211
|
+
ignored_properties = ignored_properties[0..ignored_properties.length - 3] # delete last coma
|
212
|
+
ignored_properties << ']' + "\n"
|
213
|
+
ignored_properties << ' ' + '}' + "\n\n"
|
214
|
+
end
|
215
|
+
ignored_properties
|
216
|
+
end
|
217
|
+
|
218
|
+
def generate_inverse_properties(entity)
|
219
|
+
inverse_properties = []
|
220
|
+
entity.relationships.each do |_, relationship|
|
221
|
+
if relationship.inverse?
|
222
|
+
if relationship.type == :to_many
|
223
|
+
inverse_properties << PROPERTY_INVERSE_MANY_TEMPLATE%[
|
224
|
+
relationship.name.delete_inverse_suffix,
|
225
|
+
relationship.inverse_type.delete_objc_prefix,
|
226
|
+
relationship.inverse_name
|
227
|
+
]
|
228
|
+
else
|
229
|
+
inverse_properties << PROPERTY_INVERSE_MANY_TEMPLATE%[
|
230
|
+
relationship.name.delete_inverse_suffix + 's', # 's' for plural form
|
231
|
+
relationship.inverse_type.delete_objc_prefix,
|
232
|
+
relationship.inverse_name
|
233
|
+
]
|
234
|
+
inverse_properties << PROPERTY_INVERSE_ONE_TEMPLATE%[
|
235
|
+
relationship.name.delete_inverse_suffix,
|
236
|
+
relationship.inverse_type.delete_objc_prefix,
|
237
|
+
relationship.name.delete_inverse_suffix + 's' # 's' for plural form
|
238
|
+
]
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|
242
|
+
return '' if inverse_properties.empty?
|
243
|
+
inverse_properties.map { |value| " #{value}\n" }.join + "\n"
|
244
|
+
end
|
245
|
+
|
246
|
+
def generate_indexed_properties(entity)
|
247
|
+
indexed_properties = String.new
|
248
|
+
if entity.has_indexed_attributes?
|
249
|
+
indexed_properties << ' ' + '// Specify properties to index' + "\n"
|
250
|
+
indexed_properties << ' ' +'override static func indexedProperties() -> [String] {' + "\n"
|
251
|
+
indexed_properties << ' ' + 'return ['
|
252
|
+
entity.attributes.each do |_, attribute|
|
253
|
+
indexed_properties << ARRAY_TEMPLATE%[attribute.name.add_quotes] if attribute.indexed?
|
254
|
+
end
|
255
|
+
indexed_properties = indexed_properties[0..indexed_properties.length - 3] # delete last coma
|
256
|
+
indexed_properties << ']' + "\n"
|
257
|
+
indexed_properties << '}' + "\n\n"
|
258
|
+
end
|
259
|
+
indexed_properties
|
260
|
+
end
|
261
|
+
|
262
|
+
end
|
263
|
+
end
|
264
|
+
end
|
265
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright 2016 - Niji
|
3
|
+
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
you may not use this file except in compliance with the License.
|
6
|
+
You may obtain a copy of the License at
|
7
|
+
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
See the License for the specific language governing permissions and
|
14
|
+
limitations under the License.
|
15
|
+
=end
|
16
|
+
|
17
|
+
require File.expand_path('templates', File.dirname(__FILE__))
|
18
|
+
require File.expand_path('../../utils/file_utils', File.dirname(__FILE__))
|
19
|
+
require File.expand_path('../../utils/string_xcdatamodel', File.dirname(__FILE__))
|
20
|
+
|
21
|
+
module Gyro
|
22
|
+
module Realm
|
23
|
+
module Swift
|
24
|
+
module ObjectMapperGenerator
|
25
|
+
|
26
|
+
# INCLUDES #############################################################
|
27
|
+
|
28
|
+
include Templates
|
29
|
+
|
30
|
+
# PUBLIC METHODS #######################################################
|
31
|
+
|
32
|
+
def generate_object_mapper_categories(path, xcdatamodel, framework = false)
|
33
|
+
json_path = File.join(path, 'ObjectMapper')
|
34
|
+
Dir.mkdir(json_path) unless Dir.exists?(json_path)
|
35
|
+
xcdatamodel.entities.each do |_, entity|
|
36
|
+
generate_json_category_file(json_path, entity, framework)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# PRIVATE METHODS #######################################################
|
41
|
+
|
42
|
+
def generate_json_category_file(path, entity, framework)
|
43
|
+
if !entity.attributes.empty? || !entity.relationships.empty?
|
44
|
+
source_file = generate_source_extension_file(entity)
|
45
|
+
file_name = EXTENSION_NAME%[entity.name]
|
46
|
+
Gyro.write_file_with_name(path, SOURCE_TEMPLATE%[file_name], source_file) unless source_file.empty?
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def generate_source_extension_file(entity)
|
51
|
+
source_file = String.new
|
52
|
+
source_file << GENERATED_MESSAGE + "\n\n"
|
53
|
+
source_file << IMPORT_OBJECT_MAPPER + "\n\n"
|
54
|
+
source_file << EXTENSION_TEMPLATE%[entity.name, "Mappable"] + "\n\n"
|
55
|
+
source_file << generate_init
|
56
|
+
source_file << generate_mapping(entity)
|
57
|
+
source_file << "}\n"
|
58
|
+
source_file
|
59
|
+
end
|
60
|
+
|
61
|
+
def generate_mapping(entity)
|
62
|
+
source_file = String.new
|
63
|
+
source_file << " // MARK: Mappable\n\n"
|
64
|
+
source_file << " func mapping(map: Map) {\n"
|
65
|
+
source_file << generate_mapper_attributes(entity) if !entity.attributes.empty?
|
66
|
+
source_file << generate_mapper_relationships(entity) if !entity.relationships.empty?
|
67
|
+
source_file << " }\n"
|
68
|
+
source_file
|
69
|
+
end
|
70
|
+
|
71
|
+
def generate_init()
|
72
|
+
source_file = String.new
|
73
|
+
source_file << " // MARK: Initializers\n\n"
|
74
|
+
source_file << " convenience init?(_ map: Map) {\n"
|
75
|
+
source_file << " self.init()\n"
|
76
|
+
source_file << " }\n\n"
|
77
|
+
source_file
|
78
|
+
end
|
79
|
+
|
80
|
+
def generate_mapper_attributes(entity)
|
81
|
+
attributes = String.new
|
82
|
+
attributes << "\n // MARK: Attributes\n"
|
83
|
+
entity.attributes.each do |_, attribute|
|
84
|
+
attrKey = attribute.json_key_path.empty? ? attribute.name : attribute.json_key_path
|
85
|
+
case
|
86
|
+
when attribute.type == :date
|
87
|
+
transformer = attribute.transformer.empty? ? "ISO8601DateTransform" : attribute.transformer
|
88
|
+
attributes << " self." + attribute.name + " <- (map[" + attrKey.add_quotes + "], " + transformer + "())\n"
|
89
|
+
when attribute.type == :integer_16 && attribute.optional && attribute.enum_type == ""
|
90
|
+
attributes << " self." + attribute.name + " <- (map[" + attrKey.add_quotes + "], RealmOptionalInt16Transform())\n"
|
91
|
+
when attribute.type == :integer_32 && attribute.optional
|
92
|
+
attributes << " self." + attribute.name + " <- (map[" + attrKey.add_quotes + "], RealmOptionalInt32Transform())\n"
|
93
|
+
when attribute.type == :integer_64 && attribute.optional
|
94
|
+
attributes << " self." + attribute.name + " <- (map[" + attrKey.add_quotes + "], RealmOptionalInt64Transform())\n"
|
95
|
+
when attribute.type == :float && attribute.optional
|
96
|
+
attributes << " self." + attribute.name + " <- (map[" + attrKey.add_quotes + "], RealmOptionalFloatTransform())\n"
|
97
|
+
when attribute.type == :double && attribute.optional
|
98
|
+
attributes << " self." + attribute.name + " <- (map[" + attrKey.add_quotes + "], RealmOptionalDoubleTransform())\n"
|
99
|
+
when
|
100
|
+
attributes << " self." + attribute.name + " <- map[" + attrKey.add_quotes + "]\n"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
attributes
|
104
|
+
end
|
105
|
+
|
106
|
+
def generate_mapper_relationships(entity)
|
107
|
+
relationships = String.new
|
108
|
+
relationships << "\n // MARK: Relationships\n"
|
109
|
+
entity.relationships.each do |_, relationship|
|
110
|
+
next if relationship.inverse?
|
111
|
+
relationKey = relationship.json_key_path.empty? ? relationship.name : relationship.json_key_path
|
112
|
+
if relationship.type == :to_many
|
113
|
+
relationships << " self." + relationship.name + " <- (map[" + relationKey.add_quotes + "], ListTransform<" + relationship.inverse_type + ">())\n"
|
114
|
+
else
|
115
|
+
relationships << " self." + relationship.name + " <- map[" + relationKey.add_quotes + "]\n"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
relationships
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright 2016 - Niji
|
3
|
+
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
you may not use this file except in compliance with the License.
|
6
|
+
You may obtain a copy of the License at
|
7
|
+
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
See the License for the specific language governing permissions and
|
14
|
+
limitations under the License.
|
15
|
+
=end
|
16
|
+
|
17
|
+
module Gyro
|
18
|
+
module Realm
|
19
|
+
module Swift
|
20
|
+
module Templates
|
21
|
+
|
22
|
+
# COMMONS
|
23
|
+
GENERATED_MESSAGE = '/* DO NOT EDIT | Generated by gyro */'
|
24
|
+
|
25
|
+
# IMPORTS
|
26
|
+
IMPORT_REALM = 'import RealmSwift'
|
27
|
+
SWIFT_FILE_TEMPLATE = '%s.swift'
|
28
|
+
IMPORT_OBJECT_MAPPER = 'import ObjectMapper'
|
29
|
+
|
30
|
+
# ENUM
|
31
|
+
ENUM_STRING_DEF_TEMPLATE = 'enum %s: String {'
|
32
|
+
ENUM_STRING_CASE_TEMPLATE = 'case %s = "%s"'
|
33
|
+
|
34
|
+
# CLASS
|
35
|
+
ARRAY_TEMPLATE ='%s, '
|
36
|
+
CLASS_TEMPLATE = 'final class %s: Object {'
|
37
|
+
PROPERTY_DEFAULT_TEMPLATE = 'dynamic var %s: %s = %s'
|
38
|
+
PROPERTY_OBJECT_TEMPLATE = 'dynamic var %s: %s?'
|
39
|
+
PROPERTY_LIST_TEMPLATE = 'let %s = List<%s>()'
|
40
|
+
PROPERTY_LIST_VAR_TEMPLATE = 'var %s = List<%s>()'
|
41
|
+
PROPERTY_PRIVATE_ENUM_TEMPLATE = 'private dynamic var %s: String?'
|
42
|
+
PROPERTY_ENUM_TEMPLATE = 'dynamic var %s: String = ""'
|
43
|
+
PROPERTY_OPTIONAL_ENUM_TEMPLATE = 'dynamic var %s: String? = nil'
|
44
|
+
PROPERTY_COMPUTED_TEMPLATE = 'var %s: %s {'
|
45
|
+
PROPERTY_OPTIONAL_COMPUTED_TEMPLATE = 'var %s: %s? {'
|
46
|
+
PROPERTY_INVERSE_ONE_TEMPLATE = 'var %s: %s? { return %s.first }'
|
47
|
+
PROPERTY_INVERSE_MANY_TEMPLATE = 'let %s = LinkingObjects(fromType: %s.self, property: "%s")'
|
48
|
+
PROPERTY_OPTIONAL_NON_NUMBER_TEMPLATE = 'dynamic var %s: %s? = nil'
|
49
|
+
PROPERTY_OPTIONAL_NUMBER_TEMPLATE = 'let %s = RealmOptional<%s>()'
|
50
|
+
PROPERTY_OPTIONAL_NUMBER_VAR_TEMPLATE = 'var %s = RealmOptional<%s>()'
|
51
|
+
|
52
|
+
# EXTENSION
|
53
|
+
EXTENSION_TEMPLATE = 'extension %s: %s {'
|
54
|
+
EXTENSION_NAME = '%sMapper'
|
55
|
+
SOURCE_TEMPLATE = '%s.swift'
|
56
|
+
|
57
|
+
# COMMENTS
|
58
|
+
CLASS_COMMENT_TEMPLATE = "/**\n * %s\n */"
|
59
|
+
ATTRIBUTE_COMMENT_TEMPLATE = '/** %s */'
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|