3llo 1.0.0.pre.rc.0 → 1.0.0

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.
@@ -1,6 +1,6 @@
1
- require '3llo/command/board/list'
2
- require '3llo/command/board/select'
3
- require '3llo/command/board/invalid'
1
+ require "3llo/command/board/list"
2
+ require "3llo/command/board/select"
3
+ require "3llo/command/board/invalid"
4
4
 
5
5
  module Tr3llo
6
6
  module Command
@@ -9,12 +9,12 @@ module Tr3llo
9
9
 
10
10
  def execute(subcommand, args)
11
11
  case subcommand
12
- when 'list'
12
+ when "list"
13
13
  user = Application.fetch_user!()
14
14
 
15
15
  Command::Board::List.execute(user[:id])
16
- when 'select'
17
- board_key, _ = args
16
+ when "select"
17
+ board_key, = args
18
18
  Utils.assert_string!(board_key, "board key is missing")
19
19
 
20
20
  Command::Board::Select.execute(board_key)
@@ -1,22 +1,23 @@
1
- require '3llo/command/card/list'
2
- require '3llo/command/card/list_mine'
3
- require '3llo/command/card/show'
4
- require '3llo/command/card/move'
5
- require '3llo/command/card/self_assign'
6
- require '3llo/command/card/assign'
7
- require '3llo/command/card/invalid'
8
- require '3llo/command/card/comments'
9
- require '3llo/command/card/comment'
10
- require '3llo/command/card/add'
11
- require '3llo/command/card/archive'
12
- require '3llo/command/card/add_checklist'
13
- require '3llo/command/card/edit_checklist'
14
- require '3llo/command/card/remove_checklist'
15
- require '3llo/command/card/add_item'
16
- require '3llo/command/card/check_item'
17
- require '3llo/command/card/uncheck_item'
18
- require '3llo/command/card/edit_item'
19
- require '3llo/command/card/remove_item'
1
+ require "3llo/command/card/list"
2
+ require "3llo/command/card/list_mine"
3
+ require "3llo/command/card/edit"
4
+ require "3llo/command/card/show"
5
+ require "3llo/command/card/move"
6
+ require "3llo/command/card/self_assign"
7
+ require "3llo/command/card/assign"
8
+ require "3llo/command/card/invalid"
9
+ require "3llo/command/card/comments"
10
+ require "3llo/command/card/comment"
11
+ require "3llo/command/card/add"
12
+ require "3llo/command/card/archive"
13
+ require "3llo/command/card/add_checklist"
14
+ require "3llo/command/card/edit_checklist"
15
+ require "3llo/command/card/remove_checklist"
16
+ require "3llo/command/card/add_item"
17
+ require "3llo/command/card/check_item"
18
+ require "3llo/command/card/uncheck_item"
19
+ require "3llo/command/card/edit_item"
20
+ require "3llo/command/card/remove_item"
20
21
 
21
22
  module Tr3llo
22
23
  module Command
@@ -25,100 +26,101 @@ module Tr3llo
25
26
 
26
27
  def execute(subcommand, args)
27
28
  case subcommand
28
- when 'list'
29
- is_mine, _ = *args
29
+ when "list"
30
30
  board = Application.fetch_board!()
31
31
 
32
- if is_mine == 'mine'
33
- user = Application.fetch_user!()
34
- Command::Card::ListMine.execute(board[:id], user[:id])
35
- elsif is_mine.nil?
36
- Command::Card::List.execute(board[:id])
37
- else
38
- command_string = "card list #{is_mine}"
39
- raise InvalidArgumentError.new("#{command_string.inspect} is not a valid command")
40
- end
41
- when 'add'
32
+ Command::Card::List.execute(board.id)
33
+ when "list-mine"
34
+ board = Application.fetch_board!()
35
+ user = Application.fetch_user!()
36
+
37
+ Command::Card::ListMine.execute(board.id, user.id)
38
+ when "add"
42
39
  board = Application.fetch_board!()
43
40
  Command::Card::Add.execute(board[:id])
44
- when 'show'
45
- card_key, _ = args
41
+ when "show"
42
+ card_key, = args
46
43
  Utils.assert_string!(card_key, "card key is missing")
47
44
 
48
45
  Command::Card::Show.execute(card_key)
49
- when 'comments'
50
- card_key, _ = args
46
+ when "edit"
47
+ card_key, = args
48
+ Utils.assert_string!(card_key, "card key is missing")
49
+
50
+ Command::Card::Edit.execute(card_key)
51
+ when "comments"
52
+ card_key, = args
51
53
  Utils.assert_string!(card_key, "card key is missing")
52
54
 
53
55
  Command::Card::Comments.execute(card_key)
54
- when 'comment'
55
- card_key, _ = args
56
+ when "comment"
57
+ card_key, = args
56
58
  Utils.assert_string!(card_key, "card key is missing")
