tasks_cli 0.1.1 → 0.1.2

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
  SHA256:
3
- metadata.gz: 1b2feeb892f58ae854a0761cd6e5c0faff6b794815628921c151b90fbc343f1a
4
- data.tar.gz: 0da27041da8f50808ac78f46f2bf5ddfe9557bda9defd57802120ad5da268c5a
3
+ metadata.gz: 65c56bae0c638f891b0b2d8893cbedefbeb8a3f9a2ca695eb16d9331f2c4f5af
4
+ data.tar.gz: d22a346ea8346f234e6849ef23073ad41ab671dc6652fb7b5fbba8c462e0e75e
5
5
  SHA512:
6
- metadata.gz: f8f1127576598a441dc39de0775f84f9d716bf48d5278af9d7759c9881511495b40d737d562d6c196aa047a8b6ba6217a5a9e064f558df9bae3dc23612eeacc2
7
- data.tar.gz: 12493dcc828745b56a824a536c6bf9094ba6b3ed0e0636bbe3740c6d6e1393389a1893a8981c4ecfcaca675f4413d4cd9f117c820d6b4be3810377f347ba23d1
6
+ metadata.gz: ea2f7bb708341e7aa16a16be841036a937a0f3a7b3bc189379b1f3157d7a6c2da921bea6861b79a9063669702b1cd44f5300045cc86ec22bdca2a6baeb6aa478
7
+ data.tar.gz: e89f423a18348ecf83cefbd0e46c66eda9c64004b23f198aced45e3e7eb5ccb561c662901641edbb4b61eef66ef65f73c6f6ddeffcf567b2f3a1b75e84e2a772
data/Gemfile CHANGED
@@ -1,7 +1,9 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in tasks_cli.gemspec
4
6
  gemspec
5
7
 
6
- gem "rake", "~> 12.0"
7
- gem "rspec", "~> 3.0"
8
+ gem 'rake', '~> 12.0'
9
+ gem 'rspec', '~> 3.0'
data/Gemfile.lock ADDED
@@ -0,0 +1,61 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ tasks_cli (0.1.1)
5
+ csv (~> 3.0)
6
+ logger (~> 1.5)
7
+ ostruct (~> 0.3.0)
8
+ rainbow (~> 3.0)
9
+ thor (~> 1.0)
10
+ tty-table (~> 0.12.0)
11
+
12
+ GEM
13
+ remote: https://rubygems.org/
14
+ specs:
15
+ csv (3.2.8)
16
+ diff-lcs (1.5.1)
17
+ logger (1.6.1)
18
+ ostruct (0.3.3)
19
+ pastel (0.8.0)
20
+ tty-color (~> 0.5)
21
+ rainbow (3.1.1)
22
+ rake (12.3.3)
23
+ rspec (3.13.0)
24
+ rspec-core (~> 3.13.0)
25
+ rspec-expectations (~> 3.13.0)
26
+ rspec-mocks (~> 3.13.0)
27
+ rspec-core (3.13.1)
28
+ rspec-support (~> 3.13.0)
29
+ rspec-expectations (3.13.3)
30
+ diff-lcs (>= 1.2.0, < 2.0)
31
+ rspec-support (~> 3.13.0)
32
+ rspec-mocks (3.13.1)
33
+ diff-lcs (>= 1.2.0, < 2.0)
34
+ rspec-support (~> 3.13.0)
35
+ rspec-support (3.13.1)
36
+ strings (0.2.1)
37
+ strings-ansi (~> 0.2)
38
+ unicode-display_width (>= 1.5, < 3.0)
39
+ unicode_utils (~> 1.4)
40
+ strings-ansi (0.2.0)
41
+ thor (1.3.2)
42
+ tty-color (0.6.0)
43
+ tty-screen (0.8.2)
44
+ tty-table (0.12.0)
45
+ pastel (~> 0.8)
46
+ strings (~> 0.2.0)
47
+ tty-screen (~> 0.8)
48
+ unicode-display_width (2.6.0)
49
+ unicode_utils (1.4.0)
50
+
51
+ PLATFORMS
52
+ arm64-darwin-23
53
+ ruby
54
+
55
+ DEPENDENCIES
56
+ rake (~> 12.0)
57
+ rspec (~> 3.0)
58
+ tasks_cli!
59
+
60
+ BUNDLED WITH
61
+ 2.5.16
data/bin/tasks CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "tasks_cli"
4
+ require 'bundler/setup'
5
+ require 'tasks_cli'
5
6
 
