logan 0.0.2 → 0.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8ba45bb77d32f5b00a89c053de3cff2ae1c9ef0b
4
- data.tar.gz: 288d0153ed727f60b694386a3158a3359a84083e
3
+ metadata.gz: e39f8bb1bebade7a2d6d7b2ef6f8149e02cee606
4
+ data.tar.gz: d0c5e113b5db76d6b8cf8f9a03a64f27d562539a
5
5
  SHA512:
6
- metadata.gz: 48b176bc3031d723b868279bd302744792a9ef81391783d21e2edd5f9a0f10741a9eb8975afa80bae53c8986e9eb15b835d6dfe7f12f771af7c36245b3f441af
7
- data.tar.gz: 2485b976bdef206dfe3e8dd7cee5a0306cc72cb5c15c042b31c59fdaf88a973cdfa80b68c767b2d91cdebe2af5f7e2fd552daa16eff884a19221b5106c059869
6
+ metadata.gz: 584042077954e3131935bc73b96a95a28dc0875bb29b635036780ba1bf2accbeb3cd7943bc62347dec472f0db8985f98d28de0b9fc27c38b68a6df36c48bf866
7
+ data.tar.gz: f71fc834f95e02da617cd974c78daf932a8d90f0a5f6c24ea6a5f6b17ead66cbf0ea922b047dbd6cb90ee10bfce9c237032de6e70228ba61896e85ba5918ea6c
@@ -1,5 +1,13 @@
1
+ # this module is taken from the accepted answer here
2
+ # http://stackoverflow.com/questions/1572660/is-there-a-way-to-initialize-an-object-through-a-hash
3
+
1
4
  module HashConstructed
2
- def initialize(h)
3
- h.each { |k,v| send("#{k}=",v) if respond_to?("#{k}=") }
4
- end
5
+
6
+ # initalizes the object by pulling key-value pairs from the hash and
7
+ # mapping them to the object's instance variables
8
+ #
9
+ # @param [Hash] h hash containing key-value pairs to map to object instance variables
10
+ def initialize(h)
11
+ h.each { |k,v| send("#{k}=",v) if respond_to?("#{k}=") }
12
+ end
5
13
  end
data/lib/logan/client.rb CHANGED
@@ -4,17 +4,29 @@ module Logan
4
4
  class Client
5
5
  include HTTParty
6
6
 
7
+ # Initializes the Logan shared client with information required to communicate with Basecamp
8
+ #
9
+ # @param basecamp_id [String] the Basecamp company ID
10
+ # @param username [String] the username to use for requests
11
+ # @param password [String] the password to use for the passed username
12
+ # @param user_agent [String] the user-agent string to include in header of requests
7
13
  def initialize(basecamp_id, username, password, user_agent)
8
14
  self.class.base_uri "https://basecamp.com/#{basecamp_id}/api/v1"
9
15
  self.class.basic_auth username, password
10
16
  self.class.headers 'User-Agent' => user_agent
11
17
  end
12
18
 
19
+ # get projects from Basecamp API
20
+ #
21
+ # @return [Array<Logan::Project>] array of {Logan::Project} instances
13
22
  def projects
14
23
  response = self.class.get '/projects.json'
15
24
  response.parsed_response.map { |h| p = Logan::Project.new(h) }
16
25
  end
17
26
 
27
+ # get active Todo lists for all projects from Basecamp API
28
+ #
29
+ # @return [Array<Logan::TodoList>] array of {Logan::TodoList} instances
18
30
  def todolists
19
31
  response = self.class.get '/todolists.json'
20
32
 
data/lib/logan/person.rb CHANGED
@@ -10,9 +10,5 @@ module Logan
10
10
  def to_hash
11
11
  { :id => @id, :type => "Person" }
12
12
  end
13
-
14
- def post_json
15
- self.to_hash.to_json
16
- end
17
13
  end
18
14
  end
data/lib/logan/project.rb CHANGED
@@ -8,6 +8,9 @@ module Logan
8
8
  attr_accessor :id
9
9
  attr_accessor :name
10
10
 
11
+ # get active todo lists for this project from Basecamp API
12
+ #
13
+ # @return [Array<Logan::TodoList>] array of active todo lists for this project
11
14
  def todolists
12
15
  active_response = Logan::Client.get "/projects/#{@id}/todolists.json"
13
16
  lists_array = active_response.parsed_response.map do |h|
@@ -15,6 +18,9 @@ module Logan
15
18
  end
16
19
  end
17
20
 
21
+ # get completed todo lists for this project from Basecamp API
22
+ #
23
+ # @return [Array<Logan::TodoList>] array of completed todo lists for this project
18
24
  def completed_todolists
