code42 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -0
  3. data/code42.gemspec +3 -0
  4. data/lib/code42.rb +66 -27
  5. data/lib/code42/api/destination.rb +18 -0
  6. data/lib/code42/api/diagnostic.rb +9 -0
  7. data/lib/code42/api/org.rb +5 -2
  8. data/lib/code42/api/product_license.rb +21 -0
  9. data/lib/code42/api/server.rb +21 -0
  10. data/lib/code42/api/server_connection_string.rb +9 -0
  11. data/lib/code42/api/server_settings.rb +13 -0
  12. data/lib/code42/api/store_point.rb +22 -0
  13. data/lib/code42/api/token.rb +7 -0
  14. data/lib/code42/client.rb +23 -31
  15. data/lib/code42/computer.rb +0 -2
  16. data/lib/code42/connection.rb +14 -26
  17. data/lib/code42/destination.rb +52 -0
  18. data/lib/code42/product_license.rb +12 -0
  19. data/lib/code42/server.rb +54 -0
  20. data/lib/code42/server_connection_string.rb +10 -0
  21. data/lib/code42/server_settings.rb +4 -0
  22. data/lib/code42/settings.rb +1 -1
  23. data/lib/code42/store_point.rb +63 -0
  24. data/lib/code42/version.rb +1 -1
  25. data/spec/cassettes/Code42_Client/_add_product_license/adds_a_product_license.yml +39 -0
  26. data/spec/cassettes/Code42_Client/_apply_mlk/applies_the_mlk.yml +77 -0
  27. data/spec/cassettes/Code42_Client/_create_destination/creates_a_destination.yml +40 -0
  28. data/spec/cassettes/Code42_Client/_create_server/creates_a_server.yml +38 -0
  29. data/spec/cassettes/Code42_Client/_destination/returns_a_destination.yml +37 -0
  30. data/spec/cassettes/Code42_Client/_destinations/returns_an_array_of_desinations.yml +37 -0
  31. data/spec/cassettes/Code42_Client/_org_share_destinations/returns_a_provider_key.yml +36 -0
  32. data/spec/cassettes/Code42_Client/_product_licenses/returns_an_array_of_product_licenses.yml +81 -0
  33. data/spec/cassettes/Code42_Client/_remove_product_license/removes_a_product_license.yml +104 -0
  34. data/spec/cassettes/Code42_Client/_server/returns_a_server.yml +37 -0
  35. data/spec/cassettes/Code42_Client/_server_connection_string/returns_a_connection_string.yml +36 -0
  36. data/spec/cassettes/Code42_Client/_server_settings/returns_a_server_settings_object.yml +37 -0
  37. data/spec/cassettes/Code42_Client/_servers/returns_an_array_of_servers.yml +37 -0
  38. data/spec/cassettes/Code42_Client/_update_product_license/updates_a_product_license.yml +76 -0
  39. data/spec/cassettes/Code42_Client/_update_server_settings/updates_server_settings.yml +70 -0
  40. data/spec/cassettes/Code42_StorePoint/_accept_new_devices/should_return_store_point_with_accept_new_devices_enabled.yml +75 -0
  41. data/spec/cassettes/Code42_StorePoint/_disable_balancing/should_return_store_point_with_balancing_enabled.yml +75 -0
  42. data/spec/cassettes/Code42_StorePoint/_disable_inbound_backup/should_return_store_point_with_inbound_backup_disabled.yml +75 -0
  43. data/spec/cassettes/Code42_StorePoint/_enable_balancing/should_return_store_point_with_balancing_enabled.yml +75 -0
  44. data/spec/cassettes/Code42_StorePoint/_enable_inbound_backup/should_return_store_point_with_inbound_backup_disabled.yml +75 -0
  45. data/spec/cassettes/Code42_StorePoint/_find_store_point_by_id/should_return_correct_store_point.yml +38 -0
  46. data/spec/cassettes/Code42_StorePoint/_find_store_point_by_name/should_return_correct_store_point.yml +38 -0
  47. data/spec/cassettes/Code42_StorePoint/_find_store_point_by_server_name/should_return_correct_store_point.yml +38 -0
  48. data/spec/cassettes/Code42_StorePoint/_reject_new_devices/should_return_store_point_with_accept_new_devices_disabled.yml +75 -0
  49. data/spec/code42/client_spec.rb +161 -57
  50. data/spec/code42/connection_spec.rb +10 -12
  51. data/spec/code42/extension_spec.rb +0 -2
  52. data/spec/code42/org_spec.rb +20 -22
  53. data/spec/code42/ping_spec.rb +1 -3
  54. data/spec/code42/product_license_spec.rb +34 -0
  55. data/spec/code42/resource_spec.rb +0 -2
  56. data/spec/code42/role_spec.rb +2 -4
  57. data/spec/code42/server_connection_string_spec.rb +34 -0
  58. data/spec/code42/server_spec.rb +66 -0
  59. data/spec/code42/settings_spec.rb +25 -27
  60. data/spec/code42/store_point_spec.rb +90 -0
  61. data/spec/code42/token_spec.rb +10 -15
  62. data/spec/code42/user_spec.rb +4 -6
  63. data/spec/spec_helper.rb +1 -1
  64. metadata +74 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 204c4d637432178116bea0a22a7c4e96cb23fa4f