6
- TasksCLI::CLI.start(ARGV)
7
+ TasksCLI::CLI.start(ARGV)
data/lib/tasks_cli/cli.rb CHANGED
@@ -1,15 +1,18 @@
1
- require "thor"
2
- require "rainbow"
1
+ # frozen_string_literal: true
2
+
3
+ require 'thor'
4
+ require 'rainbow'
5
+ require 'tty-table'
3
6
 
4
7
  module TasksCLI
5
8
  class CLI < Thor
6
- desc "list", "List all tasks"
9
+ desc 'list', 'List all tasks'
7
10
  def list
8
11
  manager = TaskManager.new
9
12
  print_tasks(manager.all_tasks)
10
13
  end
11
14
 
12
- desc "filter FIELD:VALUE", "Filter tasks by field and value"
15
+ desc 'filter FIELD:VALUE', 'Filter tasks by field and value'
13
16
  def filter(filter_string)
14
17
  manager = TaskManager.new
15
18
  key, value = filter_string.split(':')
@@ -17,18 +20,18 @@ module TasksCLI
17
20
  print_tasks(filtered_tasks)
18
21
  end
19
22
 
20
- desc "view NUMBER", "View details of a specific task"
23
+ desc 'view NUMBER', 'View details of a specific task'
21
24
  def view(number)
22
25
  manager = TaskManager.new
23
26
  task = manager.find_task(number)
24
27
  if task
25
28
  puts task.detailed_view
26
29
  else
27
- puts Rainbow("Task not found").red
30
+ puts Rainbow('Task not found').red
28
31
  end
29
32
  end
30
33
 
31
- desc "update NUMBER STATUS", "Update the status of a task"
34
+ desc 'update NUMBER STATUS', 'Update the status of a task'
32
35
  def update(number, status)
33
36
  manager = TaskManager.new
34
37
  manager.update_status(number, status)
@@ -38,21 +41,26 @@ module TasksCLI
38
41
 
39
42
  def print_tasks(tasks)
40
43
  if tasks.empty?
41
- puts Rainbow("No tasks found.").yellow
44
+ puts Rainbow('No tasks found.').yellow
42
45
  return
43
46
  end
44
47
 
