bitly 2.1.0 → 3.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e0a2dd617bd9c23263a1db205f8ea95359c34273df7eecc5ca9565536a03c802
4
- data.tar.gz: 4f0dac7f35a238a61b9ec36390df824170b576f15e8f111203bf83a8f600993d
3
+ metadata.gz: c3f7e8ce05cc1176818efa7b83c94fd1e6f6bcc7ce4caefdfc7f719aab18bbd9
4
+ data.tar.gz: 38593047cf4f4b02b6e45a457cce9d698e3f11b3bc06337d1ebcc0953ba1cb28
5
5
  SHA512:
6
- metadata.gz: cc10e4a46caeb7155292380f8c61feec74cf19ce9da36ee49c9b7dbff763b5c4703b58c9e2ded557cfb6426fa7f68532914a49350bc9f5e4f8c25a57ff7d3e82
7
- data.tar.gz: 1935c386fc1d489a532de2459222f9a069a3a6f0a258d58178c16694e131d8be246226464fe1f2f83a40db1c333c0422d1c60905c0ec1dfb23492ae927db2c93
6
+ metadata.gz: 34f1f1d76f0f984f4ba22069aee1280332c1fe5deead1bb2572257dad0ebbb8a97e9c7e642d4270bc495fe5aafde7ba6ce7e98980685e4a37ecbec58b74ad074
7
+ data.tar.gz: 4f772f32325b0fc59c76ceef45634aee7ea0f0c4a81985051ca09286b4c570c92077cb1e05b233c2d8287987ffb3636f6386a125e214810b20837adc86509662
@@ -4,9 +4,9 @@ on:
4
4
  - main
5
5
  pull_request:
6
6
  types: [opened, synchronize, reopened]
7
- name: SonarCloud Analysis
7
+ name: SonarQube Analysis
8
8
  jobs:
9
- sonarcloud:
9
+ sonarqube:
10
10
  runs-on: ubuntu-latest
11
11
  steps:
12
12
  - uses: actions/checkout@v2
@@ -23,12 +23,8 @@ jobs:
23
23
  run: bundle exec rspec
24
24
  env:
25
25
  COVERAGE: json
26
- - name: fix code coverage paths
27
- working-directory: ./coverage
28
- run: |
29
- sed -i 's@'$GITHUB_WORKSPACE'@/github/workspace/@g' coverage.json
30
- - name: SonarCloud Scan
31
- uses: sonarsource/sonarcloud-github-action@master
26
+ - name: SonarQube Scan
27
+ uses: SonarSource/sonarqube-scan-action@v5.0.0
32
28
  env:
33
29
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
34
30
  SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
@@ -8,7 +8,7 @@ jobs:
8
8
  strategy:
9
9
  fail-fast: false
10
10
  matrix:
11
- ruby: [2.5, 2.6, 2.7, "3.0", 3.1, head]
11
+ ruby: [2.5, 2.6, 2.7, "3.0", 3.1, 3.2, 3.3, 3.4, head]
12
12
  continue-on-error: ${{ endsWith(matrix.ruby, 'head') }}
13
13
  steps:
14
14
  - uses: actions/checkout@v2
data/Gemfile CHANGED
@@ -4,3 +4,7 @@ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in bitly.gemspec
6
6
  gemspec
7
+
8
+ group :development do
9
+ gem 'rspec', '< 3.10.0'
10
+ end
data/History.txt CHANGED
@@ -1,6 +1,17 @@
1
1
  === Ongoing
2
2
 
3
- ...
3
+ === 3.1.0 / 2025-02-18
4
+
5
+ * Adds `Qrcode` class and methods to fetch qrcodes and list qrcodes by group as well as get a summary of scans and retrieve an image
6
+ * Adds Ruby 3.4 to test matrix
7
+ * Updates to latest SonarQube scanner
8
+
9
+ === 3.0.0 / 2022-11-08
10
+
11
+ * **Breaking** Removes Group DELETE and Oauth Apps endpoints
12
+ * Updates all URLs in the documentation
13
+ * Adds click_metrics_by_country to Bitlink instances
14
+ * Adds request options and proxy options to the Net::HTTP adapter
4
15
 
5
16
  === 2.1.0 / 2022-10-21
6
17
 
