wara 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/Gemfile +6 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +36 -0
  6. data/Rakefile +2 -0
  7. data/bin/wara +26 -0
  8. data/coredata/BloodPressureWrapper.h +5 -0
  9. data/coredata/BloodPressureWrapper.m +15 -0
  10. data/coredata/CurrentPersonWrapper.h +5 -0
  11. data/coredata/CurrentPersonWrapper.m +15 -0
  12. data/coredata/HealthDataWrapper.h +5 -0
  13. data/coredata/HealthDataWrapper.m +15 -0
  14. data/coredata/Model.xcdatamodeld/Model.xcdatamodel/contents +43 -0
  15. data/coredata/NotSameWrapper.h +5 -0
  16. data/coredata/NotSameWrapper.m +15 -0
  17. data/coredata/PersonWrapper.h +5 -0
  18. data/coredata/PersonWrapper.m +15 -0
  19. data/coredata/_BloodPressureWrapper.h +14 -0
  20. data/coredata/_BloodPressureWrapper.m +25 -0
  21. data/coredata/_CurrentPersonWrapper.h +13 -0
  22. data/coredata/_CurrentPersonWrapper.m +19 -0
  23. data/coredata/_HealthDataWrapper.h +16 -0
  24. data/coredata/_HealthDataWrapper.m +25 -0
  25. data/coredata/_NotSameWrapper.h +24 -0
  26. data/coredata/_NotSameWrapper.m +41 -0
  27. data/coredata/_PersonWrapper.h +15 -0
  28. data/coredata/_PersonWrapper.m +23 -0
  29. data/lib/wara/version.rb +3 -0
  30. data/lib/wara.rb +85 -0
  31. data/out/BloodPressureWrapper.h +5 -0
  32. data/out/BloodPressureWrapper.m +15 -0
  33. data/out/CurrentPersonWrapper.h +5 -0
  34. data/out/CurrentPersonWrapper.m +15 -0
  35. data/out/HealthDataWrapper.h +5 -0
  36. data/out/HealthDataWrapper.m +15 -0
  37. data/out/NotSameWrapper.h +5 -0
  38. data/out/NotSameWrapper.m +15 -0
  39. data/out/PersonWrapper.h +5 -0
  40. data/out/PersonWrapper.m +15 -0
  41. data/out/_BloodPressureWrapper.h +14 -0
  42. data/out/_BloodPressureWrapper.m +25 -0
  43. data/out/_CurrentPersonWrapper.h +13 -0
  44. data/out/_CurrentPersonWrapper.m +19 -0
  45. data/out/_HealthDataWrapper.h +16 -0
  46. data/out/_HealthDataWrapper.m +25 -0
  47. data/out/_NotSameWrapper.h +24 -0
  48. data/out/_NotSameWrapper.m +41 -0
  49. data/out/_PersonWrapper.h +15 -0
  50. data/out/_PersonWrapper.m +23 -0
  51. data/spec/spec_helper.rb +78 -0
  52. data/spec/wara_spec.rb +119 -0
  53. data/wara.gemspec +27 -0
  54. metadata +132 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5e9f48e6687c5970e7ef4047f95015b861a2d3bf
