ios_generate_settings 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'ios_generate_settings'
4
+ ios_settings = IOSGenerateSettings.new ARGV
5
+ if ios_settings
6
+ ios_settings.generate
7
+ end
@@ -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
+