p4_web_api_client 2014.2.0.pre1 → 2014.2.0.pre2
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.
- checksums.yaml +4 -4
- data/lib/p4_web_api_client/client/files.rb +60 -0
- data/lib/p4_web_api_client/client/run.rb +2 -2
- data/lib/p4_web_api_client/connection.rb +5 -1
- data/lib/p4_web_api_client/models/upload_file.rb +42 -0
- data/lib/p4_web_api_client/version.rb +1 -1
- data/spec/files_spec.rb +58 -1
- data/spec/run_input_spec.rb +1 -1
- data/spec/run_spec.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b8e4e28235231bd2413b64682c44d6bdd6d5bbb
|
4
|
+
data.tar.gz: 2ccbe57364a8ec3a59442786a5da4dde61b90286
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 790388c690229c7ec5c2b7415b46de0cfded8c46225e7b2aec1f807541a30754ff81bf1bbc17617780df5f5c2cb43307008421b201edbf53430718f34d0b3a66
|
7
|
+
data.tar.gz: e37faaf0d997fd72505dc0cbf685bb396d8303db31fc73eae3921c48fb6943ffb62d77cb80647ba4df9fb3660b48266674d9314821648462cb5e94dec7e9c858
|
@@ -2,6 +2,7 @@ require 'open-uri'
|
|
2
2
|
require 'p4_web_api_client/models/dir'
|
3
3
|
require 'p4_web_api_client/models/depot'
|
4
4
|
require 'p4_web_api_client/models/file'
|
5
|
+
require 'p4_web_api_client/models/upload_file'
|
5
6
|
|
6
7
|
module P4WebApiClient
|
7
8
|
class Client
|
@@ -26,5 +27,64 @@ module P4WebApiClient
|
|
26
27
|
end
|
27
28
|
end
|
28
29
|
end
|
30
|
+
|
31
|
+
# Returns the content of the path.
|
32
|
+
#
|
33
|
+
# The path should be a depot path, we'll basically just print out the
|
34
|
+
# latest version of the file.
|
35
|
+
def print(path)
|
36
|
+
return unless path
|
37
|
+
|
38
|
+
path = path.gsub(/^[\/]*/, '') # Strip leading slashes
|
39
|
+
|
40
|
+
path = "/print/#{path}"
|
41
|
+
response = connection.run_method_no_body(:get, path)
|
42
|
+
response.body
|
43
|
+
end
|
44
|
+
|
45
|
+
# Uploads file contents to the server.
|
46
|
+
#
|
47
|
+
# Takes an array of P4WebApiClient::Models::UploadFile definitions, or
|
48
|
+
# hashes that will be turned into those UploadFile definitions. Which means
|
49
|
+
# that each hash should include the following properties:
|
50
|
+
#
|
51
|
+
# - `depot_path`
|
52
|
+
# - `content`: If this is a string, we'll assume it's a local file path,
|
53
|
+
# or it can be an IO handle, which we'll just read
|
54
|
+
# - `content_type`: If not set, we'll assume `application/octet-stream`
|
55
|
+
#
|
56
|
+
# You can optionally send in a description, which will be used as the
|
57
|
+
# changelist message.
|
58
|
+
def upload(files, description = nil)
|
59
|
+
file_models = init_upload_files(files)
|
60
|
+
|
61
|
+
post_body = {
|
62
|
+
mappings: file_models.map(&:depot_path)
|
63
|
+
}
|
64
|
+
|
65
|
+
file_models.each_index do |idx|
|
66
|
+
key = "file_#{idx}"
|
67
|
+
post_body[key.to_sym] = file_models[idx].upload_io
|
68
|
+
end
|
69
|
+
|
70
|
+
post_body[:description] = description if description
|
71
|
+
|
72
|
+
connection.run_method_with_body(:post, '/upload', nil, post_body)
|
73
|
+
|
74
|
+
true
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
def init_upload_files(files)
|
80
|
+
file_models = []
|
81
|
+
files.each do |file|
|
82
|
+
unless file.is_a?(Models::UploadFile)
|
83
|
+
file = Models::UploadFile.new(file)
|
84
|
+
end
|
85
|
+
file_models << file
|
86
|
+
end
|
87
|
+
file_models
|
88
|
+
end
|
29
89
|
end
|
30
90
|
end
|
@@ -8,7 +8,7 @@ module P4WebApiClient
|
|
8
8
|
# arguments.
|
9
9
|
#
|
10
10
|
# Expect to always have an array of hashes as output.
|
11
|
-
def run(cmd, args
|
11
|
+
def run(cmd, *args)
|
12
12
|
params = arg_params(args)
|
13
13
|
params[:cmd] = cmd
|
14
14
|
execute_method_no_body(:get, '/run', params)
|
@@ -20,7 +20,7 @@ module P4WebApiClient
|
|
20
20
|
# then followed by additional command line arguments.
|
21
21
|
#
|
22
22
|
# Expect the output to always be an array of hashes.
|
23
|
-
def run_input(cmd, input, args
|
23
|
+
def run_input(cmd, input, *args)
|
24
24
|
params = arg_params(args)
|
25
25
|
params[:cmd] = cmd
|
26
26
|
execute_method_with_body(:post, '/run', params, input)
|
@@ -16,7 +16,11 @@ module P4WebApiClient
|
|
16
16
|
local_opts = [:login, :password, :prefix]
|
17
17
|
conn_options = options.select { |k| !local_opts.include?(k) }
|
18
18
|
|
19
|
-
@conn = Faraday.new(conn_options)
|
19
|
+
@conn = Faraday.new(conn_options) do |conn|
|
20
|
+
conn.request :multipart
|
21
|
+
conn.request :url_encoded
|
22
|
+
conn.adapter :net_http
|
23
|
+
end
|
20
24
|
|
21
25
|
@session_token = nil
|
22
26
|
@login = options[:login]
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Copyright (c) 2014 Perforce Software, Inc. All rights reserved.
|
2
|
+
|
3
|
+
require 'faraday'
|
4
|
+
|
5
|
+
module P4WebApiClient
|
6
|
+
module Models
|
7
|
+
# Models each argument sent into the `client.upload` method. In general,
|
8
|
+
# you'll create hashes instead of these instances directly, so this class
|
9
|
+
# is 'hidden' in usage.
|
10
|
+
class UploadFile
|
11
|
+
# Where the file should go in the Perforce server.
|
12
|
+
attr_accessor :depot_path
|
13
|
+
|
14
|
+
# The IO handle to file data. Note that the initializer will open up
|
15
|
+
# 'content' properties as local files if specified as strings.
|
16
|
+
attr_accessor :content
|
17
|
+
|
18
|
+
# The MIME type we send the data as, defaults to
|
19
|
+
# `application/octet-stream`
|
20
|
+
attr_accessor :content_type
|
21
|
+
|
22
|
+
def initialize(obj = {})
|
23
|
+
@depot_path = obj[:depot_path]
|
24
|
+
|
25
|
+
@content = obj[:content]
|
26
|
+
@content = ::File.open(@content, 'r') if @content.is_a?(String)
|
27
|
+
|
28
|
+
@content_type = obj[:content_type]
|
29
|
+
@content_type = 'application/octet-stream' unless @content_type
|
30
|
+
end
|
31
|
+
|
32
|
+
def unique_file_name
|
33
|
+
random = (0...8).map { (65 + rand(26)).chr }.join
|
34
|
+
"#{random}_#{::File.basename(depot_path)}"
|
35
|
+
end
|
36
|
+
|
37
|
+
def upload_io
|
38
|
+
Faraday::UploadIO.new(content, content_type, unique_file_name)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/spec/files_spec.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'rspec'
|
4
4
|
require 'p4_web_api_client'
|
5
|
-
|
5
|
+
require 'tempfile'
|
6
6
|
require 'test_connections'
|
7
7
|
|
8
8
|
RSpec.describe P4WebApiClient::Client, '#files' do
|
@@ -34,3 +34,60 @@ RSpec.describe P4WebApiClient::Client, '#files' do
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
37
|
+
|
38
|
+
RSpec.describe P4WebApiClient::Client, '#print' do
|
39
|
+
|
40
|
+
it 'should print the content of //depot/dev/Experimental/README' do
|
41
|
+
client_as_jdoe do |c|
|
42
|
+
content = c.print('//depot/dev/Experimental/README')
|
43
|
+
expect(content.strip).to eq('This is an experimental project README.')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
RSpec.describe P4WebApiClient::Client, '#upload' do
|
49
|
+
|
50
|
+
it 'should be able to edit and add files' do
|
51
|
+
client_as_jdoe do |c|
|
52
|
+
|
53
|
+
exists_up = Tempfile.new('exists')
|
54
|
+
new_up = Tempfile.new('new')
|
55
|
+
|
56
|
+
begin
|
57
|
+
exists_up.write('existing file content')
|
58
|
+
new_up.write('new file content')
|
59
|
+
|
60
|
+
exists_up.rewind
|
61
|
+
new_up.rewind
|
62
|
+
|
63
|
+
c.upload(
|
64
|
+
[
|
65
|
+
{
|
66
|
+
depot_path: '//depot/dev/Experimental/README',
|
67
|
+
content: exists_up.path
|
68
|
+
},
|
69
|
+
{
|
70
|
+
depot_path: '//depot/dev/Experimental/a.txt',
|
71
|
+
content: new_up.path,
|
72
|
+
content_type: 'text/plain'
|
73
|
+
}
|
74
|
+
]
|
75
|
+
)
|
76
|
+
|
77
|
+
ensure
|
78
|
+
exists_up.close
|
79
|
+
exists_up.unlink
|
80
|
+
|
81
|
+
new_up.close
|
82
|
+
new_up.unlink
|
83
|
+
end
|
84
|
+
|
85
|
+
exists_content = c.print('//depot/dev/Experimental/README')
|
86
|
+
expect(exists_content.strip).to eq('existing file content')
|
87
|
+
|
88
|
+
new_content = c.print('//depot/dev/Experimental/a.txt')
|
89
|
+
expect(new_content.strip).to eq('new file content')
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
data/spec/run_input_spec.rb
CHANGED
@@ -16,7 +16,7 @@ RSpec.describe P4WebApiClient::Client, '#run_input' do
|
|
16
16
|
'FullName' => 'Joe User',
|
17
17
|
'Email' => 'joeuser@example.com'
|
18
18
|
}
|
19
|
-
results = c.run_input('user', input,
|
19
|
+
results = c.run_input('user', input, '-i', '-f')
|
20
20
|
expect(results.length).to eq(1)
|
21
21
|
end
|
22
22
|
end
|
data/spec/run_spec.rb
CHANGED
@@ -13,7 +13,7 @@ RSpec.describe P4WebApiClient::Client, '#run' do
|
|
13
13
|
|
14
14
|
it "should allow us to run 'user -o' for our known user" do
|
15
15
|
client_as_super do |c|
|
16
|
-
results = c.run('user',
|
16
|
+
results = c.run('user', '-o')
|
17
17
|
expect(results.length).to eq(1)
|
18
18
|
expect(results[0]['User']).to eq('super')
|
19
19
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: p4_web_api_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2014.2.0.
|
4
|
+
version: 2014.2.0.pre2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tristan Juricek
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 2014.2.0.
|
75
|
+
version: 2014.2.0.pre2
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 2014.2.0.
|
82
|
+
version: 2014.2.0.pre2
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: puma
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -221,6 +221,7 @@ files:
|
|
221
221
|
- lib/p4_web_api_client/models/server.rb
|
222
222
|
- lib/p4_web_api_client/models/stream.rb
|
223
223
|
- lib/p4_web_api_client/models/triggers.rb
|
224
|
+
- lib/p4_web_api_client/models/upload_file.rb
|
224
225
|
- lib/p4_web_api_client/models/user.rb
|
225
226
|
- lib/p4_web_api_client/version.rb
|
226
227
|
- spec/branches_spec.rb
|