localport 0.0.2 → 0.0.3

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
@@ -26,6 +26,14 @@ module LocalPort
26
26
  }
27
27
  )
28
28
 
29
+ register_command(
30
+ :name => "update",
31
+ :args => true,
32
+ :exec => lambda {|args|
33
+ update args
34
+ }
35
+ )
36
+
29
37
  register_command(
30
38
  :name => "uninstall",
31
39
  :args => true,
@@ -97,6 +105,15 @@ module LocalPort
97
105
  end
98
106
  end
99
107
 
108
+ def update(args)
109
+ targets = update_apps(args)
110
+ targets.each {|target|
111
+ install([installed_dir(target)])
112
+ config.installed_app() # TODO: もっとエレガントに初期化する方法を考える
113
+ activate(target)
114
+ }
115
+ end
116
+
100
117
  def uninstall(args)
101
118
  # 指定されたアプリケーションがactivatedされていなければ,
102
119
  # そのリンクを削除する
@@ -204,6 +221,48 @@ module LocalPort
204
221
  ret
205
222
  }
206
223
  end
224
+
225
+ # Private: [指定した]アプリケーションのバージョンをつけた文字列配列を生成する
226
+ #
227
+ # args - [String], アプリケーションの配列
228
+ #
229
+ # Examples:
230
+ #
231
+ # update_apps ["ruby"]
232
+ # #=> ["ruby-1.9.2-p130"]
233
+ #
234
+ # Returns アプリケーションのバージョンがついた文字列配列
235
+ def update_apps(args)
236
+ if args.empty?
237
+ config.installed.inject([]) {|ret, (app, versions)|
238
+ ret += versions.keys.map {|version| "#{app}-#{version}"}
239
+ ret
240
+ }
241
+ else
242
+ args.inject([]) {|ret, arg|
243
+ versions = config.installed[arg]
244
+ if versions
245
+ ret += versions.keys.map {|version| "#{arg}-#{version}"}
246
+ end
247
+ ret
248
+ }
249
+ end
250
+ end
251
+
252
+ # Private: 指定したアプリケーションがインストールされているディレクトリ名を生成する
253
+ #
254
+ # app - String, バージョン付きアプリケーション名
255
+ #
256
+ # Examples:
257
+ #
258
+ # installed_dir "ruby-1.9.3-p130"
259
+ # #=> /Users/user/local/ruby/1.9.3-p130
260
+ #
261
+ # Returns アプリケーションがインストールされているディレクトリ名
262
+ def installed_dir(appver)
263
+ app, ver = split_appver_to_app_ver(appver)
264
+ File.join(LocalPort::APPS_DIR, app, ver)
265
+ end
207
266
  end
208
267
 
209
268
  def self.command
data/localport.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "localport"
8
- s.version = "0.0.2"
8
+ s.version = "0.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["yoppi"]
12
- s.date = "2012-04-29"
12
+ s.date = "2012-05-04"
13
13
  s.description = "localport is a local application management system"
14
14
  s.email = "y.hirokazu@gmail.com"
15
15
  s.executables = ["localport"]
@@ -5,6 +5,9 @@ require 'spec_helper'
5
5
 
6
6
  require 'fileutils'
7
7
 
8
+ LocalPort::LINK_DIR = File.dirname(__FILE__)
9
+ LocalPort::APPS_DIR = File.dirname(__FILE__)
10
+
8
11
  describe LocalPort::Command do
9
12
  it "should raise CommandError in unknown command" do
