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.
@@ -4,20 +4,14 @@ module Tr3llo
4
4
  extend self
5
5
 
6
6
  def create(card_id, data)
7
- params = data.merge(key: api_key, token: api_token)
7
+ req_path = Utils.build_req_path("/cards/#{card_id}/checklists")
8
8
 
9
- client.post("/cards/#{card_id}/checklists", params)
9
+ client.post(req_path, {}, data)
10
10
  end
11
11
 
12
12
  def get(checklist_id)
13
- payload =
14
- JSON.parse(
15
- client.get(
16
- "/checklists/#{checklist_id}",
17
- key: api_key,
18
- token: api_token
19
- )
20
- )
13
+ req_path = Utils.build_req_path("/checklists/#{checklist_id}")
14
+ payload = client.get(req_path, {})
21
15
 
22
16
  checklist_id, checklist_name = payload.fetch_values("id", "name")
23
17
  checklist_shortcut = Entities.make_shortcut(:checklist, checklist_id)
@@ -31,24 +25,20 @@ module Tr3llo
31
25
  end
32
26
 
33
27
  def update(checklist_id, data)
34
- params = data.merge(key: api_key, token: api_token)
28
+ req_path = Utils.build_req_path("/checklists/#{checklist_id}")
35
29
 
36
- client.put("/checklists/#{checklist_id}", params)
30
+ client.put(req_path, {}, data)
37
31
  end
38
32
 
39
33
  def delete(checklist_id)
40
- client.delete("/checklists/#{checklist_id}", token: api_token, key: api_key)
34
+ req_path = Utils.build_req_path("/checklists/#{checklist_id}")
35
+
36
+ client.delete(req_path, {}, {})
41
37
  end
42
38
 
43
39
  def list_by_card_id(card_id)
44
- payload =
45
- JSON.parse(
46
- client.get(
47
- "/cards/#{card_id}/checklists",
48
- key: api_key,
49
- token: api_token
50
- )
51
- )
40
+ req_path = Utils.build_req_path("/cards/#{card_id}/checklists")
41
+ payload = client.get(req_path, {})
52
42
 
53
43
  payload.map do |checklist_payload|
54
44
  checklist_id, checklist_name = checklist_payload.fetch_values("id", "name")
@@ -56,8 +46,8 @@ module Tr3llo
56
46
 
57
47
  items =
58
48
  checklist_payload
59
- .fetch("checkItems", [])
60
- .map do |item_payload|
49
+ .fetch("checkItems", [])
50
+ .map do |item_payload|
61
51
  item_id, item_name, item_state = item_payload.fetch_values("id", "name", "state")
62
52
  item_shortcut = Entities.make_shortcut(:check_item, item_id)
63
53
 
@@ -74,14 +64,8 @@ module Tr3llo
74
64
  end
75
65
 
76
66
  def get_item(card_id, item_id)
77
- item_payload =
78
- JSON.parse(
79
- client.get(
80
- "/cards/#{card_id}/checkItem/#{item_id}",
81
- key: api_key,
82
- token: api_token
83
- )
84
- )
67
+ req_path = Utils.build_req_path("/cards/#{card_id}/checkItem/#{item_id}")
68
+ item_payload = client.get(req_path, {})
85
69
 
86
70
  item_id, item_name, item_state = item_payload.fetch_values("id", "name", "state")
87
71
  item_shortcut = Entities.make_shortcut(:check_item, item_id)
@@ -90,35 +74,29 @@ module Tr3llo
90
74
  end
91
75
 
92
76
  def create_item(checklist_id, name)
93
- client.post(
94
- "/checklists/#{checklist_id}/checkItems",
95
- key: api_key,
96
- token: api_token,
77
+ req_path = Utils.build_req_path("/checklists/#{checklist_id}/checkItems")
78
+ payload = {
97
79
  name: name,
98
80
  pos: "bottom",
99
- state: false
100
- )
81
+ state: "false"
82
+ }
83
+
84
+ client.post(req_path, {}, payload)
101
85
  end
102
86
 
103
87
  def update_item(card_id, check_item_id, data)
104
- params = data.merge(key: api_key, token: api_token)
88
+ req_path = Utils.build_req_path("/cards/#{card_id}/checkItem/#{check_item_id}")
105
89
 
106
- client.put("/cards/#{card_id}/checkItem/#{check_item_id}", params)
90
+ client.put(req_path, {}, data)
107
91
  end
108
92
 
109
93
  def delete_item(card_id, item_id)
110
- client.delete("/cards/#{card_id}/checkItem/#{item_id}", token: api_token, key: api_key)
111
- end
112
-
113
- private
94
+ req_path = Utils.build_req_path("/cards/#{card_id}/checkItem/#{item_id}")
114
95
 
115
- def api_key
116
- Application.fetch_configuration!().api_key
96
+ client.delete(req_path, {}, {})
117
97
  end
118
98
 
119
- def api_token
120
- Application.fetch_configuration!().api_token
121
- end
99
+ private
122
100
 
123
101
  def client
124
102
  Application.fetch_client!()
@@ -4,26 +4,23 @@ module Tr3llo
4
4
  extend self
5
5
 
6
6
  def find_all_by_board(board_id)
7
- JSON.parse(
8
- client.get(
7
+ req_path =
8
+ Utils.build_req_path(
9
9
  "/boards/#{board_id}/lists",
10
- list: true,
11
- key: api_key,
12
- token: api_token
10
+ {"list" => "true"}
13
11
  )
14
- ).map do |list_payload|
15
- make_struct(list_payload)
16
- end
12
+
13
+ client
14
+ .get(req_path, {})
15
+ .map do |list_payload|
16
+ make_struct(list_payload)
17
+ end
17
18
  end
18
19
 
19
20
  def archive_cards(list_id)
20
- JSON.parse(
21
- client.post(
22
- "/lists/#{list_id}/archiveAllCards",
23
- key: api_key,
24
- token: api_token
25
- )
26
- )
21
+ req_path = Utils.build_req_path("/lists/#{list_id}/archiveAllCards")
22
+
23
+ client.post(req_path, {}, {})
27
24
  end
28
25
 
29
26
  private
@@ -38,14 +35,6 @@ module Tr3llo
38
35
  def client
39
36
  Application.fetch_client!()
40
37
  end
41
-
42
- def api_key
43
- Application.fetch_configuration!().api_key
44
- end
45
-
46
- def api_token
47
- Application.fetch_configuration!().api_token
48
- end
49
38
  end
50
39
  end
51
40
  end
@@ -4,10 +4,10 @@ module Tr3llo
4
4
  extend self
5
5
 
6
6
  def verify(key, token)
7
- client.get("/tokens/#{token}", key: key)
7
+ client.get("/tokens/#{token}?key=#{key}", {})
8
8
 
9
9
  true
10
- rescue HTTP::Client::RequestError
10
+ rescue RemoteServer::RequestError
11
11
  false
12
12
  end
13
13
 
@@ -4,31 +4,19 @@ module Tr3llo
4
4
  extend self
5
5
 
6
6
  def find(user_id)
7
- url = "/members/#{user_id}"
7
+ client = Application.fetch_client!()
8
+ req_path = Utils.build_req_path("/members/#{user_id}")
8
9
 
9
- make_struct(
10
- JSON.parse(
11
- client.get(
12
- url,
13
- key: key,
14
- token: token
15
- )
16
- )
17
- )
10
+ make_struct(client.get(req_path, {}))
18
11
  end
19
12
 
20
13
  def find_all_by_board(board_id)
21
- url = "/board/#{board_id}/members"
14
+ client = Application.fetch_client!()
15
+ req_path = Utils.build_req_path("/board/#{board_id}/members")
22
16
 
23
- JSON.parse(
24
- client.get(
25
- url,
26
- key: key,
27
- token: token
28
- )
29
- ).map do |user_payload|
30
- make_struct(user_payload)
31
- end
17
+ client
18
+ .get(req_path, {})
19
+ .map { |user_payload| make_struct(user_payload) }
32
20
  end
33
21
 
34
22
  private
@@ -39,18 +27,6 @@ module Tr3llo
39
27
 
40
28
  Entities::User.new(id, shortcut, username)
41
29
  end
42
-
43
- def key
44
- Application.fetch_configuration!().api_key
45
- end
46
-
47
- def token
48
- Application.fetch_configuration!().api_token
49
- end
50
-
51
- def client
52
- Application.fetch_client!()
53
- end
54
30
  end
55
31
  end
56
32
  end
@@ -2,10 +2,10 @@ module Tr3llo
2
2
  module Application
3
3
  extend self
4
4
 
5
- DEFAULT_CONFIG_FILE_PATH = "~/.3llo.config.json"
5
+ DEFAULT_CONFIG_FILE_PATH = "~/.3llo.config.json".freeze
6
6
 
7
7
  def start(args)
8
- $container = Container.new()
8
+ $application = Container.new()
9
9
 
10
10
  interface = register_interface!()
11
11
  option_parser = build_option_parser()
@@ -13,12 +13,12 @@ module Tr3llo
13
13
 
14
14
  options = parse_cli_args!(option_parser, args)
15
15
 
16
- if options.key?(:help)
16
+ if options.has_key?(:help)
17
17
  execute_help!(option_parser, interface)
18
18
  exit
19
19
  end
20
20
 
21
- if options.key?(:configure)
21
+ if options.has_key?(:configure)
22
22
  execute_configure!(interface)
23
23
  exit
24
24
  end
@@ -28,7 +28,7 @@ module Tr3llo
28
28
 
29
29
  print_help!(interface)
30
30
 
31
- load_configuration!(config_file, interface)
31
+ load_configuration!(config_file)
32
32
  register_registry!()
33
33
 
34
34
  load_user!(interface)
@@ -64,7 +64,7 @@ module Tr3llo
64
64
  parser.parse!(args, into: options)
65
65
 
66
66
  options
67
- rescue OptionParser::InvalidArgument, OptionParser::InvalidOption => exception
67
+ rescue OptionParser::InvalidArgument, OptionParser::InvalidOption
68
68
  {}
69
69
  end
70
70
 
@@ -85,19 +85,21 @@ module Tr3llo
85
85
  end
86
86
 
87
87
  def register_api_client!()
88
- $container.register(:api_client, Tr3llo::HTTP::Client)
88
+ remote_server = Tr3llo::RemoteServer.new("https://api.trello.com/1")
89
+
90
+ $application.register(:api_client, remote_server)
89
91
  end
90
92
 
91
93
  def register_interface!()
92
94
  prompt = TTY::Prompt.new()
93
- $container.register(:interface, Tr3llo::Interface.new(prompt, $stdout))
95
+ $application.register(:interface, Tr3llo::Interface.new(prompt, $stdout))
94
96
  end
95
97
 
96
- def load_configuration!(config_file, interface)
98
+ def load_configuration!(config_file)
97
99
  config_path = File.expand_path(config_file)
98
100
 
99
101
  config =
100
- if File.exists?(config_path)
102
+ if File.exist?(config_path)
101
103
  JSON.load(File.read(config_path))
102
104
  else
103
105
  {}
@@ -110,17 +112,25 @@ module Tr3llo
110
112
 
111
113
  configuration.finalize!()
112
114
 
113
- $container.register(:configuration, configuration)
115
+ $application.register(:configuration, configuration)
114
116
  rescue KeyError => exception
115
117
  command_string = "3llo --configure"
116
- abort(Utils.paint("#{exception.key.inspect} has not been configured. Please run #{command_string.inspect} to set up configuration.", "red"))
118
+
119
+ abort(
120
+ Utils.paint(
121
+ "#{exception.key.inspect} has not been configured. " \
122
+ "Please run #{command_string.inspect} to set up configuration.",
123
+ "red"
124
+ )
125
+ )
117
126
  end
118
127
 
119
128
  def get_config_entry(config, key, env_key)
120
129
  config.fetch(key) do
121
130
  if ENV.has_key?(env_key)
122
131
  Utils.deprecate!(
123
- "Setting #{env_key.inspect} as an environment variable is deprecated. It will be removed in the future versions of 3llo. Please use config file instead."
132
+ "Setting #{env_key.inspect} as an environment variable is deprecated. " \
133
+ "It will be removed in the future versions of 3llo. Please use config file instead."
124
134
  )
125
135
 
126
136
  ENV.fetch(env_key)
@@ -131,37 +141,37 @@ module Tr3llo
131
141
  end
132
142
 
133
143
  def register_registry!()
134
- $container.register(:registry, Tr3llo::Registry.new)
144
+ $application.register(:registry, Tr3llo::Registry.new)
135
145
  end
136
146
 
137
147
  def register_board!(board)
138
- $container.register(:board, board)
148
+ $application.register(:board, board)
139
149
  end
140
150
 
141
151
  def fetch_board!()
142
- $container.resolve(:board)
152
+ $application.resolve(:board)
143
153
  rescue ::Container::KeyNotFoundError
144
154
  raise BoardNotSelectedError
145
155
  end
146
156
 
147
157
  def fetch_user!()
148
- $container.resolve(:user)
158
+ $application.resolve(:user)
149
159
  end
150
160
 
151
161
  def fetch_configuration!()
152
- $container.resolve(:configuration)
162
+ $application.resolve(:configuration)
153
163
  end
154
164
 
155
165
  def fetch_interface!()
156
- $container.resolve(:interface)
166
+ $application.resolve(:interface)
157
167
  end
158
168
 
159
169
  def fetch_client!()
160
- $container.resolve(:api_client)
170
+ $application.resolve(:api_client)
161
171
  end
162
172
 
163
173
  def fetch_registry!()
164
- $container.resolve(:registry)
174
+ $application.resolve(:registry)
165
175
  end
166
176
 
167
177
  def load_user!(interface)
@@ -172,7 +182,7 @@ module Tr3llo
172
182
  interface.puts("You're logged in as #{decorated_username}")
173
183
  end
174
184
 
175
- $container.register(:user, user)
185
+ $application.register(:user, user)
176
186
  end
177
187
  end
178
188
  end
@@ -1,9 +1,9 @@
1
- require '3llo/command/board'
2
- require '3llo/command/card'
3
- require '3llo/command/list'
4
- require '3llo/command/help'
5
- require '3llo/command/exit'
6
- require '3llo/command/invalid'
1
+ require "3llo/command/board"
2
+ require "3llo/command/card"
3
+ require "3llo/command/list"
4
+ require "3llo/command/help"
5
+ require "3llo/command/exit"
6
+ require "3llo/command/invalid"
7
7
 
8
8
  module Tr3llo
9
9
  module Command
@@ -13,35 +13,64 @@ module Tr3llo
13
13
  build_command(command_buffer)
14
14
  end
15
15
 
16
+ def generate_suggestions(buffer, command_buffer)
17
+ commands = {
18
+ "board" => ["list", "select"],
19
+ "list" => %w[list cards archive-cards],
20
+ "card" => %w[
21
+ list show add edit archive list-mine move
22
+ comment comments self-assign assign
23
+ add-checklist edit-checklist remove-checklist
24
+ add-item edit-item remote-item check-item uncheck-item
25
+ ],
26
+ "help" => [],
27
+ "exit" => []
28
+ }
29
+
30
+ command, _subcommand, _args = parse_command(command_buffer)
31
+
32
+ if commands.has_key?(command)
33
+ subcommands = commands.fetch(command)
34
+
35
+ subcommands
36
+ .grep(/^#{Regexp.escape(buffer)}/)
37
+ .reject { |suggestion| suggestion == buffer }
38
+ else
39
+ commands.keys.grep(/^#{Regexp.escape(buffer)}/)
40
+ end
41
+ end
42
+
16
43
  private
17
44
 
18
45
  def build_command(command_string)
19
46
  command, subcommand, *args = parse_command(command_string)
20
47
 
21
48
  case command
22
- when 'board'
49
+ when "board"
23
50
  Command::Board.execute(subcommand, args)
24
- when 'card'
51
+ when "card"
25
52
  Command::Card.execute(subcommand, args)
26
- when 'list'
53
+ when "list"
27
54
  Command::List.execute(subcommand, args)
28
- when 'help'
55
+ when "help"
29
56
  Command::Help.execute()
30
- when 'exit'
57
+ when "exit"
31
58
  Command::Exit.execute()
32
59
  else
33
60
  if command
34
- raise InvalidCommandError.new("#{command.inspect} is not a valid command. Run #{"help".inspect} to display the document.")
61
+ raise InvalidCommandError.new(
62
+ "#{command.inspect} is not a valid command. Run #{"help".inspect} to display the document."
63
+ )
35
64
  else
36
65
  raise InvalidCommandError.new("command is missing")
37
66
  end
38
67
  end
39
- rescue InvalidCommandError => exception
68
+ rescue InvalidCommandError, RemoteServer::RequestError => exception
40
69
  Command::Invalid.execute(exception.message)
41
70
  end
42
71
 
43
72
  def parse_command(command_string)
44
- command_string.strip.split(' ')
73
+ command_string.strip.split(" ").map(&:strip)
45
74
  end
46
75
  end
47
76
  end