working_times 0.1.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.
- checksums.yaml +7 -0
- data/exe/wt +5 -0
- data/lib/working_times/cli.rb +27 -0
- data/lib/working_times/config.rb +45 -0
- data/lib/working_times/record.rb +38 -0
- data/lib/working_times/state.rb +38 -0
- data/lib/working_times/version.rb +3 -0
- data/lib/working_times.rb +5 -0
- metadata +121 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 6c1cb045c23cfbe87ea49943e7e2c28e6d0505a982655590a508727c33b65a76
|
4
|
+
data.tar.gz: bfccaa8f07492350728de361813de3619f8d38de7348509595c6529ece71d4fb
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7db45a628f2468eb259baf11c3d3e5fd6d2f451b4b24cc5684bb61985a5d1014850a9cd027b86b14efbffae49d83e6dfec2e4d8f291280bf78b14085e7ca2d4d
|
7
|
+
data.tar.gz: 04db8a31ee9a9f2d6f5af20216008512ccb157bde289dbdfbb273a3e7c938b1ab10b4e847b20a6f6a6fa1a75766f129d6bf42d03d09339dc424a263eaac1071b
|
data/exe/wt
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'thor'
|
4
|
+
require 'active_support/time'
|
5
|
+
|
6
|
+
module WorkingTimes
|
7
|
+
class CLI < Thor
|
8
|
+
option :work_on, aliases: ['-w'], desc: 'Specify what group of work on'
|
9
|
+
desc 'start [COMMENT] <option>', 'Start working with comment.'
|
10
|
+
def start(comment = nil)
|
11
|
+
State.initialize_data_dir
|
12
|
+
work_on = options[:work_on].nil? ? Config.default_work : options[:work_on]
|
13
|
+
Record.new(timestamp: Time.now, comment: comment, work_on: work_on).start
|
14
|
+
end
|
15
|
+
|
16
|
+
desc 'st [COMMENT]', 'Short hand for *start*'
|
17
|
+
alias st start
|
18
|
+
|
19
|
+
desc 'finish [COMMENT]', 'Finish working on current group.'
|
20
|
+
def finish(comment = nil)
|
21
|
+
Record.new(timestamp: Time.now, comment: comment).finish
|
22
|
+
end
|
23
|
+
|
24
|
+
desc 'fi [COMMENT]', 'Short hand for *finish*'
|
25
|
+
alias fi finish
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module WorkingTimes
|
4
|
+
module Config
|
5
|
+
module_function
|
6
|
+
|
7
|
+
# return where data directory is
|
8
|
+
def data_dir
|
9
|
+
File.expand_path(wtconf['DATADIR'])
|
10
|
+
end
|
11
|
+
|
12
|
+
# return default working project/task/etc...
|
13
|
+
def default_work
|
14
|
+
wtconf['DEFAULTWORK']
|
15
|
+
end
|
16
|
+
|
17
|
+
# parse ~/.wtconf
|
18
|
+
def wtconf
|
19
|
+
conf = default_conf
|
20
|
+
begin
|
21
|
+
File
|
22
|
+
.readlines(File.expand_path('~/.wtconf'))
|
23
|
+
.map(&:chomp)
|
24
|
+
.each do |row|
|
25
|
+
k, v = row.split('=')
|
26
|
+
conf[k] = v
|
27
|
+
end
|
28
|
+
rescue Errno::ENOENT
|
29
|
+
puts '~/.wtconf not found, generated.'
|
30
|
+
generate_wtconf
|
31
|
+
end
|
32
|
+
conf
|
33
|
+
end
|
34
|
+
|
35
|
+
# default configurations of .wtconf
|
36
|
+
def default_conf
|
37
|
+
{ 'DATADIR' => File.expand_path('~/.wt'), 'DEFAULTWORK' => 'default' }
|
38
|
+
end
|
39
|
+
|
40
|
+
# generate configuration file to ~/.wtconf when does not exist
|
41
|
+
def generate_wtconf
|
42
|
+
File.open(File.expand_path('~/.wtconf'), 'w') { |f| f.puts(default_conf.map { |k, v| "#{k}=#{v}" }) }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module WorkingTimes
|
4
|
+
class Record
|
5
|
+
attr_reader :timestamp, :comment, :work_on
|
6
|
+
|
7
|
+
def initialize(timestamp:, comment:, work_on: nil)
|
8
|
+
@timestamp = timestamp
|
9
|
+
@comment = comment
|
10
|
+
@work_on = work_on
|
11
|
+
end
|
12
|
+
|
13
|
+
def start
|
14
|
+
if State.working?
|
15
|
+
puts "You are already on working at #{current_work}."
|
16
|
+
puts "To finish this, execute 'wt finish'."
|
17
|
+
return
|
18
|
+
end
|
19
|
+
|
20
|
+
File.open("#{Config.data_dir}/#{work_on}", 'a+') do |f|
|
21
|
+
f.puts "start,#{comment},#{timestamp.rfc3339}"
|
22
|
+
end
|
23
|
+
State.start_work(work_on)
|
24
|
+
end
|
25
|
+
|
26
|
+
def finish
|
27
|
+
unless State.working?
|
28
|
+
puts 'You are not starting work. Execute "wt start" to start working.'
|
29
|
+
return
|
30
|
+
end
|
31
|
+
|
32
|
+
File.open("#{Config.data_dir}/#{State.current_work}", 'a+') do |f|
|
33
|
+
f.puts "finish,#{comment},#{timestamp.rfc3339}"
|
34
|
+
end
|
35
|
+
State.finish_work
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module WorkingTimes
|
4
|
+
module State
|
5
|
+
module_function
|
6
|
+
|
7
|
+
# generate data directory when does not exist
|
8
|
+
# it is usually called by 'start' command
|
9
|
+
def initialize_data_dir
|
10
|
+
return if exist_data_dir?
|
11
|
+
|
12
|
+
puts 'data directory .wt not found, generated.'
|
13
|
+
Dir.mkdir(Config.data_dir)
|
14
|
+
end
|
15
|
+
|
16
|
+
def exist_data_dir?
|
17
|
+
File.exist?(Config.data_dir)
|
18
|
+
end
|
19
|
+
|
20
|
+
def working?
|
21
|
+
File.exist?("#{Config.data_dir}/.working")
|
22
|
+
end
|
23
|
+
|
24
|
+
def current_work
|
25
|
+
File.readlines("#{Config.data_dir}/.working").last.chomp
|
26
|
+
end
|
27
|
+
|
28
|
+
# create ~/.wt/.working include what you working on
|
29
|
+
def start_work(work_on)
|
30
|
+
File.open("#{Config.data_dir}/.working", 'w+') { |f| f.puts work_on }
|
31
|
+
end
|
32
|
+
|
33
|
+
# delete 'working' flag
|
34
|
+
def finish_work
|
35
|
+
File.delete("#{Config.data_dir}/.working")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
metadata
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: working_times
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Aoshi Fujioka
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-08-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '5'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: thor
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.20.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.20.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.17'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.17'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.0'
|
83
|
+
description: Store your working/worked time simply. This gem gives simple CLI tool.
|
84
|
+
email:
|
85
|
+
- blue20will@gmail.com
|
86
|
+
executables:
|
87
|
+
- wt
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- exe/wt
|
92
|
+
- lib/working_times.rb
|
93
|
+
- lib/working_times/cli.rb
|
94
|
+
- lib/working_times/config.rb
|
95
|
+
- lib/working_times/record.rb
|
96
|
+
- lib/working_times/state.rb
|
97
|
+
- lib/working_times/version.rb
|
98
|
+
homepage: https://github.com/arsley/working_times
|
99
|
+
licenses:
|
100
|
+
- MIT
|
101
|
+
metadata: {}
|
102
|
+
post_install_message:
|
103
|
+
rdoc_options: []
|
104
|
+
require_paths:
|
105
|
+
- lib
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
requirements: []
|
117
|
+
rubygems_version: 3.0.3
|
118
|
+
signing_key:
|
119
|
+
specification_version: 4
|
120
|
+
summary: Store your working/worked time simply
|
121
|
+
test_files: []
|