xcode 0.1.0 → 0.1.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/Rakefile CHANGED
@@ -11,7 +11,8 @@ Jeweler::Tasks.new do |gem|
11
11
  gem.license = 'MIT'
12
12
  gem.authors = ['Ivan Kuchin']
13
13
  gem.add_runtime_dependency 'plist'
14
- gem.add_runtime_dependency 'fspath'
14
+ gem.add_runtime_dependency 'net-github-upload'
15
+ gem.add_runtime_dependency 'keychain_services'
15
16
  gem.add_development_dependency 'jeweler', '~> 1.5.2'
16
17
  gem.add_development_dependency 'rake-gem-ghost'
17
18
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
data/lib/xcode/project.rb CHANGED
@@ -1,15 +1,15 @@
1
- require 'fspath'
2
-
3
1
  module Xcode
4
2
  class Project
5
3
  autoload :PlistChanger, 'xcode/project/plist_changer'
6
4
  autoload :Version, 'xcode/project/version'
7
5
  autoload :Build, 'xcode/project/build'
8
6
  autoload :Config, 'xcode/project/config'
7
+ autoload :Packer, 'xcode/project/packer'
8
+ autoload :Tagger, 'xcode/project/tagger'
9
9
 
10
10
  attr_reader :path
11
11
  def initialize(path)
12
- @path = FSPath(path)
12
+ @path = Pathname(path)
13
13
  end
14
14
 
15
15
  def name
@@ -36,5 +36,13 @@ module Xcode
36
36
  def config
37
37
  Config.new(path)
38
38
  end
39
+
40
+ def packer
41
+ Packer.new(self)
42
+ end
43
+
44
+ def tagger
45
+ Tagger.new(self)
46
+ end
39
47
  end
40
48
  end
@@ -1,5 +1,3 @@
1
- require 'plist'
2
-
3
1
  module Xcode
4
2
  class Project
5
3
  class Build < PlistChanger
@@ -1,5 +1,3 @@
1
- require 'fspath'
2
-
3
1
  module Xcode
4
2
  class Project
5
3
  class Config
@@ -10,8 +8,8 @@ module Xcode
10
8
 
11
9
  attr_reader :path, :pbxproj_path, :root
12
10
  def initialize(path)
13
- @path = FSPath(path)
14
- @pbxproj_path = path / 'project.pbxproj'
11
+ @path = Pathname(path)
12
+ @pbxproj_path = path + 'project.pbxproj'
15
13
  parse
16
14
  end
17
15
 
