ios_generate_settings 0.0.1
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/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
|
+
|