assembla_api 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +20 -0
  3. data/Rakefile +22 -0
  4. data/lib/assembla_api.rb +130 -0
  5. data/lib/assembla_api/api.rb +373 -0
  6. data/lib/assembla_api/api/actions.rb +58 -0
  7. data/lib/assembla_api/api/arguments.rb +248 -0
  8. data/lib/assembla_api/api/config.rb +107 -0
  9. data/lib/assembla_api/api/config/property.rb +30 -0
  10. data/lib/assembla_api/api/config/property_set.rb +119 -0
  11. data/lib/assembla_api/api/factory.rb +33 -0
  12. data/lib/assembla_api/authorization.rb +76 -0
  13. data/lib/assembla_api/client.rb +21 -0
  14. data/lib/assembla_api/client/activity.rb +30 -0
  15. data/lib/assembla_api/client/authorizations.rb +143 -0
  16. data/lib/assembla_api/client/authorizations/app.rb +98 -0
  17. data/lib/assembla_api/client/portfolio.rb +19 -0
  18. data/lib/assembla_api/client/portfolio/invitations.rb +30 -0
  19. data/lib/assembla_api/client/portfolio/spaces.rb +13 -0
  20. data/lib/assembla_api/client/portfolio/standup_reports.rb +34 -0
  21. data/lib/assembla_api/client/portfolio/tasks.rb +13 -0
  22. data/lib/assembla_api/client/portfolio/ticket_reports.rb +13 -0
  23. data/lib/assembla_api/client/portfolio/tickets.rb +13 -0
  24. data/lib/assembla_api/client/portfolio/users.rb +13 -0
  25. data/lib/assembla_api/client/spaces.rb +140 -0
  26. data/lib/assembla_api/client/spaces/documents.rb +87 -0
  27. data/lib/assembla_api/client/spaces/milestones.rb +102 -0
  28. data/lib/assembla_api/client/spaces/space_tools.rb +65 -0
  29. data/lib/assembla_api/client/spaces/space_tools/merge_requests.rb +105 -0
  30. data/lib/assembla_api/client/spaces/space_tools/merge_requests/versions.rb +41 -0
  31. data/lib/assembla_api/client/spaces/space_tools/merge_requests/versions/comments.rb +34 -0
  32. data/lib/assembla_api/client/spaces/space_tools/merge_requests/versions/votes.rb +46 -0
  33. data/lib/assembla_api/client/spaces/ssh.rb +14 -0
  34. data/lib/assembla_api/client/spaces/ssh/actions.rb +76 -0
  35. data/lib/assembla_api/client/spaces/ssh/actions/launches.rb +14 -0
  36. data/lib/assembla_api/client/spaces/ssh/keys.rb +18 -0
  37. data/lib/assembla_api/client/spaces/ssh/launches.rb +29 -0
  38. data/lib/assembla_api/client/spaces/ssh/servers.rb +63 -0
  39. data/lib/assembla_api/client/spaces/standup_away_reports.rb +41 -0
  40. data/lib/assembla_api/client/spaces/standup_reports.rb +41 -0
  41. data/lib/assembla_api/client/spaces/tags.rb +96 -0
  42. data/lib/assembla_api/client/spaces/tickets.rb +154 -0
  43. data/lib/assembla_api/client/spaces/tickets/associations.rb +57 -0
  44. data/lib/assembla_api/client/spaces/tickets/comments.rb +45 -0
  45. data/lib/assembla_api/client/spaces/tickets/custom_fields.rb +57 -0
  46. data/lib/assembla_api/client/spaces/tickets/statuses.rb +55 -0
  47. data/lib/assembla_api/client/spaces/user_roles.rb +61 -0
  48. data/lib/assembla_api/client/spaces/users.rb +11 -0
  49. data/lib/assembla_api/client/spaces/webhooks.rb +63 -0
  50. data/lib/assembla_api/client/spaces/wiki_pages.rb +78 -0
  51. data/lib/assembla_api/client/spaces/wiki_pages/versions.rb +20 -0
  52. data/lib/assembla_api/client/tasks.rb +72 -0
  53. data/lib/assembla_api/client/users.rb +49 -0
  54. data/lib/assembla_api/client/users/keys.rb +97 -0
  55. data/lib/assembla_api/configuration.rb +71 -0
  56. data/lib/assembla_api/connection.rb +66 -0
  57. data/lib/assembla_api/constants.rb +74 -0
  58. data/lib/assembla_api/core_ext/array.rb +25 -0
  59. data/lib/assembla_api/core_ext/hash.rb +92 -0
  60. data/lib/assembla_api/core_ext/ordered_hash.rb +107 -0
  61. data/lib/assembla_api/deprecation.rb +39 -0
  62. data/lib/assembla_api/error.rb +37 -0
  63. data/lib/assembla_api/error/bad_request.rb +14 -0
  64. data/lib/assembla_api/error/client_error.rb +20 -0
  65. data/lib/assembla_api/error/forbidden.rb +14 -0
  66. data/lib/assembla_api/error/internal_server_error.rb +15 -0
  67. data/lib/assembla_api/error/invalid_options.rb +18 -0
  68. data/lib/assembla_api/error/not_acceptable.rb +15 -0
  69. data/lib/assembla_api/error/not_found.rb +14 -0
  70. data/lib/assembla_api/error/required_params.rb +18 -0
  71. data/lib/assembla_api/error/service_error.rb +68 -0
  72. data/lib/assembla_api/error/service_unavailable.rb +15 -0
  73. data/lib/assembla_api/error/unauthorized.rb +15 -0
  74. data/lib/assembla_api/error/unknown_media.rb +18 -0
  75. data/lib/assembla_api/error/unknown_value.rb +18 -0
  76. data/lib/assembla_api/error/unprocessable_entity.rb +14 -0
  77. data/lib/assembla_api/error/validations.rb +18 -0
  78. data/lib/assembla_api/ext/faraday.rb +38 -0
  79. data/lib/assembla_api/jsonable.rb +18 -0
  80. data/lib/assembla_api/middleware.rb +31 -0
  81. data/lib/assembla_api/mime_type.rb +33 -0
  82. data/lib/assembla_api/normalizer.rb +25 -0
  83. data/lib/assembla_api/null_encoder.rb +25 -0
  84. data/lib/assembla_api/page_iterator.rb +142 -0
  85. data/lib/assembla_api/page_links.rb +45 -0
  86. data/lib/assembla_api/paged_request.rb +40 -0
  87. data/lib/assembla_api/pagination.rb +102 -0
  88. data/lib/assembla_api/parameter_filter.rb +32 -0
  89. data/lib/assembla_api/params_hash.rb +101 -0
  90. data/lib/assembla_api/rate_limit.rb +25 -0
  91. data/lib/assembla_api/request.rb +85 -0
  92. data/lib/assembla_api/request/basic_auth.rb +33 -0
  93. data/lib/assembla_api/request/jsonize.rb +53 -0
  94. data/lib/assembla_api/request/key_auth.rb +31 -0
  95. data/lib/assembla_api/request/oauth2.rb +42 -0
  96. data/lib/assembla_api/request/verbs.rb +60 -0
  97. data/lib/assembla_api/response.rb +28 -0
  98. data/lib/assembla_api/response/header.rb +76 -0
  99. data/lib/assembla_api/response/jsonize.rb +29 -0
  100. data/lib/assembla_api/response/mashify.rb +24 -0
  101. data/lib/assembla_api/response/raise_error.rb +18 -0
  102. data/lib/assembla_api/response/xmlize.rb +26 -0
  103. data/lib/assembla_api/response_wrapper.rb +157 -0
  104. data/lib/assembla_api/ssl_certs/cacerts.pem +2183 -0
  105. data/lib/assembla_api/utils/url.rb +59 -0
  106. data/lib/assembla_api/validations.rb +25 -0
  107. data/lib/assembla_api/validations/format.rb +24 -0
  108. data/lib/assembla_api/validations/presence.rb +30 -0
  109. data/lib/assembla_api/validations/required.rb +24 -0
  110. data/lib/assembla_api/validations/token.rb +41 -0
  111. data/lib/assembla_api/version.rb +12 -0
  112. metadata +347 -0
