jaspion-kilza 1.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,74 @@
1
+ require 'date'
2
+
3
+ module Jaspion
4
+ module Kilza
5
+ class Objc
6
+ class Class
7
+ include Jaspion::Kilza::Class
8
+
9
+ def sources
10
+ [code('objc', 'h'), code('objc', 'm')]
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ module Jaspion
18
+ module Kilza
19
+ # Objective-C Language parser
20
+ class Objc
21
+ include Jaspion::Kilza::Language
22
+
23
+ def initialize(json_string)
24
+ super(json_string)
25
+
26
+ @reserved_delimiter = '_my'
27
+
28
+ @reserved_words = %w(
29
+ auto break case char const continue,
30
+ class default do double else enum extern float for,
31
+ goto if id implementation inline int interface long,
32
+ new nonatomic property protocol readonly readwrite register,
33
+ restrict retain return short signed sizeof static strong,
34
+ struct switch typedef union unsafe_unretained unsigned void,
35
+ volatile weak while _bool _complex _imaginary sel imp,
36
+ bool nil yes no self super __strong __weak oneway,
37
+ in out inout bycopy byref
38
+ )
39
+
40
+ @types = {
41
+ 'nilclass' => 'id',
42
+ 'string' => 'NSString *',
43
+ 'fixnum' => 'NSNumber *',
44
+ 'float' => 'NSNumber *',
45
+ 'falseclass' => 'NSNumber *',
46
+ 'trueclass' => 'NSNumber *',
47
+ 'hash' => 'NSObject *'
48
+ }
49
+
50
+ @equal_keys = %w(id identifier uid)
51
+ end
52
+
53
+ def clazz(name)
54
+ Jaspion::Kilza::Objc::Class.new(name)
55
+ end
56
+
57
+ def classes(class_name)
58
+ super(class_name)
59
+
60
+ @classes.each do |cl|
61
+ cl.properties.each do |pr|
62
+ if pr.object? || (pr.array? && pr.null?)
63
+ pr.type = pr.name.capitalize + ' *'
64
+ cl.imports.push("#import \"#{pr.name.capitalize}.h\"")
65
+ end
66
+
67
+ pr.type = 'NSMutableArray *' if pr.array?
68
+ pr.type = @types[pr.type] unless @types[pr.type].nil?
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,29 @@
1
+ //
2
+ // <%= @name %>.h
3
+ //
4
+ // Created on <%= Time.now.strftime("%Y-%m-%d") %>
5
+ // Copyright (c) <%= Time.now.strftime("%Y") %>. All rights reserved.
6
+ //
7
+
8
+ #import <Foundation/Foundation.h>
9
+
10
+ <% for @property in @properties %>
11
+ <% if @property.object? && !@property.array? %>
12
+ @class <%= @property.name.capitalize %>;
13
+ <% end %>
14
+ <% end %>
15
+
16
+ @interface <%= @name %> : NSObject <NSCoding, NSCopying>
17
+
18
+ <% for @property in @properties %>
19
+ @property (nonatomic, strong) <%= @property.type %> <%= @property.name %>;
20
+ <% end %>
21
+
22
+ + (<%= @name %> *)modelWithDictionary:(NSDictionary *)dict;
23
+ + (<%= @name %> *)modelWithString:(NSString *)json;
24
+
25
+ - (instancetype)initWithString:(NSString *)json;
26
+ - (instancetype)initWithDictionary:(NSDictionary *)dict;
27
+ - (NSDictionary *)dictionaryRepresentation;
28
+
29
+ @end
@@ -0,0 +1,162 @@
1
+ //
2
+ // <%= @name %>.m
3
+ //
4
+ // Created on <%= Time.now.strftime("%Y-%m-%d") %>
5
+ // Copyright (c) <%= Time.now.strftime("%Y") %>. All rights reserved.
6
+ //
7
+
8
+ #import "<%= @name %>.h"
9
+ <% for @import in @imports %>
10
+ <%= @import %>
11
+ <% end %>
12
+
13
+ // Original names
14
+ <% for @property in @properties %>
15
+ NSString * const k<%= @name %><%= @property.name.capitalize %> = @"<%= @property.original_name %>";
16
+ <% end %>
17
+
18
+ @interface <%= @name %> ()
19
+
20
+ - (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
21
+
22
+ @end
23
+
24
+ @implementation <%= @name %>
25
+
26
+ + (<%= @name %> *)modelWithDictionary:(NSDictionary *)dict
27
+ {
28
+ <%= @name %> *instance = [[<%= @name %> alloc] initWithDictionary:dict];
29
+ return instance;
30
+ }
31
+
32
+ + (<%= @name %> *)modelWithString:(NSString *)json
33
+ {
34
+ <%= @name %> *instance = [[<%= @name %> alloc] initWithString:json];
35
+ return instance;
36
+ }
37
+
38
+ - (instancetype)initWithString:(NSString *)json
39
+ {
40
+ self = [super init];
41
+
42
+ NSError *jsonError = nil;
43
+ NSData *objectData = [json dataUsingEncoding:NSUTF8StringEncoding];
44
+ NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:objectData
45
+ options:NSJSONReadingMutableContainers
46
+ error:&jsonError];
47
+ if (!jsonError)
48
+ self = [self initWithDictionary:dict];
49
+
50
+ return self;
51
+ }
52
+
53
+ - (instancetype)initWithDictionary:(NSDictionary *)dict
54
+ {
55
+ self = [super init];
56
+
57
+ if (self && [dict isKindOfClass:[NSDictionary class]])
58
+ {
59
+ <% for @property in @properties %>
60
+ <% if @property.object? || (@property.null? && @property.array?) %>
61
+ NSObject *obj<%= @property.name.capitalize %> = [dict objectForKey:k<%= @name %><%= @property.name.capitalize %>];
62
+ <% if @property.array? %>
63
+ if ([obj<%= @property.name.capitalize %> isKindOfClass:[NSArray class]])
64
+ {
65
+ NSMutableArray *list<%= @property.name.capitalize %> = [NSMutableArray array];
66
+ for (NSDictionary *item in (NSArray *)obj<%= @property.name.capitalize %>) {
67
+ if ([item isKindOfClass:[NSDictionary class]]) {
68
+ [list<%= @property.name.capitalize %> addObject:[<%= @property.name.capitalize %> modelWithDictionary:(NSDictionary *)item]];
69
+ }
70
+ }
71
+ self.<%= @property.name %> = list<%= @property.name.capitalize %>;
72
+ }
73
+ <% else %>
74
+ {
75
+ self.<%= @property.name %> = [<%= @property.name.capitalize %> modelWithDictionary:(NSDictionary *)obj<%= @property.name.capitalize %>];
76
+ }
77
+ <% end %>
78
+ <% else %>
79
+ self.<%= @property.name %> = [self objectOrNilForKey:k<%= @name %><%= @property.name.capitalize %> fromDictionary:dict];
80
+ <% end %>
81
+ <% end %>
82
+ }
83
+ return self;
84
+ }
85
+
86
+ - (NSDictionary *)dictionaryRepresentation
87
+ {
88
+ NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
89
+
90
+ <% for @property in @properties %>
91
+ <% if @property.object? || (@property.null? && @property.array?) %>
92
+ <% if @property.array? %>
93
+ NSMutableArray *tempArray<%= @property.name.capitalize %> = [NSMutableArray array];
94
+ for (NSObject *subArray in self.<%= @property.name %>) {
95
+ if ([subArray respondsToSelector:@selector(dictionaryRepresentation)]) {
96
+ [tempArray<%= @property.name.capitalize %> addObject:[subArray performSelector:@selector(dictionaryRepresentation)]];
97
+ } else {
98
+ [tempArray<%= @property.name.capitalize %> addObject:subArray];
99
+ }
100
+ }
101
+ [mutableDict setValue:[NSArray arrayWithArray:tempArray<%= @property.name.capitalize %>] forKey:k<%= @name %><%= @property.name.capitalize %>];
102
+ <% else %>
103
+ if ([self.<%= @property.name %> respondsToSelector:@selector(dictionaryRepresentation)]) {
104
+ [mutableDict setValue:[self.<%= @property.name %> performSelector:@selector(dictionaryRepresentation)] forKey:k<%= @name %><%= @property.name.capitalize %>];
105
+ } else {
106
+ [mutableDict setValue:self.<%= @property.name %> forKey:k<%= @name %><%= @property.name.capitalize %>];
107
+ }
108
+ <% end %>
109
+ <% else %>
110
+ [mutableDict setValue:self.<%= @property.name %> forKey:k<%= @name %><%= @property.name.capitalize %>];
111
+ <% end %>
112
+ <% end %>
113
+
114
+ return [NSDictionary dictionaryWithDictionary:mutableDict];
115
+ }
116
+
117
+ - (NSString *)description
118
+ {
119
+ return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
120
+ }
121
+
122
+ #pragma mark - Helper Method
123
+ - (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict
124
+ {
125
+ id object = [dict objectForKey:aKey];
126
+ return [object isEqual:[NSNull null]] ? nil : object;
127
+ }
128
+
129
+ #pragma mark - NSCoding Methods
130
+
131
+ - (id)initWithCoder:(NSCoder *)aDecoder
132
+ {
133
+ self = [super init];
134
+
135
+ <% for @property in @properties %>
136
+ self.<%= @property.name %> = [aDecoder decodeObjectForKey:k<%= @name %><%= @property.name.capitalize %>];
137
+ <% end %>
138
+
139
+ return self;
140
+ }
141
+
142
+ - (void)encodeWithCoder:(NSCoder *)aCoder
143
+ {
144
+ <% for @property in @properties %>
145
+ [aCoder encodeObject:_<%= @property.name %> forKey:k<%= @name %><%= @property.name.capitalize %>];
146
+ <% end %>
147
+ }
148
+
149
+ - (id)copyWithZone:(NSZone *)zone
150
+ {
151
+ <%= @name %> *copy = [[<%= @name %> alloc] init];
152
+ if (copy)
153
+ {
154
+ <% for @property in @properties %>
155
+ copy.<%= @property.name %> = [self.<%= @property.name %> copyWithZone:zone];
156
+ <% end %>
157
+ }
158
+
159
+ return copy;
160
+ }
161
+
162
+ @end
@@ -0,0 +1,72 @@
1
+ module Jaspion
2
+ module Kilza
3
+ # Represents a single Class property
4
+ class Property
5
+ # Normalized property name
6
+ # Starts with _ or alphanumeric character
7
+ # and doesn't contain any special character
8
+ attr_accessor :name
9
+
10
+ # Original JSON property name
11
+ attr_accessor :original_name
12
+
13
+ # Ruby string type
14
+ # Can be object, fixnum, float, falseclass, trueclass and nilclass
15
+ attr_accessor :original_type
16
+
17
+ # Property type name
18
+ attr_accessor :type
19
+
20
+ # Indicates if the property represents an array of objects
21
+ attr_accessor :array
22
+ alias_method :array?, :array
23
+
24
+ # Indicates if the property should be used for comparing purposes
25
+ # Used to compare if one object is equal to another one
26
+ attr_accessor :key
27
+ alias_method :key?, :key
28
+
29
+ def initialize(name, type, array, key)
30
+ @name = Kilza.normalize(name)
31
+ @original_name = name
32
+ @type = type
33
+ @array = array
34
+ @key = key
35
+ @original_type = type
36
+ end
37
+
38
+ def object?
39
+ @original_type == 'hash'
40
+ end
41
+
42
+ def fixnum?
43
+ @original_type == 'fixnum'
44
+ end
45
+
46
+ def boolean?
47
+ @original_type == 'trueclass' || @original_type == 'falseclass'
48
+ end
49
+
50
+ def float?
51
+ @original_type == 'float'
52
+ end
53
+
54
+ def null?
55
+ @original_type == 'nilclass'
56
+ end
57
+
58
+ def ==(pr)
59
+ @name == pr.name
60
+ end
61
+
62
+ def to_s
63
+ {
64
+ name: @name,
65
+ original_name: @original_name,
66
+ type: @type,
67
+ array?: @array
68
+ }.to_s
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,12 @@
1
+ module Jaspion
2
+ module Kilza
3
+ # Represents one single source file
4
+ class Source
5
+ # The file name
6
+ attr_accessor :file_name
7
+
8
+ # The source code of the file
9
+ attr_accessor :source
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,6 @@
1
+ # Tranforms a JSON string into Objects
2
+ module Jaspion
3
+ module Kilza
4
+ VERSION = '1.0.8'
5
+ end
6
+ end
metadata ADDED
@@ -0,0 +1,197 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jaspion-kilza
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.8
5
+ platform: ruby
6
+ authors:
7
+ - Toshiro Sugii
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-04-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: coveralls
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: json
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: erubis
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: tty
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: pastel
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: "\n Ruby gem that can convert JSON strings in Objects.\n It supports
140
+ Objective-C and Java classes. Contribuition would be appreciate.\n "
141
+ email:
142
+ - rtoshiro@printwtf.com
143
+ executables:
144
+ - kilza
145
+ extensions: []
146
+ extra_rdoc_files: []
147
+ files:
148
+ - .coveralls.yml
149
+ - .gitignore
150
+ - .travis.yml
151
+ - CODE_OF_CONDUCT.md
152
+ - Gemfile
153
+ - LICENSE.txt
154
+ - README.md
155
+ - Rakefile
156
+ - bin/console
157
+ - bin/kilza
158
+ - bin/setup
159
+ - jaspion-kilza.gemspec
160
+ - lib/jaspion.rb
161
+ - lib/jaspion/kilza.rb
162
+ - lib/jaspion/kilza/class.rb
163
+ - lib/jaspion/kilza/language.rb
164
+ - lib/jaspion/kilza/language/java.rb
165
+ - lib/jaspion/kilza/language/java/java.erb
166
+ - lib/jaspion/kilza/language/objc.rb
167
+ - lib/jaspion/kilza/language/objc/h.erb
168
+ - lib/jaspion/kilza/language/objc/m.erb
169
+ - lib/jaspion/kilza/property.rb
170
+ - lib/jaspion/kilza/source.rb
171
+ - lib/jaspion/kilza/version.rb
172
+ homepage: https://github.com/Jaspion/Kilza
173
+ licenses:
174
+ - MIT
175
+ metadata:
176
+ allowed_push_host: https://rubygems.org
177
+ post_install_message:
178
+ rdoc_options: []
179
+ require_paths:
180
+ - lib
181
+ required_ruby_version: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - '>='
184
+ - !ruby/object:Gem::Version
185
+ version: '0'
186
+ required_rubygems_version: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - '>='
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
191
+ requirements: []
192
+ rubyforge_project:
193
+ rubygems_version: 2.4.6
194
+ signing_key:
195
+ specification_version: 4
196
+ summary: Parses JSON and generates objects into other languages
197
+ test_files: []