57
59
 
58
60
  Command::Card::Comment.execute(card_key)
59
- when 'move'
61
+ when "move"
60
62
  board = Application.fetch_board!()
61
- card_key, _ = args
63
+ card_key, = args
62
64
  Utils.assert_string!(card_key, "card key is missing")
63
65
 
64
66
  Command::Card::Move.execute(card_key, board[:id])
65
- when 'self-assign'
67
+ when "self-assign"
66
68
  user = Application.fetch_user!()
67
- card_key, _ = args
69
+ card_key, = args
68
70
  Utils.assert_string!(card_key, "card key is missing")
69
71
 
70
72
  Command::Card::SelfAssign.execute(card_key, user[:id])
71
- when 'assign'
73
+ when "assign"
72
74
  board = Application.fetch_board!()
73
- card_key, _ = args
75
+ card_key, = args
74
76
  Utils.assert_string!(card_key, "card key is missing")
75
77
 
76
78
  Command::Card::Assign.execute(card_key, board[:id])
77
- when 'archive'
78
- card_key, _ = args
79
+ when "archive"
80
+ card_key, = args
79
81
  Utils.assert_string!(card_key, "card key is missing")
80
82
 
81
83
  Command::Card::Archive.execute(card_key)
82
84
  when "add-checklist"
83
- card_key, _ = args
85
+ card_key, = args
84
86
  Utils.assert_string!(card_key, "card key is missing")
85
87
 
86
88
  Command::Card::AddChecklist.execute(card_key)
87
89
  when "edit-checklist"
88
- checklist_key, _ = args
90
+ checklist_key, = args
89
91
  Utils.assert_string!(checklist_key, "checklist key is missing")
90
92
 
91
93
  Command::Card::EditChecklist.execute(checklist_key)
92
94
  when "remove-checklist"
93
- checklist_key, _ = args
95
+ checklist_key, = args
94
96
  Utils.assert_string!(checklist_key, "checklist key is missing")
95
97
 
96
98
  Command::Card::RemoveChecklist.execute(checklist_key)
97
99
  when "add-item"
98
- checklist_key, _ = args
100
+ checklist_key, = args
99
101
  Utils.assert_string!(checklist_key, "checklist key is missing")
100
102
 
101
103
  Command::Card::AddItem.execute(checklist_key)
102
104
  when "check-item"
103
- card_key, check_item_key, _ = args
105
+ card_key, check_item_key, = args
104
106
  Utils.assert_string!(card_key, "card key is missing")
105
107
  Utils.assert_string!(check_item_key, "item key is missing")
106
108
 
107
109
  Command::Card::CheckItem.execute(card_key, check_item_key)
108
110
  when "uncheck-item"
109
- card_key, check_item_key, _ = args
111
+ card_key, check_item_key, = args
110
112
  Utils.assert_string!(card_key, "card key is missing")
111
113
  Utils.assert_string!(check_item_key, "item key is missing")
112
114
 
113
115
  Command::Card::UncheckItem.execute(card_key, check_item_key)
114
116
  when "edit-item"
115
- card_key, check_item_key, _ = args
117
+ card_key, check_item_key, = args
116
118
  Utils.assert_string!(card_key, "card key is missing")
117
119
  Utils.assert_string!(check_item_key, "item key is missing")
118
120
 
119
121
  Command::Card::EditItem.execute(card_key, check_item_key)
120
122
  when "remove-item"
121
- card_key, check_item_key, _ = args
123
+ card_key, check_item_key, = args
122
124
  Utils.assert_string!(card_key, "card key is missing")
123
125
  Utils.assert_string!(check_item_key, "item key is missing")
124
126
 
@@ -33,14 +33,14 @@ module Tr3llo
33
33
  def select_user(interface, card, board_id)
34
34
  user_options =
35
35
  API::User.find_all_by_board(board_id)
36
- .map { |user| [user.username, user.id] }
37
- .to_h()
36
+ .map { |user| [user.username, user.id] }
37
+ .to_h()
38
38
 
39
39
  member_ids =
40
40
  card.members.flat_map do |member|
41
41
  index = user_options.find_index { |_username, user_id| user_id == member.id }
42
42
 
43
- if index then [index + 1] else [] end
43
+ index ? [index + 1] : []
44
44
  end
45
45
 
46
46
  interface.input.multi_select(
@@ -0,0 +1,33 @@
1
+ module Tr3llo
2
+ module Command
3
+ module Card
4
+ module Edit
5
+ extend self
6
+
7
+ def execute(card_key)
8
+ card_id = Entities.parse_id(:card, card_key)
9
+ assert_card_id!(card_id, card_key)
10
+
11
+ card = API::Card.find(card_id)
12
+
13
+ interface = Application.fetch_interface!()
14
+
15
+ interface.print_frame do
16
+ name = interface.input.ask("Name:", required: true, value: card.name)
17
+ description = interface.input.ask("Description:", value: card.description)
18
+
19
+ API::Card.update(card_id, {"name" => name, "desc" => description})
20
+
21
+ interface.puts("Card has been updated.")
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def assert_card_id!(card_id, key)
28
+ raise InvalidArgumentError.new("#{key.inspect} is not a valid list key") unless card_id
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -23,9 +23,9 @@ module Tr3llo
23
23
  def select_list(interface, board_id)
24
24
  list_options =
25
25
  API::List
26
- .find_all_by_board(board_id)
27
- .map { |list| [list.name, list.id] }
28
- .to_h()
26
+ .find_all_by_board(board_id)
27
+ .map { |list| [list.name, list.id] }
28
+ .to_h()
29
29
 
30
30
  interface.input.select(
31
31
  "Choose the list to be moved to",
@@ -8,7 +8,7 @@ module Tr3llo
8
8
  card_id = Entities.parse_id(:card, key)
9
9
  assert_card_id!(card_id, key)
10
10
 
11
- card = assign_card(card_id, user_id)
11
+ assign_card(card_id, user_id)
12
12
 
13
13
  interface = Application.fetch_interface!()
14
14
 
@@ -21,7 +21,7 @@ module Tr3llo
21
21
 
22
22
  def assign_card(card_id, user_id)
23
23
  card = API::Card.find(card_id)
24
- members = card.members.map { |member| member.id } + [user_id]
24
+ members = card.members.map(&:id) + [user_id]
25
25
 
26
26
  API::Card.assign_members(card_id, members)
27
27
  end
@@ -1,7 +1,7 @@
1
- require '3llo/command/list/list'
2
- require '3llo/command/list/cards'
3
- require '3llo/command/list/invalid'
4
- require '3llo/command/list/archive_cards'
1
+ require "3llo/command/list/list"
2
+ require "3llo/command/list/cards"
3
+ require "3llo/command/list/invalid"
4
+ require "3llo/command/list/archive_cards"
5
5
 
6
6
  module Tr3llo
7
7
  module Command
@@ -10,17 +10,17 @@ module Tr3llo
10
10
 
11
11
  def execute(subcommand, args)
12
12
  case subcommand
13
- when 'list'
13
+ when "list"
14
14
  board = Application.fetch_board!()
15
15
 
16
16
  Command::List::List.execute(board[:id])
17
- when 'cards'
18
- list_key, _ = args
17
+ when "cards"
18
+ list_key, = args
19
19
  Utils.assert_string!(list_key, "list key is missing")
20
20
 
21
21
  Command::List::Cards.execute(list_key)
22
- when 'archive-cards'
23
- list_key, _ = args
22
+ when "archive-cards"
23
+ list_key, = args
24
24
  Utils.assert_string!(list_key, "list key is missing")
25
25
 
26
26
  Command::List::ArchiveCards.execute(list_key)
@@ -1,37 +1,36 @@
1
- require 'readline'
1
+ require "readline"
2
2
 
3
3
  module Tr3llo
4
4
  module Controller
5
5
  extend self
6
6
 
7
7
  def start(init_command)
8
- list = %w(board card help list mine move select self-assign show)
9
- auto_completion = proc { |s| list.grep( /^#{Regexp.escape(s)}/ ) }
10
-
11
- Readline.completion_append_character = " "
12
- Readline.completion_proc = auto_completion
8
+ Readline.completion_append_character = " "
9
+ Readline.completion_proc = lambda { |buffer|
10
+ Command.generate_suggestions(buffer, Readline.line_buffer)
11
+ }
13
12
 
14
13
  interface = Application.fetch_interface!()
15
14
 
16
15
  if init_command && init_command != ""
17
16
  interface.puts("Executing " + Utils.format_highlight(init_command) + " command")
18
17
 
19
- execute_command!(init_command, interface)
18
+ execute_command!(init_command)
20
19
  end
21
20
 
22
21
  loop do
23
22
  command_buffer = Readline.readline("\e[15;48;5;27m 3llo \e[0m > ", true)
24
23
 
25
- execute_command!(command_buffer, interface)
24
+ execute_command!(command_buffer)
26
25
  end
27
26
  rescue Interrupt
28
27
  Command::Exit.execute()
29
28
  end
30
29
 
31
- def execute_command!(command_buffer, interface)
30
+ private
31
+
32
+ def execute_command!(command_buffer)
32
33
  Tr3llo::Command.execute(command_buffer.strip())
33
- rescue Tr3llo::HTTP::Client::RequestError => e
34
- interface.print_frame { interface.print_error(e.message) }
35
34
  end
36
35
  end
37
36
  end
@@ -2,7 +2,7 @@ module Tr3llo
2
2
  module Entities
3
3
  extend self
4
4
 
5
- SHORTCUT_PREFIX = "#"
5
+ SHORTCUT_PREFIX = "#".freeze
6
6
 
7
7
  InvalidKeyError = Class.new(ArgumentError)
8
8
  InvalidIDError = Class.new(ArgumentError)
@@ -1,7 +1,8 @@
1
1
  module Tr3llo
2
2
  class Interface
3
3
  def initialize(input, output)
4
- @input, @output = input, output
4
+ @input = input
5
+ @output = output
5
6
  end
6
7
 
7
8
  def print_frame
@@ -15,7 +16,7 @@ module Tr3llo
15
16
  output.puts(str)
16
17
  end
17
18
 
18
- alias :puts :print_line
19
+ alias puts print_line
19
20
 
20
21
  def print(str)
21
22
  output.print(str)
@@ -16,11 +16,10 @@ module Tr3llo
16
16
  shortcut_to_id: {}
17
17
  })
18
18
 
19
- id_to_key = data[:id_to_shortcut]
20
- key_to_id = data[:shortcut_to_id]
19
+ id_to_shortcut = data[:id_to_shortcut]
21
20
 
22
- if id_to_key.key?(id)
23
- id_to_key.fetch(id)
21
+ if id_to_shortcut.has_key?(id)
22
+ id_to_shortcut.fetch(id)
24
23
  else
25
24
  counter = data[:counter] + 1
26
25
  shortcut = counter.to_s
@@ -0,0 +1,97 @@
1
+ require "net/http"
2
+
3
+ module Tr3llo
4
+ class RemoteServer
5
+ attr_reader :endpoint_url
6
+
7
+ EXPECTED_CODES = ["200"].freeze
8
+
9
+ class RequestError < ::StandardError
10
+ attr_reader :response
11
+
12
+ def initialize(response)
13
+ @response = response
14
+ super()
15
+ end
16
+
17
+ def message
18
+ formatted_response = "status: " + response.code.inspect() + ", body: " + response.body.inspect()
19
+
20
+ "Received unexpected response from remote server: " + formatted_response
21
+ end
22
+ end
23
+
24
+ def initialize(endpoint_url)
25
+ @endpoint_url = endpoint_url
26
+ end
27
+
28
+ def get(req_path, req_headers, expected_codes = EXPECTED_CODES)
29
+ req_uri = build_request_uri(req_path)
30
+ req_headers = {"accept" => "application/json"}.merge(req_headers)
31
+
32
+ dispatch(Net::HTTP::Get.new(req_uri, req_headers), expected_codes)
33
+ end
34
+
35
+ def post(req_path, req_headers, payload, expected_codes = EXPECTED_CODES)
36
+ req_uri = build_request_uri(req_path)
37
+
38
+ req_headers = {
39
+ "accept" => "application/json",
40
+ "content-type" => "application/json"
41
+ }.merge(req_headers)
42
+
43
+ request = Net::HTTP::Post.new(req_uri, req_headers)
44
+ request.body = JSON.dump(payload)
45
+
46
+ dispatch(request, expected_codes)
47
+ end
48
+
49
+ def put(req_path, req_headers, payload, expected_codes = EXPECTED_CODES)
50
+ req_uri = build_request_uri(req_path)
51
+
52
+ req_headers = {
53
+ "Accept" => "application/json",
54
+ "Content-Type" => "application/json"
55
+ }.merge(req_headers)
56
+
57
+ request = Net::HTTP::Put.new(req_uri, req_headers)
58
+ request.body = JSON.dump(payload)
59
+
60
+ dispatch(request, expected_codes)
61
+ end
62
+
63
+ def delete(req_path, req_headers, payload, expected_codes = EXPECTED_CODES)
64
+ req_uri = build_request_uri(req_path)
65
+
66
+ req_headers = {
67
+ "Accept" => "application/json",
68
+ "Content-Type" => "application/json"
69
+ }.merge(req_headers)
70
+
71
+ request = Net::HTTP::Delete.new(req_uri, req_headers)
72
+ request.body = JSON.dump(payload)
73
+
74
+ dispatch(request, expected_codes)
75
+ end
76
+
77
+ private
78
+
79
+ def build_request_uri(req_path)
80
+ URI.parse(endpoint_url + req_path)
81
+ end
82
+
83
+ def dispatch(request, expected_status_codes)
84
+ req_uri = request.uri
85
+
86
+ Net::HTTP.start(req_uri.host, req_uri.port, use_ssl: req_uri.scheme == "https") do |http|
87
+ response = http.request(request)
88
+
89
+ if expected_status_codes.include?(response.code)
90
+ JSON.parse(response.body)
91
+ else
92
+ raise RequestError.new(response)
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end