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.
@@ -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,5 @@
1
+ module Generator ; end
2
+
3
+ require 'generator/common'
4
+ require 'generator/header'
5
+ require 'generator/mk'
@@ -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
@@ -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: []