4
+ data.tar.gz: 36d75cc8f80a4b74e65853b031ff6c1af456754c
5
+ SHA512:
6
+ metadata.gz: 6b6b1f5a7656a3ee27604b14343e9da3dfe63be4f2a3a47a6ced379758baa9d591d31c48e3952c0c73c047c2520acd3c5219c3bf736acfb3b651736d673fe34c
7
+ data.tar.gz: 78fba4b54cae32083ca6c5d6813b9972ee10439d9d436665e69143eefc9dcba76e57056ce93cfbfaa981b74562c3fd63d10d5eb782a36b93e6f80064bd3ea12b
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in wrapperCreater.gemspec
4
+ gemspec
5
+ gem "rspec", "~> 2.14.1"
6
+ gem "thor", "~> 0.18.1"
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 akuraru
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # Wara
2
+
3
+ Wara generate a scapegoat for objects of CoreData.
4
+
5
+ You are using CoreDate, if you want to change the Entity, it is necessary to create a sub-context.However, it takes time be used to manage the sub-context.On the other hand, it is necessary to undo to the default context if one context.
6
+
7
+ Wara is used to generate an object to make changes without the operation of the context if you want to change the entity.
8
+
9
+
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ ```ruby
15
+ gem 'wara'
16
+ ```
17
+
18
+ And then execute:
19
+
20
+ $ bundle
21
+
22
+ Or install it yourself as:
23
+
24
+ $ gem install wara
25
+
26
+ ## Usage
27
+
28
+ $ wara -m MyDataModel.xcdatamodeld/MyDataModel.xcdatamodel
29
+
30
+ ## Contributing
31
+
32
+ 1. Fork it ( https://github.com/[my-github-username]/wara/fork )
33
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
34
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
35
+ 4. Push to the branch (`git push origin my-new-feature`)
36
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
data/bin/wara ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "wara/version"
4
+ require "wara"
5
+ require "thor"
6
+
7
+ module Wara
8
+ #= Wara CLI
9
+ class CLI < Thor
10
+ default_task :create
11
+
12
+ option :model, :type => :string, :aliases => '-m',:required => true, :desc => 'Path to model'
13
+ option :out, :type => :string, :aliases => '-o', :desc => 'Output directory'
14
+ desc "create", "create Translation.strings"
15
+ def create
16
+ Wara::Core.new.create(options[:model], options[:out])
17
+ puts 'Generate'
18
+ end
19
+ desc "version", "version"
20
+ def version
21
+ p Wara::VERSION
22
+ end
23
+ end
24
+ end
25
+
26
+ Wara::CLI.start(ARGV)
@@ -0,0 +1,5 @@
1
+ #import "_BloodPressureWrapper.h"
2
+
3
+ @interface BloodPressureWrapper : _BloodPressureWrapper {}
4
+ // Custom logic goes here.
5
+ @end
@@ -0,0 +1,15 @@
1
+ #import "BloodPressureWrapper.h"
2
+
3
+
4
+ @interface BloodPressureWrapper ()
5
+
6
+ // Private interface goes here.
7
+
8
+ @end
9
+
10
+
11
+ @implementation BloodPressureWrapper
12
+
13
+ // Custom logic goes here.
14
+
15
+ @end
@@ -0,0 +1,5 @@
1
+ #import "_CurrentPersonWrapper.h"
2
+
3
+ @interface CurrentPersonWrapper : _CurrentPersonWrapper {}
4
+ // Custom logic goes here.
5
+ @end
@@ -0,0 +1,15 @@
1
+ #import "CurrentPersonWrapper.h"
2
+
3
+
4
+ @interface CurrentPersonWrapper ()
5
+
6
+ // Private interface goes here.
7
+
8
+ @end
9
+
10
+
11
+ @implementation CurrentPersonWrapper
12
+
13
+ // Custom logic goes here.
14
+
15
+ @end
@@ -0,0 +1,5 @@
1
+ #import "_HealthDataWrapper.h"
2
+
3
+ @interface HealthDataWrapper : _HealthDataWrapper {}
4
+ // Custom logic goes here.
5
+ @end
@@ -0,0 +1,15 @@
1
+ #import "HealthDataWrapper.h"
2
+
3
+
4
+ @interface HealthDataWrapper ()
5
+
6
+ // Private interface goes here.
7
+
8
+ @end
9
+
10
+
11
+ @implementation HealthDataWrapper
12
+
13
+ // Custom logic goes here.
14
+
15
+ @end
@@ -0,0 +1,43 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2
+ <model userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="6220.17" systemVersion="13E28" minimumToolsVersion="Xcode 4.3" macOSVersion="Automatic" iOSVersion="Automatic">
3
+ <entity name="BloodPressure" representedClassName="BloodPressure" parentEntity="HealthData" syncable="YES">
4
+ <attribute name="bloodPressure" optional="YES" attributeType="Integer 32" defaultValueString="0" syncable="YES"/>
5
+ </entity>
6
+ <entity name="CurrentPerson" representedClassName="CurrentPerson" syncable="YES">
7
+ <relationship name="person" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Person" inverseName="currentPeron" inverseEntity="Person" syncable="YES"/>
8
+ </entity>
9
+ <entity name="HealthData" representedClassName="HealthData" syncable="YES">
10
+ <attribute name="height" optional="YES" attributeType="Integer 32" defaultValueString="0" syncable="YES"/>
11
+ <attribute name="timeStamp" optional="YES" attributeType="Date" syncable="YES"/>
12
+ <attribute name="weight" optional="YES" attributeType="Integer 32" defaultValueString="0" syncable="YES"/>
13
+ <relationship name="person" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Person" inverseName="healthData" inverseEntity="Person" syncable="YES"/>
14
+ </entity>
15
+ <entity name="NotHaveCusttomClassName" syncable="YES"/>
16
+ <entity name="NotSameCusstomClassName" representedClassName="NotSame" isAbstract="YES" syncable="YES">
17
+ <attribute name="boolean" optional="YES" attributeType="Boolean" syncable="YES"/>
18
+ <attribute name="data" optional="YES" attributeType="Binary" syncable="YES"/>
19
+ <attribute name="date" optional="YES" attributeType="Date" syncable="YES"/>
20
+ <attribute name="decimal" optional="YES" attributeType="Decimal" defaultValueString="0.0" syncable="YES"/>
21
+ <attribute name="double" optional="YES" attributeType="Double" defaultValueString="0.0" syncable="YES"/>
22
+ <attribute name="float" optional="YES" attributeType="Float" defaultValueString="0.0" syncable="YES"/>
23
+ <attribute name="int16" optional="YES" attributeType="Integer 16" defaultValueString="0" syncable="YES"/>
24
+ <attribute name="int32" optional="YES" attributeType="Integer 32" defaultValueString="0" syncable="YES"/>
25
+ <attribute name="int64" optional="YES" attributeType="Integer 64" defaultValueString="0" syncable="YES"/>
26
+ <attribute name="string" optional="YES" attributeType="String" syncable="YES"/>
27
+ <attribute name="transformable" optional="YES" attributeType="Transformable" syncable="YES"/>
28
+ </entity>
29
+ <entity name="Person" representedClassName="Person" syncable="YES">
30
+ <attribute name="birthday" optional="YES" attributeType="Date" syncable="YES"/>
31
+ <attribute name="name" optional="YES" attributeType="String" syncable="YES"/>
32
+ <relationship name="currentPeron" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="CurrentPerson" inverseName="person" inverseEntity="CurrentPerson" syncable="YES"/>
33
+ <relationship name="healthData" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="HealthData" inverseName="person" inverseEntity="HealthData" syncable="YES"/>
34
+ </entity>
35
+ <elements>
36
+ <element name="BloodPressure" positionX="-27" positionY="63" width="128" height="60"/>
37
+ <element name="CurrentPerson" positionX="-63" positionY="-18" width="128" height="60"/>
38
+ <element name="HealthData" positionX="-36" positionY="9" width="128" height="105"/>
39
+ <element name="Person" positionX="-54" positionY="-9" width="128" height="105"/>
40
+ <element name="NotHaveCusttomClassName" positionX="-54" positionY="36" width="128" height="43"/>
41
+ <element name="NotSameCusstomClassName" positionX="-45" positionY="45" width="128" height="210"/>
42
+ </elements>
43
+ </model>
@@ -0,0 +1,5 @@
1
+ #import "_NotSameWrapper.h"
2
+
3
+ @interface NotSameWrapper : _NotSameWrapper {}
4
+ // Custom logic goes here.
5
+ @end
@@ -0,0 +1,15 @@
1
+ #import "NotSameWrapper.h"
2
+
3
+
4
+ @interface NotSameWrapper ()
5
+
6
+ // Private interface goes here.
7
+
8
+ @end
9
+
10
+
11
+ @implementation NotSameWrapper
12
+
13
+ // Custom logic goes here.
14
+
15
+ @end
@@ -0,0 +1,5 @@
1
+ #import "_PersonWrapper.h"
2
+
3
+ @interface PersonWrapper : _PersonWrapper {}
4
+ // Custom logic goes here.
5
+ @end
@@ -0,0 +1,15 @@
1
+ #import "PersonWrapper.h"
2
+
3
+
4
+ @interface PersonWrapper ()
5
+
6
+ // Private interface goes here.
7
+
8
+ @end
9
+
10
+
11
+ @implementation PersonWrapper
12
+
13
+ // Custom logic goes here.
14
+
15
+ @end
@@ -0,0 +1,14 @@
1
+ #import "HealthDataWrapper.h"
2
+
3
+ @class BloodPressure;
4
+
5
+
6
+ @interface _BloodPressureWrapper : HealthDataWrapper
7
+ @property(nonatomic, strong) NSNumber *bloodPressure;
8
+
9
+ - (BloodPressure *)entity;
10
+
11
+ - (instancetype)initWithEntity:(BloodPressure *)entity;
12
+
13
+ - (void)updateEntity:(BloodPressure *)entity;
14
+ @end
@@ -0,0 +1,25 @@
1
+ #import "_BloodPressureWrapper.h"
2
+ #import "BloodPressure.h"
3
+
4
+ @interface _BloodPressureWrapper ()
5
+ @end
6
+
7
+ @implementation _BloodPressureWrapper {
8
+ }
9
+ - (BloodPressure *)entity {
10
+ return (BloodPressure *) [super entity];
11
+ }
12
+
13
+ - (instancetype)initWithEntity:(BloodPressure *)entity {
14
+ self = [super initWithEntity:entity];
15
+ if (self) {
16
+ self.bloodPressure = entity.bloodPressure;
17
+ }
18
+ return self;
19
+ }
20
+
21
+ - (void)updateEntity:(BloodPressure *)entity {
22
+ [super updateEntity:entity];
23
+ entity.bloodPressure = self.bloodPressure;
24
+ }
25
+ @end
@@ -0,0 +1,13 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ @class CurrentPerson;
4
+
5
+
6
+ @interface _CurrentPersonWrapper : NSObject
7
+
8
+ @property(readonly, strong, nonatomic) CurrentPerson *entity;
9
+
10
+ - (instancetype)initWithEntity:(CurrentPerson *)entity;
11
+
12
+ - (void)updateEntity:(CurrentPerson *)entity;
13
+ @end
@@ -0,0 +1,19 @@
1
+ #import "_CurrentPersonWrapper.h"
2
+ #import "CurrentPerson.h"
3
+
4
+ @interface _CurrentPersonWrapper ()
5
+ @end
6
+
7
+ @implementation _CurrentPersonWrapper {
8
+ }
9
+ - (instancetype)initWithEntity:(CurrentPerson *)entity {
10
+ self = [super init];
11
+ if (self) {
12
+ _entity = entity;
13
+ }
14
+ return self;
15
+ }
16
+
17
+ - (void)updateEntity:(CurrentPerson *)entity {
18
+ }
19
+ @end
@@ -0,0 +1,16 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ @class HealthData;
4
+
5
+
6
+ @interface _HealthDataWrapper : NSObject
7
+ @property(nonatomic, strong) NSNumber *height;
8
+ @property(nonatomic, strong) NSDate *timeStamp;
9
+ @property(nonatomic, strong) NSNumber *weight;
10
+
11
+ @property(readonly, strong, nonatomic) HealthData *entity;
12
+
13
+ - (instancetype)initWithEntity:(HealthData *)entity;
14
+
15
+ - (void)updateEntity:(HealthData *)entity;
16
+ @end
@@ -0,0 +1,25 @@
1
+ #import "_HealthDataWrapper.h"
2
+ #import "HealthData.h"
3
+
4
+ @interface _HealthDataWrapper ()
5
+ @end
6
+
7
+ @implementation _HealthDataWrapper {
8
+ }
9
+ - (instancetype)initWithEntity:(HealthData *)entity {
10
+ self = [super init];
11
+ if (self) {
12
+ _entity = entity;
13
+ self.height = entity.height;
14
+ self.timeStamp = entity.timeStamp;
15
+ self.weight = entity.weight;
16
+ }
17
+ return self;
18
+ }
19
+
20
+ - (void)updateEntity:(HealthData *)entity {
21
+ entity.height = self.height;
22
+ entity.timeStamp = self.timeStamp;
23
+ entity.weight = self.weight;
24
+ }
25
+ @end
@@ -0,0 +1,24 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ @class NotSame;
4
+
5
+
6
+ @interface _NotSameWrapper : NSObject
7
+ @property(nonatomic, strong) NSNumber *boolean;
8
+ @property(nonatomic, strong) NSData *data;
9
+ @property(nonatomic, strong) NSDate *date;
10
+ @property(nonatomic, strong) NSDecimalNumber *decimal;
11
+ @property(nonatomic, strong) NSNumber *double;
12
+ @property(nonatomic, strong) NSNumber *float;
13
+ @property(nonatomic, strong) NSNumber *int16;
14
+ @property(nonatomic, strong) NSNumber *int32;
15
+ @property(nonatomic, strong) NSNumber *int64;
16
+ @property(nonatomic, strong) NSString *string;
17
+ @property(nonatomic, strong) id transformable;
18
+
19
+ @property(readonly, strong, nonatomic) NotSame *entity;
20
+
21
+ - (instancetype)initWithEntity:(NotSame *)entity;
22
+
23
+ - (void)updateEntity:(NotSame *)entity;
24
+ @end
@@ -0,0 +1,41 @@
1
+ #import "_NotSameWrapper.h"
2
+ #import "NotSame.h"
3
+
4
+ @interface _NotSameWrapper ()
5
+ @end
6
+
7
+ @implementation _NotSameWrapper {
8
+ }
9
+ - (instancetype)initWithEntity:(NotSame *)entity {
10
+ self = [super init];
11
+ if (self) {
12
+ _entity = entity;
13
+ self.boolean = entity.boolean;
14
+ self.data = entity.data;
15
+ self.date = entity.date;
16
+ self.decimal = entity.decimal;
17
+ self.double = entity.double;
18
+ self.float = entity.float;
19
+ self.int16 = entity.int16;
20
+ self.int32 = entity.int32;
21
+ self.int64 = entity.int64;
22
+ self.string = entity.string;
23
+ self.transformable = entity.transformable;
24
+ }
25
+ return self;
26
+ }
27
+
28
+ - (void)updateEntity:(NotSame *)entity {
29
+ entity.boolean = self.boolean;
30
+ entity.data = self.data;
31
+ entity.date = self.date;
32
+ entity.decimal = self.decimal;
33
+ entity.double = self.double;
34
+ entity.float = self.float;
35
+ entity.int16 = self.int16;
36
+ entity.int32 = self.int32;
37
+ entity.int64 = self.int64;
38
+ entity.string = self.string;
39
+ entity.transformable = self.transformable;
40
+ }
41
+ @end
@@ -0,0 +1,15 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ @class Person;
4
+
5
+
6
+ @interface _PersonWrapper : NSObject
7
+ @property(nonatomic, strong) NSDate *birthday;
8
+ @property(nonatomic, strong) NSString *name;
9
+
10
+ @property(readonly, strong, nonatomic) Person *entity;
11
+
12
+ - (instancetype)initWithEntity:(Person *)entity;
13
+
14
+ - (void)updateEntity:(Person *)entity;
15
+ @end
@@ -0,0 +1,23 @@
1
+ #import "_PersonWrapper.h"
2
+ #import "Person.h"
3
+
4
+ @interface _PersonWrapper ()
5
+ @end
6
+
7
+ @implementation _PersonWrapper {
8
+ }
9
+ - (instancetype)initWithEntity:(Person *)entity {
10
+ self = [super init];
11
+ if (self) {
12
+ _entity = entity;
13
+ self.birthday = entity.birthday;
14
+ self.name = entity.name;
15
+ }
16
+ return self;
17
+ }
18
+
19
+ - (void)updateEntity:(Person *)entity {
20
+ entity.birthday = self.birthday;
21
+ entity.name = self.name;
22
+ }
23
+ @end
@@ -0,0 +1,3 @@
1
+ module Wara
2
+ VERSION = "1.0.0"
3
+ end
data/lib/wara.rb ADDED
@@ -0,0 +1,85 @@
1
+ require "wara/version"
2
+ require 'kconv'
3
+ require 'fileutils'
4
+ require 'rexml/document'
5
+
6
+ module Wara
7
+ class Core
8
+ def create(model, to)
9
+ to = File.dirname(model) unless to
10
+ @xml = REXML::Document.new(open(File.expand_path("contents", model)))
11
+ @objects = @xml.get_elements('model/entity')
12
+ @entities = @objects.map{ |o|
13
+ representedClassName = o.attribute("representedClassName")
14
+ parentEntity = o.attribute("parentEntity")
15
+ a = o.get_elements("attribute")
16
+ {
17
+ "name" => o.attribute("name").value,
18
+ "representedClassName"=>representedClassName ? representedClassName.value : nil,
19
+ "parentEntity"=>parentEntity ? parentEntity.value : nil,
20
+ "attributes"=>a.inject({}) {|s, o|
21
+ s.merge({ o.attribute("name").value => o.attribute("attributeType").value, })
22
+ },
23
+ }
24
+ }.select{|s| s["representedClassName"]}
25
+ FileUtils.mkdir_p(to) unless FileTest.exist?(to)
26
+ @entities.map {|e|
27
+ file_name = e["representedClassName"]
28
+ hw = header(e)
29
+ File.write( File.expand_path("_#{file_name}Wrapper.h", to), hw)
30
+ mw = implementation(e)
31
+ File.write( File.expand_path("_#{file_name}Wrapper.m", to), mw)
32
+ custom_header_name = File.expand_path("#{file_name}Wrapper.h", to)
33
+ File.write( custom_header_name, custom_header(file_name)) unless FileTest.exist?(custom_header_name)
34
+ custom_implementation_name = File.expand_path("#{file_name}Wrapper.m", to)
35
+ File.write( custom_implementation_name, custom_implementation(file_name)) unless FileTest.exist?(custom_implementation_name)
36
+ }
37
+ end
38
+ def header(e)
39
+ name = e["representedClassName"]
40
+ entity = e["parentEntity"]
41
+ import = entity ? "\#import \"#{entity}Wrapper.h\"\n" : "#import <Foundation/Foundation.h>\n"
42
+ parentEntity = entity ? "#{entity}Wrapper" : "NSObject"
43
+ getter = entity ? "- (#{name} *)entity;\n" : "@property(readonly, strong, nonatomic) #{name} *entity;\n"
44
+ "#{import}\n@class #{name};\n\n\n@interface _#{name}Wrapper : #{parentEntity}\n" +
45
+ e["attributes"].map {|k, v|
46
+ "@property(nonatomic, strong) #{entityType(v)}#{k};\n"
47
+ }.inject("") {|s, v| s + v} + "\n#{getter}\n- (instancetype)initWithEntity:(#{name} *)entity;\n\n- (void)updateEntity:(#{name} *)entity;\n@end\n"
48
+ end
49
+ def implementation(e)
50
+ name = e["representedClassName"]
51
+ init = e["parentEntity"] ? "[super initWithEntity:entity]" : "[super init]"
52
+ getter = e["parentEntity"] ? "- (BloodPressure *)entity {\n return (BloodPressure *) [super entity];\n}\n\n" : ""
53
+ first = e["parentEntity"] ? "" : " _entity = entity;\n"
54
+ update = e["parentEntity"] ? " [super updateEntity:entity];\n" : ""
55
+ "#import \"_#{name}Wrapper.h\"\n#import \"#{name}.h\"\n\n@interface _#{name}Wrapper ()\n@end\n\n@implementation _#{name}Wrapper {\n}\n#{getter}- (instancetype)initWithEntity:(#{name} *)entity {\n self = #{init};\n if (self) {\n#{first}" +
56
+ e["attributes"].map {|k, v|
57
+ " " * 8 + "self.#{k} = entity.#{k};\n"
58
+ }.inject("") {|s, v| s + v} + " }\n return self;\n}\n\n- (void)updateEntity:(#{name} *)entity {\n#{update}" +
59
+ e["attributes"].map {|k, v|
60
+ " " * 4 + "entity.#{k} = self.#{k};\n"
61
+ }.inject("") {|s, v| s + v} + "}\n@end\n"
62
+ end
63
+ def custom_header(file_name)
64
+ "#import \"_#{file_name}Wrapper.h\"\n\n@interface #{file_name}Wrapper : _#{file_name}Wrapper {}\n// Custom logic goes here.\n@end\n"
65
+ end
66
+ def custom_implementation(file_name)
67
+ "#import \"#{file_name}Wrapper.h\"\n\n\n@interface #{file_name}Wrapper ()\n\n// Private interface goes here.\n\n@end\n\n\n@implementation #{file_name}Wrapper\n\n// Custom logic goes here.\n\n@end\n"
68
+ end
69
+ def entityType(value)
70
+ {
71
+ "Boolean"=>"NSNumber *",
72
+ "Binary"=>"NSData *",
73
+ "Date"=>"NSDate *",
74
+ "Decimal"=>"NSDecimalNumber *",
75
+ "Double"=>"NSNumber *",
76
+ "Float"=>"NSNumber *",
77
+ "Integer 16"=>"NSNumber *",
78
+ "Integer 32"=>"NSNumber *",
79
+ "Integer 64"=>"NSNumber *",
80
+ "String"=>"NSString *",
81
+ "Transformable"=>"id ",
82
+ }[value]
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,5 @@
1
+ #import "_BloodPressureWrapper.h"
2
+
3
+ @interface BloodPressureWrapper : _BloodPressureWrapper {}
4
+ // Custom logic goes here.
5
+ @end
@@ -0,0 +1,15 @@
1
+ #import "BloodPressureWrapper.h"
2
+
3
+
4
+ @interface BloodPressureWrapper ()
5
+
6
+ // Private interface goes here.
7
+
8
+ @end
9
+
10
+
11
+ @implementation BloodPressureWrapper
12
+
13
+ // Custom logic goes here.
14
+
15
+ @end
@@ -0,0 +1,5 @@
1
+ #import "_CurrentPersonWrapper.h"
2
+
3
+ @interface CurrentPersonWrapper : _CurrentPersonWrapper {}
4
+ // Custom logic goes here.
5
+ @end
@@ -0,0 +1,15 @@
1
+ #import "CurrentPersonWrapper.h"
2
+
3
+
4
+ @interface CurrentPersonWrapper ()
5
+
6
+ // Private interface goes here.
7
+
8
+ @end
9
+
10
+
11
+ @implementation CurrentPersonWrapper
12
+
13
+ // Custom logic goes here.
14
+
15
+ @end
@@ -0,0 +1,5 @@
1
+ #import "_HealthDataWrapper.h"
2
+
3
+ @interface HealthDataWrapper : _HealthDataWrapper {}
4
+ // Custom logic goes here.
5
+ @end