4
- data.tar.gz: db890339d0aa2ad510ff27e2d4d1c6fef6e674ca
3
+ metadata.gz: 8bf8ccbbf30229f5782e6820c7e65d7a231f2543
4
+ data.tar.gz: 957d1a88845196fb072e784ff74378638f497c65
5
5
  SHA512:
6
- metadata.gz: 15576c7015eed483f0b87b9f95400e6ef24442ceb6bedcd805bf58f272544e4b4dba047feef0ef1a53af91e7bac91ce27aff11dafc6a17867509087b66670279
7
- data.tar.gz: ef2c016a06290d0440b70ab303f0015e7e1895584f68d5483215d0cfe7444b00464e01a0e1a9990cc26a7e375d8d4d60d9fd6aa37f8fd39d7f1b104296946a06
6
+ metadata.gz: e0b5aaa0a70a0c2e253d009c78aec1f8e6268e85678fa66b3913b422285de5de3f60f761d2804e7374f0359f4749b536a27edd9cc8125440cd11341ffd446ae0
7
+ data.tar.gz: 43ccc2d3d9727797a2fe5ba31b3b6edccbeca692f527b8659f05c87d793a6e9504e35441b0aae94606dc24c1bc0ad7c82c8d4da987b85926876143d544d62ad2
data/.rspec CHANGED
@@ -1,2 +1,3 @@
1
1
  --color
2
2
  --format progress
3
+ --require spec_helper
@@ -11,6 +11,7 @@ Gem::Specification.new do |gem|
11
11
  gem.description = %q{Provides a Ruby interface to the Code42 API}
12
12
  gem.summary = %q{...}
13
13
  gem.homepage = "http://www.crashplan.com/apidocviewer/"
14
+ gem.license = 'Apache'
14
15
 
15
16
  gem.add_development_dependency 'rspec', '~> 2.14.0'
16
17
  gem.add_development_dependency 'webmock', '~> 1.11.0'
@@ -20,6 +21,8 @@ Gem::Specification.new do |gem|
20
21
  gem.add_dependency 'activesupport', '>= 3.2.0'
21
22
  gem.add_dependency 'faraday_middleware', '~> 0.9.1'
22
23
 
24
+ gem.required_ruby_version = '>= 1.9'
25
+
23
26
  gem.files = `git ls-files`.split($/)
24
27
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
25
28
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
@@ -1,28 +1,34 @@
1
- require "date"
2
- require "active_support/core_ext/array/extract_options"
3
- require "active_support/core_ext/hash/keys"
4
- require "active_support/core_ext/string/inflections"
5
- require "active_support/core_ext/object/blank"
6
- require "active_support/core_ext/object/try"
7
- require "active_support/notifications"
8
- require "code42/version"
9
- require "code42/client"
10
- require "code42/settings"
11
- require "code42/error"
12
- require "code42/connection"
13
- require "code42/attribute"
14
- require "code42/attribute_serializer"
15
- require "code42/resource"
16
- require "code42/org"
17
- require "code42/user"
18
- require "code42/computer"
19
- require "code42/diagnostic"
20
- require "code42/ping"
21
- require "code42/token"
22
- require "code42/role"
23
- require "code42/role_collection"
24
- require "code42/token_validation"
25
- require "code42/permission"
1
+ require 'date'
2
+ require 'active_support/core_ext/array/extract_options'
3
+ require 'active_support/core_ext/hash/keys'
4
+ require 'active_support/core_ext/string/inflections'
5
+ require 'active_support/core_ext/object/blank'
6
+ require 'active_support/core_ext/object/try'
7
+ require 'active_support/notifications'
8
+ require 'code42/version'
9
+ require 'code42/client'
10
+ require 'code42/settings'
11
+ require 'code42/error'
12
+ require 'code42/connection'
13
+ require 'code42/attribute'
14
+ require 'code42/attribute_serializer'
15
+ require 'code42/resource'
16
+ require 'code42/org'
17
+ require 'code42/user'
18
+ require 'code42/computer'
19
+ require 'code42/diagnostic'
20
+ require 'code42/ping'
21
+ require 'code42/token'
22
+ require 'code42/role'
23
+ require 'code42/role_collection'
24
+ require 'code42/token_validation'
25
+ require 'code42/permission'
26
+ require 'code42/product_license'
27
+ require 'code42/server_settings'
28
+ require 'code42/destination'
29
+ require 'code42/server'
30
+ require 'code42/server_connection_string'
31
+ require 'code42/store_point'
26
32
 
