pello 0.1.0 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb48f8c0c18e6c06d29397396cbfa5792475d6da699d0215d1a7f9224364004d
4
- data.tar.gz: c3a18b8d8af0664246e902d1ee4de3c28ac8357fd3e6e5e37086e78a34e2a321
3
+ metadata.gz: 2c85bd4f1d9080e27d0b8738141d556464c690f10b3cca2685aaaf79fa8d4511
4
+ data.tar.gz: 6fee889e4547385203fe90833fc959cab8fdf0cdf8bc084535ef7cba974a61cb
5
5
  SHA512:
6
- metadata.gz: dcf908b718977550d8d681aec12effc122ea0fee149397e3a3d686758957c47081088bbb41b1027e953d2a02e9dcb8b4bcc549ae1895e7e227624ee79bad2d91
7
- data.tar.gz: 5ace79e7fb062fafdcf654b337be2ae62d5b658d0ad01ae2d102f4e2c150aea289866c23daa147236ebdac5d8febf2d6b4586dd8f15adc009b7fe4915a8950d9
6
+ metadata.gz: 4a9d6a69228c7d7d3d1a05e9a2706d4e8692158345a603d32251ce283a7af0d2bbfd453a539ae0056edab0aa51dcbab0cf282dde939a77d00ec502211e3875b4
7
+ data.tar.gz: bd0c992649f399d3bdd95572859eb5a6c04d1805056d46a62866887f946e2d1bc96766a36398b58402c549b85aef3adb1cadf7cdef9b24d7d10c25b24566d180
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pello
4
+ module Actions
5
+ class AddPomodoriToCard
6
+ attr_reader :prompt
7
+
8
+ def initialize(prompt)
9
+ @prompt = prompt
10
+ end
11
+
12
+ def run(user, board_url, list_name)
13
+ board = Pello::Inputs.choose_board user, board_url
14
+ return unless board
15
+
16
+ puts board.as_table
17
+ continue = true
18
+ while continue
19
+ list = Pello::Inputs.choose_list board, list_name
20
+ return unless list
21
+
22
+ card = Pello::Inputs.choose_card list
23
+ next unless card
24
+
25
+ pomodori_before = card.extract_pomodori
26
+ pomodori_to_add = prompt.ask('Pomodori', default: 1)
27
+
28
+ new_name = name_with_added_pomodori(card, pomodori_to_add.to_i)
29
+
30
+ puts "Updating card #{card.name}"
31
+ puts "New title: #{new_name}"
32
+
33
+ if prompt.yes?('Confirm?')
34
+ card.name = new_name
35
+ card.save
36
+ card.log "[#{Time.now}] #{card.extract_name} (#{pomodori_before} -> #{card.extract_pomodori})", user
37
+ puts('Done!')
38
+ else
39
+ puts 'Ok, bye!'
40
+ nil
41
+ end
42
+
43
+ continue = prompt.yes?('Another one?')
44
+ end
45
+ end
46
+
47
+ private
48
+
49
+ def name_with_added_pomodori(card, pomodori_to_add)
50
+ current_pomodori = card.extract_pomodori
51
+ current_points = card.extract_points
52
+ current_name = card.extract_name
53
+
54
+ result = []
55
+ result << "(#{current_points})" unless current_points.zero?
56
+ result << "#{current_pomodori + pomodori_to_add} 🍅"
57
+ result << current_name
58
+ result.join(' ')
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pello
4
+ module Actions
5
+ class MoveCard
6
+ attr_reader :prompt
7
+
8
+ def initialize(prompt)
9
+ @prompt = prompt
10
+ end
11
+
12
+ def run(user, board_url, list_name)
13
+ board = Pello::Inputs.choose_board user, board_url
14
+ return unless board
15
+
16
+ puts board.as_table
17
+ continue = true
18
+ while continue
19
+ source_list = Pello::Inputs.choose_list board, list_name, 'Choose source list'
20
+ return unless source_list
21
+
22
+ card = Pello::Inputs.choose_card source_list
23
+ next unless card
24
+
25
+ target_list = Pello::Inputs.choose_list board, list_name, 'Choose target list'
26
+ return unless target_list && target_list != source_list
27
+
28
+ puts "Moving card #{card.name} from \"#{source_list.name}\" to \"#{target_list.name}\""
29
+
30
+ if prompt.yes?('Confirm?')
31
+ card.list_id = target_list.id
32
+ card.save
33
+ card.log "[#{Time.now}] #{card.extract_name} (#{source_list.name} -> #{target_list.name})", user
34
+ puts('Done!')
35
+ else
36
+ puts 'Ok, bye!'
37
+ nil
38
+ end
39
+
40
+ continue = prompt.yes?('Another one?')
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
data/lib/pello/card.rb CHANGED
@@ -5,43 +5,32 @@ module Pello
5
5
  class Card
6
6
  extend Forwardable
7
7
 
8
- TITLE_REGEX = /(\(([0-9.]*)\))*\s*([0-9.]*)\s*🍅*\s*(.*)/.freeze
8
+ NAME_REGEX = /(\(([0-9.]*)\))*\s*([0-9.]*)\s*🍅*\s*(.*)/.freeze
9
9
  attr_accessor :trello_card
