tms_task_manager 0.1.6
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 +7 -0
- data/exe/tms_task_manager +6 -0
- data/lib/tms_task_manager/clis/cli.rb +51 -0
- data/lib/tms_task_manager/configs/database.rb +47 -0
- data/lib/tms_task_manager/helpers/error_handler.rb +14 -0
- data/lib/tms_task_manager/remind.db +0 -0
- data/lib/tms_task_manager/services/task.rb +31 -0
- data/lib/tms_task_manager/services/task_list.rb +71 -0
- data/lib/tms_task_manager/version.rb +5 -0
- data/lib/tms_task_manager.rb +8 -0
- metadata +117 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d3cffdf825e26fcd2ddce9180406d2211e205fd970f17343692834eb898a6006
|
4
|
+
data.tar.gz: 24e254a468850bbd98f79ac7b9e1c69edafca4c770f79801febe142bc40edf1f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5c38e2617ed9bf23bd706eddfa48f7a07b0e28579bce719b6be10d16c0716163090be5efa3478a5a164ae77bb2a6c76156f275d3bfac1c1056c637d68d6849d8
|
7
|
+
data.tar.gz: a4fa0c88505d86224836115556592907ded0469bb3733b9e183d55a7a0ad95620c224106f7764cbdc92b6638bfe1f4c70fe59d54fea750eed12d46e187b0bb05
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'thor'
|
4
|
+
require 'pry'
|
5
|
+
require_relative '../configs/database'
|
6
|
+
require_relative '../services/task'
|
7
|
+
require_relative '../services/task_list'
|
8
|
+
module TmsTaskManager
|
9
|
+
module Cli
|
10
|
+
class Command < Thor
|
11
|
+
desc "create task --desc 'Mô tả' --start 'YYYY-MM-DD' --end 'YYYY-MM-DD' --status 'pending'", 'Thêm task'
|
12
|
+
option :desc, required: true, type: :string
|
13
|
+
option :start, required: true, type: :string
|
14
|
+
option :end, required: true, type: :string
|
15
|
+
option :status, required: false, type: :string, default: 'pending'
|
16
|
+
|
17
|
+
def create(title)
|
18
|
+
Configs::Database.setup
|
19
|
+
TmsTaskManager::Services::TaskList.create(
|
20
|
+
title, options[:desc], options[:start], options[:end], options[:status]
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
desc 'list', 'Danh sách task'
|
25
|
+
def list
|
26
|
+
TmsTaskManager::Services::TaskList.list
|
27
|
+
end
|
28
|
+
|
29
|
+
desc 'remove id', 'Xoa task'
|
30
|
+
def remove(id)
|
31
|
+
TmsTaskManager::Services::TaskList.remove(id)
|
32
|
+
end
|
33
|
+
|
34
|
+
desc "update id --status 'in_progress'", 'Cập nhật trạng thái task'
|
35
|
+
option :status, required: true, type: :string
|
36
|
+
def update(id)
|
37
|
+
TmsTaskManager::Services::Task.update_status(id, options[:status])
|
38
|
+
end
|
39
|
+
|
40
|
+
desc 'delete_all', 'Xóa tất cả task'
|
41
|
+
def delete_all
|
42
|
+
TmsTaskManager::Services::TaskList.delete_all
|
43
|
+
end
|
44
|
+
|
45
|
+
desc 'get id', 'Lấy task'
|
46
|
+
def get(id)
|
47
|
+
TmsTaskManager::Services::TaskList.get(id)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sqlite3'
|
4
|
+
|
5
|
+
module TmsTaskManager
|
6
|
+
module Configs
|
7
|
+
class Database
|
8
|
+
DB_PATH = File.expand_path('../remind.db', __dir__)
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def connection
|
12
|
+
@connection ||= SQLite3::Database.new(DB_PATH).tap do |db|
|
13
|
+
db.results_as_hash = true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def setup
|
18
|
+
connection.execute_batch <<-SQL
|
19
|
+
CREATE TABLE IF NOT EXISTS tasks (
|
20
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
21
|
+
title VARCHAR(255),
|
22
|
+
description TEXT,
|
23
|
+
start_date DATETIME,
|
24
|
+
end_date DATETIME,
|
25
|
+
status VARCHAR(20) CHECK( status IN ('pending', 'in_progress', 'completed') )
|
26
|
+
);
|
27
|
+
|
28
|
+
CREATE TABLE IF NOT EXISTS categories (
|
29
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
30
|
+
title VARCHAR(255),
|
31
|
+
description TEXT,
|
32
|
+
slug VARCHAR(255) UNIQUE
|
33
|
+
);
|
34
|
+
|
35
|
+
CREATE TABLE IF NOT EXISTS task_category (
|
36
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
37
|
+
task_id INTEGER,
|
38
|
+
category_id INTEGER,
|
39
|
+
FOREIGN KEY (task_id) REFERENCES tasks(id),
|
40
|
+
FOREIGN KEY (category_id) REFERENCES categories(id)
|
41
|
+
);
|
42
|
+
SQL
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
Binary file
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../configs/database'
|
4
|
+
require_relative '../helpers/error_handler'
|
5
|
+
|
6
|
+
module TmsTaskManager
|
7
|
+
module Services
|
8
|
+
class Task
|
9
|
+
extend TmsTaskManager::Helpers::ErrorHandler
|
10
|
+
@db = TmsTaskManager::Configs::Database.connection
|
11
|
+
|
12
|
+
# Updates the status of a task
|
13
|
+
def self.update_status(id, status)
|
14
|
+
handle_errors do
|
15
|
+
raise 'Status must be "pending", "in_progress" or "completed"' unless %w[pending in_progress completed].include?(status.downcase)
|
16
|
+
|
17
|
+
task = @db.execute('SELECT * FROM tasks WHERE id = ?', [id]).first
|
18
|
+
if task.nil?
|
19
|
+
puts "Task not found: #{id}"
|
20
|
+
return { success: false, message: 'Task not found' }
|
21
|
+
end
|
22
|
+
|
23
|
+
@db.execute('UPDATE tasks SET status = ? WHERE id = ?', [status, id])
|
24
|
+
updated_task = task.merge('status' => status)
|
25
|
+
puts "Task updated successfully: ID: #{id}, New Status: #{status}"
|
26
|
+
{ success: true, message: "Task updated: #{id}", task: updated_task }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'pry'
|
4
|
+
require_relative '../configs/database'
|
5
|
+
require_relative '../helpers/error_handler'
|
6
|
+
|
7
|
+
module TmsTaskManager
|
8
|
+
module Services
|
9
|
+
class TaskList
|
10
|
+
extend TmsTaskManager::Helpers::ErrorHandler
|
11
|
+
@db = TmsTaskManager::Configs::Database.connection
|
12
|
+
|
13
|
+
# Adds a new task to the database
|
14
|
+
def self.create(title, description, start_date, end_date, status = 'pending')
|
15
|
+
handle_errors do
|
16
|
+
raise 'Status must be "pending", "in_progress" or "completed"' unless %w[pending in_progress completed].include?(status.downcase)
|
17
|
+
|
18
|
+
@db.execute('INSERT INTO tasks (title, description, start_date, end_date, status) VALUES (?, ?, ?, ?, ?)',
|
19
|
+
[title, description, start_date, end_date, status])
|
20
|
+
puts "Task created successfully: #{title}"
|
21
|
+
{ success: true, message: "Task created: #{title}" }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Lists all tasks in the database
|
26
|
+
def self.list
|
27
|
+
handle_errors do
|
28
|
+
tasks = @db.execute('SELECT id, title, status, start_date, end_date FROM tasks')
|
29
|
+
if tasks.empty?
|
30
|
+
puts "No tasks found."
|
31
|
+
else
|
32
|
+
puts "Listing all tasks: #{tasks}"
|
33
|
+
end
|
34
|
+
tasks.empty? ? [] : tasks
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Removes a task from the database
|
39
|
+
def self.remove(id)
|
40
|
+
handle_errors do
|
41
|
+
@db.execute('DELETE FROM tasks WHERE id = ?', [id])
|
42
|
+
puts "Task removed successfully: #{id}"
|
43
|
+
{ success: true, message: "Task removed: #{id}" }
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# Deletes all tasks
|
48
|
+
def self.delete_all
|
49
|
+
handle_errors do
|
50
|
+
@db.execute('DELETE FROM tasks')
|
51
|
+
puts "All tasks have been deleted."
|
52
|
+
{ success: true, message: 'All tasks deleted' }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Gets a task from the database
|
57
|
+
def self.get(id)
|
58
|
+
handle_errors do
|
59
|
+
task = @db.execute('SELECT * FROM tasks WHERE id = ?', [id]).first
|
60
|
+
if task.nil?
|
61
|
+
puts "Task not found: #{id}"
|
62
|
+
{ success: false, message: 'Task not found' }
|
63
|
+
else
|
64
|
+
puts "Task details: #{task}"
|
65
|
+
task
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tms_task_manager
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.6
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- tms-nguyenvu
|
8
|
+
bindir: exe
|
9
|
+
cert_chain: []
|
10
|
+
date: 2025-03-27 00:00:00.000000000 Z
|
11
|
+
dependencies:
|
12
|
+
- !ruby/object:Gem::Dependency
|
13
|
+
name: pry
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - "~>"
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '0.14'
|
19
|
+
type: :runtime
|
20
|
+
prerelease: false
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - "~>"
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: '0.14'
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: sqlite3
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '1.5'
|
33
|
+
- - "<"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '3.0'
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '1.5'
|
43
|
+
- - "<"
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '3.0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - "~>"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '3.12'
|
53
|
+
type: :development
|
54
|
+
prerelease: false
|
55
|
+
version_requirements: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '3.12'
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: rubocop
|
62
|
+
requirement: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - "~>"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '1.50'
|
67
|
+
type: :development
|
68
|
+
prerelease: false
|
69
|
+
version_requirements: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - "~>"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '1.50'
|
74
|
+
description: TmsTaskManager provides an easy way to create, manage, and track tasks
|
75
|
+
using a simple Ruby-based interface with database support.
|
76
|
+
email:
|
77
|
+
- vu.nguyen1@tomosia.com
|
78
|
+
executables:
|
79
|
+
- tms_task_manager
|
80
|
+
extensions: []
|
81
|
+
extra_rdoc_files: []
|
82
|
+
files:
|
83
|
+
- exe/tms_task_manager
|
84
|
+
- lib/tms_task_manager.rb
|
85
|
+
- lib/tms_task_manager/clis/cli.rb
|
86
|
+
- lib/tms_task_manager/configs/database.rb
|
87
|
+
- lib/tms_task_manager/helpers/error_handler.rb
|
88
|
+
- lib/tms_task_manager/remind.db
|
89
|
+
- lib/tms_task_manager/services/task.rb
|
90
|
+
- lib/tms_task_manager/services/task_list.rb
|
91
|
+
- lib/tms_task_manager/version.rb
|
92
|
+
homepage: https://github.com/tms-nguyenvu/training-ruby/tree/exercise-03
|
93
|
+
licenses:
|
94
|
+
- MIT
|
95
|
+
metadata:
|
96
|
+
allowed_push_host: https://rubygems.org
|
97
|
+
homepage_uri: https://github.com/tms-nguyenvu/training-ruby/tree/exercise-03
|
98
|
+
source_code_uri: https://github.com/tms-nguyenvu/training-ruby/tree/exercise-03
|
99
|
+
changelog_uri: https://github.com/tms-nguyenvu/training-ruby/tree/exercise-03/blob/main/CHANGELOG.md
|
100
|
+
rdoc_options: []
|
101
|
+
require_paths:
|
102
|
+
- lib
|
103
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - ">="
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: 3.1.0
|
108
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
requirements: []
|
114
|
+
rubygems_version: 3.6.2
|
115
|
+
specification_version: 4
|
116
|
+
summary: A simple task management library for Ruby applications.
|
117
|
+
test_files: []
|