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.
@@ -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