10
- def_delegators :@trello_card, :name, :name=, :comments, :add_comment, :save, :id
10
+ def_delegators :@trello_card, :name, :name=, :comments, :add_comment, :save, :id, :list_id, :list_id=
11
11
 
12
12
  def initialize(trello_card)
13
13
  @trello_card = trello_card
14
14
  end
15
15
 
16
16
  def extract_pomodori
17
- pomos = name.match(TITLE_REGEX)[3]
17
+ pomos = name.match(NAME_REGEX)[3]
18
18
  pomos ||= 0
19
19
  pomos.to_i
20
20
  end
21
21
 
22
- def extract_title
23
- name.match(TITLE_REGEX)[-1]
22
+ def extract_name
23
+ name.match(NAME_REGEX)[-1]
24
24
  end
25
25
 
26
26
  def extract_points
27
- points = name.match(TITLE_REGEX)[2]
27
+ points = name.match(NAME_REGEX)[2]
28
28
  points ||= 0
29
29
  points.to_f
30
30
  end
31
31
 
32
- def title_with_added_pomodori(how_many = 1)
33
- current_pomodori = extract_pomodori
34
- current_points = extract_points
35
- current_title = extract_title
36
- result = []
37
- result << "(#{current_points})" unless current_points.zero?
38
- result << "#{current_pomodori + how_many} 🍅"
39
- result << current_title
40
- result.join(' ')
41
- end
42
-
43
- def log(event)
44
- comment = comments.select { |c| c.data['text'] =~ /PELLO LOG/ }.first
32
+ def log(event, user)
33
+ comment = comments.select { |c| c.creator_id == user.id && c.data['text'] =~ /PELLO LOG/ }.first
45
34
  if comment
46
35
  new_text = [comment.data['text'], event].join("\n")
47
36
  comment.delete
data/lib/pello/config.rb CHANGED
@@ -1,25 +1,31 @@
1
1
  module Pello
2
2
  class Config
3
3
  CONFIG_FILE_PATH = "#{ENV['HOME']}/.config/pello/pello.yaml".freeze
4
- attr_accessor :board_url, :developer_public_key, :list_name, :log_file, :member_token, :username
4
+ attr_accessor :board_url, :developer_public_key, :list_name, :member_token, :username, :error
5
5
 
6
6
  def initialize
7
- return nil unless File.exist?(CONFIG_FILE_PATH)
7
+ if File.exist?(CONFIG_FILE_PATH)
8
+ config = YAML.safe_load File.open(CONFIG_FILE_PATH).read
8
9
 
9
- config = YAML.safe_load File.open(CONFIG_FILE_PATH).read
10
+ auth_config = config['auth']
11
+ @developer_public_key = auth_config['developer_public_key']
12
+ @member_token = auth_config['member_token']
10
13
 
11
- auth_config = config['auth']
12
- @developer_public_key = auth_config['developer_public_key']
13
- @member_token = auth_config['member_token']
14
-
15
- pello_config = config['config']
16
- @username = pello_config['username']
17
- @board_url = pello_config['board_url']
18
- @list_name = pello_config['list_name']
19
- @log_file = pello_config['log_file']
14
+ pello_config = config['config']
15
+ @username = pello_config['username']
16
+ @board_url = pello_config['board_url']
17
+ @list_name = pello_config['list_name']
18
+ @error = false
19
+ else
20
+ @error = true
21
+ end
20
22
  rescue => e
23
+ @error = true
21
24
  puts "Error loading config: #{e.message}"
22
- nil
25
+ end
26
+
27
+ def valid?
28
+ !error
23
29
  end
24
30
 
25
31
  def self.write_empty_config
@@ -32,7 +38,6 @@ module Pello
32
38
  file.puts ' board_url: ""'
33
39
  file.puts ' username: ""'
34
40
  file.puts ' list_name: "In progress"'
35
- file.puts ' log_file: "/Users/your_name/.pello_log"'
36
41
  end
37
42
  end
38
43
  end
data/lib/pello/inputs.rb CHANGED
@@ -15,12 +15,12 @@ module Pello
15
15
  Pello::Board.new(user.boards.detect { |b| b.name == input })
16
16
  end
17
17
 
18
- def self.choose_list(board, list_name)
18
+ def self.choose_list(board, list_name, prompt_text = 'Choose list')
19
19
  prompt = TTY::Prompt.new
20
20
  list_names = board.lists.map(&:name)
21
21
  list_names << BACK_OPTION
22
22
  default_list = board.lists.select { |l| l.name == list_name }.first.try(:name)
23
- input = prompt.select('Choose list', list_names, per_page: 15, default: default_list)
23
+ input = prompt.select(prompt_text, list_names, per_page: 15, default: default_list)
24
24
  return nil if input == BACK_OPTION
25
25
 
26
26
  Pello::List.new(board.lists.detect { |l| l.name == input })
data/lib/pello/list.rb CHANGED
@@ -4,7 +4,7 @@ module Pello
4
4
  class List
