copy-ruby 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +5 -0
  5. data/Gemfile +10 -0
  6. data/LICENSE +23 -0
  7. data/README.md +232 -0
  8. data/Rakefile +8 -0
  9. data/copy.gemspec +24 -0
  10. data/lib/copy.rb +85 -0
  11. data/lib/copy/base.rb +43 -0
  12. data/lib/copy/client.rb +70 -0
  13. data/lib/copy/file.rb +134 -0
  14. data/lib/copy/link.rb +52 -0
  15. data/lib/copy/operations/activity.rb +27 -0
  16. data/lib/copy/operations/all.rb +31 -0
  17. data/lib/copy/operations/base.rb +47 -0
  18. data/lib/copy/operations/create.rb +20 -0
  19. data/lib/copy/operations/delete.rb +25 -0
  20. data/lib/copy/operations/find.rb +21 -0
  21. data/lib/copy/operations/meta.rb +20 -0
  22. data/lib/copy/operations/show.rb +20 -0
  23. data/lib/copy/operations/update.rb +21 -0
  24. data/lib/copy/request/base.rb +41 -0
  25. data/lib/copy/request/connection.rb +120 -0
  26. data/lib/copy/request/helpers.rb +36 -0
  27. data/lib/copy/request/info.rb +41 -0
  28. data/lib/copy/request/validator.rb +53 -0
  29. data/lib/copy/revision.rb +25 -0
  30. data/lib/copy/session.rb +56 -0
  31. data/lib/copy/user.rb +24 -0
  32. data/lib/copy/version.rb +3 -0
  33. data/spec/copy/base_spec.rb +12 -0
  34. data/spec/copy/client_spec.rb +69 -0
  35. data/spec/copy/file_spec.rb +306 -0
  36. data/spec/copy/link_spec.rb +238 -0
  37. data/spec/copy/request/base_spec.rb +53 -0
  38. data/spec/copy/request/connection_spec.rb +73 -0
  39. data/spec/copy/request/info_spec.rb +27 -0
  40. data/spec/copy/request/validator_spec.rb +13 -0
  41. data/spec/copy/revision_spec.rb +42 -0
  42. data/spec/copy/user_spec.rb +119 -0
  43. data/spec/copy_spec.rb +52 -0
  44. data/spec/fixtures/hola.txt +1 -0
  45. data/spec/spec_helper.rb +12 -0
  46. metadata +170 -0
