modelmaker 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
data/src/lib/modelmaker.rb
CHANGED
@@ -14,6 +14,16 @@ module ModelMaker
|
|
14
14
|
entity.project = self
|
15
15
|
@entities << entity
|
16
16
|
end
|
17
|
+
|
18
|
+
def get_entity(name)
|
19
|
+
catch (:entity) {
|
20
|
+
for entity in @entities do
|
21
|
+
if entity.short_name == name
|
22
|
+
throw :entity, entity
|
23
|
+
end
|
24
|
+
end
|
25
|
+
}
|
26
|
+
end
|
17
27
|
end
|
18
28
|
|
19
29
|
class ProjectBuilder
|
@@ -72,17 +82,26 @@ module ModelMaker
|
|
72
82
|
add_property(UrlProperty.new(propname))
|
73
83
|
end
|
74
84
|
|
75
|
-
def array(
|
76
|
-
add_property(ArrayProperty.new(
|
85
|
+
def array(*args)
|
86
|
+
add_property(ArrayProperty.new(*args))
|
77
87
|
end
|
78
88
|
|
79
89
|
def date(propname)
|
80
90
|
add_property(DateProperty.new(propname))
|
81
91
|
end
|
82
92
|
|
93
|
+
def id(propname, cls)
|
94
|
+
add_property(IdProperty.new(propname, cls))
|
95
|
+
add_dependency(cls)
|
96
|
+
end
|
97
|
+
|
83
98
|
def add_property(property)
|
84
99
|
@entity.add_property(property)
|
85
100
|
end
|
101
|
+
|
102
|
+
def add_dependency(cls)
|
103
|
+
@entity.add_dependency(cls)
|
104
|
+
end
|
86
105
|
end
|
87
106
|
|
88
107
|
class Entity
|
@@ -95,12 +114,21 @@ module ModelMaker
|
|
95
114
|
@superclass = 'NSObject'
|
96
115
|
@properties = {}
|
97
116
|
@protocols = []
|
117
|
+
@deps = []
|
98
118
|
end
|
99
119
|
|
100
120
|
def short_name
|
101
121
|
@name
|
102
122
|
end
|
103
123
|
|
124
|
+
def project=(project)
|
125
|
+
@project = project
|
126
|
+
|
127
|
+
for property in properties do
|
128
|
+
property.project = project
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
104
132
|
def class_name
|
105
133
|
if @project
|
106
134
|
"#{@project.class_prefix}#{@name}"
|
@@ -109,6 +137,14 @@ module ModelMaker
|
|
109
137
|
end
|
110
138
|
end
|
111
139
|
|
140
|
+
def mutable_class
|
141
|
+
if @project
|
142
|
+
"#{@project.class_prefix}Mutable#{@name}"
|
143
|
+
else
|
144
|
+
"Mutable#{@name}"
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
112
148
|
alias :name :class_name
|
113
149
|
|
114
150
|
def instance_name
|
@@ -121,6 +157,23 @@ module ModelMaker
|
|
121
157
|
@properties[property.name] = property
|
122
158
|
end
|
123
159
|
|
160
|
+
def add_dependency(cls)
|
161
|
+
@deps << cls
|
162
|
+
end
|
163
|
+
|
164
|
+
def dependencies
|
165
|
+
if not @project
|
166
|
+
raise "Need a project to list dependencies"
|
167
|
+
end
|
168
|
+
|
169
|
+
deps = []
|
170
|
+
for dependency in @deps do
|
171
|
+
deps << @project.get_entity(dependency)
|
172
|
+
end
|
173
|
+
|
174
|
+
deps
|
175
|
+
end
|
176
|
+
|
124
177
|
def properties
|
125
178
|
@properties.values
|
126
179
|
end
|
@@ -138,6 +191,7 @@ module ModelMaker
|
|
138
191
|
|
139
192
|
class Property
|
140
193
|
attr_reader :name
|
194
|
+
attr_accessor :project
|
141
195
|
|
142
196
|
def initialize(name)
|
143
197
|
@name = name
|
@@ -180,6 +234,23 @@ module ModelMaker
|
|
180
234
|
def assignation_value
|
181
235
|
exposed_name
|
182
236
|
end
|
237
|
+
|
238
|
+
def assignation_line
|
239
|
+
"#{internal_name} = #{assignation_value}"
|
240
|
+
end
|
241
|
+
|
242
|
+
def comment_line
|
243
|
+
nil
|
244
|
+
end
|
245
|
+
|
246
|
+
def make_classname(type)
|
247
|
+
# If we're linked to a project and class has no prefix
|
248
|
+
if project and not type =~ /^[A-Z]{3}/
|
249
|
+
"#{project.class_prefix}#{type} *"
|
250
|
+
else
|
251
|
+
"#{type} *"
|
252
|
+
end
|
253
|
+
end
|
183
254
|
end
|
184
255
|
|
185
256
|
class StringProperty < Property
|
@@ -229,6 +300,12 @@ module ModelMaker
|
|
229
300
|
end
|
230
301
|
|
231
302
|
class ArrayProperty < Property
|
303
|
+
def initialize(name, type=nil)
|
304
|
+
super(name)
|
305
|
+
|
306
|
+
@type = type
|
307
|
+
end
|
308
|
+
|
232
309
|
def internal_type
|
233
310
|
'NSMutableArray *'
|
234
311
|
end
|
@@ -248,6 +325,26 @@ module ModelMaker
|
|
248
325
|
def assignation_value
|
249
326
|
"[[NSMutableArray alloc] initWithArray:#{exposed_name}]"
|
250
327
|
end
|
328
|
+
|
329
|
+
def comment_line
|
330
|
+
if @type
|
331
|
+
"Array of #{make_classname(@type)}"
|
332
|
+
else
|
333
|
+
nil
|
334
|
+
end
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
class IdProperty < Property
|
339
|
+
def initialize(name, cls)
|
340
|
+
super(name)
|
341
|
+
|
342
|
+
@cls = cls
|
343
|
+
end
|
344
|
+
|
345
|
+
def type
|
346
|
+
make_classname(@cls)
|
347
|
+
end
|
251
348
|
end
|
252
349
|
|
253
350
|
class DefaultRunner
|
@@ -300,8 +397,8 @@ module ModelMaker
|
|
300
397
|
[
|
301
398
|
HeaderRenderer,
|
302
399
|
ImplementationRenderer,
|
303
|
-
|
304
|
-
|
400
|
+
MutableHeaderRenderer,
|
401
|
+
MutableImplementationRenderer
|
305
402
|
]
|
306
403
|
end
|
307
404
|
end
|
@@ -359,23 +456,23 @@ module ModelMaker
|
|
359
456
|
end
|
360
457
|
end
|
361
458
|
|
362
|
-
class
|
459
|
+
class MutableHeaderRenderer < BaseRenderer
|
363
460
|
def template_file
|
364
|
-
'
|
461
|
+
'mutable_header.erb'
|
365
462
|
end
|
366
463
|
|
367
464
|
def generated_file(template_vars)
|
368
|
-
"#{template_vars.entity.
|
465
|
+
"#{template_vars.entity.mutable_class}.h"
|
369
466
|
end
|
370
467
|
end
|
371
468
|
|
372
|
-
class
|
469
|
+
class MutableImplementationRenderer < BaseRenderer
|
373
470
|
def template_file
|
374
|
-
'
|
471
|
+
'mutable_implementation.erb'
|
375
472
|
end
|
376
473
|
|
377
474
|
def generated_file(template_vars)
|
378
|
-
"#{template_vars.entity.
|
475
|
+
"#{template_vars.entity.mutable_class}.m"
|
379
476
|
end
|
380
477
|
end
|
381
478
|
|
data/src/templates/header.erb
CHANGED
@@ -12,16 +12,26 @@
|
|
12
12
|
//
|
13
13
|
|
14
14
|
#import <Foundation/Foundation.h>
|
15
|
+
<% for dependency in entity.dependencies %>
|
16
|
+
#import "<%= dependency.class_name %>.h"
|
17
|
+
<% end %>
|
15
18
|
|
16
19
|
@interface <%= @entity.name %> : <%= @entity.superclass %> <%= '<' + @entity.protocols.join(', ') + '> ' if not @entity.protocols.empty? %>{
|
17
|
-
@
|
20
|
+
@protected
|
18
21
|
<% for @property in @entity.properties %>
|
19
22
|
<%= @property.internal_type %> <%= @property.internal_name %>;
|
20
23
|
<% end %>
|
21
24
|
}
|
22
25
|
|
23
|
-
<% for
|
24
|
-
|
26
|
+
<% for property in @entity.properties %>
|
27
|
+
<% if property.comment_line %>
|
28
|
+
|
29
|
+
/**
|
30
|
+
* <%= property.comment_line %>
|
31
|
+
|
32
|
+
*/
|
33
|
+
<% end %>
|
34
|
+
@property (readonly) <%= property.exposed_type %> <%= property.exposed_name %>;
|
25
35
|
<% end %>
|
26
36
|
|
27
37
|
@end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
//
|
2
|
-
// <%= entity.
|
2
|
+
// <%= entity.mutable_class %>.h
|
3
3
|
// <%= project.name %>
|
4
4
|
|
5
5
|
<% if project.copyright %>
|
@@ -12,16 +12,13 @@
|
|
12
12
|
//
|
13
13
|
|
14
14
|
#import <Foundation/Foundation.h>
|
15
|
-
#import "<%= entity.
|
15
|
+
#import "<%= entity.class_name %>.h"
|
16
16
|
|
17
|
-
@interface <%= entity.
|
17
|
+
@interface <%= entity.mutable_class %> : <%= entity.class_name %>
|
18
18
|
|
19
|
-
@property (readonly) <%= entity.name %> *<%= entity.instance_name %>;
|
20
|
-
|
21
|
-
- (id)init;
|
22
19
|
|
23
20
|
<% for property in entity.properties %>
|
24
|
-
<%= property.
|
21
|
+
@property (readwrite) <%= property.exposed_type %> <%= property.exposed_name %>;
|
25
22
|
<% end %>
|
26
23
|
|
27
24
|
@end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
//
|
2
|
+
// <%= entity.mutable_class %>.m
|
3
|
+
// <%= project.name %>
|
4
|
+
|
5
|
+
<% if project.copyright %>
|
6
|
+
//
|
7
|
+
// Copyright (c) <%= project.copyright %>. All rights reserved.
|
8
|
+
<% end %>
|
9
|
+
//
|
10
|
+
// Generated by ModelMaker
|
11
|
+
// See http://github.com/aspyct/ModelMaker
|
12
|
+
//
|
13
|
+
|
14
|
+
#import "<%= entity.mutable_class %>.h"
|
15
|
+
|
16
|
+
@implementation <%= entity.mutable_class %>
|
17
|
+
|
18
|
+
|
19
|
+
<% for property in entity.properties %>
|
20
|
+
<%= property.setter_signature %> {
|
21
|
+
<%= property.assignation_line %>;
|
22
|
+
}
|
23
|
+
|
24
|
+
<% end %>
|
25
|
+
|
26
|
+
@end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: modelmaker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: src/bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-25 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: ! 'ModelMaker generates your model classes based on a simple ruby definition. '
|
15
15
|
email: a.dotreppe@aspyct.org
|
@@ -18,10 +18,10 @@ executables:
|
|
18
18
|
extensions: []
|
19
19
|
extra_rdoc_files: []
|
20
20
|
files:
|
21
|
-
- src/templates/builder_header.erb
|
22
|
-
- src/templates/builder_implementation.erb
|
23
21
|
- src/templates/header.erb
|
24
22
|
- src/templates/implementation.erb
|
23
|
+
- src/templates/mutable_header.erb
|
24
|
+
- src/templates/mutable_implementation.erb
|
25
25
|
- src/bin/modelmake
|
26
26
|
- src/lib/modelmaker.rb
|
27
27
|
homepage: https://github.com/aspyct/ModelMaker
|
@@ -1,36 +0,0 @@
|
|
1
|
-
//
|
2
|
-
// <%= entity.name %>Builder.m
|
3
|
-
// <%= project.name %>
|
4
|
-
|
5
|
-
<% if project.copyright %>
|
6
|
-
//
|
7
|
-
// Copyright (c) <%= project.copyright %>. All rights reserved.
|
8
|
-
<% end %>
|
9
|
-
//
|
10
|
-
// Generated by ModelMaker
|
11
|
-
// See http://github.com/aspyct/ModelMaker
|
12
|
-
//
|
13
|
-
|
14
|
-
#import "<%= entity.name %>Builder.h"
|
15
|
-
|
16
|
-
@implementation <%= entity.name %>Builder
|
17
|
-
|
18
|
-
@synthesize <%= entity.instance_name %> = _<%= entity.instance_name %>;
|
19
|
-
|
20
|
-
- (id)init {
|
21
|
-
self = [super init];
|
22
|
-
|
23
|
-
if (self) {
|
24
|
-
_<%= entity.instance_name %> = [[<%= entity.name %> alloc] init];
|
25
|
-
}
|
26
|
-
|
27
|
-
return self;
|
28
|
-
}
|
29
|
-
|
30
|
-
<% for property in entity.properties %>
|
31
|
-
<%= property.setter_signature %> {
|
32
|
-
_<%= entity.instance_name %>-><%= property.internal_name %> = <%= property.assignation_value %>;
|
33
|
-
}
|
34
|
-
|
35
|
-
<% end %>
|
36
|
-
@end
|