camper 0.0.6 → 0.0.11

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: b7d0cdad6f722b4f3c02ba3da38147000e371f57860ce203fb1c64eb007797de
4
- data.tar.gz: db77821cf2cb77070b049dce6cbf4bc62430c4948101aadf7d2c87b4e67eaa42
3
+ metadata.gz: 0dbee68b43218a497b29c8006b70cb344d0925c879f5220aef14228e12cd6dce
4
+ data.tar.gz: fc3f58b2d04d11912e6fd497c86eba3039dae579c645eb8a5a5493d9076283d0
5
5
  SHA512:
6
- metadata.gz: '027558808a97c4ef3c04c6ec895c86a8975e32f7a03397e882513db25f0cfb29978135c23a77a87081cfa845834c31419e7813c24a3bf43aeaf030b777e31c28'
7
- data.tar.gz: 7aa221c2f13009488cc57d46fc86e1daeb21e2051b70e33dc6780032b8091bfdcb9f9efd54286b774b2f9406bd78c889add255e47ef674870aae07887c190ac5
6
+ metadata.gz: 00fabce0dc901476883b26af2e71b8b68fab3859577172e3a4456d20b099ffed533961917388e3eba39fa334f8b9097b73804a15a97264bc9cc6ebd8911b26a1
7
+ data.tar.gz: b360150b837d8d0d89e794f7145c711a7ef86f88267d9b17d6829b1988ef425f8c82f53b4c0037f74c6a63f655689c93438da9c7f618e5c02c004bffbea27f16
data/.gitignore CHANGED
@@ -57,4 +57,4 @@ build-iPhoneSimulator/
57
57
 
58
58
  .rspec_status
59
59
 
60
- .env
60
+ .env*
@@ -7,6 +7,7 @@ AllCops:
7
7
  NewCops: enable
8
8
  Exclude:
9
9
  - 'camper.gemspec'
10
+ - 'lib/camper/core_extensions/object.rb'
10
11
 
11
12
  Layout/LineLength:
12
13
  Max: 120
@@ -1,6 +1,49 @@
1
1
  # Changelog
2
2
 