data/README.md CHANGED
@@ -4,25 +4,29 @@ A Ruby gem for using the version 4 [Bitly API](https://dev.bitly.com/) to shorte
4
4
 
5
5
  [![Gem version](https://badge.fury.io/rb/bitly.svg)](https://rubygems.org/gems/bitly) ![Build status](https://github.com/philnash/bitly/workflows/tests/badge.svg) [![Maintainability](https://api.codeclimate.com/v1/badges/f8e078b468c1f2aeca53/maintainability)](https://codeclimate.com/github/philnash/bitly/maintainability) [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=philnash_bitly&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=philnash_bitly) [![Inline docs](https://inch-ci.org/github/philnash/bitly.svg?branch=master)](https://inch-ci.org/github/philnash/bitly)
6
6
 
7
- * [Installation](#installation)
8
- * [Usage](#usage)
9
- * [Authentication](#authentication)
10
- * [Creating an API client](#creating-an-api-client)
11
- * [Shorten a link](#shorten-a-link)
12
- * [Expand a link](#expand-a-link)
13
- * [Available API Endpoints](#available-api-endpoints)
14
- * [Groups](#groups)
15
- * [Organizations](#organizations)
16
- * [Users](#users)
17
- * [Bitlinks](#bitlinks)
18
- * [Custom Bitlinks](#custom-bitlinks)
19
- * [Campaigns](#campaigns)
20
- * [BSDs (Branded Short Domains)](#bsds-branded-short-domains)
21
- * [OAuth Apps](#oauth-apps)
22
- * [Development](#development)
23
- * [Contributing](#contributing)
24
- * [License](#license)
25
- * [Code of Conduct](#code-of-conduct)
7
+ * [Bitly](#bitly)
8
+ * [Installation](#installation)
9
+ * [Usage](#usage)
10
+ * [Authentication](#authentication)
11
+ * [Creating an API client](#creating-an-api-client)
12
+ * [Shorten a link](#shorten-a-link)
13
+ * [Expand a link](#expand-a-link)
14
+ * [Available API Endpoints](#available-api-endpoints)
15
+ * [Groups](#groups)
16
+ * [Organizations](#organizations)
17
+ * [Users](#users)
18
+ * [Bitlinks](#bitlinks)
19
+ * [QR codes](#qr-codes)
20
+ * [Custom Bitlinks](#custom-bitlinks)
21
+ * [Campaigns](#campaigns)
22
+ * [BSDs (Branded Short Domains)](#bsds-branded-short-domains)
23
+ * [Webhooks](#webhooks)
24
+ * [Customising HTTP requests](#customising-http-requests)
25
+ * [Build your own adapter](#build-your-own-adapter)
26
+ * [Development](#development)
27
+ * [Contributing](#contributing)
28
+ * [License](#license)
29
+ * [Code of Conduct](#code-of-conduct)
26
30
 
27
31
  ## Installation
28
32
 
@@ -46,6 +50,8 @@ $ gem install bitly
46
50
 
47
51
  ## Usage
48
52
 
53
+ For a quick introduction, read this blog post on [how to use the Bitly API in Ruby](https://philna.sh/blog/2022/11/09/how-to-use-the-bitly-api-in-ruby/).
54
+
49
55
  ### Authentication
50
56
 
51
57
  All API endpoints require authentication with an OAuth token. You can get your own OAuth token from the [Bitly console](https://app.bitly.com/). Click on the account drop down menu, then _Profile Settings_ then _Generic Access Token_. Fill in your password and you can generate an OAuth access token.
@@ -86,86 +92,133 @@ bitlink.long_url
86
92
 
87
93
  ## Available API Endpoints
88
94
 
89
- This gem supports the following active v4 API endpoints for the[Bitly API](https://dev.bitly.com/v4_documentation.html).
95
+ This gem supports the following active v4 API endpoints for the[Bitly API](https://dev.bitly.com/api-reference).
90
96
 
91
97
  ### Groups
92
98
 
93
99
  [Groups documentation](docs/groups.md)
94
100
 
95
- - [x] [Retrieve groups (`GET /v4/groups`)](https://dev.bitly.com/v4/#operation/getGroups)
96
- - [x] [Retrieve group (`GET /v4/groups/{group_guid}`)](https://dev.bitly.com/v4/#operation/getGroup)
97
- - [x] [Update group (`PATCH /v4/groups/{group_guid}`)](https://dev.bitly.com/v4/#operation/updateGroup)
98
- - [x] [Delete group (`DELETE /v4/groups/{group_guid}`)](https://dev.bitly.com/v4/#operation/deleteGroup)
99
- - [x] [Retrieve tags by group (`GET /v4/groups/{group_guid}/tags`)](https://dev.bitly.com/v4/#operation/getGroupTags)
100
- - [x] [Retrieve group preferences (`GET /v4/groups/{group_guid}/preferences`)](https://dev.bitly.com/v4/#operation/getGroupPreferences)
101
- - [x] [Update group preferences (`PATCH /v4/groups/{group_guid}/preferences`)](https://dev.bitly.com/v4/#operation/updateGroupPreferences)
102
- - [x] [Retrieve Bitlinks by group (`GET /v4/groups/{group_guid}/bitlinks`)](https://dev.bitly.com/v4/#operation/getBitlinksByGroup)
103
- - [x] [Retrieve sorted Bitlinks by group (`GET /v4/groups/{group_guid}/bitlinks/{sort}`)](https://dev.bitly.com/v4/#operation/getSortedBitlinks)
104
- - [x] [Retrieve group shorten counts (`GET /v4/groups/{group_guid}/shorten_counts`)](https://dev.bitly.com/v4/#operation/getGroupShortenCounts)
105
- - [x] [Retrieve click metrics for a group by referring networks (`GET /v4/groups/{group_guid}/referring_networks`)](https://dev.bitly.com/v4/#operation/GetGroupMetricsByReferringNetworks)
106
- - [x] [Retrieve click metrics for a group by countries (`GET /v4/groups/{group_guid}/countries`)](https://dev.bitly.com/v4/#operation/getGroupMetricsByCountries)
101
+ - [x] [Retrieve groups (`GET /v4/groups`)](https://dev.bitly.com/api-reference/#getGroups)
102
+ - [x] [Retrieve group (`GET /v4/groups/{group_guid}`)](https://dev.bitly.com/api-reference/#getGroup)
103
+ - [x] [Update group (`PATCH /v4/groups/{group_guid}`)](https://dev.bitly.com/api-reference/#updateGroup)
104
+ - [x] [Retrieve tags by group (`GET /v4/groups/{group_guid}/tags`)](https://dev.bitly.com/api-reference/#getGroupTags)
105
+ - [x] [Retrieve group preferences (`GET /v4/groups/{group_guid}/preferences`)](https://dev.bitly.com/api-reference/#getGroupPreferences)
106
+ - [x] [Update group preferences (`PATCH /v4/groups/{group_guid}/preferences`)](https://dev.bitly.com/api-reference/#updateGroupPreferences)
107
+ - [x] [Retrieve Bitlinks by group (`GET /v4/groups/{group_guid}/bitlinks`)](https://dev.bitly.com/api-reference/#getBitlinksByGroup)
108
+ - [x] [Retrieve sorted Bitlinks by group (`GET /v4/groups/{group_guid}/bitlinks/{sort}`)](https://dev.bitly.com/api-reference/#getSortedBitlinks)
109
+ - [x] [Retrieve group shorten counts (`GET /v4/groups/{group_guid}/shorten_counts`)](https://dev.bitly.com/api-reference/#getGroupShortenCounts)
110
+ - [x] [Retrieve click metrics for a group by referring networks (`GET /v4/groups/{group_guid}/referring_networks`)](https://dev.bitly.com/api-reference/#GetGroupMetricsByReferringNetworks)
111
+ - [x] [Retrieve click metrics for a group by countries (`GET /v4/groups/{group_guid}/countries`)](https://dev.bitly.com/api-reference/#getGroupMetricsByCountries)
112
+ - [X] [Retrieve QR codes for a group (`GET /v4/groups/{group_guid}/qr-codes`)](https://dev.bitly.com/api-reference/#listQRMinimal)
113
+ - [ ] __[premium]__ [Retrieve click metrics for a group by city (`GET /v4/groups/{group_guid}/cities`)](https://dev.bitly.com/api-reference/#getGroupMetricsByCities)
114
+ - [ ] __[premium]__ [Get group overrides (`GET /v4/groups/{group_guid}/overrides`)](https://dev.bitly.com/api-reference/#getOverridesForGroups)
107
115
 
108
116
  ### Organizations
109
117
 
110
118
  [Organizations documentation](docs/organizations.md)
111
119
 
112
- - [x] [Retrieve organizations (`GET /v4/organizations`)](https://dev.bitly.com/v4/#operation/getOrganizations)
113
- - [x] [Retrieve organization (`GET /v4/organizations/{organization_guid}`)](https://dev.bitly.com/v4/#operation/getOrganization)
114
- - [x] [Retrieve organization shorten counts (`GET /v4/organizations/{organization_guid}/shorten_counts`)](https://dev.bitly.com/v4/#operation/getOrganizationShortenCounts)
120
+ - [x] [Retrieve organizations (`GET /v4/organizations`)](https://dev.bitly.com/api-reference/#getOrganizations)
121
+ - [x] [Retrieve organization (`GET /v4/organizations/{organization_guid}`)](https://dev.bitly.com/api-reference/#getOrganization)
122
+ - [x] [Retrieve organization shorten counts (`GET /v4/organizations/{organization_guid}/shorten_counts`)](https://dev.bitly.com/api-reference/#getOrganizationShortenCounts)
115
123
 
116
124
  ### Users
117
125
 
118
126
  [Users documentation](docs/users.md)
119
127
 
120
- - [x] [Retrieve user (`GET /v4/user`)](https://dev.bitly.com/v4/#operation/getUser)
121
- - [x] [Update user (`PATCH /v4/user`)](https://dev.bitly.com/v4/#operation/updateUser)
128
+ - [x] [Retrieve user (`GET /v4/user`)](https://dev.bitly.com/api-reference/#getUser)
129
+ - [x] [Update user (`PATCH /v4/user`)](https://dev.bitly.com/api-reference/#updateUser)
122
130
 
123
131
  ### Bitlinks
124
132
 
125
133
  [Bitlinks documentation](docs/bitlinks.md)
126
134
 
127
- - [x] [Shorten a link (`POST /v4/shorten`)](https://dev.bitly.com/v4/#operation/createBitlink)
128
- - [x] [Expand a Bitlink (`POST /v4/expand`)](https://dev.bitly.com/v4/#operation/expandBitlink)
129
- - [x] [Retrieve a Bitlink (`GET /v4/bitlink/{bitlink}`)](https://dev.bitly.com/v4/#operation/getBitlink)
130
- - [x] [Create a Bitlink (`POST /v4/bitlinks`)](https://dev.bitly.com/v4/#operation/createFullBitlink)
131
- - [x] [Update a Bitlink (`PATCH /v4/bitlink/{bitlink}`)](https://dev.bitly.com/v4/#operation/updateBitlink)
132
- - [x] [Get clicks for a Bitlink (`GET /v4/bitlink/{bitlink}/clicks`)](https://dev.bitly.com/v4/#operation/getClicksForBitlink)
133
- - [x] [Get clicks summary for a Bitlink (`GET /v4/bitlink/{bitlink}/clicks/summary`)](https://dev.bitly.com/v4/#operation/getClicksSummaryForBitlink)
134
- - [x] [Get metrics for a Bitlink by countries (`GET /v4/bitlinks/{bitlink}/countries`)](https://dev.bitly.com/v4/#operation/getMetricsForBitlinkByCountries)
135
- - [x] [Get metrics for a Bitlink by referrers (`GET /v4/bitlinks/{bitlink}/referrers`)](https://dev.bitly.com/v4/#operation/getMetricsForBitlinkByReferrers)
136
- - [x] [Get metrics for a Bitlink by referring domains (`GET /v4/bitlinks/{bitlink}/referring_domains`)](https://dev.bitly.com/v4/#operation/getMetricsForBitlinkByReferringDomains)
137
- - [x] [Get metrics for a Bitlink by referrers by domain (`GET /v4/bitlinks/{bitlink}/referrers_by_domains`)](https://dev.bitly.com/v4/#operation/getMetricsForBitlinkByReferrersByDomains)
138
- - [ ] __[premium]__ [Get a QR code for a Bitlink (`GET /v4/{bitlink}/qr`)](https://dev.bitly.com/v4/#operation/getBitlinkQRCode)
135
+ - [x] [Shorten a link (`POST /v4/shorten`)](https://dev.bitly.com/api-reference/#createBitlink)
136
+ - [x] [Expand a Bitlink (`POST /v4/expand`)](https://dev.bitly.com/api-reference/#expandBitlink)
137
+ - [x] [Retrieve a Bitlink (`GET /v4/bitlinks/{bitlink}`)](https://dev.bitly.com/api-reference/#getBitlink)
138
+ - [x] [Create a Bitlink (`POST /v4/bitlinks`)](https://dev.bitly.com/api-reference/#createFullBitlink)
139
+ - [x] [Update a Bitlink (`PATCH /v4/bitlinks/{bitlink}`)](https://dev.bitly.com/api-reference/#updateBitlink)
140
+ - [ ] [Delete an unedited hash Bitlink (`DELETE /v4/bitlinks/{bitlink}`)](https://dev.bitly.com/api-reference/#deleteBitlink)
141
+ - [x] [Get clicks for a Bitlink (`GET /v4/bitlinks/{bitlink}/clicks`)](https://dev.bitly.com/api-reference/#getClicksForBitlink)
142
+ - [x] [Get clicks summary for a Bitlink (`GET /v4/bitlinks/{bitlink}/clicks/summary`)](https://dev.bitly.com/api-reference/#getClicksSummaryForBitlink)
143
+ - [x] [Get metrics for a Bitlink by countries (`GET /v4/bitlinks/{bitlink}/countries`)](https://dev.bitly.com/api-reference/#getMetricsForBitlinkByCountries)
144
+ - [x] [Get metrics for a Bitlink by referrers (`GET /v4/bitlinks/{bitlink}/referrers`)](https://dev.bitly.com/api-reference/#getMetricsForBitlinkByReferrers)
145
+ - [x] [Get metrics for a Bitlink by referring domains (`GET /v4/bitlinks/{bitlink}/referring_domains`)](https://dev.bitly.com/api-reference/#getMetricsForBitlinkByReferringDomains)
146
+ - [x] [Get metrics for a Bitlink by referrers by domain (`GET /v4/bitlinks/{bitlink}/referrers_by_domains`)](https://dev.bitly.com/api-reference/#getMetricsForBitlinkByReferrersByDomains)
147
+ - [ ] __[premium]__ [Get metrics for a Bitlink by city (`GET /v4/bitlinks/{bitlink}/cities`)](https://dev.bitly.com/api-reference/#getMetricsForBitlinkByCities)
148
+ - [ ] __[premium]__ [Get metrics for a Bitlink by device type (`GET /v4/bitlinks/{bitlink}/devices`)](https://dev.bitly.com/api-reference/#getMetricsForBitlinkByDevices)
149
+
150
+ ### QR codes
151
+
152
+ [QR codes documentation](docs/qrcodes.md)
153
+
154
+ - [x] [Retrieve a QR code (`GET /v4/qr-codes/{qrcode_id}`)](https://dev.bitly.com/api-reference/#getQRCodeByIdPublic)
155
+ - [x] [Retrieve the scans summary for a QR code (`GET /v4/qr-codes/{qrcode_id}/scans/summary`)](https://dev.bitly.com/api-reference/#getScanMetricsSummaryForQRCode)
156
+ - [x] [Retrieve a QR code image (`GET /v4/qr-codes/{qrcode_id}/image`)](https://dev.bitly.com/api-reference/#getQRCodeImagePublic)
139
157
 
140
158
  ### Custom Bitlinks
141
159
 
142
- - [ ] [Add custom Bitlink (`POST /v4/custom_bitlinks`)](https://dev.bitly.com/v4/#operation/addCustomBitlink)
143
- - [ ] __[premium]__ [Retrieve custom Bitlink (`GET /v4/custom_bitlinks/{custom_bitlink}`)](https://dev.bitly.com/v4/#operation/getCustomBitlink)
144
- - [ ] __[premium]__ [Update custom Bitlink (`PATCH /v4/custom_bitlink/{custom_bitlink}`)](https://dev.bitly.com/v4/#operation/updateCustomBitlink)
145
- - [ ] __[premium]__ [Get metrics for a custom Bitlink by destination (`GET /v4/custom_bitlinks/{custom_bitlink}/clicks_by_destination`)](https://dev.bitly.com/v4/#operation/getCustomBitlinkMetricsByDestination)
160
+ - [ ] [Add custom Bitlink (`POST /v4/custom_bitlinks`)](https://dev.bitly.com/api-reference/#addCustomBitlink)
161
+ - [ ] __[premium]__ [Retrieve custom Bitlink (`GET /v4/custom_bitlinks/{custom_bitlink}`)](https://dev.bitly.com/api-reference/#getCustomBitlink)
162
+ - [ ] __[premium]__ [Update custom Bitlink (`PATCH /v4/custom_bitlinks/{custom_bitlink}`)](https://dev.bitly.com/api-reference/#updateCustomBitlink)
163
+ - [ ] __[premium]__ [Get metrics for a custom Bitlink by destination (`GET /v4/custom_bitlinks/{custom_bitlink}/clicks_by_destination`)](https://dev.bitly.com/api-reference/#getCustomBitlinkMetricsByDestination)
164
+ - [ ] __[premium]__ [Get clicks for a custom Bitlin's entire history (`GET /v4/custom_bitlinks/{custom_bitlink}/clicks`)](https://dev.bitly.com/api-reference/#getClicksForCustomBitlink)
146
165
 
147
166
  ### Campaigns
148
167
 
149
- - [ ] __[premium]__ [Retrieve campaigns (`GET /v4/campaigns`)](https://dev.bitly.com/v4/#operation/getCampaigns)
150
- - [ ] __[premium]__ [Create campaign (`POST /v4/campaigns`)](https://dev.bitly.com/v4/#operation/createCampaign)
151
- - [ ] __[premium]__ [Retrieve campaign (`GET /v4/campaigns/{campaign_guid}`)](https://dev.bitly.com/v4/#operation/getCampaign)
152
- - [ ] __[premium]__ [Update campaign (`PATCH /v4/campaigns/{campaign_guid}`)](https://dev.bitly.com/v4/#operation/updateCampaign)
153
- - [ ] __[premium]__ [Retrieve channels (`GET /v4/channels`)](https://dev.bitly.com/v4/#operation/getChannels)
154
- - [ ] __[premium]__ [Create channel (`POST /v4/channels`)](https://dev.bitly.com/v4/#operation/createChannel)
155
- - [ ] __[premium]__ [Retrieve channel (`GET /v4/channels/{channel_guid}`)](https://dev.bitly.com/v4/#operation/getChannel)
156
- - [ ] __[premium]__ [Update channel (`PATCH /v4/channels/{channel_guid}`)](https://dev.bitly.com/v4/#operation/updateChannel)
168
+ - [ ] __[premium]__ [Retrieve campaigns (`GET /v4/campaigns`)](https://dev.bitly.com/api-reference/#getCampaigns)
169
+ - [ ] __[premium]__ [Create campaign (`POST /v4/campaigns`)](https://dev.bitly.com/api-reference/#createCampaign)
170
+ - [ ] __[premium]__ [Retrieve campaign (`GET /v4/campaigns/{campaign_guid}`)](https://dev.bitly.com/api-reference/#getCampaign)
171
+ - [ ] __[premium]__ [Update campaign (`PATCH /v4/campaigns/{campaign_guid}`)](https://dev.bitly.com/api-reference/#updateCampaign)
172
+ - [ ] __[premium]__ [Retrieve channels (`GET /v4/channels`)](https://dev.bitly.com/api-reference/#getChannels)
173
+ - [ ] __[premium]__ [Create channel (`POST /v4/channels`)](https://dev.bitly.com/api-reference/#createChannel)
174
+ - [ ] __[premium]__ [Retrieve channel (`GET /v4/channels/{channel_guid}`)](https://dev.bitly.com/api-reference/#getChannel)
175
+ - [ ] __[premium]__ [Update channel (`PATCH /v4/channels/{channel_guid}`)](https://dev.bitly.com/api-reference/#updateChannel)
157
176
 
158
177
  ### BSDs (Branded Short Domains)
159
178
 
160
179
  [Branded Short Domains documentation](docs/branded_short_domains.md)
161
180
 
162
- - [x] [Retrieve BSDs (`GET /v4/bsds`)](https://dev.bitly.com/v4/#operation/getBSDs)
181
+ - [x] [Retrieve BSDs (`GET /v4/bsds`)](https://dev.bitly.com/api-reference/#getBSDs)
182
+
183
+ ### Webhooks
184
+
185
+ - [ ] __[premium]__ [Get webhooks (`GET /v4/organizations/{organization_guid}/webhooks`)](https://dev.bitly.com/api-reference/#getWebhooks)
186
+ - [ ] __[premium]__ [Create a webhook (`POST /v4/webhooks`)](https://dev.bitly.com/api-reference/#createWebhook)
187
+ - [ ] __[premium]__ [Retrieve a webhook (`GET /v4/webhooks/{webhook_guid}`)](https://dev.bitly.com/api-reference/#getWebhook)
188
+ - [ ] __[premium]__ [Update a webhook (`POST /v4/webhooks/{webhook_guid`)](https://dev.bitly.com/api-reference/#updateWebhook)
189
+ - [ ] __[premium]__ [Delete a webhook (`DELETE /v4/webhooks/{webhook_guid}`)](https://dev.bitly.com/api-reference/#deleteWebhook)
190
+ - [ ] __[premium]__ [Verify a webhook (`POST /v4/webhooks/{webhook_guid}/verify`)](https://dev.bitly.com/api-reference/#verifyWebhook)
191
+
192
+ ## Customising HTTP requests
193
+
194
+ This gem comes with an HTTP client that can use different adapters. It ships with a `Net::HTTP` adapter that it uses by default.
195
+
196
+ If you want to control the connection, you can create your own instance of the `Net::HTTP` adapter and pass it options for an HTTP proxy or options that control the request. For example, to control the `read_timeout` you can do this:
197
+
198
+ ```ruby
199
+ adapter = Bitly::HTTP::Adapters::NetHTTP.new(request_options: { read_timeout: 1 })
200
+ http_client = Bitly::HTTP::Client.new(adapter)
201
+ api_client = Bitly::API::Client.new(http: http_client, token: token)
202
+ ```
203
+
204
+ Similarly, you can use an HTTP proxy with the adapter by passing the proxy variables to the adapter's constructor.
205
+
206
+ ```ruby
207
+ adapter = Bitly::HTTP::Adapters::NetHTTP.new(proxy_addr: "example.com", proxy_port: 80, proxy_user: "username", proxy_pass: "password")
208
+ http_client = Bitly::HTTP::Client.new(adapter)
209
+ api_client = Bitly::API::Client.new(http: http_client, token: token)
210
+ ```
211
+
212
+ ### Build your own adapter
163
213
 
164
- ### OAuth Apps
214
+ If you want even more control over the request, you can build your own adapter. An HTTP adapter within this gem must have a `request` instance method that receives a `Bitly::HTTP::Request` object and returns an array of four objects:
165
215
 
166
- [OAuth Apps documentation](docs/oauth_apps.md)
216
+ 1. The response status code
217
+ 2. The body of the response as a string
218
+ 3. The response headers as a hash
219
+ 4. A boolean denoting whether the response was a success or not
167
220
 
168
- - [x] [Retrieve OAuth App (`GET /v4/apps/{client_id}`)](https://dev.bitly.com/v4/#operation/getOAuthApp)
221
+ See `./src/bitly/http/adapters/net_http.rb` for an example.
169
222
 
170
223
  ## Development
171
224
 
@@ -20,4 +20,4 @@ module Bitly
20
20
  end
21
21
  end
22
22
  end
23
- end
23
+ end
@@ -22,7 +22,7 @@ module Bitly
22
22
 
23
23
  ##
24
24
  # Get the clicks for a bitlink.
25
- # [`GET /v4/bitlink/{bitlink}/clicks`](https://dev.bitly.com/v4/#operation/getClicksForBitlink)
25
+ # [`GET /v4/bitlink/{bitlink}/clicks`](https://dev.bitly.com/api-reference/#getClicksForBitlink)
26
26
  #
27
27
  # @param client [Bitly::API::Client] An authorized API client
28
28
  # @param bitlink [String] The Bitlink for which you want the clicks
@@ -1,52 +1,18 @@
1
1
  # frozen_string_literal: true
2
- require "cgi"
3
- require "uri"
2
+ require_relative "../paginated_list"
4
3
 
5
4
  module Bitly
6
5
  module API
7
6
  class Bitlink
8
- class PaginatedList < Bitly::API::List
9
- attr_reader :next_url, :prev_url, :size, :page, :total
10
-
11
- def initialize(items:, response: , client:)
12
- super(items: items, response: response)
13
- @client = client
14
- if response.body["pagination"]
15
- pagination = response.body["pagination"]
16
- @next_url = pagination["next"]
17
- @prev_url = pagination["prev"]
18
- @size = pagination["size"]
19
- @page = pagination["page"]
20
- @total = pagination["total"]
21
- end
22
- end
23
-
24
- def has_next_page?
25
- !next_url.nil? && !next_url.empty?
26
- end
27
-
28
- def has_prev_page?
29
- !prev_url.nil? && !prev_url.empty?
7
+ class PaginatedList < Bitly::API::PaginatedList
8
+ def item_key
9
+ "links"
30
10
  end
31
11
 
32
- def next_page
33
- has_next_page? ? get_page(uri: URI(next_url)) : nil
34
- end
35
-
36
- def prev_page
37
- has_prev_page? ? get_page(uri: URI(prev_url)) : nil
38
- end
39
-
40
- private
41
-
42
- def get_page(uri:)
43
- response = @client.request(path: uri.path.gsub(/\/v4/, ""), params: CGI.parse(uri.query))
44
- bitlinks = response.body["links"].map do |link|
45
- Bitlink.new(data: link, client: @client)
46
- end
47
- self.class.new(items: bitlinks, response: response, client: @client)
12
+ def item_factory(data)
13
+ Bitlink.new(data: data, client: @client)
48
14
  end
49
15
  end
50
16
  end
51
17
  end
52
- end
18
+ end
@@ -19,7 +19,7 @@ module Bitly
19
19
 
20
20
  ##
21
21
  # Shortens a long url.
22
- # [`POST /v4/shorten`](https://dev.bitly.com/v4/#operation/createBitlink)
22
+ # [`POST /v4/shorten`](https://dev.bitly.com/api-reference/#createBitlink)
23
23
  #
24
24
  # @example
25
25
  # bitlink = Bitly::API::Bitlink.shorten(client: client, long_url: long_url)
@@ -47,7 +47,7 @@ module Bitly
47
47
  ##
48
48
  # Creates a new Bitlink from a long URL. Similar to #shorten but takes
49
49
  # more parameters.
50
- # [`POST /v4/bitlinks`](https://dev.bitly.com/v4/#operation/createFullBitlink)
50
+ # [`POST /v4/bitlinks`](https://dev.bitly.com/api-reference/#createFullBitlink)
51
51
  #
52
52
  # @example
53
53
  # bitlink = Bitly::API::Bitlink.create(client: client, long_url: long_url)
@@ -81,7 +81,7 @@ module Bitly
81
81
 
82
82
  ##
83
83
  # Return information about a bitlink
84
- # [`GET /v4/bitlink/{bitlink}`](https://dev.bitly.com/v4/#operation/getBitlink)
84
+ # [`GET /v4/bitlinks/{bitlink}`](https://dev.bitly.com/api-reference/#getBitlink)
85
85
  #
86
86
  # @example
87
87
  # bitlink = Bitly::API::Bitlink.fetch(client: client, bitlink: "bit.ly/example")
@@ -98,7 +98,7 @@ module Bitly
98
98
 
99
99
  ##
100
100
  # Return public information about a bitlink
101
- # [`POST /v4/expand`](https://dev.bitly.com/v4/#operation/expandBitlink)
101
+ # [`POST /v4/expand`](https://dev.bitly.com/api-reference/#expandBitlink)
102
102
  #
103
103
  # @example
104
104
  # bitlink = Bitly::API::Bitlink.expand(client: client, bitlink: "bit.ly/example")
@@ -115,7 +115,7 @@ module Bitly
115
115
 
116
116
  ##
117
117
  # Retrieve a list of bitlinks by group
118
- # [`GET /v4/groups/{group_guid}/bitlinks`](https://dev.bitly.com/v4/#operation/getBitlinksByGroup)
118
+ # [`GET /v4/groups/{group_guid}/bitlinks`](https://dev.bitly.com/api-reference/#getBitlinksByGroup)
119
119
  #
120
120
  # @example
121
121
  # bitlinks = Bitly::API::Bitlink.list(client: client, group_guid: guid)
@@ -184,15 +184,12 @@ module Bitly
184
184
  "encoding_login" => encoding_login
185
185
  }
186
186
  response = client.request(path: "/groups/#{group_guid}/bitlinks", params: params)
187
- bitlinks = response.body["links"].map do |link|
188
- new(data: link, client: client)
189
- end
190
- PaginatedList.new(items: bitlinks, response: response, client: client)
187
+ PaginatedList.new(response: response, client: client)
191
188
  end
192
189
 
193
190
  ##
194
191
  # Returns a list of Bitlinks sorted by clicks.
195
- # [`GET /v4/groups/{group_guid}/bitlinks/{sort}`](https://dev.bitly.com/v4/#operation/getSortedBitlinks)
192
+ # [`GET /v4/groups/{group_guid}/bitlinks/{sort}`](https://dev.bitly.com/api-reference/#getSortedBitlinks)
196
193
  #
197
194
  # The API returns a separate list of the links and the click counts, but
198
195
  # this method assigns the number of clicks for each link to the Bitlink
@@ -257,7 +254,7 @@ module Bitly
257
254
 
258
255
  ##
259
256
  # Update the Bitlink.
260
- # [`PATCH /v4/bitlink/{bitlink}`](https://dev.bitly.com/v4/#operation/updateBitlink)
257
+ # [`PATCH /v4/bitlinks/{bitlink}`](https://dev.bitly.com/api-reference/#getClicksSummaryForBitlink)
261
258
  #
262
259
  # The parameters listed below are from the documentation. Some only work
263
260
  # if you have a Bitly Pro account.
@@ -315,7 +312,7 @@ module Bitly
315
312
  self
316
313
  end
317
314
 
318
- # [`GET /v4/bitlink/{bitlink}/clicks/summary`](https://dev.bitly.com/v4/#operation/getClicksSummaryForBitlink)
315
+ # [`GET /v4/bitlinks/{bitlink}/clicks/summary`](https://dev.bitly.com/api-reference/#getClicksSummaryForBitlink)
319
316
  #
320
317
  # @return [Bitly::API::Bitlink::ClicksSummary]
321
318
  def clicks_summary(unit: nil, units: nil, unit_reference: nil, size: nil)
@@ -324,7 +321,7 @@ module Bitly
324
321
 
325
322
  ##
326
323
  # Get the clicks for the bitlink.
327
- # [`GET /v4/bitlink/{bitlink}/clicks`](https://dev.bitly.com/v4/#operation/getClicksForBitlink)
324
+ # [`GET /v4/bitlinks/{bitlink}/clicks`](https://dev.bitly.com/api-reference/#getClicksForBitlink)
328
325
  #
329
326
  # @param sort [String] The data to sort on. Default and only option is
330
327
  # "clicks".
@@ -341,6 +338,24 @@ module Bitly
341
338
  def link_clicks(unit: nil, units: nil, unit_reference: nil, size: nil)
342
339
  LinkClick.list(client: @client, bitlink: id, unit: unit, units: units, unit_reference: unit_reference, size: size)
343
340
  end
341
+
342
+ ##
343
+ # Get metrics for a Bitlink by country
344
+ # [`GET /v4/bitlinks/{bitlink}/countries`](https://dev.bitly.com/api-reference/#getMetricsForBitlinkByCountries)
345
+ #
346
+ # @param unit [String] A unit of time. Default is "day" and can be
347
+ # "minute", "hour", "day", "week" or "month"
348
+ # @param units [Integer] An integer representing the time units to query
349
+ # data for. pass -1 to return all units of time. Defaults to -1.
350
+ # @param unit_reference [String] An ISO-8601 timestamp, indicating the
351
+ # most recent time for which to pull metrics. Will default to current
352
+ # time.
353
+ # @param size [Integer] The number of links to be returned. Defaults to 50
354
+ #
355
+ # @return [Bitly::API::ClickMetric::List]
356
+ def click_metrics_by_country(unit: nil, units: nil, unit_reference: nil, size: nil)
357
+ ClickMetric.list_countries_by_bitlink(client: @client, bitlink: id, unit: unit, units: units, unit_reference: unit_reference, size: size)
358
+ end
344
359
  end
345
360
  end
346
- end
361
+ end
data/lib/bitly/api/bsd.rb CHANGED
@@ -8,7 +8,7 @@ module Bitly
8
8
 
9
9
  ##
10
10
  # Fetch Branded Short Domains (BSDs).
11
- # [`GET /v4/bsds`](https://dev.bitly.com/v4/#operation/getBSDs)
11
+ # [`GET /v4/bsds`](https://dev.bitly.com/api-reference/#getBSDs)
12
12
  #
13
13
  # @example
14
14
  # bsds = Bitly::API::BSD.list(client: client)
@@ -36,7 +36,7 @@ module Bitly
36
36
 
37
37
  ##
38
38
  # Gets the referring networks for the group.
39
- # [`GET /v4/groups/{group_guid}/referring_networks`](https://dev.bitly.com/v4/#operation/GetGroupMetricsByReferringNetworks)
39
+ # [`GET /v4/groups/{group_guid}/referring_networks`](https://dev.bitly.com/api-reference/#GetGroupMetricsByReferringNetworks)
40
40
  #
41
41
  # @param client [Bitly::API::Client] An authorized API client
42
42
  # @param group_guid [String] The guid of the group
@@ -63,7 +63,7 @@ module Bitly
63
63
 
64
64
  ##
65
65
  # Gets the country click metrics for the group.
66
- # [`GET /v4/groups/{group_guid}/countries`](https://dev.bitly.com/v4/#operation/getGroupMetricsByCountries)
66
+ # [`GET /v4/groups/{group_guid}/countries`](https://dev.bitly.com/api-reference/#getGroupMetricsByCountries)
67
67
  #
68
68
  # @param client [Bitly::API::Client] An authorized API client
69
69
  # @param group_guid [String] The guid of the group
@@ -100,6 +100,22 @@ module Bitly
100
100
  )
101
101
  end
102
102
 
103
+ ##
104
+ # Get metrics for a Bitlink by country
105
+ # [`GET /v4/bitlinks/{bitlink}/countries`](https://dev.bitly.com/api-reference/#getMetricsForBitlinkByCountries)
106
+ #
107
+ # @param client [Bitly::API::Client] An authorized API client
108
+ # @param bitlink [String] The bitlink you want information about
109
+ # @param unit [String] A unit of time. Default is "day" and can be
110
+ # "minute", "hour", "day", "week" or "month"
111
+ # @param units [Integer] An integer representing the time units to query
112
+ # data for. pass -1 to return all units of time. Defaults to -1.
113
+ # @param unit_reference [String] An ISO-8601 timestamp, indicating the
114
+ # most recent time for which to pull metrics. Will default to current
115
+ # time.
116
+ # @param size [Integer] The number of links to be returned. Defaults to 50
117
+ #
118
+ # @return [Bitly::API::ClickMetric::List]
103
119
  def self.list_countries_by_bitlink(client:, bitlink:, unit: nil, units: nil, size: nil, unit_reference: nil)
104
120
  bitlink = Bitlink::Utils.normalise_bitlink(bitlink: bitlink)
105
121
  list_metrics(