modelmaker 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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(propname)
76
- add_property(ArrayProperty.new(propname))
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
- BuilderHeaderRenderer,
304
- BuilderImplementationRenderer
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 BuilderHeaderRenderer < BaseRenderer
459
+ class MutableHeaderRenderer < BaseRenderer
363
460
  def template_file
364
- 'builder_header.erb'
461
+ 'mutable_header.erb'
365
462
  end
366
463
 
367
464
  def generated_file(template_vars)
368
- "#{template_vars.entity.name}Builder.h"
465
+ "#{template_vars.entity.mutable_class}.h"
369
466
  end
370
467
  end
371
468
 
372
- class BuilderImplementationRenderer < BaseRenderer
469
+ class MutableImplementationRenderer < BaseRenderer
373
470
  def template_file
374
- 'builder_implementation.erb'
471
+ 'mutable_implementation.erb'
375
472
  end
376
473
 
377
474
  def generated_file(template_vars)
378
- "#{template_vars.entity.name}Builder.m"
475
+ "#{template_vars.entity.mutable_class}.m"
379
476
  end
380
477
  end
381
478
 
@@ -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
- @package
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 @property in @entity.properties %>
24
- @property (readonly) <%= @property.exposed_type %> <%= @property.exposed_name %>;
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.name %>Builder.h
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.name %>.h"
15
+ #import "<%= entity.class_name %>.h"
16
16
 
17
- @interface <%= entity.name %>Builder : NSObject
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.setter_signature %>;
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.1.2
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-16 00:00:00.000000000 Z
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