assembla_api 0.1.2

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