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.
@@ -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
+