19
25
  completed_response = Logan::Client.get "/projects/#{@id}/todolists/completed.json"
20
26
  lists_array = completed_response.parsed_response.map do |h|
@@ -22,18 +28,29 @@ module Logan
22
28
  end
23
29
  end
24
30
 
31
+ # get both active and completed todo lists for this project from Basecamp API
32
+ #
33
+ # @return [Array<Logan::TodoList>] array of active and completed todo lists for this project
25
34
  def all_todolists
26
35
  todolists + completed_todolists
27
36
  end
28
37
 
38
+ # get an individual todo list for this project from Basecamp API
39
+ #
40
+ # @param [String] list_id id for the todo list
41
+ # @return [Logan::TodoList] todo list instance
29
42
  def todolist(list_id)
30
43
  response = Logan::Client.get "/projects/#{@id}/todolists/#{list_id}.json"
31
44
  Logan::TodoList.new response.parsed_response.merge({ :project_id => @id })
32
45
  end
33
46
 
34
- def create_todolist(todolist)
47
+ # create a todo list in this project via Basecamp API
48
+ #
49
+ # @param [Logan::TodoList] todo_list todo list instance to be created
50
+ # @return [Logan::TodoList] todo list instance from Basecamp API response
51
+ def create_todolist(todo_list)
35
52
  post_params = {
36
- :body => todolist.post_json,
53
+ :body => todo_list.post_json,
37
54
  :headers => Logan::Client.headers.merge({'Content-Type' => 'application/json'})
38
55
  }
39
56
 
@@ -14,6 +14,8 @@ module Logan
14
14
  attr_accessor :completed_todos
15
15
  attr_accessor :url
16
16
 
17
+ # intializes a todo list by calling the HashConstructed initialize method and
18
+ # setting both @remaining_todos and @completed_todos to empty arrays
17
19
  def initialize(h)
18
20
  @remaining_todos = []
19
21
  @completed_todos = []
@@ -24,16 +26,29 @@ module Logan
24
26
  { :name => @name, :description => @description }.to_json
25
27
  end
26
28
 
29
+ # assigns the {#remaining_todos} and {#completed_todos} from the associated keys
30
+ # in the passed hash
31
+ #
32
+ # @param [Hash] todo_hash hash possibly containing todos under 'remaining' and 'completed' keys
27
33
  def todos=(todo_hash)
28
34
  @remaining_todos = todo_hash['remaining'].map { |h| Logan::Todo.new h }
29
35
  @completed_todos = todo_hash['completed'].map { |h| Logan::Todo.new h }
36
+ return nil
30
37
  end
31
38
 
39
+ # searches the remaining and completed todos for the first todo with the substring in its content
40
+ #
41
+ # @param [String] substring substring to look for
42
+ # @return [Logan::Todo] the matched todo, or nil if there wasn't one
32
43
  def todo_with_substring(substring)
33
44
  issue_todo = @remaining_todos.detect{ |t| !t.content.index(substring).nil? }
34
45
  issue_todo ||= @completed_todos.detect { |t| !t.content.index(substring).nil? }
35
46
  end
36
47
 
48
+ # create a todo in this todo list via the Basecamp API
49
+ #
50
+ # @param [Logan::Todo] todo the todo instance to create in this todo lost
51
+ # @return [Logan::Todo] the created todo returned from the Basecamp API
37
52
  def create_todo(todo)
38
53
  post_params = {
39
54
  :body => todo.post_json,
@@ -44,6 +59,10 @@ module Logan
44
59
  Logan::Todo.new response
45
60
  end
46
61
 
62
+ # update a todo in this todo list via the Basecamp API
63
+ #
64
+ # @param [Logan::Todo] todo the todo instance to update in this todo list
65
+ # @return [Logan::Todo] the updated todo instance returned from the Basecamp API
47
66
  def update_todo(todo)
48
67
  put_params = {
49
68
  :body => todo.put_json,
@@ -54,6 +73,10 @@ module Logan
54
73
  Logan::Todo.new response
55
74
  end
56
75
 
76
+ # delete a todo in this todo list via delete call to Basecamp API
77
+ #
78
+ # @param [Logan::Todo] todo the todo instance to be delete from this todo list
79
+ # @return [HTTParty::response] response from Basecamp for delete request
57
80
  def delete_todo(todo)
58
81
  response = Logan::Client.delete "/projects/#{@project_id}/todos/#{todo.id}.json"
59
82
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Birarda
@@ -48,3 +48,4 @@ signing_key:
48
48
  specification_version: 4
49
49
  summary: ruby gem to communicate with new Basecamp API
50
50
  test_files: []
51
+ has_rdoc: