restkit-generate 0.1.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/bin/restkit-generate +38 -0
- data/lib/generator.rb +5 -0
- data/lib/generator/common.rb +46 -0
- data/lib/generator/header.rb +30 -0
- data/lib/generator/mk.rb +56 -0
- metadata +51 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
|
|
4
|
+
$LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
|
|
5
|
+
|
|
6
|
+
require 'optparse'
|
|
7
|
+
require 'generator'
|
|
8
|
+
|
|
9
|
+
options = {}
|
|
10
|
+
|
|
11
|
+
optparse = OptionParser.new do |opts|
|
|
12
|
+
opts.banner = "Usage: restkit-generate model NAME [field:type field:type] [options]"
|
|
13
|
+
|
|
14
|
+
opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
|
|
15
|
+
options[:verbose] = v
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
begin
|
|
20
|
+
optparse.parse!
|
|
21
|
+
rescue OptionParser::InvalidOption, OptionParser::MissingArgument
|
|
22
|
+
puts optparse
|
|
23
|
+
exit
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
Generator.configure(options)
|
|
27
|
+
|
|
28
|
+
begin
|
|
29
|
+
Generator.validate!
|
|
30
|
+
rescue ArgumentError => error
|
|
31
|
+
puts error
|
|
32
|
+
exit
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
Generator::Header.make
|
|
36
|
+
Generator::MakeFile.make
|
|
37
|
+
|
|
38
|
+
#puts Generator::complile_header("test", "test")
|
data/lib/generator.rb
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module Generator
|
|
2
|
+
@@config = {}
|
|
3
|
+
@@properties = {}
|
|
4
|
+
|
|
5
|
+
def self.configure(options)
|
|
6
|
+
@@config = options
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.config
|
|
10
|
+
@@config
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.properties
|
|
14
|
+
@@properties
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.validate!
|
|
18
|
+
type = ARGV[0]
|
|
19
|
+
if type != "model"
|
|
20
|
+
raise ArgumentError, "Unknown type '#{type}'.", caller
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
@@config[:model_name] = ARGV[1]
|
|
24
|
+
if @@config[:model_name].nil?
|
|
25
|
+
raise ArgumentError, "Model name can't be empty.", caller
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
ARGV.shift(2)
|
|
29
|
+
if ARGV.nil?
|
|
30
|
+
raise ArgumentError, "No input parameters defined.", caller
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
ARGV.each do |arg|
|
|
34
|
+
original_name = arg.split(":")[0]
|
|
35
|
+
a = arg.gsub(/_([a-z])/) do |word|
|
|
36
|
+
word.gsub(/_/, "").capitalize
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
name = a.split(":")[0]
|
|
40
|
+
name = @@config[:model_name].downcase+"Id" if name == "id"
|
|
41
|
+
type = a.split(":")[1]
|
|
42
|
+
|
|
43
|
+
@@properties[name] = {:type => type, :original_name => original_name}
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Generator
|
|
2
|
+
|
|
3
|
+
module Header
|
|
4
|
+
|
|
5
|
+
def self.make
|
|
6
|
+
props = []
|
|
7
|
+
model_name = Generator.config[:model_name]
|
|
8
|
+
Generator.properties.each{|key, value| props << "@property (nonatomic, #{value[:type] == "NSString" ? "copy" : "strong"}) #{value[:type]} *#{key};" }
|
|
9
|
+
|
|
10
|
+
header =
|
|
11
|
+
"//\n"+
|
|
12
|
+
"// Base#{model_name}.h\n"+
|
|
13
|
+
"//\n\n"+
|
|
14
|
+
"#import <Foundation/Foundation.h>\n"+
|
|
15
|
+
"#import <RestKit/RestKit.h>\n\n"+
|
|
16
|
+
"@interface Base#{model_name} : NSObject <NSCoding>\n\n"+
|
|
17
|
+
props.join("\n")+"\n\n"+
|
|
18
|
+
"+ (RKObjectMapping *)objectMapping;\n\n"+
|
|
19
|
+
"@end"
|
|
20
|
+
|
|
21
|
+
if Generator.config[:verbose]
|
|
22
|
+
puts header
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
File.open("Base#{model_name}.h", 'w') {|f| f.write(header) }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
data/lib/generator/mk.rb
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
module Generator
|
|
2
|
+
|
|
3
|
+
module MakeFile
|
|
4
|
+
|
|
5
|
+
def self.make
|
|
6
|
+
model_name = Generator.config[:model_name]
|
|
7
|
+
synthesize = []
|
|
8
|
+
mapping = []
|
|
9
|
+
decoders = []
|
|
10
|
+
encoders = []
|
|
11
|
+
Generator.properties.each{|key, value| synthesize << key }
|
|
12
|
+
Generator.properties.each{|key, value| mapping << " @\"#{value[:original_name]}\", @\"#{key}\"" }
|
|
13
|
+
Generator.properties.each{|key, value| decoders << " [coder encodeObject:self.#{key} forKey:@\"#{key}\"];" }
|
|
14
|
+
Generator.properties.each{|key, value| encoders << " self.#{key} = [coder decodeObjectForKey:@\"#{key}\"];" }
|
|
15
|
+
|
|
16
|
+
source =
|
|
17
|
+
"//\n"+
|
|
18
|
+
"// Base#{model_name}.m\n"+
|
|
19
|
+
"//\n\n"+
|
|
20
|
+
|
|
21
|
+
"#import \"Base#{model_name}.h\n\n"+
|
|
22
|
+
"@implementation Base#{model_name}\n\n"+
|
|
23
|
+
"@synthesize "+synthesize.join(", ")+";\n\n"+
|
|
24
|
+
"+ (RKObjectMapping *)objectMapping\n"+
|
|
25
|
+
"{\n"+
|
|
26
|
+
" RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[self class]];\n"+
|
|
27
|
+
" [mapping mapKeyPathsToAttributes:\n"+
|
|
28
|
+
mapping.join(",\n")+", nil];\n"+
|
|
29
|
+
"}\n\n"+
|
|
30
|
+
|
|
31
|
+
"- (id)initWithCoder:(NSCoder *)coder\n"+
|
|
32
|
+
"{\n"+
|
|
33
|
+
" self = [[Base#{model_name} alloc] init];\n"+
|
|
34
|
+
" if (self) {\n"+
|
|
35
|
+
encoders.join("\n")+"\n"+
|
|
36
|
+
" }\n"+
|
|
37
|
+
" return self;\n"+
|
|
38
|
+
"}\n\n"+
|
|
39
|
+
|
|
40
|
+
"- (void)encodeWithCoder:(NSCoder *)coder\n"+
|
|
41
|
+
"{\n"+
|
|
42
|
+
decoders.join("\n")+"\n"+
|
|
43
|
+
"}\n\n"+
|
|
44
|
+
|
|
45
|
+
"@end"
|
|
46
|
+
|
|
47
|
+
if Generator.config[:verbose]
|
|
48
|
+
puts source
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
File.open("Base#{model_name}.m", 'w') {|f| f.write(source) }
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: restkit-generate
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Roman Efimov
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2012-03-24 00:00:00.000000000Z
|
|
13
|
+
dependencies: []
|
|
14
|
+
description: A model generator for iOS RestKit (Rails-like), ARC compliant
|
|
15
|
+
email: romefimov@gmail.com
|
|
16
|
+
executables:
|
|
17
|
+
- restkit-generate
|
|
18
|
+
extensions: []
|
|
19
|
+
extra_rdoc_files: []
|
|
20
|
+
files:
|
|
21
|
+
- bin/restkit-generate
|
|
22
|
+
- lib/generator.rb
|
|
23
|
+
- lib/generator/common.rb
|
|
24
|
+
- lib/generator/header.rb
|
|
25
|
+
- lib/generator/mk.rb
|
|
26
|
+
homepage: https://github.com/romaonthego
|
|
27
|
+
licenses: []
|
|
28
|
+
post_install_message:
|
|
29
|
+
rdoc_options:
|
|
30
|
+
- --charset=UTF-8
|
|
31
|
+
require_paths:
|
|
32
|
+
- lib
|
|
33
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
34
|
+
none: false
|
|
35
|
+
requirements:
|
|
36
|
+
- - ! '>='
|
|
37
|
+
- !ruby/object:Gem::Version
|
|
38
|
+
version: '0'
|
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
40
|
+
none: false
|
|
41
|
+
requirements:
|
|
42
|
+
- - ! '>='
|
|
43
|
+
- !ruby/object:Gem::Version
|
|
44
|
+
version: '0'
|
|
45
|
+
requirements: []
|
|
46
|
+
rubyforge_project:
|
|
47
|
+
rubygems_version: 1.8.11
|
|
48
|
+
signing_key:
|
|
49
|
+
specification_version: 3
|
|
50
|
+
summary: A model generator for iOS RestKit (Rails-like), ARC compliant
|
|
51
|
+
test_files: []
|