defgen 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/.gitignore +18 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +56 -0
- data/Guardfile +9 -0
- data/LICENSE.txt +22 -0
- data/README.md +151 -0
- data/Rakefile +1 -0
- data/bin/defgen +5 -0
- data/defgen.gemspec +24 -0
- data/lib/defgen/.DS_Store +0 -0
- data/lib/defgen/cli.rb +47 -0
- data/lib/defgen/decorators/getter_decorator.rb +17 -0
- data/lib/defgen/decorators/setter_decorator.rb +11 -0
- data/lib/defgen/decorators.rb +2 -0
- data/lib/defgen/defaultfile.rb +65 -0
- data/lib/defgen/defaultfile_builder.rb +14 -0
- data/lib/defgen/defaultfile_parser.rb +41 -0
- data/lib/defgen/generators/.DS_Store +0 -0
- data/lib/defgen/generators/template/template_generator.rb +38 -0
- data/lib/defgen/generators/template/templates/constant.erb +1 -0
- data/lib/defgen/generators/template/templates/getter.erb +4 -0
- data/lib/defgen/generators/template/templates/implementation.erb +19 -0
- data/lib/defgen/generators/template/templates/interface.erb +17 -0
- data/lib/defgen/generators/template/templates/property.erb +1 -0
- data/lib/defgen/generators/template/templates/setter.erb +4 -0
- data/lib/defgen/generators/template.rb +1 -0
- data/lib/defgen/generators.rb +1 -0
- data/lib/defgen/installer.rb +75 -0
- data/lib/defgen/property/attributes.rb +29 -0
- data/lib/defgen/property.rb +30 -0
- data/lib/defgen/string_ext.rb +5 -0
- data/lib/defgen/version.rb +3 -0
- data/lib/defgen/xcodeproj_adapter.rb +48 -0
- data/lib/defgen.rb +14 -0
- data/spec/integration/defaultfile_parse_spec.rb +28 -0
- data/spec/support/property_accessor_examples.rb +12 -0
- data/spec/support/property_examples.rb +58 -0
- data/spec/support/spec_helper.rb +2 -0
- data/spec/unit/decorators/getter_decorator_spec.rb +31 -0
- data/spec/unit/decorators/setter_decorator_spec.rb +42 -0
- data/spec/unit/defaultfile_builder_spec.rb +12 -0
- data/spec/unit/defaultfile_parser_spec.rb +42 -0
- data/spec/unit/defautfile_spec.rb +11 -0
- data/spec/unit/property/attributes_spec.rb +48 -0
- data/spec/unit/property/property_spec.rb +10 -0
- data/spec/unit/string_ext_spec.rb +17 -0
- data/spec/unit/xcodeproj_adapter_spec.rb +10 -0
- metadata +186 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
defgen (0.0.1)
|
5
|
+
xcodeproj
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
activesupport (3.2.9)
|
11
|
+
i18n (~> 0.6)
|
12
|
+
multi_json (~> 1.0)
|
13
|
+
coderay (1.0.8)
|
14
|
+
colored (1.2)
|
15
|
+
diff-lcs (1.1.3)
|
16
|
+
guard (1.6.0)
|
17
|
+
listen (>= 0.6.0)
|
18
|
+
lumberjack (>= 1.0.2)
|
19
|
+
pry (>= 0.9.10)
|
20
|
+
thor (>= 0.14.6)
|
21
|
+
guard-rspec (2.3.3)
|
22
|
+
guard (>= 1.1)
|
23
|
+
rspec (~> 2.11)
|
24
|
+
i18n (0.6.1)
|
25
|
+
listen (0.6.0)
|
26
|
+
lumberjack (1.0.2)
|
27
|
+
method_source (0.8.1)
|
28
|
+
multi_json (1.5.0)
|
29
|
+
pry (0.9.10)
|
30
|
+
coderay (~> 1.0.5)
|
31
|
+
method_source (~> 0.8)
|
32
|
+
slop (~> 3.3.1)
|
33
|
+
rb-fsevent (0.9.2)
|
34
|
+
rspec (2.12.0)
|
35
|
+
rspec-core (~> 2.12.0)
|
36
|
+
rspec-expectations (~> 2.12.0)
|
37
|
+
rspec-mocks (~> 2.12.0)
|
38
|
+
rspec-core (2.12.2)
|
39
|
+
rspec-expectations (2.12.1)
|
40
|
+
diff-lcs (~> 1.1.3)
|
41
|
+
rspec-mocks (2.12.1)
|
42
|
+
slop (3.3.3)
|
43
|
+
thor (0.16.0)
|
44
|
+
xcodeproj (0.4.0)
|
45
|
+
activesupport (~> 3.2.6)
|
46
|
+
colored (~> 1.2)
|
47
|
+
|
48
|
+
PLATFORMS
|
49
|
+
ruby
|
50
|
+
|
51
|
+
DEPENDENCIES
|
52
|
+
defgen!
|
53
|
+
guard
|
54
|
+
guard-rspec
|
55
|
+
rb-fsevent
|
56
|
+
rspec
|
data/Guardfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012-2013 Paul Samuels
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
##NSUserDefaults using properties
|
2
|
+
|
3
|
+
Using properties to access data from `NSUserDefaults` is a million times better than using the verbose API. To do this you simply make a category on `NSUserDefaults` and then chuck in some boiler plate code to hook it all up.
|
4
|
+
|
5
|
+
It couldn't be simpler...
|
6
|
+
|
7
|
+
##Defgen makes it simpler
|
8
|
+
|
9
|
+
Boiler plate is boring so why write it? Using Defgen we can have the computer write it for us. Supply a `Defaultfile` written in the super simple DSL and `defgen` will do the rest.
|
10
|
+
|
11
|
+
##Features
|
12
|
+
|
13
|
+
This is firmly in the realms of Proof of Concept at the minute but.
|
14
|
+
|
15
|
+
- Uses class prefix used in your Xcodeproj
|
16
|
+
- Uses the OrganizationName in your Xcodeproj
|
17
|
+
- Customizable boiler plate
|
18
|
+
- No runtime tricks and all the `NSUserDefault` supported types are supported
|
19
|
+
- Automatically updates your Xcodeproj
|
20
|
+
|
21
|
+
##Usage
|
22
|
+
|
23
|
+
####Step 1. Supply a Defaultfile
|
24
|
+
|
25
|
+
# ├── AwesomeApp/
|
26
|
+
# ├── AwesomeApp/
|
27
|
+
# ├── AwesomeApp.xcodeproj/
|
28
|
+
# ├── Defaultfile <----- Your Defaultfile
|
29
|
+
|
30
|
+
# Defaultfile
|
31
|
+
array 'cheatCodes'
|
32
|
+
bool 'firstUse'
|
33
|
+
data 'someData'
|
34
|
+
dictionary 'config'
|
35
|
+
float 'ratio'
|
36
|
+
integer 'year'
|
37
|
+
object 'mmmmmm'
|
38
|
+
string 'name'
|
39
|
+
double 'betterRatio'
|
40
|
+
url 'homepage'
|
41
|
+
|
42
|
+
The DSL should be pretty self explanatory call the `type` of the object followed by what you want to call it.
|
43
|
+
|
44
|
+
####Step 2. Run Defgen
|
45
|
+
|
46
|
+
$ defgen
|
47
|
+
|
48
|
+
####Step 3. Enjoy the generated boiler plate
|
49
|
+
|
50
|
+
###Customisation
|
51
|
+
|
52
|
+
If you don't like the supplied boiler plate then you can tweak it.
|
53
|
+
|
54
|
+
####Step 1. Call generate the stubs
|
55
|
+
|
56
|
+
$ defgen stubs
|
57
|
+
|
58
|
+
This will generate the templates in your current project so that you can edit as much as you like
|
59
|
+
|
60
|
+
create defgen/constant.erb
|
61
|
+
create defgen/getter.erb
|
62
|
+
create defgen/implementation.erb
|
63
|
+
create defgen/interface.erb
|
64
|
+
create defgen/property.erb
|
65
|
+
create defgen/setter.erb
|
66
|
+
|
67
|
+
##Example input/output/usage
|
68
|
+
|
69
|
+
####Input
|
70
|
+
|
71
|
+
#Defaultfile
|
72
|
+
|
73
|
+
array 'aliases'
|
74
|
+
|
75
|
+
####Output
|
76
|
+
|
77
|
+
//
|
78
|
+
// NSUserDefaults+PASProperties.h
|
79
|
+
// AwesomeApp
|
80
|
+
//
|
81
|
+
// Created by Paul Samuels on 04/01/2013.
|
82
|
+
// Copyright (c) 2013 Paul Samuels. All rights reserved.
|
83
|
+
//
|
84
|
+
// This is an autogenerated file any changes will be lost when running `defgen`
|
85
|
+
//
|
86
|
+
|
87
|
+
#import <Foundation/Foundation.h>
|
88
|
+
|
89
|
+
@interface NSUserDefaults (PASProperties)
|
90
|
+
|
91
|
+
@property (nonatomic, strong) NSArray *pas_aliases;
|
92
|
+
|
93
|
+
@end
|
94
|
+
|
95
|
+
//
|
96
|
+
// NSUserDefaults+PASProperties.m
|
97
|
+
// AwesomeApp
|
98
|
+
//
|
99
|
+
// Created by Paul Samuels on 04/01/2013.
|
100
|
+
// Copyright (c) 2013 Paul Samuels. All rights reserved.
|
101
|
+
//
|
102
|
+
// This is an autogenerated file any changes will be lost when running `defgen`
|
103
|
+
//
|
104
|
+
|
105
|
+
#import "NSUserDefaults+PASProperties.h"
|
106
|
+
|
107
|
+
NSString * const PASAliases = @"PASAliases";
|
108
|
+
|
109
|
+
@implementation NSUserDefaults (PASProperties)
|
110
|
+
|
111
|
+
- (NSArray *)pas_aliases;
|
112
|
+
{
|
113
|
+
return [self arrayForKey:PASAliases];
|
114
|
+
}
|
115
|
+
|
116
|
+
- (void)setPas_aliases:(NSArray *)aliases;
|
117
|
+
{
|
118
|
+
[self setObject:aliases forKey:PASAliases];
|
119
|
+
}
|
120
|
+
|
121
|
+
@end
|
122
|
+
|
123
|
+
####Usage
|
124
|
+
|
125
|
+
#import "NSUserDefaults+PASProperties.h"
|
126
|
+
|
127
|
+
...
|
128
|
+
|
129
|
+
userDefaults.pas_aliases = @[ @1, @2 ];
|
130
|
+
NSLog(@"%@", userDefaults.pas_aliases);
|
131
|
+
|
132
|
+
## Installation
|
133
|
+
|
134
|
+
$ gem install defgen
|
135
|
+
|
136
|
+
## Contributing
|
137
|
+
|
138
|
+
1. Fork it
|
139
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
140
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
141
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
142
|
+
5. Create new Pull Request
|
143
|
+
|
144
|
+
##Wish List
|
145
|
+
|
146
|
+
- Support for provising customer getter e.g. `(nonatomic, strong, getter=isValid)`
|
147
|
+
- Support for overriding ownership qualifiers
|
148
|
+
|
149
|
+
##Licence
|
150
|
+
|
151
|
+
Defgen is available under the MIT license. See the LICENSE file for more info.
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/defgen
ADDED
data/defgen.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'defgen/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "defgen"
|
8
|
+
gem.version = Defgen::VERSION
|
9
|
+
gem.authors = ["Paul Samuels"]
|
10
|
+
gem.email = ["paulio1987@gmail.com"]
|
11
|
+
gem.description = %q{Build an NSUserDefaults category using a simple DSL}
|
12
|
+
gem.summary = %q{Build an NSUserDefaults category using a simple DSL}
|
13
|
+
gem.homepage = "https://github.com/paulsamuels/Defgen"
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
gem.add_dependency 'xcodeproj'
|
20
|
+
gem.add_development_dependency "rspec"
|
21
|
+
gem.add_development_dependency "guard"
|
22
|
+
gem.add_development_dependency "guard-rspec"
|
23
|
+
gem.add_development_dependency "rb-fsevent"
|
24
|
+
end
|
Binary file
|
data/lib/defgen/cli.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'Thor'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
module Defgen
|
5
|
+
class CLI < Thor
|
6
|
+
|
7
|
+
desc "stubs", "Generate template stubs"
|
8
|
+
def stubs
|
9
|
+
TemplateGenerator.create_stubs
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "parse", 'Parse a "Defaultfile" and modify the Xcodeproj'
|
13
|
+
method_option :filename, default: 'Defaultfile',
|
14
|
+
aliases: '-f',
|
15
|
+
desc: 'Specify the input file path'
|
16
|
+
def parse
|
17
|
+
|
18
|
+
path = Dir['*.xcodeproj'].first
|
19
|
+
|
20
|
+
if path.nil?
|
21
|
+
puts('.xcodeproj file not found')
|
22
|
+
puts
|
23
|
+
help
|
24
|
+
exit 1
|
25
|
+
end
|
26
|
+
|
27
|
+
unless File.exist? options[:filename]
|
28
|
+
puts('no Defaultfile found')
|
29
|
+
puts
|
30
|
+
help
|
31
|
+
exit 1
|
32
|
+
end
|
33
|
+
|
34
|
+
proj = XcodeprojAdapter.new(Xcodeproj::Project.new(path), path)
|
35
|
+
|
36
|
+
defaultfile = DefaultfileBuilder.build { |builder|
|
37
|
+
builder.project_settings = proj
|
38
|
+
builder.parser = DefaultfileParser
|
39
|
+
builder.defaultfile = File.open(options[:filename]).read
|
40
|
+
}
|
41
|
+
|
42
|
+
Installer.install(path, defaultfile, proj)
|
43
|
+
end
|
44
|
+
|
45
|
+
default_task :parse
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
module Defgen
|
4
|
+
class Defaultfile
|
5
|
+
attr_accessor :project_settings
|
6
|
+
attr_reader :class_properties
|
7
|
+
|
8
|
+
def initialize class_properties, project_settings
|
9
|
+
@class_properties = class_properties
|
10
|
+
self.project_settings = project_settings
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_iface
|
14
|
+
render TemplateGenerator.interface_template
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_imp
|
18
|
+
render TemplateGenerator.implementation_template
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def render template
|
24
|
+
prefix = project_settings.prefix
|
25
|
+
project_name = project_settings.name
|
26
|
+
author = project_settings.organization
|
27
|
+
|
28
|
+
ERB.new(template, nil, '<>').result binding
|
29
|
+
end
|
30
|
+
|
31
|
+
def key_constants
|
32
|
+
padding = class_properties.max_by { |p| p.key.length }.key.length
|
33
|
+
constant_template = TemplateGenerator.constant_template
|
34
|
+
|
35
|
+
String.new.tap { |out|
|
36
|
+
class_properties.each do |property|
|
37
|
+
out << ERB.new(constant_template).result(binding)
|
38
|
+
end
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
def accessors
|
43
|
+
getter_template = TemplateGenerator.getter_template
|
44
|
+
setter_template = TemplateGenerator.setter_template
|
45
|
+
|
46
|
+
String.new.tap { |out|
|
47
|
+
class_properties.each do |property|
|
48
|
+
out << ERB.new(getter_template).result(GetterDecorator.new(property).get_binding) + "\n"
|
49
|
+
out << ERB.new(setter_template).result(SetterDecorator.new(property).get_binding)
|
50
|
+
out << "\n" unless class_properties.last == property
|
51
|
+
end
|
52
|
+
}
|
53
|
+
end
|
54
|
+
|
55
|
+
def properties
|
56
|
+
property_template = TemplateGenerator.property_template
|
57
|
+
|
58
|
+
String.new.tap { |out|
|
59
|
+
class_properties.each do |property|
|
60
|
+
out << ERB.new(property_template).result(property.get_binding)
|
61
|
+
end
|
62
|
+
}
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Defgen
|
2
|
+
class DefaultfileBuilder
|
3
|
+
attr_accessor :parser, :project_settings, :defaultfile
|
4
|
+
|
5
|
+
def self.build
|
6
|
+
new.tap { |instance| yield(instance) }.build
|
7
|
+
end
|
8
|
+
|
9
|
+
def build
|
10
|
+
properties = parser.parse(defaultfile).each do |property| property.prefix = project_settings.prefix end
|
11
|
+
Defaultfile.new properties, project_settings
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Defgen
|
2
|
+
class DefaultfileParser
|
3
|
+
def self.parse string
|
4
|
+
new.parse string
|
5
|
+
end
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@properties = []
|
9
|
+
end
|
10
|
+
|
11
|
+
[
|
12
|
+
[ 'array', 'array', 'NSArray *', :strong, true ],
|
13
|
+
[ 'bool', 'bool', 'BOOL ', :assign, false ],
|
14
|
+
[ 'data', 'data', 'NSData *', :strong, true ],
|
15
|
+
[ 'dictionary', 'dictionary', 'NSDictionary *', :strong, true ],
|
16
|
+
[ 'float', 'float', 'float ', :assign, false ],
|
17
|
+
[ 'integer', 'integer', 'NSInteger ', :assign, false ],
|
18
|
+
[ 'object', 'object', 'id ', :strong, true ],
|
19
|
+
[ 'string', 'string', 'NSString *', :copy, true ],
|
20
|
+
[ 'double', 'double', 'double ', :assign, false ],
|
21
|
+
[ 'url', 'URL', 'NSURL *', :strong, false ]
|
22
|
+
].each do |method_name, prefix, objc_type, ownership, object_setter|
|
23
|
+
define_method method_name do |name|
|
24
|
+
Property.new do |property, attributes|
|
25
|
+
property.name = name
|
26
|
+
property.object_setter = object_setter
|
27
|
+
property.message_prefix = prefix
|
28
|
+
property.objc_type = objc_type
|
29
|
+
attributes.ownership = ownership
|
30
|
+
|
31
|
+
@properties << property
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def parse string
|
37
|
+
instance_eval string
|
38
|
+
@properties
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
Binary file
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'thor/group'
|
2
|
+
|
3
|
+
class TemplateGenerator < Thor::Group
|
4
|
+
include Thor::Actions
|
5
|
+
|
6
|
+
def self.source_root
|
7
|
+
File.join(File.dirname(__FILE__), 'templates')
|
8
|
+
end
|
9
|
+
|
10
|
+
templates = Dir.glob("#{source_root}/*.erb")
|
11
|
+
TEMPLATES = templates.map { |f| File.basename(f, '.erb') }
|
12
|
+
|
13
|
+
TEMPLATES.each do |template|
|
14
|
+
const_set "#{template.upcase}_SOURCE", File.join(source_root, "#{template}.erb")
|
15
|
+
const_set "#{template.upcase}_DEST", "defgen/#{template}.erb"
|
16
|
+
|
17
|
+
self.class.send :define_method, "#{template}_template" do
|
18
|
+
load_template const_get("#{template.upcase}_SOURCE"), const_get("#{template.upcase}_DEST")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.create_stubs
|
23
|
+
new.create_stubs
|
24
|
+
end
|
25
|
+
|
26
|
+
def create_stubs
|
27
|
+
TEMPLATES.map(&:upcase).each do |template_file|
|
28
|
+
template self.class.const_get("#{template_file}_SOURCE"), self.class.const_get("#{template_file}_DEST")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def self.load_template source, destination
|
35
|
+
return File.open(destination).read if File.exist? destination
|
36
|
+
ERB.new(File.open(source).read).result
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
NSString * const <%%= property.key.ljust(padding) %> = @"<%%= property.key %>";
|
@@ -0,0 +1,19 @@
|
|
1
|
+
//
|
2
|
+
// NSUserDefaults+<%%= prefix %>Properties.m
|
3
|
+
// <%%= project_name %>
|
4
|
+
//
|
5
|
+
// Created by <%%= author %> on <%= Date.today.strftime('%d/%m/%Y') %>.
|
6
|
+
// Copyright (c) <%= Date.today.year %> <%%= author %>. All rights reserved.
|
7
|
+
//
|
8
|
+
// This is an autogenerated file any changes will be lost when running `defgen`
|
9
|
+
//
|
10
|
+
|
11
|
+
#import "NSUserDefaults+<%%= prefix %>Properties.h"
|
12
|
+
|
13
|
+
<%%= key_constants %>
|
14
|
+
|
15
|
+
@implementation NSUserDefaults (<%%= prefix %>Properties)
|
16
|
+
|
17
|
+
<%%= accessors %>
|
18
|
+
|
19
|
+
@end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
//
|
2
|
+
// NSUserDefaults+<%%= prefix %>Properties.h
|
3
|
+
// <%%= project_name %>
|
4
|
+
//
|
5
|
+
// Created by <%%= author %> on <%= Date.today.strftime('%d/%m/%Y') %>.
|
6
|
+
// Copyright (c) <%= Date.today.year %> <%%= author %>. All rights reserved.
|
7
|
+
//
|
8
|
+
// This is an autogenerated file any changes will be lost when running `defgen`
|
9
|
+
//
|
10
|
+
|
11
|
+
#import <Foundation/Foundation.h>
|
12
|
+
|
13
|
+
@interface NSUserDefaults (<%%= prefix %>Properties)
|
14
|
+
|
15
|
+
<%%= properties %>
|
16
|
+
|
17
|
+
@end
|
@@ -0,0 +1 @@
|
|
1
|
+
@property <%%= attributes %> <%%= objc_type %><%%= prefix.downcase %>_<%%= name %>;
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'defgen/generators/template/template_generator'
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'defgen/generators/template'
|