@@ -0,0 +1,55 @@
1
+ module Assembla
2
+ class Client::Spaces::Tickets::Statuses < API
3
+ VALID_PARAMS_NAMES = %w{name state list_order}
4
+ VALID_REQUEST_PARAM_VALUES = {
5
+ 'state' => [0, 1]
6
+ }
7
+
8
+ # @example
9
+ # api.spaces.tickets.statuses.create 'project1', status: { name: 'Review' }
10
+ def create(*args)
11
+ arguments(args, required: [:space]) do
12
+ permit VALID_PARAMS_NAMES, recursive: true
13
+ assert_required %w[ name ]
14
+ assert_values VALID_REQUEST_PARAM_VALUES
15
+ end
16
+
17
+ post_request("/spaces/#{arguments.space}/tickets/statuses", arguments.params)
18
+ end
19
+
20
+ # @example
21
+ # api.spaces.tickets.statuses.get 'project1', 34
22
+ def get(*args)
23
+ arguments(args, required: [:space, :id])
24
+ get_request("/spaces/#{arguments.space}/tickets/statuses/#{arguments.id}", arguments.params)
25
+ end
26
+
27
+ # @example
28
+ # api.spaces.tickets.statuses.edit 'project1', 34, status: {name: 'Review Design'}
29
+ def edit(*args)
30
+ arguments(args, required: [:space, :id]) do
31
+ permit VALID_PARAMS_NAMES , recursive: true
32
+ assert_values VALID_REQUEST_PARAM_VALUES
33
+ end
34
+
35
+ put_request("/spaces/#{arguments.space}/tickets/statuses/#{arguments.id}", arguments.params)
36
+ end
37
+
38
+ # Delete ticket status by ID
39
+ # @example
40
+ # api.spaces.tickets.statuses.delete 'project1', 34
41
+ def delete(*args)
42
+ arguments(args, required: [:space, :id])
43
+ delete_request("/spaces/#{arguments.space}/tickets/statuses/#{arguments.id}", arguments.params)
44
+ end
45
+
46
+ # @example
47
+ # api.spaces.tickets.statuses.list 'project1'
48
+ def list(*args)
49
+ arguments(args, required: [:space])
50
+ response = get_request("/spaces/#{arguments.space}/tickets/statuses", arguments.params)
51
+ return response unless block_given?
52
+ response.each { |el| yield el }
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,61 @@
1
+ module Assembla
2
+ class Client::Spaces::UserRoles < API
3
+
4
+ VALID_PARAMS_NAMES = %w[
5
+ user_id
6
+ role
7
+ title
8
+ message
9
+ ].freeze
10
+
11
+ VALID_REQUEST_PARAM_VALUES = {
12
+ 'role' => %w{watcher member owner},
13
+ }
14
+
15
+ # api.spaces.user_roles.list 'project1'
16
+ def list(*args)
17
+ arguments(args, required: [:space])
18
+ response = get_request("/spaces/#{arguments.space}/user_roles", arguments.params)
19
+ return response unless block_given?
20
+ response.each { |el| yield el }
21
+ end
22
+
23
+ # api.spaces.user_roles.get 'project1', 150
24
+ def get(*args)
25
+ arguments(args, required: [:space, :user_role_id])
26
+ get_request("/spaces/#{arguments.space}/user_roles/#{arguments.user_role_id}", arguments.params)
27
+ end
28
+
29
+ alias :find :get
30
+
31
+ # api.spaces.user_roles.delete 'project1', 150
32
+ def delete(*args)
33
+ arguments(args, required: [:space, :user_role_id])
34
+ delete_request("/spaces/#{arguments.space}/user_roles/#{arguments.user_role_id}", arguments.params)
35
+ end
36
+
37
+ alias :remove :delete
38
+
39
+ # api.spaces.user_roles.edit 'project1', 150, user_role: { role: 'owner', title: 'Designer' }
40
+ def edit(*args)
41
+ arguments(args, required: [:space, :user_role_id]) do
42
+ permit VALID_PARAMS_NAMES, recursive: true
43
+ assert_required %w[ role ]
44
+ assert_values VALID_REQUEST_PARAM_VALUES
45
+ end
46
+
47
+ put_request("/spaces/#{arguments.space}/user_roles/#{arguments.user_role_id}", arguments.params)
48
+ end
49
+
50
+ # api.spaces.user_roles.create 'project1', user_role: {user_id: UID, role: 'member'}
51
+ def create(*args)
52
+ arguments(args, required: [:space]) do
53
+ permit VALID_PARAMS_NAMES, recursive: true
54
+ assert_required %w[ user_id role ]
55
+ assert_values VALID_REQUEST_PARAM_VALUES
56
+ end
57
+
58
+ post_request("/spaces/#{arguments.space}/user_roles", arguments.params)
59
+ end
60
+ end # UserRoles
61
+ end # Assembla
@@ -0,0 +1,11 @@
1
+ module Assembla
2
+ class Client::Spaces::Users < API
3
+ # api.spaces.users.list space: 'project1'
4
+ def list(*args)
5
+ arguments(args, required: [:space])
6
+ response = get_request("/spaces/#{arguments.space}/users", arguments.params)
7
+ return response unless block_given?
8
+ response.each { |el| yield el }
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,63 @@
1
+ module Assembla
2
+ class Client::Spaces::Webhooks < API
3
+
4
+ VALID_PARAMS_NAMES = %w[
5
+ title
6
+ enabled
7
+ authentication_type
8
+ app_api_key
9
+ app_secret
10
+ app_request_token_url
11
+ app_access_token_url
12
+ app_authorize_url
13
+ app_authorize_query
14
+ access_token
15
+ access_token_secret
16
+ external_url
17
+ http_method
18
+ content_type
19
+ content
20
+ filter
21
+ ].freeze
22
+
23
+ BASIC_AUTH = 1
24
+
25
+ VALID_REQUEST_PARAM_VALUES = {
26
+ 'enabled' => [true, false],
27
+ 'authentication_type' => [1, 2],
28
+ 'http_method' => [0, 1]
29
+ }
30
+
31
+ # @example
32
+ # api.spaces.webhooks.create 'project1', webhook: { title: 'Mobile App V2', external_url: 'http://example.com/notify' }
33
+ def create(*args)
34
+ arguments(args, required: [:space]) do
35
+ permit VALID_PARAMS_NAMES, recursive: true
36
+ assert_required %w[ external_url ]
37
+ assert_values VALID_REQUEST_PARAM_VALUES
38
+ end
39
+
40
+ arguments.params['webhook']['authentication_type'] ||= BASIC_AUTH
41
+ post_request("/spaces/#{arguments.space}/webhooks", arguments.params)
42
+ end
43
+
44
+ # @example
45
+ # api.spaces.webhooks.edit 'project1', 699, webhook: { enabled: false }
46
+ def edit(*args)
47
+ arguments(args, required: [:space, :id]) do
48
+ permit VALID_PARAMS_NAMES , recursive: true
49
+ assert_values VALID_REQUEST_PARAM_VALUES
50
+ end
51
+
52
+ put_request("/spaces/#{arguments.space}/webhooks/#{arguments.id}", arguments.params)
53
+ end
54
+
55
+ # Delete webhook by ID
56
+ # @example
57
+ # api.spaces.webhooks.delete 'project1', 699
58
+ def delete(*args)
59
+ arguments(args, required: [:space, :id])
60
+ delete_request("/spaces/#{arguments.space}/webhooks/#{arguments.id}", arguments.params)
61
+ end
62
+ end # webhooks
63
+ end
@@ -0,0 +1,78 @@
1
+ module Assembla
2
+ class Client::Spaces::WikiPages < API
3
+ require_all 'assembla_api/client/spaces/wiki_pages',
4
+ 'versions'
5
+
6
+ VALID_PARAMS_NAMES = %w[
7
+ page_name
8
+ contents
9
+ parent_id
10
+ position
11
+ status
12
+ wiki_format
13
+ change_comment
14
+ ].freeze
15
+
16
+ VALID_REQUEST_PARAM_VALUES = {
17
+ 'status' => [0, 1, 2],
18
+ 'wiki_format' => [0, 1, 2, 3, 4, 5]
19
+ }
20
+
21
+ # @example
22
+ # api.spaces.wiki_pages.create 'project1', wiki_page: { page_name: 'Mobile App V2' }
23
+ def create(*args)
24
+ arguments(args, required: [:space]) do
25
+ permit VALID_PARAMS_NAMES, recursive: true
26
+ assert_required %w[ page_name ]
27
+ assert_values VALID_REQUEST_PARAM_VALUES
28
+ end
29
+
30
+ post_request("/spaces/#{arguments.space}/wiki_pages", arguments.params)
31
+ end
32
+
33
+ # @example
34
+ # api.spaces.wiki_pages.get 'project1', 'guid'
35
+ def get(*args)
36
+ arguments(args, required: [:space, :id])
37
+ get_request("/spaces/#{arguments.space}/wiki_pages/#{arguments.id}", arguments.params)
38
+ end
39
+
40
+ # @example
41
+ # api.spaces.wiki_pages.edit 'project1', 'guid', wiki_page: { position: 1 }
42
+ def edit(*args)
43
+ arguments(args, required: [:space, :id]) do
44
+ permit VALID_PARAMS_NAMES , recursive: true
45
+ assert_values VALID_REQUEST_PARAM_VALUES
46
+ end
47
+
48
+ put_request("/spaces/#{arguments.space}/wiki_pages/#{arguments.id}", arguments.params)
49
+ end
50
+
51
+ # Deletes wiki page by ID and all its children
52
+ #
53
+ # @example
54
+ # api.spaces.wiki_pages.delete 'project1', 'guid'
55
+ def delete(*args)
56
+ arguments(args, required: [:space, :id])
57
+ delete_request("/spaces/#{arguments.space}/wiki_pages/#{arguments.id}/all", arguments.params)
58
+ end
59
+
60
+ # Deletes wiki page by ID and moves all children with one level up
61
+ #
62
+ # @example
63
+ # api.spaces.wiki_pages.delete_parent 'project1', 'guid'
64
+ def delete_parent(*args)
65
+ arguments(args, required: [:space, :id])
66
+ delete_request("/spaces/#{arguments.space}/wiki_pages/#{arguments.id}/container", arguments.params)
67
+ end
68
+
69
+ # @example
70
+ # api.spaces.wiki_pages.list 'project1'
71
+ def list(*args)
72
+ arguments(args, required: [:space])
73
+ response = get_request("/spaces/#{arguments.space}/wiki_pages", arguments.params)
74
+ return response unless block_given?
75
+ response.each { |el| yield el }
76
+ end
77
+ end # wiki_pages
78
+ end
@@ -0,0 +1,20 @@
1
+ module Assembla
2
+ class Client::Spaces::WikiPages::Versions < API
3
+
4
+ # @example
5
+ # api.spaces.wiki_pages.versions.get 'project1', 'wiki-guid', 369
6
+ def get(*args)
7
+ arguments(args, required: [:space, :wiki_guid, :id])
8
+ get_request("/spaces/#{arguments.space}/wiki_pages/#{arguments.wiki_guid}/versions/#{arguments.id}", arguments.params)
9
+ end
10
+
11
+ # @example
12
+ # api.spaces.wiki_pages.versions.list 'project1', 'wiki-guid'
13
+ def list(*args)
14
+ arguments(args, required: [:space, :wiki_guid])
15
+ response = get_request("/spaces/#{arguments.space}/wiki_pages/#{arguments.wiki_guid}/versions", arguments.params)
16
+ return response unless block_given?
17
+ response.each { |el| yield el }
18
+ end
19
+ end # versions
20
+ end
@@ -0,0 +1,72 @@
1
+ module Assembla
2
+ class Client::Tasks < API
3
+ VALID_PARAMS_NAMES = %w{
4
+ description
5
+ job_agreement_id
6
+ space_id
7
+ ticket_id
8
+ url
9
+ hours
10
+ begin_at
11
+ end_at
12
+ }
13
+
14
+ # @example
15
+ # api.tasks.get 963
16
+ def get(*args)
17
+ arguments(args, required: [:id])
18
+ get_request("/tasks/#{arguments.id}", arguments.params)
19
+ end
20
+ alias :find :get
21
+
22
+ def create(*args)
23
+ arguments(args) do
24
+ permit VALID_PARAMS_NAMES, recursive: true
25
+ assert_required %w[ description space_id ]
26
+ end
27
+
28
+ task = arguments.params['user_task'] = arguments.params.delete 'task'
29
+ task['begin_at'] ||= Time.now.utc.strftime '%FT%TZ'
30
+ task['hours'] ||= 1
31
+
32
+ post_request("/tasks", arguments.params)
33
+ end
34
+
35
+ def delete(*args)
36
+ arguments(args, required: [:id])
37
+ delete_request("/tasks/#{arguments.id}", arguments.params)
38
+ end
39
+ alias :remove :delete
40
+
41
+ # Edit a task
42
+ #
43
+ # @param [Hash] params
44
+ # @option params [String] :description
45
+ # Optional string
46
+ #
47
+ # @example
48
+ # api = Assembla.new
49
+ # api.tasks.edit 963, task: {
50
+ # url: 'http://google.com',
51
+ # description: 'Search using new engine'
52
+ # }
53
+ def edit(*args)
54
+ arguments(args, required: [:id]) do
55
+ permit VALID_PARAMS_NAMES, recursive: true
56
+ end
57
+
58
+ arguments.params['user_task'] = arguments.params.delete 'task'
59
+
60
+ put_request("/tasks/#{arguments.id}", arguments.params)
61
+ end
62
+
63
+ # @example
64
+ # api.tasks.list
65
+ def list(*args)
66
+ arguments(args)
67
+ response = get_request("/tasks", arguments.params)
68
+ return response unless block_given?
69
+ response.each { |el| yield el }
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+
3
+ module Assembla
4
+ class Client::Users < API
5
+ # Load all the modules after initializing Repos to avoid superclass mismatch
6
+ require_all 'assembla_api/client/users',
7
+ 'keys'
8
+
9
+ VALID_USER_PARAMS_NAMES = %w[
10
+ ].freeze
11
+
12
+ # Access to Users::Keys API
13
+ namespace :keys
14
+
15
+ # Get a single user
16
+ #
17
+ # @example
18
+ # assembla = Assembla.new oauth_token: '...'
19
+ # assembla.users.get user: 'user-name'
20
+ #
21
+ # Get the authenticated user
22
+ #
23
+ # @example
24
+ # assembla = Assembla.new oauth_token: '...'
25
+ # assembla.users.me
26
+ #
27
+ # @api public
28
+ def get(*args)
29
+ params = arguments(args).params
30
+
31
+ if user_name = params.delete('user')
32
+ get_request("/users/#{user_name}", params)
33
+ else
34
+ get_request("/user")
35
+ end
36
+ end
37
+
38
+ alias :find :get
39
+ alias :me :get
40
+
41
+ # @example
42
+ # api.users.picture 'mike'
43
+ def picture(*args)
44
+ arguments(args, required: [ :user ])
45
+ arguments.params['raw'] = true
46
+ get_request("/users/#{arguments.user}/picture", arguments.params)
47
+ end
48
+ end # Users
49
+ end # Assembla
@@ -0,0 +1,97 @@
1
+ # encoding: utf-8
2
+
3
+ module Assembla
4
+ class Client::Users::Keys < API
5
+
6
+ VALID_KEY_PARAM_NAMES = %w[ title key read_only ].freeze
7
+ VALID_REQUEST_PARAM_VALUES = {
8
+ 'read_only' => [ true, false ],
9
+ }
10
+
11
+ # List public keys for the authenticated user
12
+ #
13
+ # @example
14
+ # assembla = Assembla.new oauth_token: '...'
15
+ # assembla.users.keys.list
16
+ # assembla.users.keys.list { |key| ... }
17
+ #
18
+ # @return [Hash]
19
+ #
20
+ # @api public
21
+ def list(*args)
22
+ params = arguments(args).params
23
+ response = get_request("/user/ssh_keys", params)
24
+ return response unless block_given?
25
+ response.each { |el| yield el }
26
+ end
27
+ alias :all :list
28
+
29
+ # Get a single pulic key for the authenticated user
30
+ #
31
+ # @example
32
+ # assembla = Assembla.new oauth_token: '...'
33
+ # assembla.users.keys.get 571
34
+ #
35
+ # @api public
36
+ def get(*args)
37
+ arguments(args, required: [:id])
38
+ get_request("/user/ssh_keys/#{arguments.id}", arguments.params)
39
+ end
40
+ alias :find :get
41
+
42
+ # Create a public key for the authenticated user
43
+ #
44
+ # @param [Hash] params
45
+ # @option [String] :title
46
+ # Required string
47
+ # @option [String] :key
48
+ # Required string. sha key
49
+ #
50
+ # @example
51
+ # assembla = Assembla.new oauth_token: '...'
52
+ # assembla.users.keys.create ssh_key: {title: "buildbot@mac", key: "ssh-rsa AAA..."}
53
+ #
54
+ # @api public
55
+ def create(*args)
56
+ arguments(args) do
57
+ permit VALID_KEY_PARAM_NAMES, recursive: true
58
+ assert_values VALID_REQUEST_PARAM_VALUES
59
+ end
60
+ post_request("/user/ssh_keys", arguments.params)
61
+ end
62
+
63
+ # Update a public key for the authenticated user
64
+ #
65
+ # @param [Hash] params
66
+ # @option [String] :title
67
+ # Required string
68
+ # @option [String] :key
69
+ # Required string. sha key
70
+ #
71
+ # @example
72
+ # assembla = Assembla.new oauth_token: '...'
73
+ # assembla.users.keys.update 571, "title": "buildbot@mac",
74
+ # "key": "ssh-rsa AAA..."
75
+ #
76
+ # @api public
77
+ def edit(*args)
78
+ arguments(args, required: [:id]) do
79
+ permit VALID_KEY_PARAM_NAMES, recursive: true
80
+ assert_values VALID_REQUEST_PARAM_VALUES
81
+ end
82
+ put_request("/user/ssh_keys/#{arguments.id}", arguments.params)
83
+ end
84
+
85
+ # Delete a public key for the authenticated user
86
+ #
87
+ # @example
88
+ # assembla = Assembla.new oauth_token: '...'
89
+ # assembla.users.keys.delete 571
90
+ #
91
+ # @api public
92
+ def delete(*args)
93
+ arguments(args, required: [:id])
94
+ delete_request("/user/ssh_keys/#{arguments.id}", arguments.params)
95
+ end
96
+ end # Users::Keys
97
+ end # Assembla