ios_generate_settings 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/ios_generate_settings +7 -0
- data/lib/ios_generate_settings.rb +43 -0
- data/lib/ios_generate_settings/ObjCProperty.rb +43 -0
- data/lib/ios_generate_settings/ObjCPropertyList.rb +53 -0
- data/lib/ios_generate_settings/ObjCPropertyReplacer.rb +34 -0
- data/lib/ios_generate_settings/templates/SettingsManager.h.template +16 -0
- data/lib/ios_generate_settings/templates/SettingsManager.m.template +44 -0
- metadata +71 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'ios_generate_settings/ObjCPropertyList'
|
2
|
+
require 'ios_generate_settings/ObjCPropertyReplacer'
|
3
|
+
|
4
|
+
class IOSGenerateSettings
|
5
|
+
attr_accessor :header
|
6
|
+
attr_accessor :source
|
7
|
+
attr_accessor :template_header
|
8
|
+
attr_accessor :template_source
|
9
|
+
attr_accessor :source_replacer
|
10
|
+
attr_accessor :header_replacer
|
11
|
+
attr_accessor :property_list
|
12
|
+
|
13
|
+
def initialize(args)
|
14
|
+
if args.count == 0
|
15
|
+
usage
|
16
|
+
else
|
17
|
+
self.header = "SettingsManager.h"
|
18
|
+
self.source = "SettingsManager.m"
|
19
|
+
template_path = File.expand_path(File.join(File.dirname(__FILE__), 'ios_generate_settings/templates'))
|
20
|
+
self.template_source = File.join(template_path, 'SettingsManager.m.template')
|
21
|
+
self.template_header = File.join(template_path, 'SettingsManager.h.template')
|
22
|
+
self.source_replacer = ObjCPropertyReplacer.new self.template_source, self.source
|
23
|
+
self.header_replacer = ObjCPropertyReplacer.new self.template_header, self.header
|
24
|
+
self.property_list = ObjCPropertyList.new args
|
25
|
+
end
|
26
|
+
end
|
27
|
+
def generate
|
28
|
+
self.header_replacer.replace("//string_constants", self.property_list.string_const)
|
29
|
+
self.header_replacer.replace("//property_declaration", self.property_list.declaration)
|
30
|
+
self.header_replacer.flush
|
31
|
+
|
32
|
+
self.source_replacer.replace("//property_implementation", self.property_list.implementation)
|
33
|
+
self.source_replacer.replace("//load_properties", self.property_list.loading)
|
34
|
+
self.source_replacer.replace("//release_properties", self.property_list.release)
|
35
|
+
self.source_replacer.flush
|
36
|
+
end
|
37
|
+
|
38
|
+
def usage
|
39
|
+
puts "Invalid parameters"
|
40
|
+
exit 1
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class ObjCProperty
|
2
|
+
attr_accessor :type # NSString, NSNumber, etc.
|
3
|
+
attr_accessor :name # accessor, like 'login', 'password'
|
4
|
+
attr_accessor :writeability # readonly, readwrite, :default => readwrite
|
5
|
+
attr_accessor :setter_semantic # assign, copy, retain, :default => retain
|
6
|
+
attr_accessor :atomicity # atomic, nonatomic, :default => nonatomic
|
7
|
+
|
8
|
+
def initialize(type, name, writeability = :readwrite, setter_semantic = :retain, atomicity = :nonatomic)
|
9
|
+
self.type = type
|
10
|
+
self.name = name
|
11
|
+
self.setter_semantic = setter_semantic
|
12
|
+
self.writeability = writeability
|
13
|
+
self.atomicity = atomicity
|
14
|
+
end
|
15
|
+
|
16
|
+
def print
|
17
|
+
puts "static NSString *const k#{name.capitalize} = @\"#{name}\";"
|
18
|
+
puts "@property (#{atomicity}, #{setter_semantic}, #{writeability}) #{type} *#{name};"
|
19
|
+
puts "@synthesize #{name};"
|
20
|
+
end
|
21
|
+
|
22
|
+
def declaration
|
23
|
+
"@property (#{atomicity}, #{setter_semantic}, #{writeability}) #{type} *#{name};"
|
24
|
+
end
|
25
|
+
def implementation
|
26
|
+
"@synthesize #{name};"
|
27
|
+
end
|
28
|
+
def string_const
|
29
|
+
"static NSString *const k#{name.capitalize} = @\"#{name}\";"
|
30
|
+
end
|
31
|
+
# NSUserDefaults *defaults = [NSUserDefaults stndardUserdefaults];
|
32
|
+
def loading
|
33
|
+
"self.#{name} = [defaults valueForKey:k#{name.capitalize}];"
|
34
|
+
end
|
35
|
+
def release
|
36
|
+
if setter_semantic.to_s == "assign"
|
37
|
+
""
|
38
|
+
else
|
39
|
+
"self.#{name} = nil;"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'ios_generate_settings/ObjCProperty'
|
2
|
+
class ObjCPropertyList
|
3
|
+
attr_accessor :properties
|
4
|
+
|
5
|
+
def initialize(args)
|
6
|
+
self.properties = []
|
7
|
+
args.each do | arg |
|
8
|
+
args = arg.split ':'
|
9
|
+
if args.count == 2
|
10
|
+
property = ObjCProperty.new(args[1], args[0])
|
11
|
+
self.properties << property
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def implementation
|
17
|
+
self.properties.map do | property |
|
18
|
+
"#{property.implementation}\n"
|
19
|
+
end.join ''
|
20
|
+
end
|
21
|
+
|
22
|
+
def declaration
|
23
|
+
self.properties.map do | property |
|
24
|
+
"#{property.declaration}\n"
|
25
|
+
end.join ''
|
26
|
+
end
|
27
|
+
|
28
|
+
def string_const
|
29
|
+
self.properties.map do | property |
|
30
|
+
"#{property.string_const}\n"
|
31
|
+
end.join ''
|
32
|
+
end
|
33
|
+
|
34
|
+
def loading
|
35
|
+
self.properties.map do | property |
|
36
|
+
"#{' '*8}#{property.loading}\n"
|
37
|
+
end.join ''
|
38
|
+
end
|
39
|
+
|
40
|
+
def release
|
41
|
+
self.properties.map do | property |
|
42
|
+
"#{' '*4}#{property.release}\n"
|
43
|
+
end.join ''
|
44
|
+
end
|
45
|
+
|
46
|
+
def print
|
47
|
+
printf self.string_const
|
48
|
+
printf self.declaration
|
49
|
+
printf self.implementation
|
50
|
+
printf self.loading
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class ObjCPropertyReplacer
|
2
|
+
attr_accessor :input_file
|
3
|
+
attr_accessor :output_file
|
4
|
+
attr_accessor :buffer
|
5
|
+
|
6
|
+
def initialize(input, output)
|
7
|
+
self.buffer = nil
|
8
|
+
self.input_file = input
|
9
|
+
self.output_file = output
|
10
|
+
end
|
11
|
+
|
12
|
+
def replace(src, dst)
|
13
|
+
self.buffer = self.input_buffer
|
14
|
+
self.buffer = self.buffer.gsub(src, "#{src}\n#{dst}")
|
15
|
+
end
|
16
|
+
|
17
|
+
def flush
|
18
|
+
file = File.open(self.output_file, 'w')
|
19
|
+
file.write self.buffer
|
20
|
+
file.close
|
21
|
+
end
|
22
|
+
|
23
|
+
def input_buffer
|
24
|
+
if self.buffer
|
25
|
+
return self.buffer
|
26
|
+
end
|
27
|
+
path = self.input_file
|
28
|
+
if File.exists? self.output_file
|
29
|
+
path = self.output_file
|
30
|
+
end
|
31
|
+
File.read path
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
//
|
2
|
+
// SettingsManager.h
|
3
|
+
// This file generated by ios_generate_settings gem
|
4
|
+
// https://github.com/AlexDenisov/ios_generate_settings
|
5
|
+
//
|
6
|
+
|
7
|
+
#import <Foundation/Foundation.h>
|
8
|
+
|
9
|
+
//string_constants
|
10
|
+
@interface SettingsManager : NSObject
|
11
|
+
|
12
|
+
//property_declaration
|
13
|
+
+ (id)sharedInstance;
|
14
|
+
- (void)saveValue:(id)aValue forKey:(NSString *)aKey;
|
15
|
+
|
16
|
+
@end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
//
|
2
|
+
// SettingsManager.m
|
3
|
+
// This file generated by ios_generate_settings gem
|
4
|
+
// https://github.com/AlexDenisov/ios_generate_settings
|
5
|
+
//
|
6
|
+
|
7
|
+
#import "SettingsManager.h"
|
8
|
+
|
9
|
+
@implementation SettingsManager
|
10
|
+
|
11
|
+
//property_implementation
|
12
|
+
|
13
|
+
static SettingsManager *settingsManagerInstance = nil;
|
14
|
+
|
15
|
+
- (id)init
|
16
|
+
{
|
17
|
+
self = [super init];
|
18
|
+
if (self) {
|
19
|
+
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
20
|
+
//load_properties
|
21
|
+
}
|
22
|
+
return self;
|
23
|
+
}
|
24
|
+
|
25
|
+
- (void)dealloc {
|
26
|
+
//release_properties
|
27
|
+
[super dealloc];
|
28
|
+
}
|
29
|
+
|
30
|
+
- (void)saveValue:(id)aValue forKey:(NSString *)aKey {
|
31
|
+
[[NSUserDefaults standardUserDefaults] setValue:aValue forKey:aKey];
|
32
|
+
[[NSUserDefaults standardUserDefaults] synchronize];
|
33
|
+
[self setValue:aValue forKey:aKey];
|
34
|
+
}
|
35
|
+
|
36
|
+
+ (id)sharedInstance {
|
37
|
+
if(nil == settingsManagerInstance){
|
38
|
+
settingsManagerInstance = [[SettingsManager alloc] init];
|
39
|
+
}
|
40
|
+
return settingsManagerInstance;
|
41
|
+
}
|
42
|
+
|
43
|
+
@end
|
44
|
+
|
metadata
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ios_generate_settings
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Alex Denisov
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-04-02 00:00:00 Z
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: Comand line interface to create SettingsManager singleton
|
22
|
+
email: 1101.debian@gmail.com
|
23
|
+
executables:
|
24
|
+
- ios_generate_settings
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files: []
|
28
|
+
|
29
|
+
files:
|
30
|
+
- lib/ios_generate_settings.rb
|
31
|
+
- lib/ios_generate_settings/ObjCPropertyList.rb
|
32
|
+
- lib/ios_generate_settings/ObjCPropertyReplacer.rb
|
33
|
+
- lib/ios_generate_settings/ObjCProperty.rb
|
34
|
+
- lib/ios_generate_settings/templates/SettingsManager.h.template
|
35
|
+
- lib/ios_generate_settings/templates/SettingsManager.m.template
|
36
|
+
- bin/ios_generate_settings
|
37
|
+
homepage: https://github.com/AlexDenisov/ios_generate_settings
|
38
|
+
licenses: []
|
39
|
+
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options: []
|
42
|
+
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
none: false
|
47
|
+
requirements:
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
hash: 3
|
51
|
+
segments:
|
52
|
+
- 0
|
53
|
+
version: "0"
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 3
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
version: "0"
|
63
|
+
requirements: []
|
64
|
+
|
65
|
+
rubyforge_project:
|
66
|
+
rubygems_version: 1.8.19
|
67
|
+
signing_key:
|
68
|
+
specification_version: 3
|
69
|
+
summary: Create SettingsManager class
|
70
|
+
test_files: []
|
71
|
+
|