camper 0.0.6 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
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