27
33
  module Code42
28
34
  class << self
@@ -40,8 +46,9 @@ module Code42
40
46
  self
41
47
  end
42
48
 
43
- def respond_to_missing?(method_name, include_private=false); client.respond_to?(method_name, include_private); end if RUBY_VERSION >= "1.9"
44
- def respond_to?(method_name, include_private=false); client.respond_to?(method_name, include_private) || super; end if RUBY_VERSION < "1.9"
49
+ def respond_to_missing?(method_name, include_private=false)
50
+ client.respond_to?(method_name, include_private)
51
+ end
45
52
 
46
53
  private
47
54
 
@@ -51,3 +58,35 @@ module Code42
51
58
  end
52
59
  end
53
60
  end
61
+
62
+ class RequestLogger < Faraday::Request
63
+ def call(env)
64
+ debug('request') { dump_body(env[:body]) }
65
+ super
66
+ end
67
+ end
68
+
69
+ class BodyLogger < Faraday::Response::Logger
70
+ def call(env)
71
+ debug('response') { dump_body(env[:body]) }
72
+ super
73
+ end
74
+
75
+ def on_complete(env)
76
+ debug('response') { dump_body(env[:body]) }
77
+ super
78
+ end
79
+
80
+ def dump_body(body)
81
+ if body.respond_to?(:to_str)
82
+ body.to_str
83
+ else
84
+ pretty_inspect(body)
85
+ end
86
+ end
87
+
88
+ def pretty_inspect(body)
89
+ require 'pp' unless body.respond_to?(:pretty_inspect)
90
+ body.pretty_inspect
91
+ end
92
+ end
@@ -0,0 +1,18 @@
1
+ module Code42
2
+ module API
3
+ module Destination
4
+ def destinations
5
+ objects_from_response(Code42::Destination, :get, 'destinations', key: 'destinations')
6
+ end
7
+
8
+ def destination(id)
9
+ object_from_response(Code42::Destination, :get, "destination/#{id}")
10
+ end
11
+
12
+ def create_destination(attrs)
13
+ response = post('Destination', attrs)
14
+ response && response['data'].is_a?(Array)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,9 @@
1
+ module Code42
2
+ module API
3
+ module Diagnostic
4
+ def diagnostic
5
+ object_from_response(Code42::Diagnostic, :get, 'diagnostic')
6
+ end
7
+ end
8
+ end
9
+ end
@@ -68,11 +68,11 @@ module Code42
68
68
  end
69
69
 
70
70
  def activate_org(id = 'my', attrs = {})
71
- object_from_response(Code42::Org, :delete, "orgDeactivation/#{id}", attrs)
71
+ object_from_response(Code42::Org, :delete, "OrgDeactivation/#{id}", attrs)
72
72
  end
73
73
 
74
74
  def deactivate_org(id = 'my', attrs = {})
75
- object_from_response(Code42::Org, :put, "orgDeactivation/#{id}", attrs)
75
+ object_from_response(Code42::Org, :put, "OrgDeactivation/#{id}", attrs)
76
76
  end
77
77
 
78
78
  def block_org(id = 'my', attrs = {})
@@ -83,6 +83,9 @@ module Code42
83
83
  object_from_response(Code42::Org, :delete, "orgBlock/#{id}", attrs)
84
84
  end
85
85
 
86
+ def org_share_destinations(id)
87
+ get("orgShareDestinations/#{id}")['data']
88
+ end
86
89
 
87
90
  end
88
91
  end
