camper 0.0.8 → 0.0.9

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: ac986df88ec826cc3b15bb75ba1bab382a144f6fdbf9900881907e7f82aab633
4
- data.tar.gz: 122bba57a7e32a886390dbae0220122c86417c064a9ed9815085639fb5f4519c
3
+ metadata.gz: 702097b0560277ca7116dea4caed2e50e34f6d6732ba0be390515931220ef24b
4
+ data.tar.gz: 402cc359f4b7013691c36927e26502efe14a52b222471c8e5513a1d2b8e4c106
5
5
  SHA512:
6
- metadata.gz: 9c7dbea42ec5e6ab228fe0fe627e61e45877f9c82803391005d0c45c262231c165bd523036f3bd38072be2c0ace8510dfc61f2ab792dc8ad27e66b3deae710c5
7
- data.tar.gz: 1a7d91f083e430ee984bf81e1f55f5a70281721071e2fd86a947ac7b26a99fc18324bd4da88cbaa2d8ab34e989f2f6396197a904670e785ae42b002b07667b78
6
+ metadata.gz: 8681cda10f1bc5acc17a407d53a517bac0763758df16773952c8c84b9e7b380c5b18c7254a0d39d09dda70d505732a0c0f515d4c863adb4bab0b8471d66ef383
7
+ data.tar.gz: a43b2d372e1f539f68ad8ec4bfd212353305da29a72f1bb82382609e0ce2ea237b7b457b92ed0d1d54c300a7d2fa4a8a5077fd0e5b84b1d7b982bb6bd3ccf5a4
data/.gitignore CHANGED
@@ -57,4 +57,4 @@ build-iPhoneSimulator/
57
57
 
58
58
  .rspec_status
59
59
 
60
- .env
60
+ .env*
@@ -4,6 +4,16 @@
4
4
 
5
5
  **Implemented enhancements:**
6
6
 