@@ -0,0 +1,53 @@
1
+ require "spec_helper"
2
+
3
+ describe Copy::Request::Base do
4
+ let(:consumer_key) { '_your_consumen_key_' }
5
+ let(:consumer_secret) { '_your_consumen_secret_' }
6
+ let(:info) { double(:info, session: session ) }
7
+ let(:session) { double(:session, valid?: true ) }
8
+ let(:request_base) { Copy::Request::Base.new(info) }
9
+ let(:connection) { double(:connection) }
10
+ let(:validator) { double(:validator) }
11
+
12
+ before :each do
13
+ allow(Copy::Request::Connection).to receive(:new).and_return(connection)
14
+ allow(Copy::Request::Validator).to receive(:new).and_return(validator)
15
+ Copy.config do |configuration|
16
+ configuration[:consumer_key] = consumer_key
17
+ configuration[:consumer_secret] = consumer_secret
18
+ end
19
+ end
20
+
21
+ describe "#perform" do
22
+ it 'raises AuthenticationError if request is not valid' do
23
+ allow(request_base).to receive(:valid?).and_return(false)
24
+ expect{request_base.perform}.to raise_error{ Copy::AuthenticationError }
25
+ end
26
+ it "performs an https request" do
27
+ allow_any_instance_of(Copy::Request::Base).to receive(:valid?).and_return(true)
28
+
29
+ expect(connection).to receive(:set_request_data)
30
+ expect(connection).to receive(:request)
31
+ expect(validator).to receive(:validated_data_for)
32
+
33
+ Copy::Request::Base.new(nil).perform
34
+ end
35
+ end
36
+
37
+ describe "#valid?" do
38
+ it 'is not valid if no info object given' do
39
+ expect(Copy::Request::Base.new(nil)).to_not be_valid
40
+ end
41
+ it 'is not valid if there is no session in info object' do
42
+ allow(info).to receive(:session).and_return(nil)
43
+ expect(request_base).to_not be_valid
44
+ end
45
+ it 'is not valid if session is invalid' do
46
+ allow(session).to receive(:valid?).and_return(false)
47
+ expect(request_base).to_not be_valid
48
+ end
49
+ it 'id valid othercase' do
50
+ expect(request_base).to be_valid
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,73 @@
1
+ require "spec_helper"
2
+
3
+ describe Copy::Request::Connection do
4
+ let(:consumer_key) { '_your_consumen_key_' }
5
+ let(:consumer_secret) { '_your_consumen_secret_' }
6
+ let(:access_token) do
7
+ {
8
+ token: '_your_user_token_',
9
+ secret: '_your_secret_token_'
10
+ }
11
+ end
12
+ let(:connection) { Copy::Request::Connection.new(info) }
13
+ let(:info) do
14
+ Copy::Request::Info.new(:get, nil, 'user', {}, { session: session })
15
+ end
16
+ let(:client) { Copy::Client.new(session) }
17
+ let(:session) { Copy::Session.new(access_token) }
18
+
19
+ before :each do
20
+ Copy.config do |configuration|
21
+ configuration[:consumer_key] = consumer_key
22
+ configuration[:consumer_secret] = consumer_secret
23
+ end
24
+ end
25
+
26
+ describe "#set_request_data" do
27
+ it "creates a request_data object" do
28
+ connection.set_request_data
29
+
30
+ expect(connection.request_data).to_not be_nil
31
+ end
32
+ end
33
+
34
+ describe "#request" do
35
+ it "performs the actual request" do
36
+ connection.set_request_data
37
+ connection.stub(:set_request_data)
38
+
39
+ connection.access_token.should_receive(:send).with(*connection.request_data)
40
+
41
+ connection.request
42
+ end
43
+ end
44
+
45
+ describe "#request_data" do
46
+ it "correctly formats the form data" do
47
+ info = double(
48
+ http_method: :post,
49
+ url: "/some/path",
50
+ data: params,
51
+ subdomain: Copy::DOMAIN_BASE,
52
+ session: session
53
+ )
54
+ connection = Copy::Request::Connection.new(info)
55
+ connection.set_request_data
56
+
57
+ connection.request_data.should eq(
58
+ [ :post,
59
+ "https://api.copy.com/some/path",
60
+ "{\"email\":\"abc_abc.com\",\"event_types\":[\"user.created\",\"user.failed\",\"team.created\",\"documents.available\"]}",
61
+ {"X-Api-Version"=>"1"}
62
+ ]
63
+ )
64
+ end
65
+ end
66
+
67
+ def params
68
+ {
69
+ email: "abc_abc.com",
70
+ event_types: ["user.created","user.failed", "team.created", "documents.available"]
71
+ }
72
+ end
73
+ end
@@ -0,0 +1,27 @@
1
+ require "spec_helper"
2
+
3
+ describe Copy::Request::Info do
4
+ describe "#url" do
5
+ it "constructs the url" do
6
+ info = Copy::Request::Info.new(:get, nil, "random", {id: 1} )
7
+
8
+ info.url.should =~ /random/
9
+ end
10
+ end
11
+
12
+ describe "#path_with_params" do
13
+ it "does nothing when no params" do
14
+ info = Copy::Request::Info.new(:get, nil, "random", nil)
15
+ path = "/path/to/someplace"
16
+
17
+ info.path_with_params(path, {}).should eq path
18
+ end
19
+
20
+ it "constructs the path with params" do
21
+ info = Copy::Request::Info.new(:get, nil, "random", nil)
22
+ path = "/path/to/someplace"
23
+
24
+ info.path_with_params(path, {random: "stuff"}).should eq "#{path}?random=stuff"
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ describe Copy::Request::Validator do
4
+ describe "#validated_data_for" do
5
+ it "validates the data" do
6
+ info = Copy::Request::Info.new(:get, nil, "random", OpenStruct.new(id: 1))
7
+ validator = Copy::Request::Validator.new info
8
+ response = OpenStruct.new(body: '{"response":"ok"}', code: 200)
9
+
10
+ validator.validated_data_for(response).should eq "response" => "ok"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,42 @@
1
+ require "spec_helper"
2
+
3
+ describe Copy::Revision do
4
+
5
+ let(:valid_attributes) do
6
+ JSON.parse %{
7
+ {
8
+ "revision_id": "5000",
9
+ "modified_time": 1365543105,
10
+ "size": 12670,
11
+ "latest": true,
12
+ "conflict": false,
13
+ "id": "/copy/Big%20API%20Changes/API-Changes.md/@activity/@time:1365543105",
14
+ "type": "revision",
15
+ "creator": {
16
+ "user_id": "1381231",
17
+ "created_time": 1358175510,
18
+ "email": "thomashunter@example.com",
19
+ "first_name": "Thomas",
20
+ "last_name": "Hunter",
21
+ "confirmed": true
22
+ }
23
+ }
24
+ }
25
+ end
26
+
27
+ let (:revision) do
28
+ Copy::Revision.new(valid_attributes)
29
+ end
30
+
31
+ describe "#initialize" do
32
+ it 'initializes all attributes correctly' do
33
+ expect(revision.revision_id).to eql('5000')
34
+ expect(revision.id).to eql('/copy/Big%20API%20Changes/API-Changes.md/@activity/@time:1365543105')
35
+ expect(revision.size).to eql(12670)
36
+ expect(revision.latest).to eql(true)
37
+ expect(revision.creator.class).to eql(Copy::User)
38
+ expect(revision.creator.id).to eql('1381231')
39
+ expect(revision.creator.email).to eql('thomashunter@example.com')
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,119 @@
1
+ require "spec_helper"
2
+
3
+ describe Copy::User do
4
+ let(:consumer_key) { '_your_consumen_key_' }
5
+ let(:consumer_secret) { '_your_consumen_secret_' }
6
+ let(:access_token) do
7
+ {
8
+ token: '_your_user_token_',
9
+ secret: '_your_secret_token_'
10
+ }
11
+ end
12
+ let(:client) { Copy::Client.new(session) }
13
+ let(:session) { Copy::Session.new(access_token) }
14
+ let(:valid_attributes) do
15
+ JSON.parse %{
16
+ {
17
+ "id": "1381231",
18
+ "storage":{
19
+ "used": 9207643837,
20
+ "quota": 1100585369600,
21
+ "saved": 14557934927
22
+ },
23
+ "first_name": "Thomas",
24
+ "last_name": "Hunter",
25
+ "developer": true,
26
+ "created_time": 1358175510,
27
+ "email": "thomashunter@example.com",
28
+ "emails": [
29
+ {
30
+ "primary": true,
31
+ "confirmed": true,
32
+ "email": "thomashunter@example.com",
33
+ "gravatar": "eca957c6552e783627a0ced1035e1888"
34
+ },
35
+ {
36
+ "primary": false,
37
+ "confirmed": true,
38
+ "email": "thomashunter@example.net",
39
+ "gravatar": "c0e344ddcbabb383f94b1bd3486e55ba"
40
+ }
41
+ ]
42
+ }
43
+ }
44
+ end
45
+ let (:user) do
46
+ Copy::User.new(valid_attributes)
47
+ end
48
+
49
+ before :each do
50
+ Copy.config do |configuration|
51
+ configuration[:consumer_key] = consumer_key
52
+ configuration[:consumer_secret] = consumer_secret
53
+ end
54
+ end
55
+
56
+ describe "#initialize" do
57
+ it 'initializes all attributes correctly' do
58
+ expect(user.email).to eql('thomashunter@example.com')
59
+ expect(user.id).to eql('1381231')
60
+ expect(user.first_name).to eql('Thomas')
61
+ expect(user.last_name).to eql('Hunter')
62
+ expect(user.emails.map {|a| a['email'] }).to eql(%w{thomashunter@example.com thomashunter@example.net})
63
+ end
64
+ end
65
+
66
+ describe ".show" do
67
+ let(:user_show) { Copy::User.show( session: session ) }
68
+ before :each do
69
+ allow(Copy).to receive(:request).and_return(valid_attributes)
70
+ end
71
+ it "makes a new GET request using the correct API endpoint to receive a specific user" do
72
+ expect(Copy).to receive(:request).with(:get, nil, "user", {}, { session: session })
73
+ user_show
74
+ end
75
+ it 'returns a user with the correct email' do
76
+ expect(user_show.email).to eql('thomashunter@example.com')
77
+ end
78
+ it 'returns a user with the correct id' do
79
+ expect(user_show.id).to eql('1381231')
80
+ end
81
+ it 'returns a user with the correct first_name' do
82
+ expect(user_show.first_name).to eql('Thomas')
83
+ end
84
+ it 'returns a user with the correct last_name' do
85
+ expect(user_show.last_name).to eql('Hunter')
86
+ end
87
+ end
88
+
89
+ describe ".update" do
90
+ let(:update_attributes) do
91
+ {
92
+ first_name: 'New Firt name',
93
+ last_name: 'New Last name'
94
+ }
95
+ end
96
+ let(:user_update) do
97
+ Copy::User.update(update_attributes.merge(session: session))
98
+ end
99
+ before :each do
100
+ allow(Copy).to receive(:request).and_return(valid_attributes.merge(update_attributes))
101
+ end
102
+ it "makes a new GET request using the correct API endpoint to receive a specific user" do
103
+ expect(Copy).to receive(:request).with(:put, nil, "user", update_attributes, { session: session })
104
+ user_update
105
+ end
106
+ it 'returns a user with the correct email' do
107
+ expect(user_update.email).to eql('thomashunter@example.com')
108
+ end
109
+ it 'returns a user with the correct id' do
110
+ expect(user_update.id).to eql('1381231')
111
+ end
112
+ it 'returns a user with the correct first_name' do
113
+ expect(user_update.first_name).to eql('New Firt name')
114
+ end
115
+ it 'returns a user with the correct last_name' do
116
+ expect(user_update.last_name).to eql('New Last name')
117
+ end
118
+ end
119
+ end
data/spec/copy_spec.rb ADDED
@@ -0,0 +1,52 @@
1
+ require "spec_helper"
2
+
3
+ describe Copy do
4
+ describe ".request" do
5
+ context "given no api key exists" do
6
+ it "raises an authentication error" do
7
+ expect { Copy.request(:get, nil, "clients", {}) }.to raise_error(Copy::AuthenticationError)
8
+ end
9
+ end
10
+
11
+ context "with an invalid api key" do
12
+ let(:consumer_key) { '_your_consumen_key_' }
13
+ let(:consumer_secret) { '_your_consumen_secret_' }
14
+ let(:access_token) do
15
+ {
16
+ token: '_your_user_token_',
17
+ secret: '_your_secret_token_'
18
+ }
19
+ end
20
+ let(:client) { Copy::Client.new(session) }
21
+ let(:session) { Copy::Session.new(access_token) }
22
+
23
+ before(:each) do
24
+ Copy.config do |configuration|
25
+ configuration[:consumer_key] = consumer_key
26
+ configuration[:consumer_secret] = consumer_secret
27
+ end
28
+ WebMock.stub_request(:any, /#{Copy::API_BASE}/).to_return(:body => "{}")
29
+ end
30
+
31
+ it "attempts to get a url with one param" do
32
+ Copy.request(:get, nil, 'user', { param_name: "param_value" }, { session: session })
33
+ WebMock.should have_requested(:get, "https://#{Copy::DOMAIN_BASE}.#{Copy::API_BASE}/#{Copy::API_BASE_PATH}/user?param_name=param_value")
34
+ end
35
+
36
+ it "attempts to get a url with more than one param" do
37
+ Copy.request(:get, nil, "user", { client: "client_id", order: "created_at_desc" }, { session: session })
38
+ WebMock.should have_requested(:get, "https://#{Copy::DOMAIN_BASE}.#{Copy::API_BASE}/#{Copy::API_BASE_PATH}/user?client=client_id&order=created_at_desc")
39
+ end
40
+
41
+ it "doesn't add a question mark if no params" do
42
+ Copy.request(:post, nil, "user", {}, { session: session })
43
+ WebMock.should have_requested(:post, "https://#{Copy::DOMAIN_BASE}.#{Copy::API_BASE}/#{Copy::API_BASE_PATH}/user")
44
+ end
45
+
46
+ it "uses the param id to construct the url" do
47
+ Copy.request(:post, nil, "user", {id: 'new_id'}, { session: session })
48
+ WebMock.should have_requested(:post, "https://#{Copy::DOMAIN_BASE}.#{Copy::API_BASE}/#{Copy::API_BASE_PATH}/user/new_id")
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1 @@
1
+ loremp ipsum dolor loremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolorloremp ipsum dolor...
@@ -0,0 +1,12 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
3
+ require "copy"
4
+ require "rspec"
5
+ require "rspec/autorun"
6
+ require "webmock/rspec"
7
+ require "pry"
8
+ require 'coveralls'
9
+ Coveralls.wear!
10
+
11
+ RSpec.configure do |config|
12
+ end
metadata ADDED
@@ -0,0 +1,170 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: copy-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Andres Bravo
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: oauth
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: multipart-post
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: 1.1.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 1.1.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: API wrapper for Copy.
84
+ email:
85
+ - hola@andresbravo.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - .gitignore
91
+ - .rspec
92
+ - .travis.yml
93
+ - Gemfile
94
+ - LICENSE
95
+ - README.md
96
+ - Rakefile
97
+ - copy.gemspec
98
+ - lib/copy.rb
99
+ - lib/copy/base.rb
100
+ - lib/copy/client.rb
101
+ - lib/copy/file.rb
102
+ - lib/copy/link.rb
103
+ - lib/copy/operations/activity.rb
104
+ - lib/copy/operations/all.rb
105
+ - lib/copy/operations/base.rb
106
+ - lib/copy/operations/create.rb
107
+ - lib/copy/operations/delete.rb
108
+ - lib/copy/operations/find.rb
109
+ - lib/copy/operations/meta.rb
110
+ - lib/copy/operations/show.rb
111
+ - lib/copy/operations/update.rb
112
+ - lib/copy/request/base.rb
113
+ - lib/copy/request/connection.rb
114
+ - lib/copy/request/helpers.rb
115
+ - lib/copy/request/info.rb
116
+ - lib/copy/request/validator.rb
117
+ - lib/copy/revision.rb
118
+ - lib/copy/session.rb
119
+ - lib/copy/user.rb
120
+ - lib/copy/version.rb
121
+ - spec/copy/base_spec.rb
122
+ - spec/copy/client_spec.rb
123
+ - spec/copy/file_spec.rb
124
+ - spec/copy/link_spec.rb
125
+ - spec/copy/request/base_spec.rb
126
+ - spec/copy/request/connection_spec.rb
127
+ - spec/copy/request/info_spec.rb
128
+ - spec/copy/request/validator_spec.rb
129
+ - spec/copy/revision_spec.rb
130
+ - spec/copy/user_spec.rb
131
+ - spec/copy_spec.rb
132
+ - spec/fixtures/hola.txt
133
+ - spec/spec_helper.rb
134
+ homepage: https://github.com/andresbravog/copy-ruby
135
+ licenses: []
136
+ metadata: {}
137
+ post_install_message:
138
+ rdoc_options: []
139
+ require_paths:
140
+ - lib
141
+ required_ruby_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ required_rubygems_version: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - '>='
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ requirements: []
152
+ rubyforge_project:
153
+ rubygems_version: 2.0.6
154
+ signing_key:
155
+ specification_version: 4
156
+ summary: API wrapper for Copy.
157
+ test_files:
158
+ - spec/copy/base_spec.rb
159
+ - spec/copy/client_spec.rb
160
+ - spec/copy/file_spec.rb
161
+ - spec/copy/link_spec.rb
162
+ - spec/copy/request/base_spec.rb
163
+ - spec/copy/request/connection_spec.rb
164
+ - spec/copy/request/info_spec.rb
165
+ - spec/copy/request/validator_spec.rb
166
+ - spec/copy/revision_spec.rb
167
+ - spec/copy/user_spec.rb
168
+ - spec/copy_spec.rb
169
+ - spec/fixtures/hola.txt
170
+ - spec/spec_helper.rb