@@ -0,0 +1,21 @@
1
+ module Code42
2
+ module API
3
+ module ProductLicense
4
+ def product_licenses
5
+ objects_from_response(Code42::ProductLicense, :get, 'productLicense', key: 'products')
6
+ end
7
+
8
+ def remove_product_license(id)
9
+ delete("productLicense/#{id}")
10
+ end
11
+
12
+ def add_product_license(license_key)
13
+ attrs = {
14
+ product_license: license_key,
15
+ key: 'products'
16
+ }
17
+ objects_from_response(Code42::ProductLicense, :put, 'productLicense', attrs)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ module Code42
2
+ module API
3
+ module Server
4
+ def servers(params = {})
5
+ objects_from_response(Code42::Server, :get, 'server', params.merge(key: 'servers'))
6
+ end
7
+
8
+ def server(id, params = {})
9
+ if id.is_a? Fixnum
10
+ object_from_response(Code42::Server, :get, "server/#{id}", params)
11
+ elsif id.is_a? String
12
+ servers(params.merge(q: id)).first
13
+ end
14
+ end
15
+
16
+ def create_server(attrs)
17
+ object_from_response(Code42::Server, :post, 'server', attrs)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,9 @@
1
+ module Code42
2
+ module API
3
+ module ServerConnectionString
4
+ def server_connection_string(id)
5
+ object_from_response(Code42::ServerConnectionString, :get, "serverConnectionString/#{id}")
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ module Code42
2
+ module API
3
+ module ServerSettings
4
+ def server_settings(id)
5
+ object_from_response(Code42::ServerSettings, :get, "serverSettings/#{id}")
6
+ end
7
+
8
+ def update_server_settings(id, attrs)
9
+ put("serverSettings/#{id}", attrs)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,22 @@
1
+ module Code42
2
+ module API
3
+ module StorePoint
4
+
5
+ def find_store_points_by_name(name, params = {})
6
+ objects_from_response(Code42::StorePoint, :get, 'storePoint', params.merge(key: 'storepoints', q: name))
7
+ end
8
+
9
+ def find_store_point_by_id(id, params = {})
10
+ object_from_response(Code42::StorePoint, :get, "storePoint/#{id}", params)
11
+ end
12
+
13
+ def store_points(params = {})
14
+ objects_from_response(Code42::StorePoint, :get, 'storePoint', params.merge(key: 'storepoints'))
15
+ end
16
+
17
+ def update_store_point(id, params)
18
+ object_from_response(Code42::StorePoint, :put, "storePoint/#{id}", params)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -8,6 +8,13 @@ module Code42
8
8
  object_from_response(Code42::Token, :post, "authToken")
9
9
  end
10
10
 
11
+ def apply_mlk(mlk, attrs)
12
+ settings.mlk = mlk
13
+ response = object_from_response(Code42::Token, :post, 'authToken', attrs)
14
+ settings.mlk = nil
15
+ response
16
+ end
17
+
11
18
  # Returns LoginToken and ServerUrl
12
19
  # @return [CrashPlan::Token] Token to pass to ServerUrl's AuthToken resource
13
20
  def get_login_token
@@ -1,3 +1,4 @@
1
+ require 'forwardable'
1
2
  require 'json'
2
3
  Dir[File.dirname(__FILE__) + '/api/*.rb'].each { |file| require file }
3
4
 
@@ -8,10 +9,21 @@ module Code42
8
9
  include Code42::API::Org
9
10
  include Code42::API::Computer
10
11
  include Code42::API::Token
12
+ include Code42::API::ProductLicense
13
+ include Code42::API::ServerSettings
14
+ include Code42::API::Destination
15
+ include Code42::API::Server
11
16
  include Code42::API::PasswordReset
17
+ include Code42::API::StorePoint
18
+ include Code42::API::Diagnostic
19
+ include Code42::API::ServerConnectionString
12
20
 
13
21
  attr_reader :settings
14
22
 
23
+ extend Forwardable
24
+
25
+ instance_delegate make_request: :connection
26
+
15
27
  def initialize(options = {})
16
28
  self.settings = options
17
29
  end
@@ -43,25 +55,6 @@ module Code42
43
55
  settings.token = token.to_s
44
56
  end
45
57
 
46
- def diagnostic
47
- object_from_response(Diagnostic, :get, 'diagnostic')
48
- end
49
-
50
- # Block a computer from backing up
51
- # @return [Code42::Computer] The blocked computer
52
- # @params id [Integer, String] The computer ID you want to block
53
- def block_computer(id)
54
- put("computerblock/#{id}")
55
- end
56
-
57
- def unblock_computer(id)
58
- delete("computerblock/#{id}")
59
- end
60
-
61
- def deactivate_org(id)
62
- put("OrgDeactivation/#{id}")
63
- end
64
-
65
58
  def connection
66
59
  @connection ||= begin
67
60
  connection = Connection.new
@@ -80,6 +73,9 @@ module Code42
80
73
  if settings.token
81
74
  @connection.token = settings.token