7
+ - Split todos and todolists APIs [\#47](https://github.com/renehernandez/camper/pull/47)
8
+
9
+ **Merged pull requests:**
10
+
11
+ - Bump rubocop from 0.92.0 to 1.0.0 [\#44](https://github.com/renehernandez/camper/pull/44)
12
+
13
+ ## [v0.0.8](https://github.com/renehernandez/camper/tree/v0.0.8) (2020-10-27)
14
+
15
+ **Implemented enhancements:**
16
+
7
17
  - Add people API [\#46](https://github.com/renehernandez/camper/pull/46)
8
18
  - Raise error if resource can't be commented [\#45](https://github.com/renehernandez/camper/pull/45)
9
19
 
@@ -1,14 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- camper (0.0.7)
4
+ camper (0.0.8)
5
5
  httparty (~> 0.18)
6
6
  rack-oauth2 (~> 1.14)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activesupport (6.0.3.3)
11
+ activesupport (6.0.3.4)
12
12
  concurrent-ruby (~> 1.0, >= 1.0.2)
13
13
  i18n (>= 0.7, < 2)
14
14
  minitest (~> 5.1)
@@ -38,7 +38,7 @@ GEM
38
38
  minitest (5.14.2)
39
39
  multi_xml (0.6.0)
40
40
  parallel (1.19.2)
41
- parser (2.7.1.5)
41
+ parser (2.7.2.0)
42
42
  ast (~> 2.4.1)
43
43
  pry (0.13.1)
44
44
  coderay (~> 1.1)
@@ -52,7 +52,7 @@ GEM
52
52
  rack (>= 2.1.0)
53
53
  rainbow (3.0.0)
54
54
  rake (13.0.1)
55
- regexp_parser (1.8.0)
55
+ regexp_parser (1.8.2)
56
56
  rexml (3.2.4)
57
57
  rspec (3.9.0)
58
58
  rspec-core (~> 3.9.0)
@@ -67,23 +67,21 @@ GEM
67
67
  diff-lcs (>= 1.2.0, < 2.0)
68
68
  rspec-support (~> 3.9.0)
69
69
  rspec-support (3.9.3)
70
- rubocop (0.92.0)
70
+ rubocop (1.0.0)
71
71
  parallel (~> 1.10)
72
72
  parser (>= 2.7.1.5)
73
73
  rainbow (>= 2.2.2, < 4.0)
74
- regexp_parser (>= 1.7)
74
+ regexp_parser (>= 1.8)
75
75
  rexml
76
- rubocop-ast (>= 0.5.0)
76
+ rubocop-ast (>= 0.6.0)
77
77
  ruby-progressbar (~> 1.7)
78
78
  unicode-display_width (>= 1.4.0, < 2.0)
79
- rubocop-ast (0.7.0)
79
+ rubocop-ast (1.0.0)
80
80
  parser (>= 2.7.1.5)
81
- strscan (>= 1.0.0)
82
81
  rubocop-performance (1.8.1)
83
82
  rubocop (>= 0.87.0)
84
83
  rubocop-ast (>= 0.4.0)
85
84
  ruby-progressbar (1.10.1)
86
- strscan (1.0.3)
87
85
  thread_safe (0.3.6)
88
86
  tzinfo (1.2.7)
89
87
  thread_safe (~> 0.1)
data/README.md CHANGED
@@ -24,17 +24,18 @@ Or install it yourself as:
24
24
  $ gem install camper
25
25
  ```
26
26
 
27
- ## Implemented API endpoints
27
+ ## Status of API endpoints
28
28
 
29
29
  The up-to-date list of Basecamp API endpoints can be found at [here](https://github.com/basecamp/bc3-api#api-endpoints).
30
30
 
31
31
  Currently, Camper supports the following endpoints:
32
32
 
33
- * [Comments](https://github.com/basecamp/bc3-api/blob/master/sections/comments.md): Implementation at [comments.rb](./lib/camper/api/comments.rb) **Partial**
34
- * [Messages](https://github.com/basecamp/bc3-api/blob/master/sections/messages.md): Implementation at [messages.rb](./lib/camper/api/messages.rb) **Partial**
35
- * [People](https://github.com/basecamp/bc3-api/blob/master/sections/people.md): Implementation at [people.rb](./lib/camper/api/people.rb) **Complete**
36
- * [Projects](https://github.com/basecamp/bc3-api/blob/master/sections/projects.md): Implementation at [projects.rb](./lib/camper/api/projects.rb) **Partial**
37
- * [To-dos](https://github.com/basecamp/bc3-api/blob/master/sections/todos.md): Implementation at [todos.rb](./lib/camper/api/todos.rb) **Partial**
33
+ * [Comments](https://github.com/basecamp/bc3-api/blob/master/sections/comments.md): Implementation at [comments.rb](https://github.com/renehernandez/camper/blob/main/lib/camper/api/comments.rb) (Partial)
34
+ * [Messages](https://github.com/basecamp/bc3-api/blob/master/sections/messages.md): Implementation at [messages.rb](https://github.com/renehernandez/camper/blob/main/lib/camper/api/messages.rb) (Partial)
35
+ * [People](https://github.com/basecamp/bc3-api/blob/master/sections/people.md): Implementation at [people.rb](https://github.com/renehernandez/camper/blob/main/lib/camper/api/people.rb) (Complete)
36
+ * [Projects](https://github.com/basecamp/bc3-api/blob/master/sections/projects.md): Implementation at [projects.rb](https://github.com/renehernandez/camper/blob/main/lib/camper/api/projects.rb) (Partial)
37
+ * [To-do list](https://github.com/basecamp/bc3-api/blob/master/sections/todolists.md): Implementation at [todolists.rb](https://github.com/renehernandez/camper/blob/main/lib/camper/api/todolists.rb) (Almost complete, only missing todolist trashing)
38
+ * [To-dos](https://github.com/basecamp/bc3-api/blob/master/sections/todos.md): Implementation at [todos.rb](https://github.com/renehernandez/camper/blob/main/lib/camper/api/todos.rb) (Almost complete, only missing todo trashing)
38
39
 
39
40
  ## Usage
40
41
 
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'camper'
4
+
5
+ client = Camper.client
6
+
7
+ current_user = client.profile
8
+
9
+ puts "Current User:\n#{current_user.inspect}"
10
+
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'camper'
4
+
5
+ client = Camper.client
6
+
7
+ projects = client.projects
8
+
9
+ projects.auto_paginate do |p|
10
+ puts "Project: #{p.name}"
11
+
12
+ todoset = client.todoset(p)
13
+
14
+ puts "Ratio of completed Todos in Todoset: #{todoset.completed_ratio}"
15
+
16
+ client.todolists(todoset).auto_paginate(5) do |list|
17
+ puts "Todolist: #{list.title}"
18
+
19
+ client.todos(list).auto_paginate do |todo|
20
+ puts "Todo: #{todo.title}"
21
+ puts "Get Todo using project id: #{client.todo(p.id, todo.id).title}"
22
+ puts "Get Todo using project resource: #{client.todo(p, todo.id).title}"
23
+ puts "Get Todo using todolist resource: #{client.todo(list, todo.id).title}"
24
+ end
25
+ end
26
+
27
+ begin
28
+ client.todolists(p)
29
+ rescue Camper::Error::InvalidParameter
30
+ puts 'Cannot use a project p to get the todolists'
31
+ end
32
+ end
@@ -11,17 +11,20 @@ end
11
11
  projects = client.projects
12
12
 
13
13
  projects.auto_paginate do |p|
14
- puts "Project: #{p.inspect}"
15
-
16
- puts "Todo set: #{p.todoset.inspect}"
14
+ puts "Project: #{p.name}"
17
15
 
18
16
  todoset = client.todoset(p)
19
17
 
18
+ puts "Ratio of completed Todos in Todoset: #{todoset.completed_ratio}"
19
+
20
20
  client.todolists(todoset).auto_paginate(5) do |list|
21
21
  puts "Todolist: #{list.title}"
22
22
 
23
- client.todos(list).auto_paginate do |todo|
24
- puts todo.inspect
23
+ client.todos(list).auto_paginate(1) do |todo|
24
+ puts "Todo: #{todo.title}"
25
+ puts "Get Todo using project id: #{client.todo(p.id, todo.id).title}"
26
+ puts "Get Todo using project resource: #{client.todo(p, todo.id).title}"
27
+ puts "Get Todo using todolist resource: #{client.todo(list, todo.id).title}"
25
28
  end
26
29
  end
27
30
  end
@@ -7,6 +7,7 @@ require 'camper/version'
7
7
  require 'camper/logging'
8
8
  require 'camper/error'
9
9
  require 'camper/configuration'
10
+ require 'camper/url_utils'
10
11
  require 'camper/authorization'
11
12
  require 'camper/resource'
12
13
  require 'camper/pagination_data'
@@ -2,7 +2,7 @@
2
2
 
3
3
  class Camper::Client
4
4
  # Defines methods related to people.
5
- # @see ttps://github.com/basecamp/bc3-api/blob/master/sections/people.md
5
+ # @see https://github.com/basecamp/bc3-api/blob/master/sections/people.md
6
6
  module PeopleAPI
7
7
  # Get all people visible to the current user
8
8
  #
@@ -50,10 +50,10 @@ class Camper::Client
50
50
  # @param project [Resource|Integer|String] A project resource or a project id
51
51
  # @param options [Hash] options to update access, either grant, revoke or create new people
52
52
  # @return [Resource]
53
- # @raise [Error::RequestIsMissingParameters] if no option is specified
53
+ # @raise [Error::InvalidParameter] if no option is specified
54
54
  # @see https://github.com/basecamp/bc3-api/blob/master/sections/people.md#update-who-can-access-a-project
55
55
  def update_access_in_project(project, options = {})
56
- raise RequestIsMissingParameters, 'options cannot be empty' if options.empty?
56
+ raise Camper::Error::InvalidParameter, 'options cannot be empty' if options.empty?
57
57
 
58
58
  id = project.respond_to?(:id) ? project.id : project
59
59
 
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Camper::Client
4
+ # Defines methods related to todolists.
5
+ # @see https://github.com/basecamp/bc3-api/blob/master/sections/todolists.md
6
+ module TodolistsAPI
7
+ # Get the todolists associated with the todoset
8
+ #
9
+ # @example
10
+ # client.todolists(todoset)
11
+ # @example
12
+ # client.todolists(todoset, status: 'archived')
13
+ #
14
+ # @param todoset [Resource] the parent todoset resource
15
+ # @param options [Hash] extra options to filter the list of todolist
16
+ # @return [Array<Resource>]
17
+ # @raise [Error::InvalidParameter] if todolists_url field in todoset param
18
+ # is not a valid basecamp url
19
+ # @see https://github.com/basecamp/bc3-api/blob/master/sections/todolists.md#get-to-do-lists
20
+ def todolists(todoset, options = {})
21
+ url = todoset.todolists_url
22
+
23
+ raise Camper::Error::InvalidParameter, todoset unless Camper::UrlUtils.basecamp_url?(url)
24
+
25
+ get(url, options.merge(override_path: true))
26
+ end
27
+
28
+ # Get a todolist with a given id
29
+ #
30
+ # @example
31
+ # client.todolist(todoset, '2345')
32
+ #
33
+ # @param todoset [Resource] the parent todoset resource
34
+ # @param id [Integer, String] the id of the todolist to get
35
+ # @return [Resource]
36
+ # @see https://github.com/basecamp/bc3-api/blob/master/sections/todolists.md#get-a-to-do-list
37
+ def todolist(todoset, id)
38
+ get("/buckets/#{todoset.bucket.id}/todolists/#{id}")
39
+ end
40
+
41
+ # Create a todolist within the given todoset
42
+ #
43
+ # @example
44
+ # client.create_todolist(todoset, 'Launch', "<div><em>Finish it!</em></div>")
45
+ #
46
+ # @param todoset [Resource] the parent todoset resource
47
+ # @param name [String] the name of the new todolist
48
+ # @param description [String] an optional description for the todolist
49
+ # @return [Resource]
50
+ # @raise [Error::InvalidParameter] if todolists_url field in todoset param
51
+ # is not a valid basecamp url
52
+ # @see https://github.com/basecamp/bc3-api/blob/master/sections/todolists.md#create-a-to-do-list
53
+ def create_todolist(todoset, name, description = '')
54
+ url = todoset.todolists_url
55
+
56
+ raise Camper::Error::InvalidParameter, todoset unless Camper::UrlUtils.basecamp_url?(url)
57
+
58
+ post(url, body: { name: name, description: description }, override_path: true)
59
+ end
60
+
61
+ # Update a todolist to change name and description
62
+ #
63
+ # @example
64
+ # client.update_todolist(todolist, 'Launch', "<div><em>Finish it!</em></div>")
65
+ #
66
+ # @param todolist [Resource] the todolist resource to update
67
+ # @param name [String] the new name of the todolist
68
+ # @param description [String] a new optional description for the todolist
69
+ # @return [Resource]
70
+ # @raise [Error::InvalidParameter] if url field in todolist param
71
+ # is not a valid basecamp url
72
+ # @see https://github.com/basecamp/bc3-api/blob/master/sections/todolists.md#update-a-to-do-list
73
+ def update_todolist(todolist, name, description = '')
74
+ url = todolist.url
75
+
76
+ raise Camper::Error::InvalidParameter, todolist unless Camper::UrlUtils.basecamp_url?(url)
77
+
78
+ put(url, body: { name: name, description: description }, override_path: true)
79
+ end
80
+ end
81
+ end
@@ -1,35 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Camper::Client
4
+ # Defines methods related to todos.
5
+ # @see https://github.com/basecamp/bc3-api/blob/master/sections/todos.md
4
6
  module TodosAPI
5
- # Get the todolists associated with the todoset
6
- #
7
- # @example
8
- # client.todolists(todoset)
9
- # @example
10
- # client.todolists(todoset, status: 'archived')
11
- #
12
- # @param todoset [Resource] the parent todoset resource
13
- # @param options [Hash] extra options to filter the list of todolist
14
- # @return [Array<Resource>]
15
- # @see https://github.com/basecamp/bc3-api/blob/master/sections/todolists.md#get-to-do-lists
16
- def todolists(todoset, options = {})
17
- get(todoset.todolists_url, options.merge(override_path: true))
18
- end
19
-
20
- # Get a todolist with a given id
21
- #
22
- # @example
23
- # client.todolist(todoset, '2345')
24
- #
25
- # @param todoset [Resource] the parent todoset resource
26
- # @param id [Integer, String] the id of the todolist to get
27
- # @return [Resource]
28
- # @see https://github.com/basecamp/bc3-api/blob/master/sections/todolists.md#get-a-to-do-list
29
- def todolist(todoset, id)
30
- get("/buckets/#{todoset.bucket.id}/todolists/#{id}")
31
- end
32
-
33
7
  # Get the todos in a todolist
34
8
  #
35
9
  # @example
@@ -40,9 +14,40 @@ class Camper::Client
40
14
  # @param todolist [Resource] the parent todoset resource
41
15
  # @param options [Hash] options to filter the list of todos
42
16
  # @return [Resource]
17
+ # @raise [Error::InvalidParameter] if todos_url field in todolist param
18
+ # is not a valid basecamp url
43
19
  # @see https://github.com/basecamp/bc3-api/blob/master/sections/todos.md#get-to-dos
44
20
  def todos(todolist, options = {})
45
- get(todolist.todos_url, options.merge(override_path: true))
21
+ url = todolist.todos_url
22
+
23
+ raise Camper::Error::InvalidParameter, todolist unless Camper::UrlUtils.basecamp_url?(url)
24
+
25
+ get(url, options.merge(override_path: true))
26
+ end
27
+
28
+ # Get a todo with a given id using a particular parent resource.
29
+ #
30
+ # @example
31
+ # client.todo(my_project, '10')
32
+ # @example
33
+ # client.todo(new_todolist, 134)
34
+ # @example
35
+ # client.todo(67543, '2440')
36
+ #
37
+ # @param parent [Integer|String|Project|Resource] can be either a project id, a project or a todolist resource
38
+ # @param id [Integer|String] id of the todo
39
+ # @return [Resource]
40
+ # @see https://github.com/basecamp/bc3-api/blob/master/sections/todos.md#get-a-to-do
41
+ def todo(parent, id)
42
+ bucket_id = parent
43
+
44
+ if parent.is_a? Camper::Project
45
+ bucket_id = parent.id
46
+ elsif parent.respond_to?(:type)
47
+ bucket_id = parent.bucket.id
48
+ end
49
+
50
+ get("/buckets/#{bucket_id}/todos/#{id}")
46
51
  end
47
52
 
48
53
  # Create a todo within a todolist
@@ -60,9 +65,15 @@ class Camper::Client
60
65
  # @param content [String] what the to-do is for
61
66
  # @param options [Hash] extra configuration for the todo such as due_date and description
62
67
  # @return [Resource]
68
+ # @raise [Error::InvalidParameter] if todos_url field in todolist param
69
+ # is not a valid basecamp url
63
70
  # @see https://github.com/basecamp/bc3-api/blob/master/sections/todos.md#create-a-to-do
64
71
  def create_todo(todolist, content, options = {})
65
- post(todolist.todos_url, body: { content: content, **options }, override_path: true)
72
+ url = todolist.todos_url
73
+
74
+ raise Camper::Error::InvalidParameter, todolist unless Camper::UrlUtils.basecamp_url?(url)
75
+
76
+ post(url, body: { content: content, **options }, override_path: true)
66
77
  end
67
78
 
68
79
  # Complete a todo
@@ -71,9 +82,52 @@ class Camper::Client
71
82
  # client.complete_todo(todo)
72
83
  #
73
84
  # @param todo [Resource] the todo to be marked as completed
85
+ # @raise [Error::InvalidParameter] if url field in todo param
86
+ # is not a valid basecamp url
74
87
  # @see https://github.com/basecamp/bc3-api/blob/master/sections/todos.md#complete-a-to-do
75
88
  def complete_todo(todo)
76
- post("#{todo.url}/completion", override_path: true)
89
+ url = todo.url
90
+
91
+ raise Camper::Error::InvalidParameter, todo unless Camper::UrlUtils.basecamp_url?(url)
92
+
93
+ post("#{url}/completion", override_path: true)
94
+ end
95
+
96
+ # Uncomplete a todo
97
+ #
98
+ # @example
99
+ # client.uncomplete_todo(todo)
100
+ #
101
+ # @param todo [Resource] the todo to be marked as uncompleted
102
+ # @raise [Error::InvalidParameter] if url field in todo param
103
+ # is not a valid basecamp url
104
+ # @see https://github.com/basecamp/bc3-api/blob/master/sections/todos.md#uncomplete-a-to-do
105
+ def uncomplete_todo(todo)
106
+ url = todo.url
107
+
108
+ raise Camper::Error::InvalidParameter, todo unless Camper::UrlUtils.basecamp_url?(url)
109
+
110
+ delete("#{url}/completion", override_path: true)
111
+ end
112
+
113
+ # Reposition a todo
114
+ #
115
+ # @example
116
+ # client.uncomplete_todo(todo)
117
+ #
118
+ # @param todo [Resource] the todo to be repositioned
119
+ # @param position [Integer|String] new position for the todo
120
+ # @raise [Error::InvalidParameter] if url field in todo param
121
+ # is not a valid basecamp url
122
+ # @raise [Error::InvalidParameter] if position param is less than 1
123
+ # @see https://github.com/basecamp/bc3-api/blob/master/sections/todos.md#reposition-a-to-do
124
+ def reposition_todo(todo, position)
125
+ url = todo.url
126
+ raise Camper::Error::InvalidParameter, todo unless Camper::UrlUtils.basecamp_url?(url)
127
+
128
+ raise Camper::Error::InvalidParameter, position if position.to_i < 1
129
+
130
+ put("#{url}/position", position: position, override_path: true)
77
131
  end
78
132
  end
79
133
  end
@@ -18,6 +18,7 @@ module Camper
18
18
  include PeopleAPI
19
19
  include ProjectsAPI
20
20
  include ResourceAPI
21
+ include TodolistsAPI
21
22
  include TodosAPI
22
23
 
23
24
  # Creates a new Client instance.
@@ -17,6 +17,8 @@ module Camper
17
17
 
18
18
  class RequestIsMissingParameters < Error; end
19
19
 
20
+ class InvalidParameter < Error; end
21
+
20
22
  # Raised when impossible to parse response body.
21
23
  class Parsing < Error; end
22
24
 
@@ -93,7 +93,7 @@ module Camper
93
93
 
94
94
  full_endpoint = override_path ? @path : @client.api_endpoint + @path
95
95
 
96
- full_endpoint = url_transform(full_endpoint)
96
+ full_endpoint = UrlUtils.transform(full_endpoint)
97
97
 
98
98
  return full_endpoint, params
99
99
  end
@@ -138,17 +138,6 @@ module Camper
138
138
  { 'Authorization' => "Bearer #{@client.access_token}" }
139
139
  end
140
140
 
141
- # Utility method for transforming Basecamp Web URLs into API URIs
142
- # e.g 'https://3.basecamp.com/1/buckets/2/todos/3' will be
143
- # converted into 'https://3.basecampapi.com/1/buckets/2/todos/3.json'
144
- #
145
- # @return [String]
146
- def url_transform(url)
147
- api_url = url.gsub('3.basecamp.com', '3.basecampapi.com')
148
- api_url.gsub!('.json', '')
149
- "#{api_url}.json"
150
- end
151
-
152
141
  def body_to_json?(params)
153
142
  @method == 'post' && params.key?(:body)
154
143
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Camper
4
+ # Defines methods related to url operations.
5
+ module UrlUtils
6
+ def self.basecamp_url?(url)
7
+ return false if url.nil? || !url.is_a?(String) || url == ''
8
+
9
+ transformed_url = UrlUtils.transform(url)
10
+
11
+ transformed_url.match?(%r{#{Configuration.base_api_endpoint}/\d+/.*})
12
+ end
13
+
14
+ # Utility method for transforming Basecamp Web URLs into API URIs
15
+ # e.g 'https://3.basecamp.com/1/buckets/2/todos/3' will be
16
+ # converted into 'https://3.basecampapi.com/1/buckets/2/todos/3.json'
17
+ #
18
+ # @param url [String] url to test
19
+ # @return [String]
20
+ def self.transform(url)
21
+ api_url = url.gsub('3.basecamp.com', '3.basecampapi.com')
22
+ api_url.gsub!('.json', '')
23
+ "#{api_url}.json"
24
+ end
25
+ end
26
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Camper
4
- VERSION = '0.0.8'
4
+ VERSION = '0.0.9'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: camper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - renehernandez
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-10-27 00:00:00.000000000 Z
11
+ date: 2020-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -112,6 +112,8 @@ files:
112
112
  - examples/messages.rb
113
113
  - examples/oauth.rb
114
114
  - examples/obtain_acces_token.rb
115
+ - examples/people.rb
116
+ - examples/todolists.rb
115
117
  - examples/todos.rb
116
118
  - lib/camper.rb
117
119
  - lib/camper/api/comments.rb
@@ -119,6 +121,7 @@ files:
119
121
  - lib/camper/api/people.rb
120
122
  - lib/camper/api/projects.rb
121
123
  - lib/camper/api/resource.rb
124
+ - lib/camper/api/todolists.rb
122
125
  - lib/camper/api/todos.rb
123
126
  - lib/camper/authorization.rb
124
127
  - lib/camper/client.rb
@@ -130,6 +133,7 @@ files:
130
133
  - lib/camper/request.rb
131
134
  - lib/camper/resource.rb
132
135
  - lib/camper/resources/project.rb
136
+ - lib/camper/url_utils.rb
133
137
  - lib/camper/version.rb
134
138
  homepage: https://github.com/renehernandez/camper
135
139
  licenses: