rtfs 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/.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
|