82
75
  end
76
+ if settings.mlk
77
+ @connection.mlk = settings.mlk
78
+ end
83
79
  @connection
84
80
  end
85
81
 
@@ -120,24 +116,20 @@ module Code42
120
116
  array.map { |element| klass.deserialize_and_initialize(element, self) }
121
117
  end
122
118
 
123
- def get(path, data = {})
124
- make_request(:get, path, data)
125
- end
126
-
127
- def post(path, data = {})
128
- make_request(:post, path, data)
119
+ def get(path, data = {}, &block)
120
+ make_request(:get, path, data, &block)
129
121
  end
130
122
 
131
- def put(path, data = {})
132
- make_request(:put, path, data)
123
+ def post(path, data = {}, &block)
124
+ make_request(:post, path, data, &block)
133
125
  end
134
126
 
135
- def delete(path, data = {})
136
- make_request(:delete, path, data)
127
+ def put(path, data = {}, &block)
128
+ make_request(:put, path, data, &block)
137
129
  end
138
130
 
139
- def make_request(method, *args)
140
- connection.make_request(method, *args)
131
+ def delete(path, data = {}, &block)
132
+ make_request(:delete, path, data, &block)
141
133
  end
142
134
  end
143
135
  end
@@ -1,6 +1,5 @@
1
1
  module Code42
2
2
  class Computer < Resource
3
-
4
3
  attribute :id, :from => 'computerId'
5
4
 
6
5
  def unblock
@@ -10,6 +9,5 @@ module Code42
10
9
  def block
11
10
  client.block_computer(id)
12
11
  end
13
-
14
12
  end
15
13
  end
@@ -6,7 +6,7 @@ require 'code42/error'
6
6
 
7
7
  module Code42
8
8
  class Connection
9
- attr_accessor :host, :port, :scheme, :path_prefix, :username, :password, :adapter, :token, :verify_https, :logger, :last_response
9
+ attr_accessor :host, :port, :scheme, :path_prefix, :username, :password, :adapter, :token, :verify_https, :logger, :mlk, :last_response
10
10
 
11
11
  def initialize(options = {})
12
12
  self.host = options[:host]
@@ -21,8 +21,10 @@ module Code42
21
21
 
22
22
  extend Forwardable
23
23
 
24
- delegate %i(host port path_prefix scheme) => :adapter
25
- delegate %i(host= port= path_prefix= scheme=) => :adapter
24
+ instance_delegate %i(host port path_prefix scheme) => :adapter
25
+ instance_delegate %i(host= port= path_prefix= scheme=) => :adapter
26
+
27
+ instance_delegate %i(get post put delete) => :adapter
26
28
 
27
29
  def verify_https=(verify_https)
28
30
  adapter.ssl[:verify] = verify_https
@@ -58,6 +60,12 @@ module Code42
58
60
  @token
59
61
  end
60
62
 
63
+ def mlk=(mlk)
64
+ @mlk = mlk
65
+ adapter.headers['C42-MasterLicenseKey'] = "BASIC #{mlk}"
66
+ @mlk
67
+ end
68
+
61
69
  def username=(username)
62
70
  @username = username
63
71
  adapter.basic_auth(username, password) if has_valid_credentials?
@@ -68,9 +76,9 @@ module Code42
68
76
  adapter.basic_auth(username, password) if has_valid_credentials?
69
77
  end
70
78
 
71
- def make_request(method, *args)
79
+ def make_request(method, *args, &block)
72
80
  begin
73
- @last_response = response = self.send(method, *args)
81
+ @last_response = response = self.send(method, *args, &block)
74
82
  ActiveSupport::Notifications.instrument('code42.request', {
75
83
  method: method,
76
84
  args: args,
@@ -83,29 +91,9 @@ module Code42
83
91
  response.body
84
92
  end
85
93
 
86
- def get(path, data)
87
- adapter.get(path, data)
88
- end
89
-
90
- def put(path, data)
91
- adapter.put path, data
92
- end
93
-
94
- def post(path, data)
95
- adapter.post path, data
96
- end
97
-
98
- def delete(path, data)
99
- adapter.delete(path, data)
100
- end
101
-
102
- def respond_to?(method_name, include_private = false)
103
- adapter.respond_to?(method_name, include_private) || super
104
- end if RUBY_VERSION < "1.9"
105
-
106
94
  def respond_to_missing?(method_name, include_private = false)
107
95
  adapter.respond_to?(method_name, include_private) || super
108
- end if RUBY_VERSION >= "1.9"
96
+ end
109
97
 
110
98
  private
111
99