rtfs 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/CHANGES.md +8 -0
- data/README.md +85 -0
- data/lib/rtfs.rb +1 -3
- data/lib/rtfs/client.rb +2 -1
- data/lib/rtfs/meta.rb +5 -4
- data/lib/rtfs/tfstool.rb +14 -14
- data/lib/rtfs/version.rb +5 -4
- data/lib/rtfs/web_service.rb +36 -32
- data/lib/rtfs/wrapper.rb +11 -10
- data/rtfs.gemspec +15 -14
- data/spec/a.jpg +0 -0
- data/spec/b.jpg +0 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/upload_spec.rb +14 -0
- metadata +35 -18
- data/CHANGES +0 -9
- data/README.markdown +0 -126
- data/Rakefile +0 -11
- data/config/templates/github.gemspec.erb +0 -18
- data/pkg-info.yml +0 -27
- data/spec/spec.opts +0 -6
- data/tasks/pkg.rake +0 -22
data/.gitignore
CHANGED
data/CHANGES.md
ADDED
data/README.md
ADDED
@@ -0,0 +1,85 @@
|
|
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
|
+
This is basicly library for TFS access, you can use [carrierwave-tfs](http://github.com/huacnlee/carrierwave-tfs) for Carrierwave.
|
9
|
+
|
10
|
+
Requirements
|
11
|
+
------------
|
12
|
+
|
13
|
+
* Linux System (TFS only success build in Linux system.)
|
14
|
+
* TFS
|
15
|
+
|
16
|
+
INSTALL
|
17
|
+
-------
|
18
|
+
|
19
|
+
```bash
|
20
|
+
$ gem install rtfs
|
21
|
+
```
|
22
|
+
|
23
|
+
Configure
|
24
|
+
---------
|
25
|
+
|
26
|
+
create this files before using.
|
27
|
+
|
28
|
+
config/tfs.yml
|
29
|
+
|
30
|
+
```yaml
|
31
|
+
defaults: &defaults
|
32
|
+
host: '127.0.0.1:3100'
|
33
|
+
# or use WebService
|
34
|
+
host: 'http://127.0.0.1:3900'
|
35
|
+
appkey: "......."
|
36
|
+
|
37
|
+
development:
|
38
|
+
<<: *defaults
|
39
|
+
|
40
|
+
test:
|
41
|
+
<<: *defaults
|
42
|
+
|
43
|
+
production:
|
44
|
+
<<: *defaults
|
45
|
+
```
|
46
|
+
|
47
|
+
config/initialize/tfs.rb
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
require 'rtfs'
|
51
|
+
tfs_config = YAML.load_file("#{Rails.root}/config/tfs.yml")[Rails.env]
|
52
|
+
$tfs = RTFS::Client.tfs(tfs_config.merge({:ns_addr => tfs_config['host']}))
|
53
|
+
```
|
54
|
+
|
55
|
+
:ns_addr include http:// tfs used webservice
|
56
|
+
|
57
|
+
|
58
|
+
Usage
|
59
|
+
-----
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
class UsersController < ApplicationController
|
63
|
+
def save
|
64
|
+
@user = User.new
|
65
|
+
ext = File.extname(params[:Filedata].original_filename)
|
66
|
+
file_name = $tfs.put(params[:Filedata].tempfile.path, :ext => ext)
|
67
|
+
@user.avatar_path = [file_name,ext].join("")
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
class User < ActiveRecord::Base
|
73
|
+
def avatar_url
|
74
|
+
server_id = self.id % 4 + 1
|
75
|
+
"http://img#{server_id}.tbcdn.com/#{self.avatar_path}"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
```
|
79
|
+
|
80
|
+
Put local file to TFS
|
81
|
+
|
82
|
+
```bash
|
83
|
+
irb> $tfs.put("~/Downloads/a.jpg")
|
84
|
+
T1Ub1XXeFBXXb1upjX
|
85
|
+
RTFS
|
data/lib/rtfs.rb
CHANGED
data/lib/rtfs/client.rb
CHANGED
data/lib/rtfs/meta.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
# meta.rb contains <tt>Top4R::Meta</tt> and related classes that
|
2
3
|
# help define the metadata of the <tt>Top4R</tt> project.
|
3
4
|
|
@@ -20,24 +21,24 @@ class RTFS::Meta #:nodoc:
|
|
20
21
|
s = ryaml.result(binding)
|
21
22
|
YAML.load(s)
|
22
23
|
end
|
23
|
-
|
24
|
+
|
24
25
|
# Returns RubyGems spec information
|
25
26
|
def spec_info
|
26
27
|
self.pkg_info['spec'] if self.pkg_info
|
27
28
|
end
|
28
|
-
|
29
|
+
|
29
30
|
# Returns list of project files
|
30
31
|
def project_files
|
31
32
|
@project_files ||= Dir.glob(File.join(@root_dir, 'lib/**/*.rb'))
|
32
33
|
@project_files
|
33
34
|
end
|
34
|
-
|
35
|
+
|
35
36
|
# Returns list of specification files
|
36
37
|
def spec_files
|
37
38
|
@spec_files ||= Dir.glob(File.join(@root_dir, 'spec/**/*_spec.rb'))
|
38
39
|
@spec_files
|
39
40
|
end
|
40
|
-
|
41
|
+
|
41
42
|
# Returns RubyGem specification for Top4R project
|
42
43
|
def gem_spec
|
43
44
|
@gem_spec ||= Gem::Specification.new do |spec|
|
data/lib/rtfs/tfstool.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
module RTFS
|
2
3
|
|
3
4
|
TFSTOOL_PATH = "/home/admin/tfs/bin/tfstool"
|
@@ -5,7 +6,7 @@ module RTFS
|
|
5
6
|
|
6
7
|
attr_accessor :ns_addr
|
7
8
|
attr_accessor :tfstool_path
|
8
|
-
|
9
|
+
|
9
10
|
# 参数:
|
10
11
|
# :ns_addr TFS 服务器地址,如 127.0.0.1:3100
|
11
12
|
# :tfstool_path tfstool 安装路径,默认 /home/admin/tfs/bin/tfstool
|
@@ -13,18 +14,18 @@ module RTFS
|
|
13
14
|
return nil unless options
|
14
15
|
@ns_addr = options[:ns_addr]
|
15
16
|
@tfstool_path = options[:tfstool_path] ? options[:tfstool_path] : TFSTOOL_PATH
|
16
|
-
|
17
|
-
|
17
|
+
if not File.exist?(@tfstool_path)
|
18
|
+
puts "[RTFS] debuger: #{@tfstool_path}"
|
18
19
|
raise NoTFSToolError.new
|
19
|
-
|
20
|
+
end
|
20
21
|
end
|
21
|
-
|
22
|
+
|
22
23
|
# 获取文件
|
23
24
|
def get(tfs_name, local_file=nil)
|
24
25
|
local_file ||= tfs_name
|
25
26
|
`#{tfstool_cmd} -i "get #{tfs_name} #{local_file}"`
|
26
27
|
end
|
27
|
-
|
28
|
+
|
28
29
|
# 上传文件
|
29
30
|
# 参数:
|
30
31
|
# file_path 需要上传的文件路径
|
@@ -36,7 +37,7 @@ module RTFS
|
|
36
37
|
tfs_name = "NULL"
|
37
38
|
result = `#{tfstool_cmd} -i "put #{file_path} #{tfs_name} #{ext}"`
|
38
39
|
# puts "result: #{result}"
|
39
|
-
t = nil
|
40
|
+
t = nil
|
40
41
|
if result.include?("=> ")
|
41
42
|
result = result.split("=> ").last
|
42
43
|
if result.include?(",")
|
@@ -45,24 +46,24 @@ module RTFS
|
|
45
46
|
end
|
46
47
|
t.nil? ? nil : t
|
47
48
|
end
|
48
|
-
|
49
|
+
|
49
50
|
# 上传文件 并返回完整 url (only for Taobao)
|
50
51
|
def put_and_get_url(file_path, options = {})
|
51
52
|
ext = options[:ext] || File.extname(file_path)
|
52
53
|
t = put(file_path, :ext => ext)
|
53
54
|
t.nil? ? nil : "http://img03.taobaocdn.com/tfscom/#{t}#{ext}"
|
54
55
|
end
|
55
|
-
|
56
|
+
|
56
57
|
# 删除文件, 不能带扩展名
|
57
58
|
def rm(tfs_name)
|
58
59
|
`#{tfstool_cmd} -i "rm #{tfs_name}"`
|
59
60
|
end
|
60
|
-
|
61
|
+
|
61
62
|
# 改名, 不能带扩展名
|
62
63
|
def rename(tfs_name, new_name)
|
63
64
|
`#{tfstool_cmd} -i "rename #{tfs_name} #{new_name}"`
|
64
65
|
end
|
65
|
-
|
66
|
+
|
66
67
|
# 文件信息查看, 不能带扩展名
|
67
68
|
def stat(tfs_name)
|
68
69
|
result = `#{tfstool_cmd} -i "stat #{tfs_name}"`
|
@@ -73,17 +74,16 @@ module RTFS
|
|
73
74
|
end
|
74
75
|
stat
|
75
76
|
end
|
76
|
-
|
77
|
+
|
77
78
|
protected
|
78
79
|
def tfstool_cmd
|
79
80
|
"#{@tfstool_path} -n -s #{@ns_addr}"
|
80
81
|
end
|
81
82
|
end
|
82
|
-
|
83
|
+
|
83
84
|
class NoTFSToolError < RuntimeError
|
84
85
|
def to_s
|
85
86
|
"You must install tfs from yum or source first!"
|
86
87
|
end
|
87
88
|
end # NoTFSToolError
|
88
|
-
|
89
89
|
end
|
data/lib/rtfs/version.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
# Version for RTFS
|
2
3
|
# by nowa<nowazhu@gmail.com> 2011-07-23
|
3
4
|
|
4
5
|
module RTFS::Version
|
5
|
-
MAJOR
|
6
|
-
MINOR
|
7
|
-
REVISION =
|
8
|
-
|
6
|
+
MAJOR = 0
|
7
|
+
MINOR = 1
|
8
|
+
REVISION = 1
|
9
|
+
|
9
10
|
class << self
|
10
11
|
# Returns X.Y.Z formatted version string
|
11
12
|
def to_version
|
data/lib/rtfs/web_service.rb
CHANGED
@@ -1,24 +1,31 @@
|
|
1
|
-
#
|
1
|
+
# coding: utf-8
|
2
2
|
require 'rest-client'
|
3
|
+
require 'open-uri'
|
3
4
|
require "json"
|
4
5
|
|
5
6
|
module RTFS
|
6
7
|
class WebService
|
7
8
|
|
8
9
|
attr_accessor :appkey
|
9
|
-
attr_accessor :
|
10
|
+
attr_accessor :ns_addrs
|
10
11
|
|
11
12
|
def initialize(options)
|
12
13
|
return nil unless options
|
13
|
-
|
14
|
-
@
|
14
|
+
# 通过 ns_addr 的地址获取负载均衡的地址
|
15
|
+
@ns_addrs ||= open("#{options[:ns_addr]}/tfs.list").read.split("\n")
|
16
|
+
@appkey = options[:appkey]
|
15
17
|
end
|
16
|
-
|
18
|
+
|
19
|
+
# 随机取一个 ns_addr 用于访问
|
20
|
+
def ns_addr
|
21
|
+
@ns_addrs[rand(@ns_addrs.size)]
|
22
|
+
end
|
23
|
+
|
17
24
|
# 获取文件
|
18
25
|
def get(tfs_name, local_file=nil)
|
19
26
|
RestClient.get(get_url("/v1/#{appkey}/#{tfs_name}"))
|
20
27
|
end
|
21
|
-
|
28
|
+
|
22
29
|
# 上传文件
|
23
30
|
# 参数:
|
24
31
|
# file_path 需要上传的文件路径
|
@@ -26,35 +33,34 @@ module RTFS
|
|
26
33
|
# 返回值
|
27
34
|
# T1lpVcXftHXXaCwpjX
|
28
35
|
def put(file_path, options = {})
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
36
|
+
ext = options[:ext] || File.extname(file_path)
|
37
|
+
response = RestClient.post(get_url("/v1/#{appkey}",{:suffix => ext, :simple_name => options[:simple_name] || 0}),File.open(file_path).read, :accept => :json )
|
38
|
+
json = JSON.parse(response)
|
39
|
+
json && json["TFS_FILE_NAME"] ? json["TFS_FILE_NAME"] : nil
|
34
40
|
end
|
35
|
-
|
41
|
+
|
36
42
|
# 上传文件 并返回完整 url (only for Taobao)
|
37
43
|
def put_and_get_url(file_path, options = {})
|
38
|
-
|
39
|
-
|
40
|
-
|
44
|
+
ext = options[:ext] || File.extname(file_path)
|
45
|
+
t = put(file_path, :ext => ext)
|
46
|
+
t.nil? ? nil : "http://img0#{rand(4)+1}.taobaocdn.com/tfscom/#{t}#{ext}"
|
41
47
|
end
|
42
|
-
|
48
|
+
|
43
49
|
# 删除文件, 不能带扩展名
|
44
50
|
def rm(tfs_name,options = {})
|
45
|
-
|
46
|
-
|
51
|
+
response = RestClient.delete(get_url("/v1/#{appkey}/#{tfs_name}", options))
|
52
|
+
response && response.code == 200 ? true : nil
|
47
53
|
end
|
48
|
-
|
54
|
+
|
49
55
|
# 改名, 不能带扩展名
|
50
56
|
def rename(tfs_name, new_name)
|
51
57
|
#`#{tfstool_cmd} -i "rename #{tfs_name} #{new_name}"`
|
52
58
|
end
|
53
|
-
|
59
|
+
|
54
60
|
# 文件信息查看, 不能带扩展名
|
55
61
|
def stat(tfs_name,options = {})
|
56
|
-
|
57
|
-
|
62
|
+
response = RestClient.get(get_url("/v1/#{appkey}/metadata/#{tfs_name}", options))
|
63
|
+
response && response.code == 200 ? JSON.parse(response) : nil
|
58
64
|
end
|
59
65
|
|
60
66
|
def client_name
|
@@ -63,20 +69,18 @@ module RTFS
|
|
63
69
|
|
64
70
|
private
|
65
71
|
|
66
|
-
|
67
72
|
def appkey
|
68
|
-
|
73
|
+
@appkey
|
69
74
|
end
|
70
75
|
|
71
76
|
def get_url(url,opts = {})
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
77
|
+
return url unless opts
|
78
|
+
url = "#{self.ns_addr}#{url}"
|
79
|
+
params = []
|
80
|
+
opts.each{ |k,v|
|
81
|
+
params << "#{k}=#{v}"
|
82
|
+
}
|
83
|
+
url.include?("?") ? "#{url}&#{params.join("&")}" : "#{url}?#{params.join("&")}"
|
79
84
|
end
|
80
|
-
|
81
85
|
end
|
82
86
|
end
|
data/lib/rtfs/wrapper.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
1
|
+
# coding: utf-8
|
2
|
+
# 使用ffi和nice-ffi来调用动态库的c接口
|
3
|
+
# tfsclient c api目前尚不完善,基于c接口的封装调用不能满足需求
|
4
|
+
# 因此目前不使用该wrapper,文件暂存
|
4
5
|
# by nowa<nowazhu@gmail.com> 2011-07-23
|
5
6
|
|
6
7
|
module LibC
|
@@ -14,7 +15,7 @@ module LibC
|
|
14
15
|
# memory allocators
|
15
16
|
attach_function :malloc, [:size_t], :pointer
|
16
17
|
attach_function :free, [:pointer], :void
|
17
|
-
|
18
|
+
|
18
19
|
# get a pointer to the free function; used for ZMQ::Message deallocation
|
19
20
|
Free = library.find_symbol('free')
|
20
21
|
|
@@ -27,11 +28,11 @@ module LibRTFS
|
|
27
28
|
|
28
29
|
libs_dir = "/home/admin/tfs/lib/"
|
29
30
|
pathset = NiceFFI::PathSet::DEFAULT.prepend(libs_dir)
|
30
|
-
|
31
|
+
|
31
32
|
load_library("tfsclient_c", pathset)
|
32
33
|
|
33
34
|
attach_function :t_initialize, [:string, :int, :int], :int
|
34
|
-
|
35
|
+
|
35
36
|
#enum OpenFlag
|
36
37
|
# {
|
37
38
|
# T_READ = 1,
|
@@ -41,7 +42,7 @@ module LibRTFS
|
|
41
42
|
# T_NOLEASE = 16,
|
42
43
|
# T_STAT = 32,
|
43
44
|
# T_LARGE = 64
|
44
|
-
# };
|
45
|
+
# };
|
45
46
|
attach_function :t_open, [:string, :string, :string, :int, :string], :int
|
46
47
|
attach_function :t_read, [:int, :pointer, :int], :int
|
47
48
|
attach_function :t_write, [:int, :pointer, :int], :int
|
@@ -51,13 +52,13 @@ module LibRTFS
|
|
51
52
|
attach_function :t_fstat, [:int, :pointer, :int], :int
|
52
53
|
attach_function :t_close, [:int, :string, :int], :int
|
53
54
|
attach_function :t_unlink, [:string, :string, :int], :int
|
54
|
-
end
|
55
|
+
end
|
55
56
|
|
56
|
-
#
|
57
|
+
# 下面这部分代码仅供测试LibRTFS
|
57
58
|
# LibRTFS.t_initialize("10.232.35.32:3100", 5, 1000)
|
58
59
|
# fd = LibRTFS.t_open("test", ".png", nil, 2, nil)
|
59
60
|
# puts "fd: #{fd}"
|
60
|
-
#
|
61
|
+
#
|
61
62
|
# ori_file = nil
|
62
63
|
# File.open("/home/xifeng/1.png", "r") do |f|
|
63
64
|
# ori_file = f.read
|
data/rtfs.gemspec
CHANGED
@@ -1,18 +1,19 @@
|
|
1
|
-
#
|
1
|
+
# coding: utf-8
|
2
2
|
Gem::Specification.new do |s|
|
3
|
-
s.name
|
4
|
-
s.version
|
5
|
-
s.platform
|
6
|
-
s.has_rdoc
|
7
|
-
s.extra_rdoc_files = ["README.
|
8
|
-
s.summary
|
9
|
-
s.author
|
10
|
-
s.email
|
11
|
-
s.homepage
|
3
|
+
s.name = "rtfs"
|
4
|
+
s.version = "0.1.1"
|
5
|
+
s.platform = Gem::Platform::RUBY
|
6
|
+
s.has_rdoc = true
|
7
|
+
s.extra_rdoc_files = ["README.md","CHANGES.md","MIT-LICENSE",]
|
8
|
+
s.summary = "RTFS is a Ruby Client for TFS."
|
9
|
+
s.author = ["Nowa Zhu","Jason Lee","Cricy"]
|
10
|
+
s.email = ["nowazhu@gmail.com","huacnlee@gmail.com","feiyelanghai@gmail.com"]
|
11
|
+
s.homepage = "https://github.com/nowa/rtfs"
|
12
|
+
s.files = `git ls-files`.split("\n")
|
13
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
+
s.require_paths = ["lib"]
|
15
|
+
s.bindir = 'bin'
|
16
|
+
|
12
17
|
s.add_dependency("nice-ffi", ">=0.4")
|
13
18
|
s.add_dependency("rest-client", ">=1.6.0")
|
14
|
-
s.files = `git ls-files`.split("\n")
|
15
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
-
s.require_paths = ["lib"]
|
17
|
-
s.bindir = 'bin'
|
18
19
|
end
|
data/spec/a.jpg
ADDED
Binary file
|
data/spec/b.jpg
ADDED
Binary file
|
data/spec/spec_helper.rb
ADDED
data/spec/upload_spec.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "open-uri"
|
3
|
+
|
4
|
+
describe "Base upload" do
|
5
|
+
it "should upload" do
|
6
|
+
fname = $tfs.put("spec/a.jpg")
|
7
|
+
f = open("http://10.232.4.42/tfscom/#{fname}.jpg")
|
8
|
+
f.read.length.should == 6153
|
9
|
+
|
10
|
+
fname = $tfs.put("spec/b.jpg")
|
11
|
+
f = open("http://10.232.4.42/tfscom/#{fname}.jpg")
|
12
|
+
f.read.length.should == 114504
|
13
|
+
end
|
14
|
+
end
|
metadata
CHANGED
@@ -1,19 +1,21 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rtfs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Nowa Zhu
|
9
|
+
- Jason Lee
|
10
|
+
- Cricy
|
9
11
|
autorequire:
|
10
12
|
bindir: bin
|
11
13
|
cert_chain: []
|
12
|
-
date: 2012-
|
14
|
+
date: 2012-06-20 00:00:00.000000000 Z
|
13
15
|
dependencies:
|
14
16
|
- !ruby/object:Gem::Dependency
|
15
17
|
name: nice-ffi
|
16
|
-
requirement:
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
17
19
|
none: false
|
18
20
|
requirements:
|
19
21
|
- - ! '>='
|
@@ -21,10 +23,15 @@ dependencies:
|
|
21
23
|
version: '0.4'
|
22
24
|
type: :runtime
|
23
25
|
prerelease: false
|
24
|
-
version_requirements:
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
none: false
|
28
|
+
requirements:
|
29
|
+
- - ! '>='
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: '0.4'
|
25
32
|
- !ruby/object:Gem::Dependency
|
26
33
|
name: rest-client
|
27
|
-
requirement:
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
28
35
|
none: false
|
29
36
|
requirements:
|
30
37
|
- - ! '>='
|
@@ -32,22 +39,28 @@ dependencies:
|
|
32
39
|
version: 1.6.0
|
33
40
|
type: :runtime
|
34
41
|
prerelease: false
|
35
|
-
version_requirements:
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.6.0
|
36
48
|
description:
|
37
|
-
email:
|
49
|
+
email:
|
50
|
+
- nowazhu@gmail.com
|
51
|
+
- huacnlee@gmail.com
|
52
|
+
- feiyelanghai@gmail.com
|
38
53
|
executables: []
|
39
54
|
extensions: []
|
40
55
|
extra_rdoc_files:
|
41
|
-
- README.
|
42
|
-
- CHANGES
|
56
|
+
- README.md
|
57
|
+
- CHANGES.md
|
43
58
|
- MIT-LICENSE
|
44
59
|
files:
|
45
60
|
- .gitignore
|
46
|
-
- CHANGES
|
61
|
+
- CHANGES.md
|
47
62
|
- MIT-LICENSE
|
48
|
-
- README.
|
49
|
-
- Rakefile
|
50
|
-
- config/templates/github.gemspec.erb
|
63
|
+
- README.md
|
51
64
|
- lib/rtfs.rb
|
52
65
|
- lib/rtfs/client.rb
|
53
66
|
- lib/rtfs/meta.rb
|
@@ -55,10 +68,11 @@ files:
|
|
55
68
|
- lib/rtfs/version.rb
|
56
69
|
- lib/rtfs/web_service.rb
|
57
70
|
- lib/rtfs/wrapper.rb
|
58
|
-
- pkg-info.yml
|
59
71
|
- rtfs.gemspec
|
60
|
-
- spec/
|
61
|
-
-
|
72
|
+
- spec/a.jpg
|
73
|
+
- spec/b.jpg
|
74
|
+
- spec/spec_helper.rb
|
75
|
+
- spec/upload_spec.rb
|
62
76
|
homepage: https://github.com/nowa/rtfs
|
63
77
|
licenses: []
|
64
78
|
post_install_message:
|
@@ -79,9 +93,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
79
93
|
version: '0'
|
80
94
|
requirements: []
|
81
95
|
rubyforge_project:
|
82
|
-
rubygems_version: 1.8.
|
96
|
+
rubygems_version: 1.8.24
|
83
97
|
signing_key:
|
84
98
|
specification_version: 3
|
85
99
|
summary: RTFS is a Ruby Client for TFS.
|
86
100
|
test_files:
|
87
|
-
- spec/
|
101
|
+
- spec/a.jpg
|
102
|
+
- spec/b.jpg
|
103
|
+
- spec/spec_helper.rb
|
104
|
+
- spec/upload_spec.rb
|
data/CHANGES
DELETED
data/README.markdown
DELETED
@@ -1,126 +0,0 @@
|
|
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
|
-
appkey: "......."
|
24
|
-
|
25
|
-
development:
|
26
|
-
<<: *defaults
|
27
|
-
|
28
|
-
test:
|
29
|
-
<<: *defaults
|
30
|
-
|
31
|
-
production:
|
32
|
-
<<: *defaults
|
33
|
-
|
34
|
-
config/initialize/tfs.rb
|
35
|
-
|
36
|
-
require 'rtfs'
|
37
|
-
tfs_config = YAML.load_file("#{Rails.root}/config/tfs.yml")[Rails.env]
|
38
|
-
$tfs = RTFS::Client.tfs(tfs_config.merge({:ns_addr => tfs_config['host']}))
|
39
|
-
|
40
|
-
:ns_addr include http:// tfs used webservice
|
41
|
-
|
42
|
-
Configure without TFS install
|
43
|
-
-----------------------------
|
44
|
-
|
45
|
-
If you development environment is Mac, or your developemnt environment not install TFS, you need use this file to hack upload file as FileSystem.
|
46
|
-
|
47
|
-
lib/fake_tfs.rb
|
48
|
-
|
49
|
-
module FakeTfs
|
50
|
-
class Client
|
51
|
-
def initialize(options = {})
|
52
|
-
@ns_addr = options[:ns_addr] || "uploads/tfs/"
|
53
|
-
if @ns_addr[0] != "/"
|
54
|
-
@ns_addr = [Rails.root,"public",@ns_addr].join("/")
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def put_file(file_path, options = {})
|
59
|
-
ext = options[:ext] || File.extname(file_path)
|
60
|
-
ext = ".jpg" if ext.blank?
|
61
|
-
file_name = [Digest::SHA1.hexdigest(file_path),ext].join("")
|
62
|
-
|
63
|
-
new_path = [@ns_addr,file_name].join("/")
|
64
|
-
|
65
|
-
FileUtils.cp(file_path, new_path)
|
66
|
-
File.basename(new_path)
|
67
|
-
end
|
68
|
-
|
69
|
-
def rm_file(file_id)
|
70
|
-
puts "FakeTFS: removing #{file_id}\n"
|
71
|
-
Dir.glob(File.join(@ns_addr, "#{file_id}.*"))[0]
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
|
77
|
-
config/tfs.yml
|
78
|
-
|
79
|
-
defaults: &defaults
|
80
|
-
host: 'uploads/tfs/'
|
81
|
-
|
82
|
-
development:
|
83
|
-
<<: *defaults
|
84
|
-
|
85
|
-
test:
|
86
|
-
<<: *defaults
|
87
|
-
|
88
|
-
production:
|
89
|
-
<<: *defaults
|
90
|
-
host: '127.0.0.1:3100'
|
91
|
-
|
92
|
-
config/initialize/tfs.rb
|
93
|
-
|
94
|
-
tfs_config = YAML.load_file("#{Rails.root}/config/tfs.yml")[Rails.env]
|
95
|
-
if Rails.env == "development"
|
96
|
-
$tfs = FakeTfs::Client.new(:ns_addr => tfs_config['host'])
|
97
|
-
else
|
98
|
-
require 'rtfs'
|
99
|
-
$tfs = RTFS::Client.tfs(tfs_config.merge({:ns_addr => tfs_config['host']}))
|
100
|
-
end
|
101
|
-
|
102
|
-
|
103
|
-
Usage
|
104
|
-
-----
|
105
|
-
|
106
|
-
class UsersController < ApplicationController
|
107
|
-
def save
|
108
|
-
@user = User.new
|
109
|
-
ext = File.extname(params[:Filedata].original_filename)
|
110
|
-
file_name = $tfs.put(params[:Filedata].tempfile.path, :ext => ext)
|
111
|
-
@user.avatar_path = [file_name,ext].join("")
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
|
116
|
-
class User < ActiveRecord::Base
|
117
|
-
def avatar_url
|
118
|
-
server_id = self.id % 4 + 1
|
119
|
-
"http://img#{server_id}.tbcdn.com/#{self.avatar_path}"
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
Put local file to TFS
|
124
|
-
|
125
|
-
$ $tfs.put("~/Downloads/a.jpg")
|
126
|
-
T1Ub1XXeFBXXb1upjX
|
data/Rakefile
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
# Generated: <%= Time.now.utc.to_s %>
|
2
|
-
Gem::Specification.new do |s|
|
3
|
-
s.name = "<%= spec['name'] %>"
|
4
|
-
s.version = "<%= spec['version'] %>"
|
5
|
-
s.platform = Gem::Platform::RUBY
|
6
|
-
s.has_rdoc = true
|
7
|
-
s.extra_rdoc_files = [<% spec['extra_rdoc_files'].each do |f| %>"<%= f %>",<% end %>]
|
8
|
-
s.summary = "<%= spec['summary'] %>"
|
9
|
-
s.author = "<%= spec['author'] %>"
|
10
|
-
s.email = "<%= spec['email'] %>"
|
11
|
-
s.homepage = "<%= spec['homepage'] %>"
|
12
|
-
s.rubyforge_project = "<%= spec['rubyforge_project'] %>"
|
13
|
-
<% spec['add_dependency'].each do |gem, version| %>s.add_dependency("<%= gem %>", "<%= version %>")<% end %>
|
14
|
-
# s.require_path = "<%= spec['require_path'] %>"
|
15
|
-
s.files = [<% spec['files'].each {|f| %>"<%= f %>",<% } %>]
|
16
|
-
s.bindir = 'bin'
|
17
|
-
s.executables = ['top4rsh']
|
18
|
-
end
|
data/pkg-info.yml
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
<% require('pathname') %>
|
2
|
-
spec:
|
3
|
-
name: rtfs
|
4
|
-
version: <%= RTFS::Version.to_version %>
|
5
|
-
summary: RTFS is a Ruby Client for TFS.
|
6
|
-
require_path: lib
|
7
|
-
has_rdoc: false
|
8
|
-
extra_rdoc_files:
|
9
|
-
- README.markdown
|
10
|
-
- CHANGES
|
11
|
-
- MIT-LICENSE
|
12
|
-
autorequire: rtfs
|
13
|
-
# bindir: bin
|
14
|
-
add_dependency:
|
15
|
-
nice-ffi: >=0.4
|
16
|
-
requirements:
|
17
|
-
- Ruby 1.8.7+
|
18
|
-
# - json gem, version 0.4.3 or higher
|
19
|
-
# - jcode (for unicode support)
|
20
|
-
required_ruby_version: >=1.8.7
|
21
|
-
author: Nowa Zhu
|
22
|
-
email: nowazhu@gmail.com
|
23
|
-
homepage: http://rtfs.labs.nowa.me
|
24
|
-
rubyforge_project: rtfs
|
25
|
-
files: <% (self.project_files + self.spec_files).each do |file| %>
|
26
|
-
- <%= Pathname.new(file).relative_path_from(Pathname.new(@root_dir)) %>
|
27
|
-
<% end %>
|
data/spec/spec.opts
DELETED
data/tasks/pkg.rake
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
require 'rake/gempackagetask'
|
2
|
-
|
3
|
-
meta = RTFS::Meta.new(ROOT_DIR)
|
4
|
-
namespace :package do
|
5
|
-
desc "Create Gem Packages"
|
6
|
-
Rake::GemPackageTask.new(meta.gem_spec) do |pkg|
|
7
|
-
pkg.need_zip = true
|
8
|
-
pkg.need_tar = true
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
namespace :gemspec do
|
13
|
-
desc "Create GemSpec"
|
14
|
-
task :generate do
|
15
|
-
spec = meta.pkg_info['spec']
|
16
|
-
rgs = ERB.new(File.read(File.join(ROOT_DIR, 'config', 'templates', 'github.gemspec.erb')), 0)
|
17
|
-
s = rgs.result(spec.send(:binding))
|
18
|
-
gs_file = File.join(ROOT_DIR, 'rtfs.gemspec')
|
19
|
-
File.delete(gs_file) if File.exist?(gs_file)
|
20
|
-
File.open(gs_file, 'w') {|f| f.write(s); }
|
21
|
-
end
|
22
|
-
end
|