bitbuckets 0.2.0

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 (122) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +7 -0
  3. data/README.md +169 -0
  4. data/Rakefile +1 -0
  5. data/lib/bitbucket_rest_api.rb +86 -0
  6. data/lib/bitbucket_rest_api/api.rb +104 -0
  7. data/lib/bitbucket_rest_api/api/actions.rb +32 -0
  8. data/lib/bitbucket_rest_api/api_factory.rb +29 -0
  9. data/lib/bitbucket_rest_api/authorization.rb +31 -0
  10. data/lib/bitbucket_rest_api/client.rb +53 -0
  11. data/lib/bitbucket_rest_api/configuration.rb +103 -0
  12. data/lib/bitbucket_rest_api/connection.rb +97 -0
  13. data/lib/bitbucket_rest_api/constants.rb +57 -0
  14. data/lib/bitbucket_rest_api/core_ext/array.rb +6 -0
  15. data/lib/bitbucket_rest_api/core_ext/hash.rb +58 -0
  16. data/lib/bitbucket_rest_api/deprecation.rb +36 -0
  17. data/lib/bitbucket_rest_api/error.rb +37 -0
  18. data/lib/bitbucket_rest_api/error/bad_events.rb +10 -0
  19. data/lib/bitbucket_rest_api/error/bad_request.rb +11 -0
  20. data/lib/bitbucket_rest_api/error/blank_value.rb +10 -0
  21. data/lib/bitbucket_rest_api/error/client_error.rb +19 -0
  22. data/lib/bitbucket_rest_api/error/forbidden.rb +11 -0
  23. data/lib/bitbucket_rest_api/error/internal_server_error.rb +11 -0
  24. data/lib/bitbucket_rest_api/error/invalid_options.rb +17 -0
  25. data/lib/bitbucket_rest_api/error/no_events.rb +10 -0
  26. data/lib/bitbucket_rest_api/error/not_found.rb +11 -0
  27. data/lib/bitbucket_rest_api/error/required_params.rb +17 -0
  28. data/lib/bitbucket_rest_api/error/service_error.rb +18 -0
  29. data/lib/bitbucket_rest_api/error/service_unavailable.rb +11 -0
  30. data/lib/bitbucket_rest_api/error/unauthorized.rb +11 -0
  31. data/lib/bitbucket_rest_api/error/unknown_value.rb +17 -0
  32. data/lib/bitbucket_rest_api/error/unprocessable_entity.rb +11 -0
  33. data/lib/bitbucket_rest_api/error/validations.rb +17 -0
  34. data/lib/bitbucket_rest_api/invitations.rb +14 -0
  35. data/lib/bitbucket_rest_api/issues.rb +229 -0
  36. data/lib/bitbucket_rest_api/issues/comments.rb +116 -0
  37. data/lib/bitbucket_rest_api/issues/components.rb +105 -0
  38. data/lib/bitbucket_rest_api/issues/milestones.rb +105 -0
  39. data/lib/bitbucket_rest_api/normalizer.rb +24 -0
  40. data/lib/bitbucket_rest_api/parameter_filter.rb +29 -0
  41. data/lib/bitbucket_rest_api/repos.rb +276 -0
  42. data/lib/bitbucket_rest_api/repos/changesets.rb +52 -0
  43. data/lib/bitbucket_rest_api/repos/commits.rb +38 -0
  44. data/lib/bitbucket_rest_api/repos/components.rb +35 -0
  45. data/lib/bitbucket_rest_api/repos/default_reviewers.rb +60 -0
  46. data/lib/bitbucket_rest_api/repos/download.rb +15 -0
  47. data/lib/bitbucket_rest_api/repos/following.rb +38 -0
  48. data/lib/bitbucket_rest_api/repos/forks.rb +66 -0
  49. data/lib/bitbucket_rest_api/repos/keys.rb +86 -0
  50. data/lib/bitbucket_rest_api/repos/pull_request.rb +158 -0
  51. data/lib/bitbucket_rest_api/repos/services.rb +101 -0
  52. data/lib/bitbucket_rest_api/repos/sources.rb +36 -0
  53. data/lib/bitbucket_rest_api/repos/webhooks.rb +99 -0
  54. data/lib/bitbucket_rest_api/request.rb +71 -0
  55. data/lib/bitbucket_rest_api/request/basic_auth.rb +30 -0
  56. data/lib/bitbucket_rest_api/request/jsonize.rb +39 -0
  57. data/lib/bitbucket_rest_api/request/oauth.rb +50 -0
  58. data/lib/bitbucket_rest_api/response.rb +26 -0
  59. data/lib/bitbucket_rest_api/response/helpers.rb +18 -0
  60. data/lib/bitbucket_rest_api/response/jsonize.rb +25 -0
  61. data/lib/bitbucket_rest_api/response/mashify.rb +23 -0
  62. data/lib/bitbucket_rest_api/response/raise_error.rb +28 -0
  63. data/lib/bitbucket_rest_api/response/xmlize.rb +25 -0
  64. data/lib/bitbucket_rest_api/result.rb +136 -0
  65. data/lib/bitbucket_rest_api/teams.rb +91 -0
  66. data/lib/bitbucket_rest_api/user.rb +87 -0
  67. data/lib/bitbucket_rest_api/users.rb +20 -0
  68. data/lib/bitbucket_rest_api/users/account.rb +50 -0
  69. data/lib/bitbucket_rest_api/utils/url.rb +61 -0
  70. data/lib/bitbucket_rest_api/validations.rb +23 -0
  71. data/lib/bitbucket_rest_api/validations/format.rb +21 -0
  72. data/lib/bitbucket_rest_api/validations/presence.rb +21 -0
  73. data/lib/bitbucket_rest_api/validations/required.rb +37 -0
  74. data/lib/bitbucket_rest_api/validations/token.rb +38 -0
  75. data/lib/bitbucket_rest_api/version.rb +10 -0
  76. data/lib/bitbuckets.rb +2 -0
  77. data/spec/bitbucket_rest_api/api/actions_spec.rb +18 -0
  78. data/spec/bitbucket_rest_api/api_factory_spec.rb +28 -0
  79. data/spec/bitbucket_rest_api/api_spec.rb +87 -0
  80. data/spec/bitbucket_rest_api/authorization_spec.rb +74 -0
  81. data/spec/bitbucket_rest_api/client_spec.rb +17 -0
  82. data/spec/bitbucket_rest_api/core_ext/array_spec.rb +13 -0
  83. data/spec/bitbucket_rest_api/core_ext/hash_spec.rb +47 -0
  84. data/spec/bitbucket_rest_api/deprecation_spec.rb +31 -0
  85. data/spec/bitbucket_rest_api/error/bad_events_spec.rb +11 -0
  86. data/spec/bitbucket_rest_api/error/blank_value_spec.rb +14 -0
  87. data/spec/bitbucket_rest_api/error/no_events_spec.rb +11 -0
  88. data/spec/bitbucket_rest_api/invitations_spec.rb +21 -0
  89. data/spec/bitbucket_rest_api/issues/comments_spec.rb +89 -0
  90. data/spec/bitbucket_rest_api/issues/components_spec.rb +89 -0
  91. data/spec/bitbucket_rest_api/issues/milestones_spec.rb +89 -0
  92. data/spec/bitbucket_rest_api/issues_spec.rb +91 -0
  93. data/spec/bitbucket_rest_api/normalizer_spec.rb +29 -0
  94. data/spec/bitbucket_rest_api/parameter_filter_spec.rb +42 -0
  95. data/spec/bitbucket_rest_api/repos/changesets_spec.rb +44 -0
  96. data/spec/bitbucket_rest_api/repos/commits_spec.rb +21 -0
  97. data/spec/bitbucket_rest_api/repos/components_spec.rb +43 -0
  98. data/spec/bitbucket_rest_api/repos/default_reviewers_spec.rb +65 -0
  99. data/spec/bitbucket_rest_api/repos/download_spec.rb +10 -0
  100. data/spec/bitbucket_rest_api/repos/following_spec.rb +53 -0
  101. data/spec/bitbucket_rest_api/repos/forks_spec.rb +46 -0
  102. data/spec/bitbucket_rest_api/repos/keys_spec.rb +73 -0
  103. data/spec/bitbucket_rest_api/repos/pull_request_spec.rb +283 -0
  104. data/spec/bitbucket_rest_api/repos/sources_spec.rb +78 -0
  105. data/spec/bitbucket_rest_api/repos/webhooks_spec.rb +245 -0
  106. data/spec/bitbucket_rest_api/repos_spec.rb +158 -0
  107. data/spec/bitbucket_rest_api/request/jsonize_spec.rb +19 -0
  108. data/spec/bitbucket_rest_api/request/oauth_spec.rb +26 -0
  109. data/spec/bitbucket_rest_api/request_spec.rb +88 -0
  110. data/spec/bitbucket_rest_api/response/jsonize_spec.rb +13 -0
  111. data/spec/bitbucket_rest_api/response/mashify_spec.rb +33 -0
  112. data/spec/bitbucket_rest_api/response/raise_error_spec.rb +42 -0
  113. data/spec/bitbucket_rest_api/teams_spec.rb +136 -0
  114. data/spec/bitbucket_rest_api/user_spec.rb +78 -0
  115. data/spec/bitbucket_rest_api/utils/url_spec.rb +34 -0
  116. data/spec/bitbucket_rest_api/validations/format_spec.rb +30 -0
  117. data/spec/bitbucket_rest_api/validations/presence_spec.rb +13 -0
  118. data/spec/bitbucket_rest_api/validations/required_spec.rb +44 -0
  119. data/spec/bitbucket_rest_api/validations/token_spec.rb +17 -0
  120. data/spec/bitbucket_rest_api_spec.rb +17 -0
  121. data/spec/spec_helper.rb +24 -0
  122. metadata +358 -0
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+ module BitBucket
3
+ class Issues::Comments < API
4
+ VALID_ISSUE_COMMENT_PARAM_NAME = %w[
5
+ content
6
+ ].freeze
7
+
8
+ # Creates new Issues::Comments API
9
+ def initialize(options = {})
10
+ super(options)
11
+ end
12
+
13
+ # List comments on an issue
14
+ #
15
+ # = Examples
16
+ # bitbucket = BitBucket.new
17
+ # bitbucket.issues.comments.all 'user-name', 'repo-name', 'issue-id'
18
+ # bitbucket.issues.comments.all 'user-name', 'repo-name', 'issue-id' {|com| .. }
19
+ #
20
+ def list(user_name, repo_name, issue_id, params = {})
21
+ _update_user_repo_params(user_name, repo_name)
22
+ _validate_user_repo_params(user, repo) unless user? && repo?
23
+ _validate_presence_of issue_id
24
+
25
+ normalize! params
26
+ # _merge_mime_type(:issue_comment, params)
27
+
28
+ response = get_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/#{issue_id}/comments/", params)
29
+ return response unless block_given?
30
+
31
+ response.each { |el| yield el }
32
+ end
33
+ alias all list
34
+
35
+ # Get a single comment
36
+ #
37
+ # = Examples
38
+ # bitbucket = BitBucket.new
39
+ # bitbucket.issues.comments.find 'user-name', 'repo-name', 'comment-id'
40
+ #
41
+ def get(user_name, repo_name, comment_id, params = {})
42
+ _update_user_repo_params(user_name, repo_name)
43
+ _validate_user_repo_params(user, repo) unless user? && repo?
44
+ _validate_presence_of comment_id
45
+
46
+ normalize! params
47
+ # _merge_mime_type(:issue_comment, params)
48
+
49
+ get_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/comments/#{comment_id}", params)
50
+ end
51
+ alias find get
52
+
53
+ # Create a comment
54
+ #
55
+ # = Inputs
56
+ # <tt>:content</tt> Required string
57
+ #
58
+ # = Examples
59
+ # bitbucket = BitBucket.new
60
+ # bitbucket.issues.comments.create 'user-name', 'repo-name', 'issue-id',
61
+ # "content" => 'a new comment'
62
+ #
63
+ def create(user_name, repo_name, issue_id, params = {})
64
+ _update_user_repo_params(user_name, repo_name)
65
+ _validate_user_repo_params(user, repo) unless user? && repo?
66
+ _validate_presence_of issue_id
67
+
68
+ normalize! params
69
+ # _merge_mime_type(:issue_comment, params)
70
+ filter! VALID_ISSUE_COMMENT_PARAM_NAME, params
71
+ assert_required_keys(%w[content], params)
72
+
73
+ post_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/#{issue_id}/comments/", params)
74
+ end
75
+
76
+ # Edit a comment
77
+ #
78
+ # = Inputs
79
+ # <tt>:content</tt> Required string
80
+ #
81
+ # = Examples
82
+ # bitbucket = BitBucket.new
83
+ # bitbucket.issues.comments.edit 'user-name', 'repo-name', 'comment-id',
84
+ # "content" => 'a new comment'
85
+ #
86
+ def edit(user_name, repo_name, comment_id, params = {})
87
+ _update_user_repo_params(user_name, repo_name)
88
+ _validate_user_repo_params(user, repo) unless user? && repo?
89
+ _validate_presence_of comment_id
90
+
91
+ normalize! params
92
+ # _merge_mime_type(:issue_comment, params)
93
+ filter! VALID_ISSUE_COMMENT_PARAM_NAME, params
94
+ assert_required_keys(%w[content], params)
95
+
96
+ put_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/comments/#{comment_id}", params)
97
+ end
98
+
99
+ # Delete a comment
100
+ #
101
+ # = Examples
102
+ # bitbucket = BitBucket.new
103
+ # bitbucket.issues.comments.delete 'user-name', 'repo-name', 'comment-id'
104
+ #
105
+ def delete(user_name, repo_name, comment_id, params = {})
106
+ _update_user_repo_params(user_name, repo_name)
107
+ _validate_user_repo_params(user, repo) unless user? && repo?
108
+ _validate_presence_of comment_id
109
+
110
+ normalize! params
111
+ # _merge_mime_type(:issue_comment, params)
112
+
113
+ delete_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/comments/#{comment_id}", params)
114
+ end
115
+ end # Issues::Comments
116
+ end # BitBucket
@@ -0,0 +1,105 @@
1
+ # frozen_string_literal: true
2
+ module BitBucket
3
+ class Issues::Components < API
4
+ VALID_COMPONENT_INPUTS = %w[name].freeze
5
+
6
+ # Creates new Issues::Components API
7
+ def initialize(options = {})
8
+ super(options)
9
+ end
10
+
11
+ # List all components for a repository
12
+ #
13
+ # = Examples
14
+ # bitbucket = BitBucket.new :user => 'user-name', :repo => 'repo-name'
15
+ # bitbucket.issues.components.list
16
+ # bitbucket.issues.components.list { |component| ... }
17
+ #
18
+ def list(user_name, repo_name, params = {})
19
+ _update_user_repo_params(user_name, repo_name)
20
+ _validate_user_repo_params(user, repo) unless user? && repo?
21
+ normalize! params
22
+
23
+ response = get_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/components", params)
24
+ return response unless block_given?
25
+
26
+ response.each { |el| yield el }
27
+ end
28
+ alias all list
29
+
30
+ # Get a single component
31
+ #
32
+ # = Examples
33
+ # bitbucket = BitBucket.new
34
+ # bitbucket.issues.components.find 'user-name', 'repo-name', 'component-id'
35
+ #
36
+ def get(user_name, repo_name, component_id, params = {})
37
+ _update_user_repo_params(user_name, repo_name)
38
+ _validate_user_repo_params(user, repo) unless user? && repo?
39
+ _validate_presence_of component_id
40
+ normalize! params
41
+
42
+ get_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/components/#{component_id}", params)
43
+ end
44
+ alias find get
45
+
46
+ # Create a component
47
+ #
48
+ # = Inputs
49
+ # <tt>:name</tt> - Required string
50
+ #
51
+ # = Examples
52
+ # bitbucket = BitBucket.new :user => 'user-name', :repo => 'repo-name'
53
+ # bitbucket.issues.components.create :name => 'API'
54
+ #
55
+ def create(user_name, repo_name, params = {})
56
+ _update_user_repo_params(user_name, repo_name)
57
+ _validate_user_repo_params(user, repo) unless user? && repo?
58
+
59
+ normalize! params
60
+ filter! VALID_COMPONENT_INPUTS, params
61
+ assert_required_keys(VALID_COMPONENT_INPUTS, params)
62
+
63
+ post_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/components", params)
64
+ end
65
+
66
+ # Update a component
67
+ #
68
+ # = Inputs
69
+ # <tt>:name</tt> - Required string
70
+ #
71
+ # = Examples
72
+ # @bitbucket = BitBucket.new
73
+ # @bitbucket.issues.components.update 'user-name', 'repo-name', 'component-id',
74
+ # :name => 'API'
75
+ #
76
+ def update(user_name, repo_name, component_id, params = {})
77
+ _update_user_repo_params(user_name, repo_name)
78
+ _validate_user_repo_params(user, repo) unless user? && repo?
79
+ _validate_presence_of component_id
80
+
81
+ normalize! params
82
+ filter! VALID_COMPONENT_INPUTS, params
83
+ assert_required_keys(VALID_COMPONENT_INPUTS, params)
84
+
85
+ put_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/components/#{component_id}", params)
86
+ end
87
+ alias edit update
88
+
89
+ # Delete a component
90
+ #
91
+ # = Examples
92
+ # bitbucket = BitBucket.new
93
+ # bitbucket.issues.components.delete 'user-name', 'repo-name', 'component-id'
94
+ #
95
+ def delete(user_name, repo_name, component_id, params = {})
96
+ _update_user_repo_params(user_name, repo_name)
97
+ _validate_user_repo_params(user, repo) unless user? && repo?
98
+
99
+ _validate_presence_of component_id
100
+ normalize! params
101
+
102
+ delete_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/components/#{component_id}", params)
103
+ end
104
+ end # Issues::Components
105
+ end # BitBucket
@@ -0,0 +1,105 @@
1
+ # frozen_string_literal: true
2
+ module BitBucket
3
+ class Issues::Milestones < API
4
+ VALID_MILESTONE_INPUTS = %w[
5
+ name
6
+ ].freeze # :nodoc:
7
+
8
+ # Creates new Issues::Milestones API
9
+ def initialize(options = {})
10
+ super(options)
11
+ end
12
+
13
+ # List milestones for a repository
14
+ #
15
+ # = Examples
16
+ # bitbucket = BitBucket.new :user => 'user-name', :repo => 'repo-name'
17
+ # bitbucket.issues.milestones.list
18
+ #
19
+ def list(user_name, repo_name, params = {})
20
+ _update_user_repo_params(user_name, repo_name)
21
+ _validate_user_repo_params(user, repo) unless user? && repo?
22
+
23
+ normalize! params
24
+
25
+ response = get_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/milestones", params)
26
+ return response unless block_given?
27
+
28
+ response.each { |el| yield el }
29
+ end
30
+ alias all list
31
+
32
+ # Get a single milestone
33
+ #
34
+ # = Examples
35
+ # bitbucket = BitBucket.new
36
+ # bitbucket.issues.milestones.get 'user-name', 'repo-name', 'milestone-id'
37
+ #
38
+ def get(user_name, repo_name, milestone_id, params = {})
39
+ _update_user_repo_params(user_name, repo_name)
40
+ _validate_user_repo_params(user, repo) unless user? && repo?
41
+ _validate_presence_of milestone_id
42
+ normalize! params
43
+
44
+ get_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/milestones/#{milestone_id}", params)
45
+ end
46
+ alias find get
47
+
48
+ # Create a milestone
49
+ #
50
+ # = Inputs
51
+ # <tt>:name</tt> - Required string
52
+ #
53
+ # = Examples
54
+ # bitbucket = BitBucket.new :user => 'user-name', :repo => 'repo-name'
55
+ # bitbucket.issues.milestones.create :name => 'hello-world'
56
+ #
57
+ def create(user_name, repo_name, params = {})
58
+ _update_user_repo_params(user_name, repo_name)
59
+ _validate_user_repo_params(user, repo) unless user? && repo?
60
+
61
+ normalize! params
62
+ filter! VALID_MILESTONE_INPUTS, params
63
+ assert_required_keys(%w[name], params)
64
+
65
+ post_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/milestones", params)
66
+ end
67
+
68
+ # Update a milestone
69
+ #
70
+ # = Inputs
71
+ # <tt>:name</tt> - Required string
72
+ #
73
+ # = Examples
74
+ # bitbucket = BitBucket.new
75
+ # bitbucket.issues.milestones.update 'user-name', 'repo-name', 'milestone-id',
76
+ # :name => 'hello-world'
77
+ #
78
+ def update(user_name, repo_name, milestone_id, params = {})
79
+ _update_user_repo_params(user_name, repo_name)
80
+ _validate_user_repo_params(user, repo) unless user? && repo?
81
+ _validate_presence_of milestone_id
82
+
83
+ normalize! params
84
+ filter! VALID_MILESTONE_INPUTS, params
85
+ assert_required_keys(%w[name], params)
86
+
87
+ put_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/milestones/#{milestone_id}", params)
88
+ end
89
+
90
+ # Delete a milestone
91
+ #
92
+ # = Examples
93
+ # bitbucket = BitBucket.new
94
+ # bitbucket.issues.milestones.delete 'user-name', 'repo-name', 'milestone-id'
95
+ #
96
+ def delete(user_name, repo_name, milestone_id, params = {})
97
+ _update_user_repo_params(user_name, repo_name)
98
+ _validate_user_repo_params(user, repo) unless user? && repo?
99
+ _validate_presence_of milestone_id
100
+ normalize! params
101
+
102
+ delete_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/milestones/#{milestone_id}", params)
103
+ end
104
+ end # Issues::Milestones
105
+ end # BitBucket
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+ module BitBucket
3
+ # Deals with normalizing client supplied parameter keys.
4
+ module Normalizer
5
+ # Turns any keys from nested hashes including nested arrays into strings
6
+ #
7
+ def normalize!(params)
8
+ case params
9
+ when Hash
10
+ params.keys.each do |k|
11
+ params[k.to_s] = params.delete(k)
12
+ normalize!(params[k.to_s])
13
+ end
14
+ when Array
15
+ params.map! do |el|
16
+ normalize!(el)
17
+ end
18
+ else
19
+ params.to_s
20
+ end
21
+ params
22
+ end
23
+ end # Normalizer
24
+ end # BitBucket
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+ module BitBucket
3
+ # Allows you to specify parameters keys which will be preserved
4
+ # in parameters hash and its subhashes. Any keys from the nested
5
+ # hash that do not match will be removed.
6
+ module ParameterFilter
7
+ # Removes any keys from nested hashes that don't match predefiend keys
8
+ #
9
+ def filter!(keys, params, options = { recursive: true }) # :nodoc:
10
+ case params
11
+ when Hash
12
+ params.keys.each do |k, _v|
13
+ if keys.include?(k) || BitBucket::Validations::VALID_API_KEYS.include?(k)
14
+ filter!(keys, params[k]) if options[:recursive]
15
+ else
16
+ params.delete(k)
17
+ end
18
+ end
19
+ when Array
20
+ params.map! do |el|
21
+ filter!(keys, el) if options[:recursive]
22
+ end
23
+ else
24
+ params
25
+ end
26
+ params
27
+ end
28
+ end # Filter
29
+ end # BitBucket
@@ -0,0 +1,276 @@
1
+ # frozen_string_literal: true
2
+ module BitBucket
3
+ class Repos < API
4
+ extend AutoloadHelper
5
+
6
+ # Load all the modules after initializing Repos to avoid superclass mismatch
7
+ autoload_all 'bitbucket_rest_api/repos',
8
+ Changesets: 'changesets',
9
+ Keys: 'keys',
10
+ Services: 'services',
11
+ Following: 'following',
12
+ Sources: 'sources',
13
+ Forks: 'forks',
14
+ Commits: 'commits',
15
+ Download: 'download',
16
+ Webhooks: 'webhooks',
17
+ PullRequest: 'pull_request',
18
+ DefaultReviewers: 'default_reviewers',
19
+ Components: 'components'
20
+
21
+ DEFAULT_REPO_OPTIONS = {
22
+ 'website' => '',
23
+ 'is_private' => false,
24
+ 'has_issues' => false,
25
+ 'has_wiki' => false,
26
+ 'scm' => 'git',
27
+ 'no_public_forks' => false
28
+ }.freeze
29
+
30
+ VALID_REPO_OPTIONS = %w[
31
+ owner
32
+ name
33
+ description
34
+ website
35
+ is_private
36
+ has_issues
37
+ has_wiki
38
+ no_public_forks
39
+ language
40
+ scm
41
+ ].freeze
42
+
43
+ # Creates new Repositories API
44
+ def initialize(options = {})
45
+ super(options)
46
+ end
47
+
48
+ # Access to Repos::Commits API
49
+ def changesets
50
+ @changesets ||= ApiFactory.new 'Repos::Changesets'
51
+ end
52
+
53
+ # Access to Repos::Keys API
54
+ def keys
55
+ @keys ||= ApiFactory.new 'Repos::Keys'
56
+ end
57
+
58
+ # Access to Repos::Watchin API
59
+ def following
60
+ @following ||= ApiFactory.new 'Repos::Following'
61
+ end
62
+
63
+ # Access to Repos::Commits API
64
+ def sources
65
+ @sources ||= ApiFactory.new 'Repos::Sources'
66
+ end
67
+
68
+ # Access to Repos::Services API
69
+ def services
70
+ @services ||= ApiFactory.new 'Repos::Services'
71
+ end
72
+
73
+ def forks
74
+ @forks ||= ApiFactory.new 'Repos::Forks'
75
+ end
76
+
77
+ def commits
78
+ @commits ||= ApiFactory.new 'Repos::Commits'
79
+ end
80
+
81
+ def download
82
+ @download ||= ApiFactory.new 'Repos::Download'
83
+ end
84
+
85
+ # Access to Repos::PullRequests API
86
+ def pull_request
87
+ @pull_request ||= ApiFactory.new 'Repos::PullRequest'
88
+ end
89
+
90
+ def default_reviewers
91
+ @default_reviewers ||= ApiFactory.new 'Repos::DefaultReviewers'
92
+ end
93
+
94
+ def components
95
+ @components ||= ApiFactory.new 'Repos::Components'
96
+ end
97
+
98
+ def webhooks
99
+ @webhooks ||= ApiFactory.new 'Repos::Webhooks'
100
+ end
101
+
102
+ # List branches
103
+ #
104
+ # = Examples
105
+ #
106
+ # bitbucket = BitBucket.new
107
+ # bibucket.repos.branches 'user-name', 'repo-name'
108
+ #
109
+ # repos = BitBucket::Repos.new
110
+ # repos.branches 'user-name', 'repo-name'
111
+ #
112
+ def branches(user_name, repo_name, params = {})
113
+ _update_user_repo_params(user_name, repo_name)
114
+ _validate_user_repo_params(user, repo) unless user? && repo?
115
+ normalize! params
116
+
117
+ response = get_request("/1.0/repositories/#{user}/#{repo.downcase}/branches/", params)
118
+ return response unless block_given?
119
+
120
+ response.each { |el| yield el }
121
+ end
122
+
123
+ alias list_branches branches
124
+
125
+ # FIXME: 'POST a new repository' is a deprecated feature of the API
126
+ # Create a new repository for the authenticated user.
127
+ #
128
+ # = Parameters
129
+ # <tt>:name</tt> - Required string
130
+ # <tt>:description</tt> - Optional string
131
+ # <tt>:website</tt> - Optional string
132
+ # <tt>:is_private</tt> - Optional boolean - <tt>true</tt> to create a private repository, <tt>false</tt> to create a public one.
133
+ # <tt>:has_issues</tt> - Optional boolean - <tt>true</tt> to enable issues for this repository, <tt>false</tt> to disable them
134
+ # <tt>:has_wiki</tt> - Optional boolean - <tt>true</tt> to enable the wiki for this repository, <tt>false</tt> to disable it. Default is <tt>true</tt>
135
+ # <tt>:owner</tt> Optional string - The team in which this repository will be created
136
+ #
137
+ # = Examples
138
+ # bitbucket = BitBucket.new
139
+ # bitbucket.repos.create "name" => 'repo-name'
140
+ # "description": "This is your first repo",
141
+ # "website": "https://bitbucket.com",
142
+ # "is_private": false,
143
+ # "has_issues": true,
144
+ # "has_wiki": true
145
+ #
146
+ # Create a new repository in this team. The authenticated user
147
+ # must be a member of this team
148
+ #
149
+ # Examples:
150
+ # bitbucket = BitBucket.new :oauth_token => '...', :oauth_secret => '...'
151
+ # bitbucket.repos.create :name => 'repo-name', :owner => 'team-name'
152
+ #
153
+ def create(*args)
154
+ params = args.extract_options!
155
+ normalize! params
156
+ filter! VALID_REPO_OPTIONS + %w[org], params
157
+ assert_required_keys(%w[name], params)
158
+
159
+ # Requires authenticated user
160
+ post_request('/1.0/repositories/', DEFAULT_REPO_OPTIONS.merge(params))
161
+ end
162
+
163
+ # Edit a repository
164
+ #
165
+ # = Parameters
166
+ # * <tt>:name</tt> Required string
167
+ # * <tt>:description</tt> Optional string
168
+ # * <tt>:website</tt> Optional string
169
+ # * <tt>:private</tt> - Optional boolean - <tt>false</tt> to create public reps, <tt>false</tt> to create a private one
170
+ # * <tt>:has_issues</tt> Optional boolean - <tt>true</tt> to enable issues for this repository, <tt>false</tt> to disable them
171
+ # * <tt>:has_wiki</tt> Optional boolean - <tt>true</tt> to enable the wiki for this repository, <tt>false</tt> to disable it. Default is <tt>true</tt>
172
+ # * <tt>:has_downloads</tt> Optional boolean - <tt>true</tt> to enable downloads for this repository
173
+ #
174
+ # = Examples
175
+ #
176
+ # bitbucket = BitBucket.new
177
+ # bitbucket.repos.edit 'user-name', 'repo-name',
178
+ # :name => 'hello-world',
179
+ # :description => 'This is your first repo',
180
+ # :website => "https://bitbucket.com",
181
+ # :public => true, :has_issues => true
182
+ #
183
+ def edit(user_name, repo_name, params = {})
184
+ _update_user_repo_params(user_name, repo_name)
185
+ _validate_user_repo_params(user, repo) unless user? && repo?
186
+
187
+ normalize! params
188
+ filter! VALID_REPO_OPTIONS, params
189
+
190
+ put_request("/1.0/repositories/#{user}/#{repo.downcase}/", DEFAULT_REPO_OPTIONS.merge(params))
191
+ end
192
+
193
+ # Get a repository
194
+ #
195
+ # = Examples
196
+ # bitbucket = BitBucket.new
197
+ # bitbucket.repos.get 'user-name', 'repo-name'
198
+ #
199
+ def get(user_name, repo_name, params = {})
200
+ _update_user_repo_params(user_name, repo_name)
201
+ _validate_user_repo_params(user, repo) unless user? && repo?
202
+ normalize! params
203
+
204
+ get_request("/1.0/repositories/#{user}/#{repo.downcase}", params)
205
+ end
206
+
207
+ alias find get
208
+
209
+ # FIXME: 'DELETE an existing repository' is a deprecated feature of the API
210
+ # Delete a repository
211
+ #
212
+ # = Examples
213
+ # @bitbucket = BitBucket.new
214
+ # @bitbucket.repos.delete 'user-name', 'repo-name'
215
+ #
216
+ def delete(user_name, repo_name)
217
+ _update_user_repo_params(user_name, repo_name)
218
+ _validate_user_repo_params(user, repo) unless user? && repo?
219
+
220
+ delete_request("/1.0/repositories/#{user}/#{repo.downcase}")
221
+ end
222
+
223
+ # List repositories for the authenticated user
224
+ #
225
+ # = Examples
226
+ # bitbucket = BitBucket.new :oauth_token => '...', :oauth_secret => '...'
227
+ # bitbucket.repos.list
228
+ # bitbucket.repos.list { |repo| ... }
229
+ #
230
+ # List public repositories for the specified user.
231
+ #
232
+ # = Examples
233
+ # bitbucket = BitBucket.new
234
+ # bitbucket.repos.list :user => 'user-name', :role => 'owner'
235
+ # bitbucket.repos.list :user => 'user-name', { |repo| ... }
236
+ def list(*args)
237
+ params = args.extract_options!
238
+ normalize! params
239
+ _merge_user_into_params!(params) unless params.key?('user')
240
+ params.merge!('pagelen' => 100) unless params.key?('pagelen')
241
+
242
+ filter! %w[user role pagelen], params
243
+
244
+ response = get_request('/2.0/repositories', params)
245
+
246
+ response = response[:values]
247
+ return response unless block_given?
248
+
249
+ response.each { |el| yield el }
250
+ end
251
+
252
+ alias all list
253
+
254
+ # List tags
255
+ #
256
+ # = Examples
257
+ # bitbucket = BitBucket.new
258
+ # bitbucket.repos.tags 'user-name', 'repo-name'
259
+ # bitbucket.repos.tags 'user-name', 'repo-name' { |tag| ... }
260
+ #
261
+ def tags(user_name, repo_name, params = {})
262
+ _update_user_repo_params(user_name, repo_name)
263
+ _validate_user_repo_params(user, repo) unless user? && repo?
264
+ normalize! params
265
+
266
+ response = get_request("/1.0/repositories/#{user}/#{repo.downcase}/tags/", params)
267
+ return response unless block_given?
268
+
269
+ response.each { |el| yield el }
270
+ end
271
+
272
+ alias list_tags tags
273
+ alias repo_tags tags
274
+ alias repository_tags tags
275
+ end # Repos
276
+ end # BitBucket