@@ -0,0 +1,79 @@
1
+ require 'keychain'
2
+ require 'net/github-upload'
3
+
4
+ module Xcode
5
+ class Project
6
+ class Packer
7
+ attr_reader :project
8
+ def initialize(project)
9
+ @project = project
10
+ end
11
+
12
+ def pack_path
13
+ @pack_path ||= begin
14
+ pkg_dir = Pathname('pkg')
15
+ pkg_dir.mkpath
16
+ pkg_dir + "#{project.name}-#{project.version}.tbz"
17
+ end
18
+ end
19
+
20
+ def pack_description
21
+ @pack_description ||= "#{project.name} v#{project.version}"
22
+ end
23
+
24
+ def product_names
25
+ [].tap do |names|
26
+ objects = project.config.root['objects']
27
+ objects.each do |_, object|
28
+ if reference = object['productReference']
29
+ names << objects[reference]['path']
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ def products_dir
36
+ Pathname('build') + project.configuration
37
+ end
38
+
39
+ def build
40
+ arguments = %w[xcodebuild]
41
+ arguments += %W[-project #{project.path}]
42
+ arguments += %W[-configuration #{project.configuration}]
43
+ arguments += project.variables.map{ |key, value| "#{key}=#{value}" }
44
+ arguments += %w[clean build]
45
+
46
+ sh *arguments
47
+ end
48
+
49
+ def pack
50
+ if pack_path.exist?
51
+ abort "#{pack_path} already exists"
52
+ else
53
+ build
54
+
55
+ arguments = %W[tar -cjf #{pack_path.expand_path}]
56
+ arguments += product_names
57
+
58
+ Dir.chdir products_dir do
59
+ sh *arguments
60
+ end
61
+ end
62
+ end
63
+
64
+ def release
65
+ unless `git remote -v` =~ /git@github\.com:([^\/]+)\/(.+?)\.git/
66
+ abort 'can\'t find github remote'
67
+ else
68
+ login, repos = $1, $2
69
+ token = Keychain.items.find{ |item| item.label[/^github.com/] && item.account == "#{login}/token" }.password
70
+
71
+ pack
72
+
73
+ uploader = Net::GitHub::Upload.new(:login => login, :token => token)
74
+ uploader.upload(:repos => repos, :file => pack_path.to_s, :description => pack_description)
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,21 @@
1
+ require 'keychain'
2
+ require 'net/github-upload'
3
+
4
+ module Xcode
5
+ class Project
6
+ class Tagger
7
+ attr_reader :project
8
+ def initialize(project)
9
+ @project = project
10
+ end
11
+
12
+ def version
13
+ @version ||= "v#{project.version}"
14
+ end
15
+
16
+ def tag
17
+ sh *%W[git tag -a #{version} -m #{"Released #{version}"}]
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,5 +1,3 @@
1
- require 'plist'
2
-
3
1
  module Xcode
4
2
  class Project
5
3
  class Version < PlistChanger
data/lib/xcode/tasks.rb CHANGED
@@ -1,6 +1,4 @@
1
- require 'fspath'
2
- require 'shellwords'
3
- require 'tempfile'
1
+ require 'pathname'
4
2
 
5
3
  module Xcode
6
4
  class Tasks
@@ -9,7 +7,7 @@ module Xcode
9
7
  attr_reader :project
10
8
 
11
9
  def initialize(project_name = nil, &block)
12
- project_path = FSPath("#{project_name || File.basename(Dir.pwd)}.xcodeproj")
10
+ project_path = Pathname("#{project_name || File.basename(Dir.pwd)}.xcodeproj")
13
11
  abort "project #{project_path} not found" unless project_path.directory?
14
12
  @project = Project.new(project_path)
15
13
  block.call(project)
@@ -22,39 +20,33 @@ module Xcode
22
20
 
23
21
  desc 'build'
24
22
  task :build do
25
- arguments = %w[xcodebuild]
26
- arguments += %W[-project #{project.path}]
27
- arguments += %W[-configuration #{project.configuration}]
28
- arguments += project.variables.map{ |key, value| "#{key}=#{value}" }
29
- arguments += %w[clean build]
30
-
31
- sh *arguments
23
+ packer = project.packer
24
+ if packer.build
25
+ $stderr.puts "Built #{packer.product_names.join(', ')}"
26
+ end
32
27
  end
33
28
 
34
29
  desc 'pack'
35
30
  task :pack do
36
- pkg_dir = FSPath('pkg')
37
- pkg_dir.mkpath
38
- pack_name = "#{project.name}-#{project.version}"
39
- pack_path = pkg_dir + "#{pack_name}.tbz"
40
- if pack_path.exist?
41
- abort "#{pack_path} already exists"
42
- else
43
- Rake::Task['build'].invoke
44
-
45
- products = []
46
- objects = project.config.root['objects']
47
- objects.each do |_, object|
48
- if reference = object['productReference']
49
- products << objects[reference]['path']
50
- end
51
- end
52
- products = products.map{ |product| FSPath('build') / project.configuration / product }.select(&:exist?)
31
+ packer = project.packer
32
+ if packer.pack
33
+ $stderr.puts "Packed #{packer.product_names.join(', ')} to #{packer.pack_path}"
34
+ end
35
+ end
53
36
 
54
- arguments = %W[tar -cjf #{pack_path}]
55
- arguments += products
37
+ desc 'release'
38
+ task :release do
39
+ packer = project.packer
40
+ if url = packer.release
41
+ $stderr.puts "Released #{packer.product_names.join(', ')} as #{packer.pack_path} to #{url}"
42
+ end
43
+ end
56
44
 
57
- sh *arguments
45
+ desc 'tag'
46
+ task :tag do
47
+ tagger = project.tagger
48
+ if tagger.tag
49
+ $stderr.puts "Tagged with #{tagger.version}"
58
50
  end
59
51
  end
60
52
 
data/xcode.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{xcode}
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ivan Kuchin"]
@@ -30,7 +30,9 @@ Gem::Specification.new do |s|
30
30
  "lib/xcode/project/config/decomment.rb",
31
31
  "lib/xcode/project/config/io_scanner.rb",
32
32
  "lib/xcode/project/config/object_node.rb",
33
+ "lib/xcode/project/packer.rb",
33
34
  "lib/xcode/project/plist_changer.rb",
35
+ "lib/xcode/project/tagger.rb",
34
36
  "lib/xcode/project/version.rb",
35
37
  "lib/xcode/tasks.rb",
36
38
  "xcode.gemspec"
@@ -46,18 +48,21 @@ Gem::Specification.new do |s|
46
48
 
47
49
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
48
50
  s.add_runtime_dependency(%q<plist>, [">= 0"])
49
- s.add_runtime_dependency(%q<fspath>, [">= 0"])
51
+ s.add_runtime_dependency(%q<net-github-upload>, [">= 0"])
52
+ s.add_runtime_dependency(%q<keychain_services>, [">= 0"])
50
53
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
51
54
  s.add_development_dependency(%q<rake-gem-ghost>, [">= 0"])
52
55
  else
53
56
  s.add_dependency(%q<plist>, [">= 0"])
54
- s.add_dependency(%q<fspath>, [">= 0"])
57
+ s.add_dependency(%q<net-github-upload>, [">= 0"])
58
+ s.add_dependency(%q<keychain_services>, [">= 0"])
55
59
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
56
60
  s.add_dependency(%q<rake-gem-ghost>, [">= 0"])
57
61
  end
58
62
  else
59
63
  s.add_dependency(%q<plist>, [">= 0"])
60
- s.add_dependency(%q<fspath>, [">= 0"])
64
+ s.add_dependency(%q<net-github-upload>, [">= 0"])
65
+ s.add_dependency(%q<keychain_services>, [">= 0"])
61
66
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
62
67
  s.add_dependency(%q<rake-gem-ghost>, [">= 0"])
63
68
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xcode
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ivan Kuchin
@@ -33,7 +33,7 @@ dependencies:
33
33
  type: :runtime
34
34
  version_requirements: *id001
35
35
  - !ruby/object:Gem::Dependency
36
- name: fspath
36
+ name: net-github-upload
37
37
  prerelease: false
38
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
39
  none: false
@@ -47,9 +47,23 @@ dependencies:
47
47
  type: :runtime
48
48
  version_requirements: *id002
49
49
  - !ruby/object:Gem::Dependency
50
- name: jeweler
50
+ name: keychain_services
51
51
  prerelease: false
52
52
  requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :runtime
62
+ version_requirements: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ name: jeweler
65
+ prerelease: false
66
+ requirement: &id004 !ruby/object:Gem::Requirement
53
67
  none: false
54
68
  requirements:
55
69
  - - ~>
@@ -61,11 +75,11 @@ dependencies:
61
75
  - 2
62
76
  version: 1.5.2
63
77
  type: :development
64
- version_requirements: *id003
78
+ version_requirements: *id004
65
79
  - !ruby/object:Gem::Dependency
66
80
  name: rake-gem-ghost
67
81
  prerelease: false
68
- requirement: &id004 !ruby/object:Gem::Requirement
82
+ requirement: &id005 !ruby/object:Gem::Requirement
69
83
  none: false
70
84
  requirements:
71
85
  - - ">="
@@ -75,7 +89,7 @@ dependencies:
75
89
  - 0
76
90
  version: "0"
77
91
  type: :development
78
- version_requirements: *id004
92
+ version_requirements: *id005
79
93
  description:
80
94
  email:
81
95
  executables: []
@@ -101,7 +115,9 @@ files:
101
115
  - lib/xcode/project/config/decomment.rb
102
116
  - lib/xcode/project/config/io_scanner.rb
103
117
  - lib/xcode/project/config/object_node.rb
118
+ - lib/xcode/project/packer.rb
104
119
  - lib/xcode/project/plist_changer.rb
120
+ - lib/xcode/project/tagger.rb
105
121
  - lib/xcode/project/version.rb
106
122
  - lib/xcode/tasks.rb
107
123
  - xcode.gemspec