code42 0.2.6 → 0.2.7

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