basecampeverest 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9c889239a3ba4c249a55c8fdbc50e4babec6f09d
4
+ data.tar.gz: 6fc8f2d98f32a9aa5e5a7d0e4d5549fe4d65ba0f
5
+ SHA512:
6
+ metadata.gz: 357b562178ad4ac1f0410c5fceea95b91c8d7afbd0b7e6fad6f7bab0baecb5c5567b7dc27c4af78149ef308e1ba52f84c0a722fdd22b0c7bc54f820251df98b0
7
+ data.tar.gz: 3851acb5669bc4375fcf6450f3260398f3cb74500652fe835ff4a6d134c4df3e7b929eb62679db0cf306c83ad90b722d1064bc8a3b98d1b3c73e334888369502
@@ -0,0 +1,116 @@
1
+ module Basecampeverest
2
+ class Connect
3
+ # includes
4
+ include HTTParty
5
+ include JSON
6
+
7
+ # INTRODUCTION
8
+ # *******************************************************
9
+ #
10
+ # This is a class based off the required format for httparty. When an instance of the class is called,
11
+ # httparty created the connection using the specific variables base_uri, and headers.
12
+ #
13
+ # Once an instance of this class has been created, you can then call on the gem using that stored authorization.
14
+ #
15
+ #
16
+ #
17
+ #
18
+ # EXAMPLE
19
+ # *******************************************************
20
+ # @authorization = { :username => "first.last@example.com", :password => "IuseSecureP@assw0rd$_" }
21
+ # @user_agent = "PutAnythingHere (first.last@example.com)"
22
+ # @basecamp_ID = "123456"
23
+ # Basecampeverest::Connect.new(@basecamp_ID, @authorization, @user_agent)
24
+
25
+ # => #<Basecampeverest::Connect:0x007fc8652eca18>
26
+
27
+ # Basecampeverest::Project.all
28
+
29
+ # =>[{"id"=>494832908, "name"=>"Cool Basecamp Project", "description"=>"this is a description", "archived"=>false, "is_client_project"=>false,
30
+ # "created_at"=>"2013-11-06T13:53:17.000-05:00", "updated_at"=>"2013-12-05T13:34:20.000-05:00", "draft"=>false,
31
+ # "last_event_at"=>"2013-12-05T13:34:20.000-05:00", "starred"=>false,
32
+ # "url"=>"https://basecamp.com/123456/api/v1/projects/494832908-Cool-Basecamp-Project.json"}]
33
+ #
34
+ #
35
+ #
36
+ #
37
+ # LICENSE
38
+ # *******************************************************
39
+ #
40
+ # Copyright (c) 2014 Alex Gordon
41
+ # Permission is hereby granted, free of charge, to any person obtaining
42
+ # a copy of this software and associated documentation files (the
43
+ # "Software"), to deal in the Software without restriction, including
44
+ # without limitation the rights to use, copy, modify, merge, publish,
45
+ # distribute, sublicense, and/or sell copies of the Software, and to
46
+ # permit persons to whom the Software is furnished to do so, subject to
47
+ # the following conditions:
48
+ #
49
+ # The above copyright notice and this permission notice shall be
50
+ # included in all copies or substantial portions of the Software.
51
+ #
52
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
53
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
54
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
55
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
56
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
57
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
58
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
59
+ #
60
+
61
+
62
+ # Set a few variables
63
+ attr_accessor :basecamp_id, :authorization, :user_agent, :base_uri, :headers
64
+
65
+ # Initializes the connection to Basecamp using httparty.
66
+ #
67
+ # @param basecamp_id [String] the Basecamp company ID
68
+ # @param authorization [Hash] authorization hash consisting of a username and password combination (:username, :password) or an access_token (:access_token)
69
+ # @param user_agent [String] the user-agent string to include in header of requests
70
+ def initialize(basecamp_id, authorization, user_agent)
71
+ # Set some variables
72
+ self.class.base_uri "https://basecamp.com/#{basecamp_id}/api/v1"
73
+ self.class.headers 'User-Agent' => user_agent
74
+ self.auth = authorization
75
+
76
+ # end method
77
+ end
78
+
79
+ # Sets the authorization information.
80
+ # Need to
81
+ #
82
+ # @param authorization [Hash] authorization hash consisting of a username and password combination (:username, :password) or an access_token (:access_token)
83
+ def auth=(authorization)
84
+ clensed_auth_hash = {}
85
+ authorization.each {|k, v|
86
+ clensed_auth_hash[k.to_sym] = v
87
+ }
88
+
89
+ # nice and pretty now
90
+ authorization = clensed_auth_hash
91
+
92
+ # if the authorization has the correct hash values...
93
+ if authorization.has_key?(:username) && authorization.has_key?(:password)
94
+
95
+ # ... then we pass it off to basic auth
96
+ self.class.basic_auth authorization[:username], authorization[:password]
97
+
98
+ # check if the user tried passing in some other stupid stuff.
99
+ # this should never be the case if the user follows instructions.
100
+ self.class.headers.reject!{ |k, v| k == "Authorization" }
101
+
102
+ else
103
+ # something inportant is missing if we get here.
104
+ raise "Incomplete Authorization hash. Please check the Authentication Hash."
105
+
106
+ #end else
107
+ end
108
+
109
+ # end method
110
+ end
111
+
112
+ # end class
113
+ end
114
+
115
+ # end module
116
+ end
@@ -0,0 +1,27 @@
1
+ module Basecampeverest; class Convert
2
+
3
+ # code originally written by Rebecca Miller-Webster
4
+ # taken from https://gist.github.com/rmw/2710460
5
+
6
+ # convert an array into a nested OpenStruct
7
+ #
8
+ # @param [Basecampeverest::Project] object the recursive object to pass in
9
+ # @return [Basecampeverest::Project] the found project information from the Basecamp API
10
+ def to_ostruct_recursive(options)
11
+ convert_to_ostruct_recursive(self, options)
12
+ end
13
+
14
+ def convert_to_ostruct_recursive(obj, options)
15
+ result = obj
16
+ if result.is_a? Hash
17
+ result = result.dup.with_sym_keys
18
+ result.each do |key, val|
19
+ result[key] = convert_to_ostruct_recursive(val, options) unless options[:exclude].try(:include?, key)
20
+ end
21
+ result = OpenStruct.new result
22
+ elsif result.is_a? Array
23
+ result = result.map { |r| convert_to_ostruct_recursive(r, options) }
24
+ end
25
+ return result
26
+ end
27
+ end; end
@@ -0,0 +1,24 @@
1
+ # taken from http://www.rebeccamiller-webster.com/2012/06/recursively-convert-a-ruby-hash-to-openstruct/
2
+
3
+ class Recursive
4
+ # options:
5
+ # :exclude => [keys] - keys need to be symbols
6
+ def self.to_ostruct_recursive(options = {})
7
+ convert_to_ostruct_recursive(self, options)
8
+ end
9
+
10
+ private
11
+ def convert_to_ostruct_recursive(obj, options)
12
+ result = obj
13
+ if result.is_a? Hash
14
+ result = result.dup.with_sym_keys
15
+ result.each do |key, val|
16
+ result[key] = convert_to_ostruct_recursive(val, options) unless options[:exclude].try(:include?, key)
17
+ end
18
+ result = OpenStruct.new result
19
+ elsif result.is_a? Array
20
+ result = result.map { |r| convert_to_ostruct_recursive(r, options) }
21
+ end
22
+ return result
23
+ end
24
+ end
@@ -0,0 +1,62 @@
1
+ module Basecampeverest; class Access
2
+
3
+ # find the people that have access to a project via the Basecamp API
4
+ #
5
+ # @param [Basecampeverest::Project] project_id the project id from basecamp
6
+ # @return [Basecampeverest::Project] the parsed response of who has access from the Basecamp API
7
+ def self.for_project(project_id)
8
+ url = "/projects/#{project_id}/accesses.json"
9
+ response = Basecampeverest::Connect.get url
10
+
11
+ # parse the response to remove HTTParty info
12
+ response.parsed_response
13
+ end
14
+
15
+ # find the people that have access to a calendar via the Basecamp API
16
+ #
17
+ # @param [Basecampeverest::Project] calendar_id the calendar id to check access
18
+ # @return [Basecampeverest::Project] the parsed response of who has access from the Basecamp API
19
+ def self.for_calendar(calendar_id)
20
+ url = "/calendars/#{calendar_id}/accesses.json"
21
+ response = Basecampeverest::Connect.get url
22
+
23
+ # parse the response to remove HTTParty info
24
+ response.parsed_response
25
+ end
26
+
27
+ # find the people that have access to a project via the Basecamp API
28
+ #
29
+ # @param [Basecampeverest::Project] project_id the project id from basecamp
30
+ # @param [Basecampeverest::Project] options a hash containing the people to grant access
31
+ # @return [Basecampeverest::Project] the parsed response of who has access from the Basecamp API
32
+ def self.grant_project(project_id, options={})
33
+ post_params = {
34
+ :body => options.to_json,
35
+ :headers => Basecampeverest::Connect.headers.merge({'Content-Type' => 'application/json'})
36
+ }
37
+ url = "/projects/#{project_id}/accesses.json"
38
+ response = Basecampeverest::Connect.post url, post_params
39
+
40
+ # parse the response to remove HTTParty info
41
+ response.parsed_response
42
+ end
43
+
44
+ # find the people that have access to a project via the Basecamp API
45
+ #
46
+ # @param [Basecampeverest::Project] project_id the project id from basecamp
47
+ # @param [Basecampeverest::Project] options a hash containing the people to revoke access for
48
+ # @return [Basecampeverest::Project] the parsed response of who has access from the Basecamp API
49
+ def self.revoke_project(project_id, user_id)
50
+ post_params = {
51
+ :body => options.to_json,
52
+ :headers => Basecampeverest::Connect.headers.merge({'Content-Type' => 'application/json'})
53
+ }
54
+ url = "/projects/#{project_id}/accesses/#{user_id}.json"
55
+ response = Basecampeverest::Connect.get url, post_params
56
+
57
+ # parse the response to remove HTTParty info
58
+ response.parsed_response
59
+ end
60
+
61
+ # end module and class
62
+ end; end
@@ -0,0 +1,83 @@
1
+ module Basecampeverest; class Attachments
2
+
3
+ # find all #### via the Basecamp API
4
+ #
5
+ # @return [Basecampeverest::Project] #### from the Basecamp API
6
+ def self.all
7
+ response = Basecampeverest::Connect.get
8
+
9
+ # parse the response to remove HTTParty info
10
+ response.parsed_response
11
+ end
12
+
13
+ # #### via the Basecamp API
14
+ #
15
+ # @param [Basecampeverest::Project] ####
16
+ # @return [Basecampeverest::Project] #### from the Basecamp API
17
+ def self.find()
18
+ response = Basecampeverest::Connect.get
19
+
20
+ # parse the response to remove HTTParty info
21
+ response.parsed_response
22
+ end
23
+
24
+ # #### via the Basecamp API
25
+ #
26
+ #
27
+ # @param [Basecampeverest::Project] ####
28
+ # @param [Basecampeverest::Project] ####
29
+ # @return [Basecampeverest::Project] #### from the Basecamp API
30
+ def self.new(options={})
31
+ post_params = {
32
+ :body => options.to_json,
33
+ :headers => Basecampeverest::Connect.headers.merge({'Content-Type' => 'application/json'})
34
+ }
35
+ # make the http basecamp call
36
+ response = Basecampeverest::Connect.post "####", post_params
37
+
38
+ # parse the response to remove HTTParty info
39
+ response.parsed_response
40
+ end
41
+
42
+ # #### via the Basecamp API
43
+ #
44
+ # @param [Basecampeverest::Project] ####
45
+ # @param [Basecampeverest::Project] ####
46
+ # @return [Basecampeverest::Project] from the Basecamp API
47
+ def self.update()
48
+ post_params = {
49
+ :body => options.to_json,
50
+ :headers => Basecampeverest::Connect.merge({'Content-Type' => 'application/json'})
51
+ }
52
+
53
+ # make the http basecamp call
54
+ response = Basecampeverest::Connect.put "####", post_params
55
+
56
+ # parse the response to remove HTTParty info
57
+ response.parsed_response
58
+ end
59
+
60
+
61
+ # #### via the Basecamp API
62
+ #
63
+ # @param [Basecampeverest::Project] ####
64
+ # @return [Basecampeverest::Project] ####
65
+ def self.delete()
66
+ url = "####"
67
+ response = Basecampeverest::Connect.delete url
68
+
69
+ # This checks the response code for validity and error checking
70
+ if response.code == 204
71
+ message = "#### successfully deleted"
72
+ elsif response.code == 403
73
+ message = "You do not have permission to delete this ####"
74
+ else
75
+ message = "Invalid project ID or authentication. The #### was not deleted."
76
+ end
77
+
78
+ # return the message
79
+ message
80
+ end
81
+
82
+ # end module and class
83
+ end; end
@@ -0,0 +1,84 @@
1
+ module Basecampeverest; class Calendar
2
+
3
+ # find all calendars via the Basecamp API
4
+ #
5
+ # @return [Basecampeverest::Project] an array of all the calendars from the Basecamp API
6
+ def self.all
7
+ url = "/calendars.json"
8
+ response = Basecampeverest::Connect.get url
9
+
10
+ # parse the response to remove HTTParty info
11
+ response.parsed_response
12
+ end
13
+
14
+ # a specific calendar via the Basecamp API
15
+ #
16
+ # @param [Basecampeverest::Project] calendar_id the id of the calendar
17
+ # @return [Basecampeverest::Project] an array of the calendar information from the Basecamp API
18
+ def self.find(calendar_id)
19
+ url = "/calendars/#{calendar_id}.json"
20
+ response = Basecampeverest::Connect.get url
21
+
22
+ # parse the response to remove HTTParty info
23
+ response.parsed_response
24
+ end
25
+
26
+ # create a calendar via the Basecamp API
27
+ #
28
+ #
29
+ # @param [Basecampeverest::Project] options a hash that contains the array of the name of the calendar to be created
30
+ # @return [Basecampeverest::Project] the info of the calendar created from the Basecamp API
31
+ def self.new(options={})
32
+ post_params = {
33
+ :body => options.to_json,
34
+ :headers => Basecampeverest::Connect.headers.merge({'Content-Type' => 'application/json'})
35
+ }
36
+ # make the http basecamp call
37
+ url = "/calendars.json"
38
+ response = Basecampeverest::Connect.post url, post_params
39
+
40
+ # parse the response to remove HTTParty info
41
+ response.parsed_response
42
+ end
43
+
44
+ # update a calendar via the Basecamp API
45
+ #
46
+ # @param [Basecampeverest::Project] calendar_id the id of the calendar
47
+ # @return [Basecampeverest::Project] the created calendar from the Basecamp API
48
+ def self.update(calendar_id)
49
+ post_params = {
50
+ :body => options.to_json,
51
+ :headers => Basecampeverest::Connect.merge({'Content-Type' => 'application/json'})
52
+ }
53
+
54
+ # make the http basecamp call
55
+ url = "/calendars/#{calendar_id}.json"
56
+ response = Basecampeverest::Connect.put url, post_params
57
+
58
+ # parse the response to remove HTTParty info
59
+ response.parsed_response
60
+ end
61
+
62
+ # delete a calendar via the Basecamp API
63
+ #
64
+ # @param [Basecampeverest::Project] calendar_id the id of the calendar
65
+ # @return [Basecampeverest::Project] a message with successful or unsuccessful deletion
66
+ def self.delete(calendar_id)
67
+ url = "/calendars/#{calendar_id}.json"
68
+ response = Basecampeverest::Connect.delete url
69
+
70
+ # This checks the response code for validity and error checking
71
+ if response.code == 204
72
+ message = "#### successfully deleted"
73
+ elsif response.code == 403
74
+ message = "You do not have permission to delete this ####"
75
+ else
76
+ message = "Invalid project ID or authentication. The #### was not deleted."
77
+ end
78
+
79
+ # return the message
80
+ message
81
+ end
82
+
83
+ # end module and class
84
+ end; end
@@ -0,0 +1,87 @@
1
+ module Basecampeverest; class CalendarEvents
2
+
3
+ # find all #### via the Basecamp API
4
+ #
5
+ # @return [Basecampeverest::Project] #### from the Basecamp API
6
+ def self.all
7
+ url =
8
+ response = Basecampeverest::Connect.get
9
+
10
+ # parse the response to remove HTTParty info
11
+ response.parsed_response
12
+ end
13
+
14
+ # #### via the Basecamp API
15
+ #
16
+ # @param [Basecampeverest::Project] ####
17
+ # @return [Basecampeverest::Project] #### from the Basecamp API
18
+ def self.find()
19
+ url =
20
+ response = Basecampeverest::Connect.get
21
+
22
+ # parse the response to remove HTTParty info
23
+ response.parsed_response
24
+ end
25
+
26
+ # #### via the Basecamp API
27
+ #
28
+ #
29
+ # @param [Basecampeverest::Project] ####
30
+ # @param [Basecampeverest::Project] ####
31
+ # @return [Basecampeverest::Project] #### from the Basecamp API
32
+ def self.new(options={})
33
+ post_params = {
34
+ :body => options.to_json,
35
+ :headers => Basecampeverest::Connect.headers.merge({'Content-Type' => 'application/json'})
36
+ }
37
+ # make the http basecamp call
38
+ url = "####"
39
+ response = Basecampeverest::Connect.post url, post_params
40
+
41
+ # parse the response to remove HTTParty info
42
+ response.parsed_response
43
+ end
44
+
45
+ # #### via the Basecamp API
46
+ #
47
+ # @param [Basecampeverest::Project] ####
48
+ # @param [Basecampeverest::Project] ####
49
+ # @return [Basecampeverest::Project] from the Basecamp API
50
+ def self.update()
51
+ post_params = {
52
+ :body => options.to_json,
53
+ :headers => Basecampeverest::Connect.merge({'Content-Type' => 'application/json'})
54
+ }
55
+
56
+ # make the http basecamp call
57
+ url =
58
+ response = Basecampeverest::Connect.put url, post_params
59
+
60
+ # parse the response to remove HTTParty info
61
+ response.parsed_response
62
+ end
63
+
64
+
65
+ # #### via the Basecamp API
66
+ #
67
+ # @param [Basecampeverest::Project] ####
68
+ # @return [Basecampeverest::Project] ####
69
+ def self.delete()
70
+ url = "####"
71
+ response = Basecampeverest::Connect.delete url
72
+
73
+ # This checks the response code for validity and error checking
74
+ if response.code == 204
75
+ message = "#### successfully deleted"
76
+ elsif response.code == 403
77
+ message = "You do not have permission to delete this ####"
78
+ else
79
+ message = "Invalid project ID or authentication. The #### was not deleted."
80
+ end
81
+
82
+ # return the message
83
+ message
84
+ end
85
+
86
+ # end module and class
87
+ end; end
@@ -0,0 +1,87 @@
1
+ module Basecampeverest; class Comment
2
+
3
+ # find all #### via the Basecamp API
4
+ #
5
+ # @return [Basecampeverest::Project] #### from the Basecamp API
6
+ def self.all
7
+ url =
8
+ response = Basecampeverest::Connect.get
9
+
10
+ # parse the response to remove HTTParty info
11
+ response.parsed_response
12
+ end
13
+
14
+ # #### via the Basecamp API
15
+ #
16
+ # @param [Basecampeverest::Project] ####
17
+ # @return [Basecampeverest::Project] #### from the Basecamp API
18
+ def self.find()
19
+ url =
20
+ response = Basecampeverest::Connect.get
21
+
22
+ # parse the response to remove HTTParty info
23
+ response.parsed_response
24
+ end
25
+
26
+ # #### via the Basecamp API
27
+ #
28
+ #
29
+ # @param [Basecampeverest::Project] ####
30
+ # @param [Basecampeverest::Project] ####
31
+ # @return [Basecampeverest::Project] #### from the Basecamp API
32
+ def self.new(options={})
33
+ post_params = {
34
+ :body => options.to_json,
35
+ :headers => Basecampeverest::Connect.headers.merge({'Content-Type' => 'application/json'})
36
+ }
37
+ # make the http basecamp call
38
+ url = "####"
39
+ response = Basecampeverest::Connect.post url, post_params
40
+
41
+ # parse the response to remove HTTParty info
42
+ response.parsed_response
43
+ end
44
+
45
+ # #### via the Basecamp API
46
+ #
47
+ # @param [Basecampeverest::Project] ####
48
+ # @param [Basecampeverest::Project] ####
49
+ # @return [Basecampeverest::Project] from the Basecamp API
50
+ def self.update()
51
+ post_params = {
52
+ :body => options.to_json,
53
+ :headers => Basecampeverest::Connect.merge({'Content-Type' => 'application/json'})
54
+ }
55
+
56
+ # make the http basecamp call
57
+ url =
58
+ response = Basecampeverest::Connect.put url, post_params
59
+
60
+ # parse the response to remove HTTParty info
61
+ response.parsed_response
62
+ end
63
+
64
+
65
+ # #### via the Basecamp API
66
+ #
67
+ # @param [Basecampeverest::Project] ####
68
+ # @return [Basecampeverest::Project] ####
69
+ def self.delete()
70
+ url = "####"
71
+ response = Basecampeverest::Connect.delete url
72
+
73
+ # This checks the response code for validity and error checking
74
+ if response.code == 204
75
+ message = "#### successfully deleted"
76
+ elsif response.code == 403
77
+ message = "You do not have permission to delete this ####"
78
+ else
79
+ message = "Invalid project ID or authentication. The #### was not deleted."
80
+ end
81
+
82
+ # return the message
83
+ message
84
+ end
85
+
86
+ # end module and class
87
+ end; end
@@ -0,0 +1,87 @@
1
+ module Basecampeverest; class Document
2
+
3
+ # find all #### via the Basecamp API
4
+ #
5
+ # @return [Basecampeverest::Project] #### from the Basecamp API
6
+ def self.all
7
+ url =
8
+ response = Basecampeverest::Connect.get
9
+
10
+ # parse the response to remove HTTParty info
11
+ response.parsed_response
12
+ end
13
+
14
+ # #### via the Basecamp API
15
+ #
16
+ # @param [Basecampeverest::Project] ####
17
+ # @return [Basecampeverest::Project] #### from the Basecamp API
18
+ def self.find()
19
+ url =
20
+ response = Basecampeverest::Connect.get
21
+
22
+ # parse the response to remove HTTParty info
23
+ response.parsed_response
24
+ end
25
+
26
+ # #### via the Basecamp API
27
+ #
28
+ #
29
+ # @param [Basecampeverest::Project] ####
30
+ # @param [Basecampeverest::Project] ####
31
+ # @return [Basecampeverest::Project] #### from the Basecamp API
32
+ def self.new(options={})
33
+ post_params = {
34
+ :body => options.to_json,
35
+ :headers => Basecampeverest::Connect.headers.merge({'Content-Type' => 'application/json'})
36
+ }
37
+ # make the http basecamp call
38
+ url = "####"
39
+ response = Basecampeverest::Connect.post url, post_params
40
+
41
+ # parse the response to remove HTTParty info
42
+ response.parsed_response
43
+ end
44
+
45
+ # #### via the Basecamp API
46
+ #
47
+ # @param [Basecampeverest::Project] ####
48
+ # @param [Basecampeverest::Project] ####
49
+ # @return [Basecampeverest::Project] from the Basecamp API
50
+ def self.update()
51
+ post_params = {
52
+ :body => options.to_json,
53
+ :headers => Basecampeverest::Connect.merge({'Content-Type' => 'application/json'})
54
+ }
55
+
56
+ # make the http basecamp call
57
+ url =
58
+ response = Basecampeverest::Connect.put url, post_params
59
+
60
+ # parse the response to remove HTTParty info
61
+ response.parsed_response
62
+ end
63
+
64
+
65
+ # #### via the Basecamp API
66
+ #
67
+ # @param [Basecampeverest::Project] ####
68
+ # @return [Basecampeverest::Project] ####
69
+ def self.delete()
70
+ url = "####"
71
+ response = Basecampeverest::Connect.delete url
72
+
73
+ # This checks the response code for validity and error checking
74
+ if response.code == 204
75
+ message = "#### successfully deleted"
76
+ elsif response.code == 403
77
+ message = "You do not have permission to delete this ####"
78
+ else
79
+ message = "Invalid project ID or authentication. The #### was not deleted."
80
+ end
81
+
82
+ # return the message
83
+ message
84
+ end
85
+
86
+ # end module and class
87
+ end; end