3
- ## [v0.0.6](https://github.com/renehernandez/camper/tree/v0.0.6) (2020-10-01)
3
+ ## [Unreleased](https://github.com/renehernandez/camper/tree/HEAD)
4
+
5
+ **Implemented enhancements:**
6
+
7
+ - Implement trash\_todo endpoint [\#58](https://github.com/renehernandez/camper/issues/58)
8
+ - Implement trash\_todolist endpoint [\#57](https://github.com/renehernandez/camper/issues/57)
9
+ - To-do API is missing update\_todo endpoint [\#49](https://github.com/renehernandez/camper/issues/49)
10
+ - update\_todolist endpoint now sends the current description if none is specified [\#62](https://github.com/renehernandez/camper/pull/62)
11
+ - Add trash\_todolist endpoint [\#61](https://github.com/renehernandez/camper/pull/61)
12
+ - Add trash\_todo endpoint implementation [\#60](https://github.com/renehernandez/camper/pull/60)
13
+ - Add recordings api [\#53](https://github.com/renehernandez/camper/pull/53)
14
+ - Add update\_todo implementation [\#52](https://github.com/renehernandez/camper/pull/52)
15
+
16
+ **Fixed bugs:**
17
+
18
+ - return tag should mention PaginatedResponse instead of Array [\#56](https://github.com/renehernandez/camper/issues/56)
19
+ - Get endpoints params need to be set under query field [\#54](https://github.com/renehernandez/camper/issues/54)
20
+ - Update endpoints documentation to use PaginatedResponse [\#59](https://github.com/renehernandez/camper/pull/59)
21
+ - Fix query string generation in get endpoints [\#55](https://github.com/renehernandez/camper/pull/55)
22
+
23
+ ## [v0.0.10](https://github.com/renehernandez/camper/tree/v0.0.10) (2020-10-30)
24
+
25
+ **Implemented enhancements:**
26
+
27
+ - Complete projects api [\#51](https://github.com/renehernandez/camper/pull/51)
28
+
29
+ ## [v0.0.9](https://github.com/renehernandez/camper/tree/v0.0.9) (2020-10-28)
30
+
31
+ **Implemented enhancements:**
32
+
33
+ - Split todos and todolists APIs [\#47](https://github.com/renehernandez/camper/pull/47)
34
+
35
+ **Merged pull requests:**
36
+
37
+ - Bump rubocop from 0.92.0 to 1.0.0 [\#44](https://github.com/renehernandez/camper/pull/44)
38
+
39
+ ## [v0.0.8](https://github.com/renehernandez/camper/tree/v0.0.8) (2020-10-27)
40
+
41
+ **Implemented enhancements:**
42
+
43
+ - Add people API [\#46](https://github.com/renehernandez/camper/pull/46)
44
+ - Raise error if resource can't be commented [\#45](https://github.com/renehernandez/camper/pull/45)
45
+
46
+ ## [v0.0.7](https://github.com/renehernandez/camper/tree/v0.0.7) (2020-10-04)
4
47
 
5
48
  **Implemented enhancements:**
6
49
 
@@ -30,7 +73,6 @@
30
73
 
31
74
  - Implement pagination according to basecamp 3 API [\#20](https://github.com/renehernandez/camper/issues/20)
32
75
  - Implement pagination according to Basecamp 3 API [\#26](https://github.com/renehernandez/camper/pull/26)
33
- - Remove unreleasedLabel field [\#15](https://github.com/renehernandez/camper/pull/15)
34
76
 
35
77
  **Merged pull requests:**
36
78
 
@@ -59,6 +101,10 @@
59
101
  - Request a new access token once it expires [\#13](https://github.com/renehernandez/camper/issues/13)
60
102
  - Retry for new access token [\#16](https://github.com/renehernandez/camper/pull/16)
61
103
 
104
+ **Fixed bugs:**
105
+
106
+ - Remove unreleasedLabel field [\#15](https://github.com/renehernandez/camper/pull/15)
107
+
62
108
  **Documentation:**
63
109
 
64
110
  - Initial documentation [\#5](https://github.com/renehernandez/camper/issues/5)
@@ -1,14 +1,15 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- camper (0.0.5)
4
+ camper (0.0.10)
5
+ concurrent-ruby (~> 1.1)
5
6
  httparty (~> 0.18)
6
7
  rack-oauth2 (~> 1.14)
7
8
 
8
9
  GEM
9
10
  remote: https://rubygems.org/
10
11
  specs:
11
- activesupport (6.0.3.3)
12
+ activesupport (6.0.3.4)
12
13
  concurrent-ruby (~> 1.0, >= 1.0.2)
13
14
  i18n (>= 0.7, < 2)
14
15
  minitest (~> 5.1)
@@ -38,7 +39,7 @@ GEM
38
39
  minitest (5.14.2)
39
40
  multi_xml (0.6.0)
40
41
  parallel (1.19.2)
41
- parser (2.7.1.5)
42
+ parser (2.7.2.0)
42
43
  ast (~> 2.4.1)
43
44
  pry (0.13.1)
44
45
  coderay (~> 1.1)
@@ -52,7 +53,7 @@ GEM
52
53
  rack (>= 2.1.0)
53
54
  rainbow (3.0.0)
54
55
  rake (13.0.1)
55
- regexp_parser (1.8.0)
56
+ regexp_parser (1.8.2)
56
57
  rexml (3.2.4)
57
58
  rspec (3.9.0)
58
59
  rspec-core (~> 3.9.0)
@@ -67,29 +68,27 @@ GEM
67
68
  diff-lcs (>= 1.2.0, < 2.0)
68
69
  rspec-support (~> 3.9.0)
69
70
  rspec-support (3.9.3)
70
- rubocop (0.92.0)
71
+ rubocop (1.0.0)
71
72
  parallel (~> 1.10)
72
73
  parser (>= 2.7.1.5)
73
74
  rainbow (>= 2.2.2, < 4.0)
74
- regexp_parser (>= 1.7)
75
+ regexp_parser (>= 1.8)
75
76
  rexml
76
- rubocop-ast (>= 0.5.0)
77
+ rubocop-ast (>= 0.6.0)
77
78
  ruby-progressbar (~> 1.7)
78
79
  unicode-display_width (>= 1.4.0, < 2.0)
79
- rubocop-ast (0.7.0)
80
+ rubocop-ast (1.0.0)
80
81
  parser (>= 2.7.1.5)
81
- strscan (>= 1.0.0)
82
82
  rubocop-performance (1.8.1)
83
83
  rubocop (>= 0.87.0)
84
84
  rubocop-ast (>= 0.4.0)
85
85
  ruby-progressbar (1.10.1)
86
- strscan (1.0.3)
87
86
  thread_safe (0.3.6)
88
87
  tzinfo (1.2.7)
89
88
  thread_safe (~> 0.1)
90
89
  unicode-display_width (1.7.0)
91
90
  yard (0.9.25)
92
- zeitwerk (2.4.0)
91
+ zeitwerk (2.4.1)
93
92
 
94
93
  PLATFORMS
95
94
  ruby
data/README.md CHANGED
@@ -24,6 +24,20 @@ Or install it yourself as:
24
24
  $ gem install camper
25
25
  ```
26
26
 
27
+ ## Status of API endpoints
28
+
29
+ The up-to-date list of Basecamp API endpoints can be found at [here](https://github.com/basecamp/bc3-api#api-endpoints).
30
+
31
+ Currently, Camper supports the following endpoints:
32
+
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) (Complete)
37
+ * [Recordings](https://github.com/basecamp/bc3-api/blob/master/sections/recordings.md): Implementation at [recordings.rb](https://github.com/renehernandez/camper/blob/main/lib/camper/api/recordings.rb)
38
+ * [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) (Complete)
39
+ * [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) (Complete)
40
+
27
41
  ## Usage
28
42
 
29
43
  ### Configuration
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
28
28
 
29
29
  spec.add_dependency 'httparty', '~> 0.18'
30
30
  spec.add_dependency 'rack-oauth2', '~> 1.14'
31
+ spec.add_dependency 'concurrent-ruby', '~> 1.1'
31
32
 
32
33
  spec.add_development_dependency 'rake', '~> 13.0'
33
34
  spec.add_development_dependency 'rspec', '~> 3.9'
@@ -0,0 +1,11 @@
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
+
11
+ puts "People:\n#{client.people.inspect}"
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'camper'
4
+
5
+ client = Camper.client
6
+
7
+ project = client.project(ENV['PROJECT_ID'])
8
+
9
+ puts "Project name: #{project.name}"
10
+ puts "Project description: #{project.description}"
11
+
12
+ client.update_project(project, name: 'Hermes Testing', description: 'Hermes integration testing')
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'camper'
4
+
5
+ client = Camper.client
6
+
7
+ recordings = client.recordings(
8
+ Camper::RecordingTypes::TODO
9
+ )
10
+
11
+ recordings.auto_paginate do |rec|
12
+ puts "Todo content: #{rec.content}"
13
+ end
@@ -0,0 +1,50 @@
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
+ puts 'Listing active todolists'
17
+ client.todolists(todoset).auto_paginate(5) do |list|
18
+ puts "Todolist: #{list.title}"
19
+
20
+ client.todos(list).auto_paginate do |todo|
21
+ puts "Todo: #{todo.title}"
22
+ puts "Get Todo using project id: #{client.todo(p.id, todo.id).title}"
23
+ puts "Get Todo using project resource: #{client.todo(p, todo.id).title}"
24
+ puts "Get Todo using todolist resource: #{client.todo(list, todo.id).title}"
25
+ end
26
+ end
27
+
28
+ begin
29
+ client.todolists(p)
30
+ rescue Camper::Error::InvalidParameter, NoMethodError
31
+ puts 'Cannot use a project p to get the todolists'
32
+ end
33
+
34
+ puts 'Listing archived todolists'
35
+ client.todolists(todoset, status: :archived).auto_paginate do |list|
36
+ client.todos(list).auto_paginate do |todo|
37
+ puts "Todo: #{todo.title}"
38
+ puts "Can be commented: #{todo.can_be_commented?}"
39
+ puts "It's completed: #{todo.completed}"
40
+
41
+ client.complete_todo(todo)
42
+ end
43
+ end
44
+
45
+ puts 'Create a new todolist'
46
+ new_list = client.create_todolist(todoset, 'Temporary list')
47
+ puts "Todolist title: #{new_list.title}"
48
+ puts 'Trash list'
49
+ client.trash_todolist(new_list)
50
+ end
@@ -10,18 +10,33 @@ end
10
10
 
11
11
  projects = client.projects
12
12
 
13
- projects.auto_paginate do |p|
14
- puts "Project: #{p.inspect}"
13
+ selected_todo = nil
15
14
 
16
- puts "Todo set: #{p.todoset.inspect}"
15
+ projects.auto_paginate do |p|
16
+ puts "Project: #{p.name}"
17
17
 
18
18
  todoset = client.todoset(p)
19
19
 
20
+ puts "Ratio of completed Todos in Todoset: #{todoset.completed_ratio}"
21
+
20
22
  client.todolists(todoset).auto_paginate(5) do |list|
21
23
  puts "Todolist: #{list.title}"
22
24
 
23
- client.todos(list).auto_paginate do |todo|
24
- puts todo.inspect
25
+ client.todos(list).auto_paginate(1) do |todo|
26
+ puts "Todo: #{todo.title}"
27
+ puts "Get Todo using project id: #{client.todo(p.id, todo.id).title}"
28
+ puts "Get Todo using project resource: #{client.todo(p, todo.id).title}"
29
+ puts "Get Todo using todolist resource: #{client.todo(list, todo.id).title}"
30
+
31
+ selected_todo = todo
25
32
  end
33
+
34
+ puts 'Create new todo'
35
+ new_todo = client.create_todo(list, 'new todo')
36
+ puts "New Todo title: #{new_todo.title}"
37
+ puts 'Trash new todo'
38
+ client.trash_todo(new_todo)
26
39
  end
27
- end
40
+ end
41
+
42
+ client.update_todo(selected_todo, { description: 'New Description' })
@@ -6,7 +6,9 @@ require 'rack/oauth2'
6
6
  require 'camper/version'
7
7
  require 'camper/logging'
8
8
  require 'camper/error'
9
+ require 'camper/recording_types'
9
10
  require 'camper/configuration'
11
+ require 'camper/url_utils'
10
12
  require 'camper/authorization'
11
13
  require 'camper/resource'
12
14
  require 'camper/pagination_data'
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Camper::Client
4
- module CommentAPI
4
+ module CommentsAPI
5
5
  def create_comment(resource, content)
6
+ raise Error::ResourceCannotBeCommented, resource unless resource.can_be_commented?
7
+
6
8
  post(resource.comments_url, override_path: true, body: { content: content })
7
9
  end
8
10
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Camper::Client
4
- module MessageAPI
4
+ module MessagesAPI
5
5
  def messages(message_board)
6
6
  get(message_board.messages_url, override_path: true)
7
7
  end
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Camper::Client
4
+ # Defines methods related to people.
5
+ # @see https://github.com/basecamp/bc3-api/blob/master/sections/people.md
6
+ module PeopleAPI
7
+ # Get all people visible to the current user
8
+ #
9
+ # @example
10
+ # client.people
11
+ #
12
+ # @return [PaginatedResponse<Resource>]
13
+ # @see https://github.com/basecamp/bc3-api/blob/master/sections/people.md#get-all-people
14
+ def people
15
+ get('/people')
16
+ end
17
+
18
+ # Get all active people on the project with the given ID
19
+ #
20
+ # @example
21
+ # client.people_in_project(10)
22
+ # @example
23
+ # client.people_in_project("20")
24
+ # @example
25
+ # client.people_in_project(my_project)
26
+ #
27
+ # @param project [Resource|Integer|String] A project resource or a project id
28
+ # @return [PaginatedResponse<Resource>]
29
+ # @see https://github.com/basecamp/bc3-api/blob/master/sections/people.md#get-people-on-a-project
30
+ def people_in_project(project)
31
+ id = project.respond_to?(:id) ? project.id : project
32
+
33
+ get("/projects/#{id}/people")
34
+ end
35
+
36
+ # Allows granting new and existing people access to a project, and revoking access from existing people.
37
+ #
38
+ # @example
39
+ # client.update_access_in_project(10, { grant: [102, 127] })
40
+ # @example
41
+ # client.update_access_in_project("8634", { revoke: [300, 12527] })
42
+ # @example
43
+ # client.update_access_in_project(my_project, {
44
+ # create: [{
45
+ # name: "Victor Copper",
46
+ # email_address: "victor@hanchodesign.com"
47
+ # }]
48
+ # })
49
+ #
50
+ # @param project [Resource|Integer|String] A project resource or a project id
51
+ # @param options [Hash] options to update access, either grant, revoke or create new people
52
+ # @return [Resource]
53
+ # @raise [Error::InvalidParameter] if no option is specified
54
+ # @see https://github.com/basecamp/bc3-api/blob/master/sections/people.md#update-who-can-access-a-project
55
+ def update_access_in_project(project, options = {})
56
+ raise Camper::Error::InvalidParameter, 'options cannot be empty' if options.empty?
57
+
58
+ id = project.respond_to?(:id) ? project.id : project
59
+
60
+ put("/projects/#{id}/people/users", body: { **options })
61
+ end
62
+
63
+ # Get all people on this Basecamp account who can be pinged
64
+ #
65
+ # @example
66
+ # client.pingable_people
67
+ #
68
+ # @return [PaginatedResponse<Resource>]
69
+ # @see https://github.com/basecamp/bc3-api/blob/master/sections/people.md#get-pingable-people
70
+ def pingable_people
71
+ get('/circles/people')
72
+ end
73
+
74
+ # Get the profile for the user with the given ID
75
+ #
76
+ # @example
77
+ # client.person(234790)
78
+ #
79
+ # @param id [Integer|String] A user id
80
+ # @return [Resource]
81
+ # @see https://github.com/basecamp/bc3-api/blob/master/sections/people.md#get-person
82
+ def person(id)
83
+ get("/people/#{id}")
84
+ end
85
+
86
+ # Get the current user's personal info.
87
+ #
88
+ # @example
89
+ # client.profile
90
+ #
91
+ # @return [Resource]
92
+ # @see https://github.com/basecamp/bc3-api/blob/master/sections/people.md#get-my-personal-info
93
+ def profile
94
+ get('/my/profile')
95
+ end
96
+ end
97
+ end