5
5
  extend Forwardable
6
6
  attr_accessor :trello_list
7
- def_delegators :@trello_list, :cards
7
+ def_delegators :@trello_list, :cards, :name, :id
8
8
 
9
9
  def initialize(trello_list)
10
10
  @trello_list = trello_list
data/lib/pello/runner.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
  require 'trello'
3
5
  require 'tty-prompt'
@@ -21,14 +23,18 @@ module Pello
21
23
  while continue
22
24
  case prompt.select('Choose task') do |menu|
23
25
  menu.choice name: 'Add pomodori', value: :add_pomodori
26
+ menu.choice name: 'Move card', value: :move_card
24
27
  menu.choice name: 'Edit config', value: :edit_config
25
28
  menu.choice name: 'quit', value: :quit
26
29
  end
27
30
  when :add_pomodori
28
31
  add_pomodori_to_card
32
+ when :move_card
33
+ move_card
29
34
  when :edit_config
35
+ editor = ENV['EDITOR'] || 'vim'
30
36
  system 'mkdir -p ~/.config/pello'
31
- system "#{ENV['EDITOR']} ~/.config/pello/pello.yaml"
37
+ system "#{editor} ~/.config/pello/pello.yaml"
32
38
  when :quit
33
39
  puts 'Ok, bye!'
34
40
  exit
@@ -38,49 +44,17 @@ module Pello
38
44
 
39
45
  private
40
46
 
41
- def file_log(text)
42
- File.open(@log_file_path, 'a+') do |file|
43
- file.puts(text)
44
- end
45
- end
46
-
47
47
  def add_pomodori_to_card
48
- board = Pello::Inputs.choose_board @user, @board_url
49
- return unless board
50
-
51
- puts board.as_table
52
- continue = true
53
- while continue
54
- list = Pello::Inputs.choose_list board, @list_name
55
- return unless list
56
-
57
- card = Pello::Inputs.choose_card list
58
- next unless card
59
-
60
- pomodori_before = card.extract_pomodori
61
- pomodori_to_add = prompt.ask('Pomodori', default: 1)
62
-
63
- puts "Updating card #{card.name}"
64
- puts "New title: #{card.title_with_added_pomodori(pomodori_to_add.to_i)}"
65
-
66
- if prompt.yes?('Confirm?')
67
- card.name = card.title_with_added_pomodori(pomodori_to_add.to_i)
68
- card.save
69
- file_log "[#{Time.now} - #{@user.full_name}] #{card.extract_title} (#{pomodori_before} -> #{card.extract_pomodori})"
70
- card.log "[#{Time.now} - #{@user.full_name}] #{card.extract_title} (#{pomodori_before} -> #{card.extract_pomodori})"
71
- puts('Done!')
72
- else
73
- puts 'Ok, bye!'
74
- nil
75
- end
48
+ Pello::Actions::AddPomodoriToCard.new(prompt).run(@user, board_url, list_name)
49
+ end
76
50
 
77
- continue = prompt.yes?('Another one?')
78
- end
51
+ def move_card
52
+ Pello::Actions::MoveCard.new(prompt).run(@user, board_url, list_name)
79
53
  end
80
54
 
81
55
  def configure_pello
82
56
  config = Pello::Config.new
83
- if config
57
+ if config.valid?
84
58
  Trello.configure do |trello_config|
85
59
  trello_config.developer_public_key = config.developer_public_key
86
60
  trello_config.member_token = config.member_token
@@ -89,7 +63,6 @@ module Pello
89
63
  @user = Trello::Member.find config.username
90
64
  @board_url = config.board_url
91
65
  @list_name = config.list_name
92
- @log_file_path = config.log_file
93
66
  else
94
67
  puts 'No config found, opening config file...'
95
68
  Pello::Config.write_empty_config
data/lib/pello/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pello
2
- VERSION = "0.1.0"
2
+ VERSION = "0.3"
3
3
  end
data/lib/pello.rb CHANGED
@@ -4,6 +4,8 @@ require 'pello/inputs'
4
4
  require 'pello/board'
5
5
  require 'pello/list'
6
6
  require 'pello/card'
7
+ require 'pello/actions/add_pomodori_to_card'
8
+ require 'pello/actions/move_card'
7
9
  require 'pello/config'
8
10
 
9
11
  module Pello
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pello
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: '0.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrea Schiavini
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-20 00:00:00.000000000 Z
11
+ date: 2022-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-trello
@@ -52,7 +52,8 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- description: Perform Trello operations like adding pomodori to a card title
55
+ description: Perform Trello operations like adding pomodori to a card name and moving
56
+ cards across lists
56
57
  email:
57
58
  - metalelf0@gmail.com
58
59
  executables:
@@ -62,6 +63,8 @@ extra_rdoc_files: []
62
63
  files:
63
64
  - bin/pello
64
65
  - lib/pello.rb
66
+ - lib/pello/actions/add_pomodori_to_card.rb
67
+ - lib/pello/actions/move_card.rb
65
68
  - lib/pello/board.rb
66
69
  - lib/pello/card.rb
67
70
  - lib/pello/config.rb