basecamp3 0.1.3

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.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +5 -0
  5. data/Gemfile +2 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +65 -0
  8. data/Rakefile +6 -0
  9. data/basecamp3.gemspec +38 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +8 -0
  12. data/docs/Basecamp3.html +367 -0
  13. data/docs/Basecamp3/Campfire.html +901 -0
  14. data/docs/Basecamp3/CampfireLine.html +1025 -0
  15. data/docs/Basecamp3/Comment.html +1284 -0
  16. data/docs/Basecamp3/Concerns.html +117 -0
  17. data/docs/Basecamp3/Concerns/Bucketable.html +211 -0
  18. data/docs/Basecamp3/Concerns/Commentable.html +285 -0
  19. data/docs/Basecamp3/Concerns/Creatorable.html +209 -0
  20. data/docs/Basecamp3/Concerns/Parentable.html +211 -0
  21. data/docs/Basecamp3/Concerns/Recordingable.html +189 -0
  22. data/docs/Basecamp3/Concerns/Recordingable/ClassMethods.html +236 -0
  23. data/docs/Basecamp3/Document.html +1262 -0
  24. data/docs/Basecamp3/Forward.html +1070 -0
  25. data/docs/Basecamp3/Inbox.html +840 -0
  26. data/docs/Basecamp3/Message.html +1262 -0
  27. data/docs/Basecamp3/MessageBoard.html +840 -0
  28. data/docs/Basecamp3/MessageType.html +1160 -0
  29. data/docs/Basecamp3/Model.html +236 -0
  30. data/docs/Basecamp3/Person.html +1288 -0
  31. data/docs/Basecamp3/Project.html +1280 -0
  32. data/docs/Basecamp3/Question.html +1050 -0
  33. data/docs/Basecamp3/QuestionAnswer.html +887 -0
  34. data/docs/Basecamp3/Questionnaire.html +840 -0
  35. data/docs/Basecamp3/Request.html +933 -0
  36. data/docs/Basecamp3/ResponseParser.html +303 -0
  37. data/docs/Basecamp3/Schedule.html +840 -0
  38. data/docs/Basecamp3/ScheduleEntry.html +1560 -0
  39. data/docs/Basecamp3/Todo.html +1726 -0
  40. data/docs/Basecamp3/TodoList.html +1480 -0
  41. data/docs/Basecamp3/TodoSet.html +980 -0
  42. data/docs/Basecamp3/TypeMapper.html +329 -0
  43. data/docs/Basecamp3/Vault.html +1514 -0
  44. data/docs/_index.html +415 -0
  45. data/docs/class_list.html +51 -0
  46. data/docs/css/common.css +1 -0
  47. data/docs/css/full_list.css +58 -0
  48. data/docs/css/style.css +492 -0
  49. data/docs/file.README.html +157 -0
  50. data/docs/file_list.html +56 -0
  51. data/docs/frames.html +17 -0
  52. data/docs/index.html +157 -0
  53. data/docs/js/app.js +248 -0
  54. data/docs/js/full_list.js +216 -0
  55. data/docs/js/jquery.js +4 -0
  56. data/docs/method_list.html +1875 -0
  57. data/docs/top-level-namespace.html +110 -0
  58. data/lib/basecamp3.rb +61 -0
  59. data/lib/basecamp3/concerns/bucketable.rb +17 -0
  60. data/lib/basecamp3/concerns/commentable.rb +15 -0
  61. data/lib/basecamp3/concerns/creatorable.rb +16 -0
  62. data/lib/basecamp3/concerns/parentable.rb +17 -0
  63. data/lib/basecamp3/concerns/recordingable.rb +22 -0
  64. data/lib/basecamp3/model.rb +23 -0
  65. data/lib/basecamp3/models/campfire.rb +42 -0
  66. data/lib/basecamp3/models/campfire_line.rb +52 -0
  67. data/lib/basecamp3/models/comment.rb +65 -0
  68. data/lib/basecamp3/models/document.rb +71 -0
  69. data/lib/basecamp3/models/forward.rb +40 -0
  70. data/lib/basecamp3/models/inbox.rb +31 -0
  71. data/lib/basecamp3/models/message.rb +73 -0
  72. data/lib/basecamp3/models/message_board.rb +31 -0
  73. data/lib/basecamp3/models/message_type.rb +68 -0
  74. data/lib/basecamp3/models/person.rb +46 -0
  75. data/lib/basecamp3/models/project.rb +70 -0
  76. data/lib/basecamp3/models/question.rb +43 -0
  77. data/lib/basecamp3/models/question_answer.rb +35 -0
  78. data/lib/basecamp3/models/questionnaire.rb +31 -0
  79. data/lib/basecamp3/models/schedule.rb +31 -0
  80. data/lib/basecamp3/models/schedule_entry.rb +93 -0
  81. data/lib/basecamp3/models/todo.rb +108 -0
  82. data/lib/basecamp3/models/todo_list.rb +77 -0
  83. data/lib/basecamp3/models/todo_set.rb +33 -0
  84. data/lib/basecamp3/models/vault.rb +79 -0
  85. data/lib/basecamp3/request.rb +163 -0
  86. data/lib/basecamp3/response_parser.rb +44 -0
  87. data/lib/basecamp3/type_mapper.rb +53 -0
  88. data/lib/basecamp3/version.rb +3 -0
  89. metadata +202 -0
