property_synthesize_dealloc 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm ree@property_synthesize_dealloc
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "rb-appscript", ">= 0.6.0"
4
+
5
+ # Add dependencies to develop your gem here.
6
+ # Include everything needed to run rake, tests, features, etc.
7
+ group :development do
8
+ gem "rspec"
9
+ gem "yard"
10
+ gem "bundler"
11
+ gem "jeweler"
12
+ gem "rcov"
13
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,32 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.1.2)
5
+ git (1.2.5)
6
+ jeweler (1.5.2)
7
+ bundler (~> 1.0.0)
8
+ git (>= 1.2.5)
9
+ rake
10
+ rake (0.8.7)
11
+ rb-appscript (0.6.0)
12
+ rcov (0.9.9)
13
+ rspec (2.5.0)
14
+ rspec-core (~> 2.5.0)
15
+ rspec-expectations (~> 2.5.0)
16
+ rspec-mocks (~> 2.5.0)
17
+ rspec-core (2.5.1)
18
+ rspec-expectations (2.5.0)
19
+ diff-lcs (~> 1.1.2)
20
+ rspec-mocks (2.5.0)
21
+ yard (0.6.4)
22
+
23
+ PLATFORMS
24
+ ruby
25
+
26
+ DEPENDENCIES
27
+ bundler
28
+ jeweler
29
+ rb-appscript (>= 0.6.0)
30
+ rcov
31
+ rspec
32
+ yard
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Craig Williams
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.markdown ADDED
@@ -0,0 +1,58 @@
1
+ # Description #
2
+
3
+ One of the things we do a lot of in Objective-C is outlet and variable declaration, synthesize and dealloc. Since this is a repeatable recurring event I thought I would add a little automation to the process.
4
+
5
+ # Instructions #
6
+
7
+ Install the gem.
8
+ _I have only been able to get this working in Xcode by installing the gem in system ruby._
9
+
10
+ sudo gem install property_synthesize_dealloc
11
+
12
+ Make a user script in Xcode with the following:
13
+
14
+ #!/usr/bin/ruby
15
+
16
+ require 'rubygems'
17
+ require "property_synthesize_dealloc"
18
+
19
+ property = PropertySynthesizeDealloc.new
20
+ property.file_path = '%%%{PBXFilePath}%%%'
21
+ property.selection = STDIN.read
22
+ property.psd!
23
+
24
+ Then select the ivars you wish to make property, synthesize and dealloc declarations and execute the user script above.
25
+
26
+
27
+ # Overriding defaults #
28
+
29
+ You can provide an optional parameter to a custom config.yml file.
30
+ Just add the path as a parameter to PropertySynthesizeDealloc.new.
31
+
32
+ PropertySynthesizeDealloc.new("/path/to/custom/config.yml")
33
+
34
+
35
+ Here is the skeleton. Make sure to use this as a starting point.
36
+ These are currently the only options supported.
37
+
38
+ settings:
39
+ sleep_time: 0.1
40
+ xcode_app_path: '/Developer/Applications/Xcode.app'
41
+ use_nonatomic: true
42
+ position_prop_after_closing_bracket: false
43
+ outlet: true
44
+
45
+ types:
46
+ copy: ['NSString', 'NSMutableString', 'NSArray', 'NSNumber']
47
+ assign: ['int', 'integer', 'BOOL', 'float', 'NSUInteger', 'NSInteger',
48
+ 'double', 'uint8_t', 'uint16_t', 'uint32_t', 'int8_t', 'int16_t',
49
+ 'int32_t', 'int64_t', 'uint64_t', 'GLuint', 'GLushort', 'GLubyte',
50
+ 'GLfloat', 'size_t', 'GLenum']
51
+ retain: []
52
+
53
+
54
+ ### Copyright
55
+
56
+ Copyright (c) 2011 Craig Williams. See LICENSE.txt for
57
+ further details.
58
+
data/Rakefile ADDED
@@ -0,0 +1,39 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'rake'
11
+
12
+ require 'jeweler'
13
+ Jeweler::Tasks.new do |gem|
14
+ gem.name = "property_synthesize_dealloc"
15
+ gem.homepage = "http://github.com/CraigWilliams/property_synthesize_dealloc"
16
+ gem.license = "MIT"
17
+ gem.summary = %Q{Creates property, synthesize and dealloc statements from selected ivar declarations}
18
+ gem.description = %Q{Creates property, synthesize and dealloc statements from selected ivar declarations for the header and implementation files in an Xcode project.}
19
+ gem.email = "cwilliams.allancraig@gmail.com"
20
+ gem.authors = ["Craig Williams"]
21
+ gem.add_runtime_dependency 'rb-appscript', '>= 0.6.0'
22
+ end
23
+ Jeweler::RubygemsDotOrgTasks.new
24
+
25
+ require 'rspec/core'
26
+ require 'rspec/core/rake_task'
27
+ RSpec::Core::RakeTask.new(:spec) do |spec|
28
+ spec.pattern = FileList['spec/**/*_spec.rb']
29
+ end
30
+
31
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
32
+ spec.pattern = 'spec/**/*_spec.rb'
33
+ spec.rcov = true
34
+ end
35
+
36
+ task :default => :spec
37
+
38
+ require 'yard'
39
+ YARD::Rake::YardocTask.new
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/lib/config.yml ADDED
@@ -0,0 +1,14 @@
1
+ settings:
2
+ sleep_time: 0.1
3
+ xcode_app_path: '/Developer/Applications/Xcode.app'
4
+ use_nonatomic: true
5
+ position_prop_after_closing_bracket: false
6
+ outlet: true
7
+
8
+ types:
9
+ copy: ['NSString', 'NSMutableString', 'NSArray', 'NSNumber']
10
+ assign: ['int', 'integer', 'BOOL', 'float', 'NSUInteger', 'NSInteger',
11
+ 'double', 'uint8_t', 'uint16_t', 'uint32_t', 'int8_t', 'int16_t',
12
+ 'int32_t', 'int64_t', 'uint64_t', 'GLuint', 'GLushort', 'GLubyte',
13
+ 'GLfloat', 'size_t', 'GLenum']
14
+ retain: []
@@ -0,0 +1,24 @@
1
+ require "rubygems"
2
+ require "yaml"
3
+ require "ostruct"
4
+
5
+ class Configuration
6
+ @@settings = ''
7
+ @@types = ''
8
+ @@config = nil
9
+
10
+ def initialize(path='')
11
+ path = File.join(File.dirname(__FILE__), "config.yml") if path.empty?
12
+ configuration = OpenStruct.new YAML.load_file(path)
13
+ @@settings = configuration.settings
14
+ @@types = configuration.types
15
+ end
16
+
17
+ def self.settings
18
+ @@settings
19
+ end
20
+
21
+ def self.types
22
+ @@types
23
+ end
24
+ end
@@ -0,0 +1,74 @@
1
+ require File.join File.dirname(__FILE__), "configuration"
2
+
3
+ class ContentReplacer
4
+
5
+ def initialize(converter)
6
+ @synthesize = converter.synthesize
7
+ @properties = converter.properties
8
+ @release = converter.release
9
+ @unload = converter.unload
10
+ @position_prop_after_closing_bracket = Configuration.settings['position_prop_after_closing_bracket']
11
+ end
12
+
13
+ #==============================================================
14
+ # Reading and updating the .m file contents
15
+ #==============================================================
16
+ def m_content(file_path)
17
+ mFileContents = IO.read(file_path)
18
+ updatedFileContents = ''
19
+ mFileContents.split("\n").each do |line|
20
+ if line =~ /^@implementation/
21
+ updatedFileContents << line + "\n" + @synthesize.chomp
22
+ elsif line =~ /\[super dealloc\]/
23
+ updatedFileContents << @release.chomp + "\n" + line
24
+ elsif line =~ /\(void\)\s?viewDidUnload/
25
+ updatedFileContents << line + "\n" + @unload.chomp
26
+ else
27
+ updatedFileContents << line
28
+ end
29
+ updatedFileContents << "\n"
30
+ end
31
+
32
+ updatedFileContents
33
+ end
34
+
35
+ #==============================================================
36
+ # Reading and updating the .h file contents
37
+ #==============================================================
38
+ def header_content(file_path)
39
+ if @position_prop_after_closing_bracket
40
+ next_bracket = false
41
+ hFileContents = IO.read(file_path)
42
+ updatedHFileContents = ''
43
+ hFileContents.split("\n").each do |line|
44
+ next_bracket = true if line =~ /^@interface/
45
+
46
+ if line =~ /^\}/ && next_bracket
47
+ next_bracket = false
48
+ updatedHFileContents << line + "\n" + @properties.chomp
49
+ else
50
+ updatedHFileContents << line
51
+ end
52
+ updatedHFileContents << "\n"
53
+ end
54
+
55
+ else
56
+
57
+ next_bracket = false
58
+ hFileContents = IO.read(file_path)
59
+ updatedHFileContents = ''
60
+ hFileContents.split("\n").each do |line|
61
+ next_bracket = true if line =~ /^@interface/
62
+
63
+ if line =~ /^\@end/ && next_bracket
64
+ next_bracket = false
65
+ updatedHFileContents << @properties.chomp + "\n" + line
66
+ else
67
+ updatedHFileContents << line
68
+ end
69
+ updatedHFileContents << "\n"
70
+ end
71
+ end
72
+ updatedHFileContents
73
+ end
74
+ end
data/lib/converter.rb ADDED
@@ -0,0 +1,55 @@
1
+ require File.join File.dirname(__FILE__), "configuration"
2
+
3
+ class Converter
4
+ attr_accessor :properties, :synthesize, :release, :unload
5
+
6
+ def initialize(selection)
7
+ @properties = ''
8
+ @synthesize = ''
9
+ @release = ''
10
+ @unload = ''
11
+ @selection = selection
12
+
13
+ @copy = Configuration.types['copy']
14
+ @assign = Configuration.types['assign']
15
+ @use_nonatomic = Configuration.settings['use_nonatomic']
16
+ @outlet = Configuration.settings['outlet']
17
+ end
18
+
19
+ def convert
20
+ @selection.split("\n").each do |line|
21
+ line = line.scan("*") == [] ? line.strip : line.gsub!(/\*/, '').strip
22
+ words = line.split(/\s+/)
23
+ label = words.size > 2 ? words[1] : words[0]
24
+ variable = words[-1]
25
+ mem_label = memory_management(label)
26
+ star = mem_label == 'assign' ? '' : '*'
27
+
28
+ @properties << "@property (#{use_nonatomic(mem_label)}) #{("IBOutlet " if @outlet)}#{label} #{star}#{variable}\n"
29
+ @synthesize << "@synthesize #{variable}\n"
30
+ @release << "\t[self set#{cap_first_letter_of(variable).chomp}:nil];\n" unless mem_label == 'assign'
31
+ @unload << "\t[self set#{cap_first_letter_of(variable).chomp}:nil];\n"
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def log(msg)
38
+ File.open(File.expand_path("~/desktop/errors.txt"), 'a+') { |f| f.puts msg + "\n" }
39
+ end
40
+
41
+ def memory_management(label)
42
+ return "copy" if @copy.include?(label)
43
+ return "assign" if @assign.include?(label)
44
+ return "retain"
45
+ end
46
+
47
+ def use_nonatomic(mem_label)
48
+ return @use_nonatomic ? "nonatomic, #{mem_label}" : mem_label
49
+ end
50
+
51
+ def cap_first_letter_of(word)
52
+ word[0] = word[0,1].upcase
53
+ word
54
+ end
55
+ end
@@ -0,0 +1,48 @@
1
+ class FileChecker
2
+ attr_accessor :error_msg, :path_ok, :path_to_check, :header_path, :implementation_path
3
+
4
+ def initialize(path)
5
+ @path_to_check = path
6
+ @header_path = path
7
+ @implementation_path = nil
8
+ @error_msg = []
9
+ @path_ok = true
10
+ end
11
+
12
+ def check_file_path
13
+ unless valid_header_file?
14
+ @path_ok = false
15
+ @error_msg << "This is not a header file."
16
+ end
17
+
18
+ unless valid_implementation_file?
19
+ @path_ok = false
20
+ @error_msg << "There is no implementation file for this header file."
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def valid_header_file?
27
+ File.extname(@path_to_check) == '.h'
28
+ end
29
+
30
+ def valid_implementation_file?
31
+ parent = File.dirname(@path_to_check)
32
+ file_name = File.basename(@path_to_check, '.*')
33
+ m_path = File.join(parent, file_name + '.m')
34
+
35
+ # Check for an implementation file and if one
36
+ # does not exist, check for a ".mm" file
37
+ if File.exists?(m_path)
38
+ @implementation_path = m_path
39
+ elsif File.exists?(m_path << "m")
40
+ @implementation_path = m_path << 'm'
41
+ else
42
+ @implementation_path = nil
43
+ return false
44
+ end
45
+
46
+ return true
47
+ end
48
+ end
@@ -0,0 +1,113 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
3
+ require "rubygems"
4
+ require "appscript"; include Appscript
5
+ require 'osax'; include OSAX
6
+ require "file_checker"
7
+ require 'configuration'
8
+ require "converter"
9
+ require "content_replacer"
10
+
11
+ class PropertySynthesizeDealloc
12
+ attr_accessor :xcode, :file_path, :selection, :header_file_path, :m_file_path, :config_path
13
+
14
+ def initialize(config_file_path='')
15
+ Configuration.new(config_file_path)
16
+
17
+ @sleep_time = Configuration.settings['sleep_time']
18
+ @xcode = app(Configuration.settings['xcode_app_path'])
19
+ @file_path = file_path
20
+ end
21
+
22
+ def psd!
23
+ selection_check
24
+ file_check
25
+
26
+ converter = convert_selection
27
+ content_replacer = ContentReplacer.new(converter)
28
+ header_content = content_replacer.header_content(@header_file_path)
29
+ m_content = content_replacer.m_content(@m_file_path)
30
+
31
+ # Update the files!
32
+ replace_file_content(@header_file_path, header_content)
33
+ replace_file_content(@m_file_path, m_content)
34
+ end
35
+
36
+ def convert_selection
37
+ converter = Converter.new(@selection)
38
+ converter.convert
39
+ converter
40
+ end
41
+
42
+
43
+ protected
44
+
45
+ def log(msg)
46
+ File.open(File.expand_path("~/desktop/errors.txt"), 'a+') { |f| f.puts msg + "\n" }
47
+ end
48
+
49
+ def dialog(msg)
50
+ osax.display_dialog(msg,
51
+ :buttons => ["Ok"],
52
+ :default_button => 1)
53
+ end
54
+
55
+ def replace_file_content(path, content)
56
+ @xcode.open(path)
57
+ sleep @sleep_time
58
+ if doc = find_and_save_file(path)
59
+ doc.contents.set(content)
60
+ doc.save
61
+ return true
62
+ end
63
+ return false
64
+ end
65
+
66
+ def selection_check
67
+ # exit if nothing is selected
68
+ if @selection.empty?
69
+ dialog "There is nothing selected to convert."
70
+ exit!
71
+ end
72
+ end
73
+
74
+ def file_check
75
+ file_path_supplied?
76
+ save_current_file
77
+ find_and_save_file
78
+
79
+ file_checker = FileChecker.new(@file_path)
80
+ file_checker.check_file_path
81
+ if file_checker.path_ok == false
82
+ dialog file_checker.error_msg.join("\n")
83
+ exit!
84
+ else
85
+ @header_file_path = file_checker.header_path
86
+ @m_file_path = file_checker.implementation_path
87
+ end
88
+ end
89
+
90
+ def file_path_supplied?
91
+ if !@file_path
92
+ dialog "You have not supplied a file path"
93
+ exit!
94
+ end
95
+ end
96
+
97
+ def save_current_file
98
+ @xcode.text_documents[1].save
99
+ end
100
+
101
+ def find_and_save_file(file_path=@file_path)
102
+ docs = @xcode.text_documents.get
103
+ docs.each do |doc|
104
+ path = doc.get.file_name.get
105
+ if file_path == path
106
+ doc.save
107
+ return doc
108
+ else
109
+ false
110
+ end
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,92 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ # property = PropertySynthesizeDealloc.new
4
+ # property.file_path = '%%%{PBXFilePath}%%%'
5
+ # property.selection = STDIN.read
6
+ # property.psd!
7
+
8
+ describe "PropertySynthesizeDealloc" do
9
+
10
+ context "initialization" do
11
+ let(:p) { PropertySynthesizeDealloc.new }
12
+ let(:config) { YAML.load_file(File.join(File.dirname(__FILE__), '..', 'lib', 'config.yml')) }
13
+
14
+ it "should create a new instance of class" do
15
+ p.should be_kind_of(PropertySynthesizeDealloc)
16
+ end
17
+
18
+ it "should have Configuration settings when initialized" do
19
+ Configuration.settings['sleep_time'].should == config['settings']['sleep_time']
20
+ Configuration.settings['xcode_app_path'].should == config['settings']['xcode_app_path']
21
+ Configuration.settings['use_nonatomic'].should == config['settings']['use_nonatomic']
22
+ Configuration.settings['position_prop_after_closing_bracket'].should == config['settings']['position_prop_after_closing_bracket']
23
+ Configuration.settings['outlet'].should == config['settings']['outlet']
24
+ end
25
+
26
+ it "should have Configuration types when initialized" do
27
+ Configuration.types['copy'].should == config['types']['copy']
28
+ Configuration.types['assign'].should == config['types']['assign']
29
+ Configuration.types['retain'].should == config['types']['retain']
30
+ end
31
+
32
+ it "should be able to set a file path" do
33
+ path = '/some/random/path.h'
34
+ p.file_path = path
35
+ p.file_path.should == path
36
+ end
37
+
38
+ it "should exit if no file path provided" do
39
+ pending "stubbing a dialog not working" do
40
+ dialog = mock('dialog').as_null_object
41
+ OSAX.osax.stub!(:display_dialog).with('"You have not supplied a file path", ({:buttons=>["Ok"], :default_button=>1}').and_return(dialog)
42
+
43
+ p.selection = "NSString *string"
44
+ p.psd!.should == dialog
45
+ end
46
+ end
47
+
48
+ it "should exit if nothing is selected" do
49
+ pending "stubbing a dialog not working" do
50
+ dialog = mock('dialog').as_null_object
51
+ OSAX.osax.stub!(:display_dialog).with('"There is nothing selected to convert.", ({:buttons=>["Ok"], :default_button=>1}').and_return(dialog)
52
+
53
+ p.psd!.should == dialog
54
+ end
55
+ end
56
+ end
57
+
58
+
59
+ context "converting selected text" do
60
+
61
+ let(:p) { PropertySynthesizeDealloc.new }
62
+
63
+ before do
64
+ p.file_path = "/random/path.h"
65
+ p.selection = "NSString *string\nNSArray *array\nNSMutableArray *theMutableArray"
66
+ @converter = p.convert_selection
67
+ end
68
+
69
+ it "should convert properties correctly" do
70
+ res = "@property (nonatomic, copy) IBOutlet NSString *string\n@property (nonatomic, copy) IBOutlet NSArray *array\n@property (nonatomic, retain) IBOutlet NSMutableArray *theMutableArray\n"
71
+ @converter.properties.should == res
72
+ end
73
+
74
+ it "should convert synthensize correctly" do
75
+ res = "@synthesize string\n@synthesize array\n@synthesize theMutableArray\n"
76
+ @converter.synthesize.should == res
77
+ end
78
+
79
+ it "should convert release correctly" do
80
+ res = "\t[self setString:nil];\n\t[self setArray:nil];\n\t[self setTheMutableArray:nil];\n"
81
+ @converter.release.should == res
82
+ end
83
+
84
+ it "should convert unload correctly" do
85
+ res = "\t[self setString:nil];\n\t[self setArray:nil];\n\t[self setTheMutableArray:nil];\n"
86
+ @converter.unload.should == res
87
+ end
88
+
89
+ end
90
+
91
+
92
+ end
@@ -0,0 +1,12 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'property_synthesize_dealloc'
5
+
6
+ # Requires supporting files with custom matchers and macros, etc,
7
+ # in ./support/ and its subdirectories.
8
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
9
+
10
+ RSpec.configure do |config|
11
+
12
+ end
metadata ADDED
@@ -0,0 +1,184 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: property_synthesize_dealloc
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Craig Williams
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-02-27 00:00:00 -07:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rb-appscript
23
+ version_requirements: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 7
29
+ segments:
30
+ - 0
31
+ - 6
32
+ - 0
33
+ version: 0.6.0
34
+ prerelease: false
35
+ type: :runtime
36
+ requirement: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: rspec
39
+ version_requirements: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 3
45
+ segments:
46
+ - 0
47
+ version: "0"
48
+ prerelease: false
49
+ type: :development
50
+ requirement: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: yard
53
+ version_requirements: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ prerelease: false
63
+ type: :development
64
+ requirement: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: bundler
67
+ version_requirements: &id004 !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 3
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ prerelease: false
77
+ type: :development
78
+ requirement: *id004
79
+ - !ruby/object:Gem::Dependency
80
+ name: jeweler
81
+ version_requirements: &id005 !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ prerelease: false
91
+ type: :development
92
+ requirement: *id005
93
+ - !ruby/object:Gem::Dependency
94
+ name: rcov
95
+ version_requirements: &id006 !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ hash: 3
101
+ segments:
102
+ - 0
103
+ version: "0"
104
+ prerelease: false
105
+ type: :development
106
+ requirement: *id006
107
+ - !ruby/object:Gem::Dependency
108
+ name: rb-appscript
109
+ version_requirements: &id007 !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ hash: 7
115
+ segments:
116
+ - 0
117
+ - 6
118
+ - 0
119
+ version: 0.6.0
120
+ prerelease: false
121
+ type: :runtime
122
+ requirement: *id007
123
+ description: Creates property, synthesize and dealloc statements from selected ivar declarations for the header and implementation files in an Xcode project.
124
+ email: cwilliams.allancraig@gmail.com
125
+ executables: []
126
+
127
+ extensions: []
128
+
129
+ extra_rdoc_files:
130
+ - LICENSE.txt
131
+ - README.markdown
132
+ files:
133
+ - .rvmrc
134
+ - Gemfile
135
+ - Gemfile.lock
136
+ - LICENSE.txt
137
+ - README.markdown
138
+ - Rakefile
139
+ - VERSION
140
+ - lib/config.yml
141
+ - lib/configuration.rb
142
+ - lib/content_replacer.rb
143
+ - lib/converter.rb
144
+ - lib/file_checker.rb
145
+ - lib/property_synthesize_dealloc.rb
146
+ - spec/property_synthesize_dealloc_spec.rb
147
+ - spec/spec_helper.rb
148
+ has_rdoc: true
149
+ homepage: http://github.com/CraigWilliams/property_synthesize_dealloc
150
+ licenses:
151
+ - MIT
152
+ post_install_message:
153
+ rdoc_options: []
154
+
155
+ require_paths:
156
+ - lib
157
+ required_ruby_version: !ruby/object:Gem::Requirement
158
+ none: false
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ hash: 3
163
+ segments:
164
+ - 0
165
+ version: "0"
166
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
+ none: false
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ hash: 3
172
+ segments:
173
+ - 0
174
+ version: "0"
175
+ requirements: []
176
+
177
+ rubyforge_project:
178
+ rubygems_version: 1.5.0
179
+ signing_key:
180
+ specification_version: 3
181
+ summary: Creates property, synthesize and dealloc statements from selected ivar declarations
182
+ test_files:
183
+ - spec/property_synthesize_dealloc_spec.rb
184
+ - spec/spec_helper.rb