modelmaker 0.1.2 → 0.2.0
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.
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
|