@@ -0,0 +1,163 @@
1
+ # A class for handling requests
2
+ class Basecamp3::Request
3
+
4
+ # Initializes the request object.
5
+ #
6
+ # @param [String] access_token the data to send in the request
7
+ # @param [String] uri
8
+ def initialize(access_token, uri)
9
+ @access_token = access_token
10
+ @uri = uri
11
+ end
12
+
13
+ # Sends the request.
14
+ #
15
+ # @param [Symbol] method the symbol of the http method
16
+ # @param [String] path the request path
17
+ # @param [Hash] data the request body
18
+ # @param [String] model the name of the model
19
+ #
20
+ # @return [Basecamp3::Model, OpenStruct]
21
+ def request(method, path, data = nil, model = 'raw')
22
+ uri = build_request_uri(path)
23
+ https = build_https_object(uri)
24
+ request = build_request_object(method, uri)
25
+
26
+ request.body = data.to_json unless data.nil?
27
+
28
+ get_response(https, request, model)
29
+ end
30
+
31
+ # Sends the get request.
32
+ #
33
+ # @param [String] path the request path
34
+ # @param [Hash] params the get params
35
+ # @param [String] model the name of the model
36
+ #
37
+ # @return [Basecamp3::Model, OpenStruct]
38
+ def get(path, params = {}, model = 'raw')
39
+ request(:get, "#{path}#{hash_to_get_query(params)}", nil, model)
40
+ end
41
+
42
+ # Sends the post request.
43
+ #
44
+ # @param [String] path the request path
45
+ # @param [Hash] data the request body
46
+ # @param [String] model the name of the model
47
+ #
48
+ # @return [Basecamp3::Model, OpenStruct]
49
+ def post(path, data = nil, model = 'raw')
50
+ request(:post, path, data, model)
51
+ end
52
+
53
+ # Sends the put request.
54
+ #
55
+ # @param [String] path the request path
56
+ # @param [Hash] data the request body
57
+ # @param [String] model the name of the model
58
+ #
59
+ # @return [Basecamp3::Model, OpenStruct]
60
+ def put(path, data = nil, model = 'raw')
61
+ request(:put, path, data, model)
62
+ end
63
+
64
+ # Sends the delete request.
65
+ #
66
+ # @param [String] path the request path
67
+ # @param [String] model the name of the model
68
+ #
69
+ # @return [Basecamp3::Model, OpenStruct]
70
+ def delete(path, model = 'raw')
71
+ request(:delete, path, nil, model)
72
+ end
73
+
74
+ private
75
+
76
+ # Returns the response.
77
+ #
78
+ # @private
79
+ #
80
+ # @param [Net:HTTP] https the http object
81
+ # @param [Net::HTTP::Get, Net::HTTP::Post, Net::HTTP::Put, Net::HTTP::Delete] request the request object
82
+ # @param [Class] model the class of the model
83
+ #
84
+ # @return [Basecamp3::Model, OpenStruct]
85
+ def get_response(https, request, model)
86
+ response = https.request(request)
87
+
88
+ code = response.code.to_i
89
+ message = response.message
90
+
91
+ raise message if [400, 403, 404, 507].include?(code)
92
+
93
+ return true if code == 204
94
+
95
+ json = response.body.nil? ? nil : JSON.parse(response.body)
96
+
97
+ return json if model == 'raw'
98
+
99
+ Basecamp3::ResponseParser.parse(json, model)
100
+ end
101
+
102
+ # Builds the request uri.
103
+ #
104
+ # @private
105
+ #
106
+ # @param [String] path the path of the request
107
+ #
108
+ # @return [String]
109
+ def build_request_uri(path)
110
+ uri = URI.parse("#{@uri}#{path}")
111
+ uri.path += '.json'
112
+
113
+ uri
114
+ end
115
+
116
+ # Builds the https object.
117
+ #
118
+ # @private
119
+ #
120
+ # @param [String] uri the request uri
121
+ #
122
+ # @return [Net::HTTP]
123
+ def build_https_object(uri)
124
+ https = Net::HTTP.new(uri.host, uri.port)
125
+ https.use_ssl = true
126
+
127
+ https
128
+ end
129
+
130
+ # Builds the request object.
131
+ #
132
+ # @private
133
+ #
134
+ # @param [Symbol] method the symbol of the http method
135
+ # @param [String] uri the request uri
136
+ #
137
+ # @return [Net::HTTP::Get, Net::HTTP::Post, Net::HTTP::Put, Net::HTTP::Delete]
138
+ # @raise [StandardError] raises an error for unsupported http method
139
+ def build_request_object(method, uri)
140
+ raise "Unsupported http method: #{method.to_s}" unless [:get, :post, :put, :delete].include?(method)
141
+
142
+ request = Object.const_get("Net::HTTP::#{method.to_s.capitalize}").new(uri.request_uri)
143
+ request['Authorization'] = "Bearer #{@access_token}"
144
+ request['Content-Type'] = 'application/json'
145
+
146
+ request
147
+ end
148
+
149
+ # Builds get query string from the given hash.
150
+ #
151
+ # @private
152
+ #
153
+ # @param [Hash] hash
154
+ #
155
+ # @return [String]
156
+ def hash_to_get_query(hash)
157
+ if !hash.nil? && !hash.empty?
158
+ "?#{hash.map{ |i, v| "#{i}=#{v}" }.join('&')}"
159
+ else
160
+ ''
161
+ end
162
+ end
163
+ end
@@ -0,0 +1,44 @@
1
+ # The basecamp response parser
2
+ class Basecamp3::ResponseParser
3
+
4
+ # Parses the given response to the given wrapper model.
5
+ #
6
+ # @param [Hash] response The hash with data which should be parsed to the wrapper model
7
+ # @param [Class] model The class of the model
8
+ #
9
+ # @return [Basecamp3::Model, Array<Basecamp3::Model>, nil]
10
+ # @raise [StandardError] raises an error for unsupported response type
11
+ def self.parse(response, model)
12
+ case response
13
+ when Hash
14
+ map_object(response, model)
15
+ when Array
16
+ response.map do |item|
17
+ map_object(item, model)
18
+ end
19
+ when NilClass
20
+ nil
21
+ else
22
+ raise 'Unsupported response type'
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ # Parses the given hash to the given wrapper model.
29
+ #
30
+ # @private
31
+ #
32
+ # @param [Hash] object The hash with data which should be parsed to the wrapper model
33
+ # @param [Class] model The class of the model
34
+ #
35
+ # @return [Basecamp3::Model]
36
+ # @raise [StandardError] raises an error for unsupported model type
37
+ def self.map_object(object, model)
38
+ begin
39
+ model.new(object)
40
+ rescue
41
+ raise 'Unsupported model type. Try to call for a raw response'
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,53 @@
1
+ # The basecamp type to wrapper type mapper
2
+ class Basecamp3::TypeMapper
3
+
4
+ # Maps the basecamp model type to wrapper model type.
5
+ #
6
+ # @param [String] basecamp_type the basecamp model name
7
+ #
8
+ # @return [Class, OpenStruct]
9
+ def self.map(basecamp_type)
10
+ case basecamp_type
11
+ when 'Project'
12
+ Basecamp3::Project
13
+ when 'Chat::Transcript'
14
+ Basecamp3::Campfire
15
+ when 'Chat::Lines::Text'
16
+ Basecamp3::CampfireLine
17
+ when 'Comment'
18
+ Basecamp3::Comment
19
+ when 'Document'
20
+ Basecamp3::Document
21
+ when 'Inbox::Forward'
22
+ Basecamp3::Forward
23
+ when 'Inbox'
24
+ Basecamp3::Inbox
25
+ when 'Message::Board'
26
+ Basecamp3::MessageBoard
27
+ when 'Message'
28
+ Basecamp3::Message
29
+ when 'User'
30
+ Basecamp3::Person
31
+ when 'Question::Answer'
32
+ Basecamp3::QuestionAnswer
33
+ when 'Questionnaire'
34
+ Basecamp3::Questionnaire
35
+ when 'Question'
36
+ Basecamp3::Question
37
+ when 'Schedule::Entry'
38
+ Basecamp3::ScheduleEntry
39
+ when 'Schedule'
40
+ Basecamp3::Schedule
41
+ when 'Todolist'
42
+ Basecamp3::TodoList
43
+ when 'Todo'
44
+ Basecamp3::Todo
45
+ when 'Todoset'
46
+ Basecamp3::TodoSet
47
+ when 'Vault'
48
+ Basecamp3::Vault
49
+ else
50
+ OpenStruct
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,3 @@
1
+ module Basecamp3
2
+ VERSION = "0.1.3"
3
+ end
metadata ADDED
@@ -0,0 +1,202 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: basecamp3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.3
5
+ platform: ruby
6
+ authors:
7
+ - goth-pl
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-05-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.13'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.13'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: yard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.9.9
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.9.9
83
+ description: A simple Ruby Wrapper for the Basecamp 3 API
84
+ email:
85
+ - m.szycko@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - ".rspec"
92
+ - ".travis.yml"
93
+ - Gemfile
94
+ - LICENSE.txt
95
+ - README.md
96
+ - Rakefile
97
+ - basecamp3.gemspec
98
+ - bin/console
99
+ - bin/setup
100
+ - docs/Basecamp3.html
101
+ - docs/Basecamp3/Campfire.html
102
+ - docs/Basecamp3/CampfireLine.html
103
+ - docs/Basecamp3/Comment.html
104
+ - docs/Basecamp3/Concerns.html
105
+ - docs/Basecamp3/Concerns/Bucketable.html
106
+ - docs/Basecamp3/Concerns/Commentable.html
107
+ - docs/Basecamp3/Concerns/Creatorable.html
108
+ - docs/Basecamp3/Concerns/Parentable.html
109
+ - docs/Basecamp3/Concerns/Recordingable.html
110
+ - docs/Basecamp3/Concerns/Recordingable/ClassMethods.html
111
+ - docs/Basecamp3/Document.html
112
+ - docs/Basecamp3/Forward.html
113
+ - docs/Basecamp3/Inbox.html
114
+ - docs/Basecamp3/Message.html
115
+ - docs/Basecamp3/MessageBoard.html
116
+ - docs/Basecamp3/MessageType.html
117
+ - docs/Basecamp3/Model.html
118
+ - docs/Basecamp3/Person.html
119
+ - docs/Basecamp3/Project.html
120
+ - docs/Basecamp3/Question.html
121
+ - docs/Basecamp3/QuestionAnswer.html
122
+ - docs/Basecamp3/Questionnaire.html
123
+ - docs/Basecamp3/Request.html
124
+ - docs/Basecamp3/ResponseParser.html
125
+ - docs/Basecamp3/Schedule.html
126
+ - docs/Basecamp3/ScheduleEntry.html
127
+ - docs/Basecamp3/Todo.html
128
+ - docs/Basecamp3/TodoList.html
129
+ - docs/Basecamp3/TodoSet.html
130
+ - docs/Basecamp3/TypeMapper.html
131
+ - docs/Basecamp3/Vault.html
132
+ - docs/_index.html
133
+ - docs/class_list.html
134
+ - docs/css/common.css
135
+ - docs/css/full_list.css
136
+ - docs/css/style.css
137
+ - docs/file.README.html
138
+ - docs/file_list.html
139
+ - docs/frames.html
140
+ - docs/index.html
141
+ - docs/js/app.js
142
+ - docs/js/full_list.js
143
+ - docs/js/jquery.js
144
+ - docs/method_list.html
145
+ - docs/top-level-namespace.html
146
+ - lib/basecamp3.rb
147
+ - lib/basecamp3/concerns/bucketable.rb
148
+ - lib/basecamp3/concerns/commentable.rb
149
+ - lib/basecamp3/concerns/creatorable.rb
150
+ - lib/basecamp3/concerns/parentable.rb
151
+ - lib/basecamp3/concerns/recordingable.rb
152
+ - lib/basecamp3/model.rb
153
+ - lib/basecamp3/models/campfire.rb
154
+ - lib/basecamp3/models/campfire_line.rb
155
+ - lib/basecamp3/models/comment.rb
156
+ - lib/basecamp3/models/document.rb
157
+ - lib/basecamp3/models/forward.rb
158
+ - lib/basecamp3/models/inbox.rb
159
+ - lib/basecamp3/models/message.rb
160
+ - lib/basecamp3/models/message_board.rb
161
+ - lib/basecamp3/models/message_type.rb
162
+ - lib/basecamp3/models/person.rb
163
+ - lib/basecamp3/models/project.rb
164
+ - lib/basecamp3/models/question.rb
165
+ - lib/basecamp3/models/question_answer.rb
166
+ - lib/basecamp3/models/questionnaire.rb
167
+ - lib/basecamp3/models/schedule.rb
168
+ - lib/basecamp3/models/schedule_entry.rb
169
+ - lib/basecamp3/models/todo.rb
170
+ - lib/basecamp3/models/todo_list.rb
171
+ - lib/basecamp3/models/todo_set.rb
172
+ - lib/basecamp3/models/vault.rb
173
+ - lib/basecamp3/request.rb
174
+ - lib/basecamp3/response_parser.rb
175
+ - lib/basecamp3/type_mapper.rb
176
+ - lib/basecamp3/version.rb
177
+ homepage: https://github.com/miastologia/basecamp3-api-wrapper
178
+ licenses:
179
+ - MIT
180
+ metadata:
181
+ allowed_push_host: https://rubygems.org
182
+ post_install_message:
183
+ rdoc_options: []
184
+ require_paths:
185
+ - lib
186
+ required_ruby_version: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
191
+ required_rubygems_version: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
196
+ requirements: []
197
+ rubyforge_project:
198
+ rubygems_version: 2.4.5
199
+ signing_key:
200
+ specification_version: 4
201
+ summary: Basecamp3 API Wrapper
202
+ test_files: []