rtfs 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/README.markdown +123 -0
- data/lib/rtfs.rb +1 -1
- data/lib/rtfs/client.rb +81 -75
- data/lib/rtfs/version.rb +1 -1
- metadata +6 -6
- data/README +0 -3
data/README.markdown
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
RTFS
|
2
|
+
====
|
3
|
+
|
4
|
+
RTFS is a Ruby Client for TFS.
|
5
|
+
|
6
|
+
[About TFS](http://code.taobao.org/project/view/366/)
|
7
|
+
|
8
|
+
Requirements
|
9
|
+
------------
|
10
|
+
|
11
|
+
* Linux System (TFS only success build in Linux system.)
|
12
|
+
* TFS
|
13
|
+
|
14
|
+
Configure
|
15
|
+
---------
|
16
|
+
|
17
|
+
create this files before using.
|
18
|
+
|
19
|
+
config/tfs.yml
|
20
|
+
|
21
|
+
defaults: &defaults
|
22
|
+
host: '127.0.0.1:3100'
|
23
|
+
|
24
|
+
development:
|
25
|
+
<<: *defaults
|
26
|
+
|
27
|
+
test:
|
28
|
+
<<: *defaults
|
29
|
+
|
30
|
+
production:
|
31
|
+
<<: *defaults
|
32
|
+
|
33
|
+
config/initialize/tfs.rb
|
34
|
+
|
35
|
+
require 'rtfs'
|
36
|
+
tfs_config = YAML.load_file("#{Rails.root}/config/tfs.yml")[Rails.env]
|
37
|
+
$tfs = RTFS::Client.new(:ns_addr => tfs_config['host'])
|
38
|
+
|
39
|
+
Configure without TFS install
|
40
|
+
-----------------------------
|
41
|
+
|
42
|
+
If you development environment is Mac, or your developemnt environment not install TFS, you need use this file to hack upload file as FileSystem.
|
43
|
+
|
44
|
+
lib/fake_tfs.rb
|
45
|
+
|
46
|
+
module FakeTfs
|
47
|
+
class Client
|
48
|
+
def initialize(options = {})
|
49
|
+
@ns_addr = options[:ns_addr] || "uploads/tfs/"
|
50
|
+
if @ns_addr[0] != "/"
|
51
|
+
@ns_addr = [Rails.root,"public",@ns_addr].join("/")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def put_file(file_path, options = {})
|
56
|
+
ext = options[:ext] || File.extname(file_path)
|
57
|
+
ext = ".jpg" if ext.blank?
|
58
|
+
file_name = [Digest::SHA1.hexdigest(file_path),ext].join("")
|
59
|
+
|
60
|
+
new_path = [@ns_addr,file_name].join("/")
|
61
|
+
|
62
|
+
FileUtils.cp(file_path, new_path)
|
63
|
+
File.basename(new_path)
|
64
|
+
end
|
65
|
+
|
66
|
+
def rm_file(file_id)
|
67
|
+
puts "FakeTFS: removing #{file_id}\n"
|
68
|
+
Dir.glob(File.join(@ns_addr, "#{file_id}.*"))[0]
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
config/tfs.yml
|
75
|
+
|
76
|
+
defaults: &defaults
|
77
|
+
host: 'uploads/tfs/'
|
78
|
+
|
79
|
+
development:
|
80
|
+
<<: *defaults
|
81
|
+
|
82
|
+
test:
|
83
|
+
<<: *defaults
|
84
|
+
|
85
|
+
production:
|
86
|
+
<<: *defaults
|
87
|
+
host: '127.0.0.1:3100'
|
88
|
+
|
89
|
+
config/initialize/tfs.rb
|
90
|
+
|
91
|
+
tfs_config = YAML.load_file("#{Rails.root}/config/tfs.yml")[Rails.env]
|
92
|
+
if Rails.env == "development"
|
93
|
+
$tfs = FakeTfs::Client.new(:ns_addr => tfs_config['host'])
|
94
|
+
else
|
95
|
+
require 'rtfs'
|
96
|
+
$tfs = RTFS::Client.new(:ns_addr => tfs_config['host'])
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
Usage
|
101
|
+
-----
|
102
|
+
|
103
|
+
class UsersController < ApplicationController
|
104
|
+
def save
|
105
|
+
@user = User.new
|
106
|
+
ext = File.extname(params[:Filedata].original_filename)
|
107
|
+
file_name = $tfs.put(params[:Filedata].tempfile.path, :ext => ext)
|
108
|
+
@user.avatar_path = [file_name,ext].join("")
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
|
113
|
+
class User < ActiveRecord::Base
|
114
|
+
def avatar_url
|
115
|
+
server_id = self.id % 4 + 1
|
116
|
+
"http://img#{server_id}.tbcdn.com/#{self.avatar_path}"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
Put local file to TFS
|
121
|
+
|
122
|
+
$ $tfs.put("~/Downloads/a.jpg")
|
123
|
+
T1Ub1XXeFBXXb1upjX
|
data/lib/rtfs.rb
CHANGED
@@ -20,7 +20,7 @@ require_local 'rtfs/client.rb'
|
|
20
20
|
require_local 'rtfs/meta.rb'
|
21
21
|
require_local 'rtfs/version.rb'
|
22
22
|
|
23
|
-
|
23
|
+
tfs = RTFS::Client.new({:ns_addr => '10.246.65.210:3100'})
|
24
24
|
# puts "tfsname: '#{tfs.put_file_and_get_url("/home/xifeng/1.png")}'"
|
25
25
|
# puts "#{tfs.get_file('T1H9t5XeRwXXaCwpjX')}"
|
26
26
|
# puts "#{tfs.file_stat('T1H9t5XeRwXXaCwpjX').inspect}"
|
data/lib/rtfs/client.rb
CHANGED
@@ -1,80 +1,86 @@
|
|
1
1
|
# Code for client
|
2
2
|
# by nowa<nowazhu@gmail.com> 2011-07-23
|
3
|
-
|
4
3
|
module RTFS
|
5
|
-
|
4
|
+
TFSTOOL_PATH = "/home/admin/tfs/bin/tfstool"
|
6
5
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
6
|
+
class Client
|
7
|
+
attr_accessor :ns_addr
|
8
|
+
attr_accessor :tfstool_path
|
9
|
+
|
10
|
+
# 参数:
|
11
|
+
# :ns_addr TFS 服务器地址,如 127.0.0.1:3100
|
12
|
+
# :tfstool_path tfstool 安装路径,默认 /home/admin/tfs/bin/tfstool
|
13
|
+
def initialize(options)
|
14
|
+
return nil unless options
|
15
|
+
@ns_addr = options[:ns_addr]
|
16
|
+
@tfstool_path = options[:tfstool_path] ? options[:tfstool_path] : TFSTOOL_PATH
|
17
|
+
raise NoTFSToolError.new unless File.exist?(@tfstool_path)
|
18
|
+
end
|
19
|
+
|
20
|
+
# 获取文件
|
21
|
+
def get(tfs_name, local_file=nil)
|
22
|
+
local_file ||= tfs_name
|
23
|
+
`#{tfstool_cmd} -i "get #{tfs_name} #{local_file}"`
|
24
|
+
end
|
25
|
+
|
26
|
+
# 上传文件
|
27
|
+
# 参数:
|
28
|
+
# file_path 需要上传的文件路径
|
29
|
+
# :ext 扩展名,默认会取 file_path 的扩展名, 如: .jpg
|
30
|
+
# 返回值
|
31
|
+
# T1lpVcXftHXXaCwpjX
|
32
|
+
def put(file_path, options = {})
|
33
|
+
ext = options[:ext] || File.extname(file_path)
|
34
|
+
tfs_name = "NULL"
|
35
|
+
result = `#{tfstool_cmd} -i "put #{file_path} #{tfs_name} #{ext}"`
|
36
|
+
# puts "result: #{result}"
|
37
|
+
t = nil
|
38
|
+
if result.include?("=> ")
|
39
|
+
result = result.split("=> ").last
|
40
|
+
if result.include?(",")
|
41
|
+
t = result.split(",").first
|
42
|
+
end
|
43
|
+
end
|
44
|
+
t.nil? ? nil : t
|
45
|
+
end
|
46
|
+
|
47
|
+
# 上传文件 并返回完整 url (only for Taobao)
|
48
|
+
def put_and_get_url(file_path, options = {})
|
49
|
+
ext = options[:ext] || File.extname(file_path)
|
50
|
+
t = put(file_path, :ext => ext)
|
51
|
+
t.nil? ? nil : "http://img03.taobaocdn.com/tfscom/#{t}#{ext}"
|
52
|
+
end
|
53
|
+
|
54
|
+
# 删除文件, 不能带扩展名
|
55
|
+
def rm(tfs_name)
|
56
|
+
`#{tfstool_cmd} -i "rm #{tfs_name}"`
|
57
|
+
end
|
58
|
+
|
59
|
+
# 改名, 不能带扩展名
|
60
|
+
def rename(tfs_name, new_name)
|
61
|
+
`#{tfstool_cmd} -i "rename #{tfs_name} #{new_name}"`
|
62
|
+
end
|
63
|
+
|
64
|
+
# 文件信息查看, 不能带扩展名
|
65
|
+
def stat(tfs_name)
|
66
|
+
result = `#{tfstool_cmd} -i "stat #{tfs_name}"`
|
67
|
+
stat = {}
|
68
|
+
result.split("\n").each do |line|
|
69
|
+
line = line.split(':').map {|i| i.gsub!(" ", "")}
|
70
|
+
stat["#{line.first}"] = line.last
|
71
|
+
end
|
72
|
+
stat
|
73
|
+
end
|
74
|
+
|
75
|
+
protected
|
76
|
+
def tfstool_cmd
|
77
|
+
"#{@tfstool_path} -n -s #{@ns_addr}"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
class NoTFSToolError < RuntimeError
|
82
|
+
def to_s
|
83
|
+
"You must install tfs from yum or source first!"
|
84
|
+
end
|
85
|
+
end # NoTFSToolError
|
80
86
|
end
|
data/lib/rtfs/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rtfs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Nowa Zhu
|
@@ -15,7 +15,7 @@ autorequire: rtfs
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-08-
|
18
|
+
date: 2011-08-24 00:00:00 +08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -40,7 +40,7 @@ executables: []
|
|
40
40
|
extensions: []
|
41
41
|
|
42
42
|
extra_rdoc_files:
|
43
|
-
- README
|
43
|
+
- README.markdown
|
44
44
|
- CHANGES
|
45
45
|
- MIT-LICENSE
|
46
46
|
files:
|
@@ -49,7 +49,7 @@ files:
|
|
49
49
|
- lib/rtfs/client.rb
|
50
50
|
- lib/rtfs/wrapper.rb
|
51
51
|
- lib/rtfs.rb
|
52
|
-
- README
|
52
|
+
- README.markdown
|
53
53
|
- CHANGES
|
54
54
|
- MIT-LICENSE
|
55
55
|
has_rdoc: true
|
data/README
DELETED