45
- puts Rainbow("\n%-10s %-30s %-15s %-10s %-25s" % ["Number", "Name", "Status", "Priority", "Last Updated"]).underline
46
- tasks.each do |task|
47
- puts "%-10s %-30s %-15s %-10s %-25s" % [
48
+ header = ['Number', 'Epic', 'Name', 'Status', 'Priority', 'Last Updated']
49
+ rows = tasks.map do |task|
50
+ [
48
51
  Rainbow(task.number).cyan,
49
- Rainbow(task.name.to_s.truncate(30)).magenta,
50
- task.status_colored,
52
+ Rainbow(task.epic).yellow,
53
+ Rainbow(task.name).magenta,
54
+ task.status_color,
51
55
  task.priority_colored,
52
- Rainbow(task.updated_at).blue
56
+ Rainbow(task.updated_at.to_s).blue
53
57
  ]
54
58
  end
59
+
60
+ table = TTY::Table.new(header: header, rows: rows)
61
+ puts table.render(:unicode, padding: [0, 1], alignment: [:left])
62
+
55
63
  puts "\nTotal tasks: #{Rainbow(tasks.count).green}"
56
64
  end
57
65
  end
58
- end
66
+ end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rainbow'
2
4
 
3
5
  module TasksCLI
4
6
  class Task
5
7
  attr_reader :epic, :number, :name, :description, :priority, :status, :relates_to, :blocked_by, :updated_at
6
-
8
+
7
9
  def initialize(row)
8
10
  @epic = extract_value(row[0])
9
11
  @number = extract_value(row[1])
@@ -17,25 +19,27 @@ module TasksCLI
17
19
  end
18
20
 
19
21
  def extract_value(field)
22
+ return '' if field.nil?
20
23
  return field if field.is_a?(String)
24
+
21
25
  field.is_a?(Array) ? field[1].to_s.strip : field.to_s.strip
22
26
  end
23
27
 
24
28
  def to_s
25
- "#{Rainbow(@number).cyan}: #{Rainbow(@name).bright} (#{status_colored}) - Priority: #{priority_colored} - Updated: #{@updated_at}"
29
+ "#{Rainbow(@number).cyan}: #{Rainbow(@name).bright} (#{status_color}) - Priority: #{priority_colored} - Updated: #{@updated_at}"
26
30
  end
27
31
 
28
32
  def detailed_view
29
33
  <<~TASK
30
- #{Rainbow("Epic:").bright} #{@epic}
31
- #{Rainbow("Number:").bright} #{Rainbow(@number).cyan}
32
- #{Rainbow("Name:").bright} #{Rainbow(@name).bright}
33
- #{Rainbow("Description:").bright} #{@description}
34
- #{Rainbow("Priority:").bright} #{priority_colored}
35
- #{Rainbow("Status:").bright} #{status_colored}
36
- #{Rainbow("Relates To:").bright} #{@relates_to}
37
- #{Rainbow("Blocked By:").bright} #{@blocked_by}
38
- #{Rainbow("Last Updated:").bright} #{@updated_at}
34
+ #{Rainbow('Epic:').bright} #{@epic}
35
+ #{Rainbow('Number:').bright} #{Rainbow(@number).cyan}
36
+ #{Rainbow('Name:').bright} #{Rainbow(@name).bright}
37
+ #{Rainbow('Description:').bright} #{@description}
38
+ #{Rainbow('Priority:').bright} #{priority_colored}
39
+ #{Rainbow('Status:').bright} #{status_color}
40
+ #{Rainbow('Relates To:').bright} #{@relates_to}
41
+ #{Rainbow('Blocked By:').bright} #{@blocked_by}
42
+ #{Rainbow('Last Updated:').bright} #{@updated_at}
39
43
  TASK
40
44
  end
41
45
 
@@ -53,7 +57,7 @@ module TasksCLI
53
57
  @updated_at = Time.now.iso8601
54
58
  end
55
59
 
56
- def status_colored
60
+ def status_color
57
61
  case @status.downcase
58
62
  when 'to do' then Rainbow(@status).red
59
63
  when 'in progress' then Rainbow(@status).yellow
@@ -71,4 +75,4 @@ module TasksCLI
71
75
  end
72
76
  end
73
77
  end
74
- end
78
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'csv'
2
4
  require 'json'
3
5
  require 'rainbow'
@@ -12,11 +14,13 @@ module TasksCLI
12
14
  def load_tasks
13
15
  @tasks = []
14
16
  CSV.foreach(@file_path, headers: false) do |row|
15
- next if row == ["Epic Name", "Ticket Number", "Ticket Name", "Ticket Description", "Priority", "Status", "Relates To", "Blocked By"]
17
+ next if row == ['Epic Name', 'Ticket Number', 'Ticket Name', 'Ticket Description', 'Priority', 'Status',
18
+ 'Relates To', 'Blocked By']
19
+
16
20
  begin
17
21
  parsed_row = row.map { |field| parse_field(field) }
18
22
  @tasks << Task.new(parsed_row)
19
- rescue => e
23
+ rescue StandardError => e
20
24
  puts "Error processing row: #{row.inspect}"
21
25
  puts "Error message: #{e.message}"
22
26
  end
@@ -24,13 +28,14 @@ module TasksCLI
24
28
  rescue CSV::MalformedCSVError => e
25
29
  puts Rainbow("Error reading CSV: #{e.message}. Trying to parse with alternative method...").red
26
30
  parse_csv_manually
27
- rescue => e
31
+ rescue StandardError => e
28
32
  puts Rainbow("Unexpected error while loading tasks: #{e.message}").red
29
33
  puts e.backtrace
30
34
  end
31
35
 
32
36
  def parse_field(field)
33
- return field unless field.start_with?('[') && field.end_with?(']')
37
+ return field if field.nil? || !(field.start_with?('[') && field.end_with?(']'))
38
+
34
39
  parsed = JSON.parse(field.gsub('=>', ':'))
35
40
  [parsed[0], parsed[1]]
36
41
  rescue JSON::ParserError
@@ -40,11 +45,11 @@ module TasksCLI
40
45
  def parse_csv_manually
41
46
  @tasks = []
42
47
  lines = File.readlines(@file_path)
43
- lines[1..-1].each do |line|
48
+ lines[1..].each do |line|
44
49
  fields = line.strip.split(',')
45
50
  parsed_fields = fields.map { |field| parse_field(field) }
46
51
  @tasks << Task.new(parsed_fields)
47
- rescue => e
52
+ rescue StandardError => e
48
53
  puts "Error processing line: #{line}"
49
54
  puts "Error message: #{e.message}"
50
55
  end
@@ -54,7 +59,7 @@ module TasksCLI
54
59
  lines = File.readlines(@file_path)
55
60
  File.open(@file_path, 'w') do |file|
56
61
  file.puts lines[0].chomp # Write header as is
57
- lines[1..-1].each do |line|
62
+ lines[1..].each do |line|
58
63
  fields = line.strip.split(',').map { |f| parse_field(f) }
59
64
  if fields[1][1] == task_number
60
65
  task = find_task(task_number)
@@ -68,7 +73,7 @@ module TasksCLI
68
73
  end
69
74
 
70
75
  def all_tasks
71
- @tasks
76
+ @tasks[1..]
72
77
  end
73
78
 
74
79
  def filter_tasks(criteria)
@@ -93,8 +98,8 @@ module TasksCLI
93
98
  puts Rainbow("Last updated: #{TasksCLI.format_date(task.updated_at)}").cyan
94
99
  else
95
100
  TasksCLI.logger.warn("Task not found: #{number}")
96
- puts Rainbow("Task not found").red
101
+ puts Rainbow('Task not found').red
97
102
  end
98
103
  end
99
104
  end
100
- end
105
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module TasksCLI
2
- VERSION = "0.1.1"
3
- end
4
+ VERSION = '0.1.2'
5
+ end
data/lib/tasks_cli.rb CHANGED
@@ -1,8 +1,10 @@
1
- require "tasks_cli/version"
2
- require "tasks_cli/cli"
3
- require "tasks_cli/task"
4
- require "tasks_cli/task_manager"
5
- require "logger"
1
+ # frozen_string_literal: true
2
+
3
+ require 'tasks_cli/version'
4
+ require 'tasks_cli/cli'
5
+ require 'tasks_cli/task'
6
+ require 'tasks_cli/task_manager'
7
+ require 'logger'
6
8
 
7
9
  module TasksCLI
8
10
  class Error < StandardError; end
@@ -37,9 +39,8 @@ module TasksCLI
37
39
 
38
40
  # Logging
39
41
  def self.logger
40
- @logger ||= Logger.new(STDOUT).tap do |log|
42
+ @logger ||= Logger.new($stdout).tap do |log|
41
43
  log.progname = 'TasksCLI'
42
44
  end
43
45
  end
44
46
  end
45
- ```
data/tasks CHANGED
@@ -23,13 +23,24 @@ class Task
23
23
  @updated_at = extract_value(row[8]) || Time.now.iso8601
24
24
  end
25
25
 
26
+ def status_color
27
+ case @status.downcase
28
+ when 'to do' then :red
29
+ when 'in progress' then :yellow
30
+ when 'done' then :green
31
+ else :white
32
+ end
33
+ end
34
+
35
+
36
+
26
37
  def extract_value(field)
27
38
  return field if field.is_a?(String)
28
39
  field.is_a?(Array) ? field[1].to_s.strip : field.to_s.strip
29
40
  end
30
41
 
31
42
  def to_s
32
- "#{Rainbow(@number).cyan}: #{Rainbow(@name).bright} (#{status_colored}) - Priority: #{priority_colored} - Updated: #{@updated_at}"
43
+ "#{Rainbow(@number).cyan}: #{Rainbow(@name).bright} (#{status_color}) - Priority: #{priority_colored} - Updated: #{@updated_at}"
33
44
  end
34
45
 
35
46
  def detailed_view
@@ -39,7 +50,7 @@ class Task
39
50
  #{Rainbow("Name:").bright} #{Rainbow(@name).bright}
40
51
  #{Rainbow("Description:").bright} #{@description}
41
52
  #{Rainbow("Priority:").bright} #{priority_colored}
42
- #{Rainbow("Status:").bright} #{status_colored}
53
+ #{Rainbow("Status:").bright} #{status_color}
43
54
  #{Rainbow("Relates To:").bright} #{@relates_to}
44
55
  #{Rainbow("Blocked By:").bright} #{@blocked_by}
45
56
  #{Rainbow("Last Updated:").bright} #{@updated_at}
@@ -60,7 +71,7 @@ class Task
60
71
  @updated_at = Time.now.iso8601
61
72
  end
62
73
 
63
- def status_colored
74
+ def status_color
64
75
  case @status.downcase
65
76
  when 'to do' then Rainbow(@status).red
66
77
  when 'in progress' then Rainbow(@status).yellow
@@ -88,7 +99,7 @@ class TaskManager
88
99
  def load_tasks
89
100
  @tasks = []
90
101
  CSV.foreach(@file_path, headers: false) do |row|
91
- next if row == ["Epic Name", "Ticket Number", "Ticket Name", "Ticket Description", "Priority", "Status", "Relates To", "Blocked By"]
102
+ next if row == ["Epic Name", "Ticket Number", "Ticket Name", "Ticket Description", "Priority", "Status", "Relates To", "Blocked By", "Updated At"]
92
103
  begin
93
104
  parsed_row = row.map do |field|
94
105
  parse_field(field)
@@ -108,7 +119,7 @@ class TaskManager
108
119
  end
109
120
 
110
121
  def parse_field(field)
111
- return field unless field.start_with?('[') && field.end_with?(']')
122
+ return field if field.nil? || !(field.start_with?('[') && field.end_with?(']'))
112
123
  parsed = JSON.parse(field.gsub('=>', ':'))
113
124
  [parsed[0], parsed[1]]
114
125
  rescue JSON::ParserError
@@ -185,7 +196,7 @@ def print_tasks(tasks)
185
196
  puts "%-10s %-30s %-15s %-10s %-25s" % [
186
197
  Rainbow(task.number).cyan,
187
198
  Rainbow(task.name.to_s.truncate(30)).magenta,
188
- task.status_colored,
199
+ task.status_color,
189
200
  task.priority_colored,
190
201
  Rainbow(task.updated_at).blue
191
202
  ]
data/tasks_cli.gemspec CHANGED
@@ -1,35 +1,41 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'lib/tasks_cli/version'
2
4
 
3
5
  Gem::Specification.new do |spec|
4
- spec.name = "tasks_cli"
6
+ spec.name = 'tasks_cli'
5
7
  spec.version = TasksCLI::VERSION
6
- spec.authors = ["adilw3nomad"]
7
- spec.email = ["adil@w3nomad.com"]
8
+ spec.authors = ['adilw3nomad']
9
+ spec.email = ['adil@w3nomad.com']
8
10
 
9
- spec.summary = %q{A simple CLI for managing tasks}
10
- spec.description = %q{A command-line interface for managing tasks stored in a CSV file}
11
- spec.homepage = "https://github.com/adilw3nomad/tasks_cli"
12
- spec.license = "MIT"
13
- spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
11
+ spec.summary = 'A simple CLI for managing tasks'
12
+ spec.description = 'A command-line interface for managing tasks stored in a CSV file'
13
+ spec.homepage = 'https://github.com/adilw3nomad/tasks_cli'
14
+ spec.license = 'MIT'
15
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
14
16
 
15
- spec.metadata["homepage_uri"] = spec.homepage
16
- spec.metadata["source_code_uri"] = "https://github.com/adilw3nomad/tasks_cli"
17
- spec.metadata["changelog_uri"] = "https://github.com/adilw3nomad/tasks_cli/blob/master/CHANGELOG.md"
17
+ spec.metadata['homepage_uri'] = spec.homepage
18
+ spec.metadata['source_code_uri'] = 'https://github.com/adilw3nomad/tasks_cli'
19
+ spec.metadata['changelog_uri'] = 'https://github.com/adilw3nomad/tasks_cli/blob/master/CHANGELOG.md'
18
20
 
19
21
  # Specify which files should be added to the gem when it is released.
20
22
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
21
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
23
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
22
24
  `git ls-files -z`.split("\x0").reject do |f|
23
25
  f.match(%r{^(test|spec|features)/}) ||
24
- f.match(/^tasks_cli-.*\.gem$/) ||
25
- f.match(/^\.git/) ||
26
- f.match(/^\.github/)
26
+ f.match(/^tasks_cli-.*\.gem$/) ||
27
+ f.match(/^\.git/) ||
28
+ f.match(/^\.github/)
27
29
  end
28
30
  end
29
- spec.bindir = "exe"
30
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
- spec.require_paths = ["lib"]
31
+ spec.bindir = 'bin'
32
+ spec.executables = ['tasks']
33
+ spec.require_paths = ['lib']
32
34
 
33
- spec.add_dependency "thor", "~> 1.0"
34
- spec.add_dependency "rainbow", "~> 3.0"
35
- end
35
+ spec.add_dependency 'csv', '~> 3.0'
36
+ spec.add_dependency 'logger', '~> 1.5'
37
+ spec.add_dependency 'ostruct', '~> 0.3.0'
38
+ spec.add_dependency 'rainbow', '~> 3.0'
39
+ spec.add_dependency 'thor', '~> 1.0'
40
+ spec.add_dependency 'tty-table', '~> 0.12.0'
41
+ end
metadata CHANGED
@@ -1,29 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tasks_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - adilw3nomad
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2024-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: thor
14
+ name: csv
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
19
+ version: '3.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.0'
26
+ version: '3.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: logger
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.5'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: ostruct
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.3.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.3.0
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: rainbow
29
57
  requirement: !ruby/object:Gem::Requirement
@@ -38,14 +66,44 @@ dependencies:
38
66
  - - "~>"
39
67
  - !ruby/object:Gem::Version
40
68
  version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: thor
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: tty-table
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.12.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.12.0
41
97
  description: A command-line interface for managing tasks stored in a CSV file
42
98
  email:
43
99
  - adil@w3nomad.com
44
- executables: []
100
+ executables:
101
+ - tasks
45
102
  extensions: []
46
103
  extra_rdoc_files: []
47
104
  files:
48
105
  - Gemfile
106
+ - Gemfile.lock
49
107
  - bin/tasks
50
108
  - lib/tasks_cli.rb
51
109
  - lib/tasks_cli/cli.rb