10
13
  expect { LocalPort.command.find("foo") }.to raise_error(
@@ -21,7 +24,6 @@ end
21
24
  describe LocalPort::Command, "#install" do
22
25
 
23
26
  let(:install) { LocalPort.command.find("install") }
24
- LocalPort::LINK_DIR = File.dirname(__FILE__)
25
27
 
26
28
  context "path is emtpy" do
27
29
  it "should raise CommandError in no args" do
@@ -97,8 +99,45 @@ describe LocalPort::Command, "#deactivate" do
97
99
  end
98
100
  end
99
101
 
102
+ describe LocalPort::Command, "#update" do
103
+ let(:update) { LocalPort.command.find("update") }
104
+
105
+ it "should exist command" do
106
+ LocalPort.command.find("update").should_not be_nil
107
+ end
108
+
109
+ context "update one" do
110
+ let(:app) { File.join(File.dirname(__FILE__), "test/0.0.0") }
111
+ let(:bin) { File.join(File.dirname(__FILE__), "test/0.0.0/bin/a") }
112
+ let(:bin_new) { File.join(File.dirname(__FILE__), "test/0.0.0/bin/b") }
113
+ let(:symlink) { File.join(File.dirname(__FILE__), "a-0.0.0") }
114
+ let(:symlink_app) { File.join(File.dirname(__FILE__), "a") }
115
+ let(:symlink_new) { File.join(File.dirname(__FILE__), "b-0.0.0") }
116
+ let(:symlink_new_app) { File.join(File.dirname(__FILE__), "b") }
117
+
118
+ before do
119
+ FileUtils.mkdir_p(File.dirname(bin))
120
+ FileUtils.touch(bin)
121
+ File.symlink(bin, symlink)
122
+ end
123
+
124
+ it "should update specifed application" do
125
+ FileUtils.touch(bin_new)
126
+ config.installed_app()
127
+ update[:exec].call(["test"])
128
+ File.exists? symlink_new
129
+ File.exists? symlink_new_app
130
+ end
131
+
132
+ after do
133
+ FileUtils.rm_rf(File.join(File.dirname(__FILE__), "test"))
134
+ FileUtils.rm([symlink, symlink_new, symlink_app, symlink_new_app])
135
+ end
136
+ end
137
+ end
138
+
100
139
  describe LocalPort::Command do
101
140
  it "should get command list" do
102
- LocalPort.command.list.sort.should == %w[activate deactivate install installed uninstall]
141
+ LocalPort.command.list.sort.should == %w[activate deactivate install installed uninstall update]
103
142
  end
104
143
  end
metadata CHANGED
@@ -1,81 +1,104 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: localport
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
4
5
  prerelease:
5
- version: 0.0.2
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - yoppi
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2012-04-29 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2012-05-04 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: highline
17
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
18
17
  none: false
19
- requirements:
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
27
31
  name: rspec
28
- requirement: &id002 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
29
33
  none: false
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: "0"
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
34
38
  type: :development
35
39
  prerelease: false
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
38
47
  name: yard
39
- requirement: &id003 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
40
49
  none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- version: "0"
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
45
54
  type: :development
46
55
  prerelease: false
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
49
63
  name: bundler
50
- requirement: &id004 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
51
65
  none: false
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- version: "0"
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
56
70
  type: :development
57
71
  prerelease: false
58
- version_requirements: *id004
59
- - !ruby/object:Gem::Dependency
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
60
79
  name: jeweler
61
- requirement: &id005 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
62
81
  none: false
63
- requirements:
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- version: "0"
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
67
86
  type: :development
68
87
  prerelease: false
69
- version_requirements: *id005
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
70
94
  description: localport is a local application management system
71
95
  email: y.hirokazu@gmail.com
72
- executables:
96
+ executables:
73
97
  - localport
74
98
  extensions: []
75
-
76
- extra_rdoc_files:
99
+ extra_rdoc_files:
77
100
  - README.md
78
- files:
101
+ files:
79
102
  - .travis.yml
80
103
  - Gemfile
81
104
  - README.md
@@ -90,34 +113,31 @@ files:
90
113
  - spec/localport_spec.rb
91
114
  - spec/spec_helper.rb
92
115
  homepage: http://github.com/yoppi/localport
93
- licenses:
116
+ licenses:
94
117
  - MIT
95
118
  post_install_message:
96
119
  rdoc_options: []
97
-
98
- require_paths:
120
+ require_paths:
99
121
  - lib
100
- required_ruby_version: !ruby/object:Gem::Requirement
122
+ required_ruby_version: !ruby/object:Gem::Requirement
101
123
  none: false
102
- requirements:
103
- - - ">="
104
- - !ruby/object:Gem::Version
105
- hash: -267058066276211359
106
- segments:
124
+ requirements:
125
+ - - ! '>='
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ segments:
107
129
  - 0
108
- version: "0"
109
- required_rubygems_version: !ruby/object:Gem::Requirement
130
+ hash: 3928302131634072354
131
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
132
  none: false
111
- requirements:
112
- - - ">="
113
- - !ruby/object:Gem::Version
114
- version: "0"
133
+ requirements:
134
+ - - ! '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
115
137
  requirements: []
116
-
117
138
  rubyforge_project:
118
139
  rubygems_version: 1.8.23
119
140
  signing_key:
120
141
  specification_version: 3
121
142
  summary: Local Application management system
122
143
  test_files: []
123
-