hbtrack 0.0.3 → 0.0.4

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
  SHA1:
3
- metadata.gz: 4c701ca5b2187759928514a35a48855eb185fbdc
4
- data.tar.gz: 8ec5d9cc6b2b90ca2bef90c4d72e32e9fe096844
3
+ metadata.gz: 42e80f09161cc593527386d9d47f73364e6a69b6
4
+ data.tar.gz: 36ad20ec43500749a0261fa496e363efca27a648
5
5
  SHA512:
6
- metadata.gz: c8c9ec66a9f2fc796ed2a9c0c8e113625ba57c9cef97b30f274333d78d0ab3bcc0168495778da4a53015d1391e2b35c9a2332c5059b3426ec1329fe713b2fa63
7
- data.tar.gz: da70844a1d91bc5852b86d76c0ca66de58b77b0359d175dded7da052a7d8489a52df888a1bd4725637521e0ccebc4fad14826869a084545088437d107452b620
6
+ metadata.gz: 74bfb5ee6b795b000c856b851d88ef36a5ab634d4a07f5eeaedd8811de261778ebe146e2d5e922b70f0e08487783d2b84937c197d105b3626d10f03cabd5e942
7
+ data.tar.gz: b9b51aec3bd911037382fea14cf13a07ea115e68f00272a1375132f94c22ae37892d243d6ec0322962e74523941e904396e9532c9992e1bf7ea3b49f351b57fd
data/Rakefile CHANGED
@@ -1,10 +1,12 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rake/testtask'
3
5
 
4
6
  Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
7
+ t.libs << 'test'
8
+ t.libs << 'lib'
7
9
  t.test_files = FileList['test/**/*_test.rb']
8
10
  end
9
11
 
10
- task :default => :test
12
+ task default: :test
data/exe/hbtrack CHANGED
@@ -1,3 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
2
4
  require 'hbtrack'
3
5
  Hbtrack.run(ARGV)
data/lib/hbtrack/habit.rb CHANGED
@@ -5,7 +5,7 @@ require 'hbtrack/cli'
5
5
 
6
6
  module Hbtrack
7
7
  # Habit provide a rich library to track the
8
- # progress of your habit.
8
+ # progress of your habit.
9
9
  class Habit
10
10
  attr_accessor :name
11
11
  attr_reader :progress
@@ -42,8 +42,9 @@ module Hbtrack
42
42
  habit_name = arr.shift
43
43
  hash = {}
44
44
  arr.each do |s|
45
- a = s.split(':')
46
- hash[a[0].to_sym] = a[1]
45
+ a = s.split(': ')
46
+ value = a[1] ? a[1] : ''
47
+ hash[a[0].to_sym] = value
47
48
  end
48
49
  Habit.new(habit_name, hash)
49
50
  end
@@ -53,7 +54,7 @@ module Hbtrack
53
54
 
54
55
  def initialize(name,
55
56
  progress = {
56
- Habit.get_progress_key_from(Date.today) => ' '
57
+ Habit.get_progress_key_from(Date.today) => ''
57
58
  })
58
59
  @name = name
59
60
  @progress = progress
@@ -63,9 +64,19 @@ module Hbtrack
63
64
  name.length
64
65
  end
65
66
 
67
+ def latest_key
68
+ Habit.get_progress_key_from(Date.today)
69
+ end
70
+
66
71
  def latest_progress
67
- key = Habit.get_progress_key_from(Date.today)
68
- progress[key]
72
+ progress[latest_key]
73
+ end
74
+
75
+ def longest_month
76
+ key = progress.keys.max_by do |x|
77
+ get_month_from(x).length
78
+ end
79
+ get_month_from(key)
69
80
  end
70
81
 
71
82
  def done(done = true, date = Date.today)
@@ -75,66 +86,81 @@ module Hbtrack
75
86
  end
76
87
 
77
88
  def pretty_print_all
78
- @progress.map do |key, value|
79
- convert_key_to_date(key) + pretty_print_progress(value)
89
+ @progress.map do |key, _value|
90
+ space = longest_month.length - get_month_from(key).length
91
+ convert_key_to_date(key, space) +
92
+ pretty_print_progress(key)
80
93
  end.join("\n")
81
94
  end
82
95
 
83
96
  def pretty_print_latest(no_of_space = 0)
84
97
  name.to_s + ' ' * no_of_space + ' : ' +
85
- pretty_print_progress(latest_progress)
98
+ pretty_print_progress(latest_key)
86
99
  end
87
100
 
88
- def pretty_print_progress(progress_value)
89
- stat = progress_value.lstrip.split('').map do |x|
101
+ def pretty_print_progress(key)
102
+ stat = progress[key].split('').map do |x|
90
103
  x == '0' ? Hbtrack::CLI.red('*') : Hbtrack::CLI.green('*')
91
104
  end.join('')
92
- stat
105
+ stat + ' ' * (32 - progress[key].size) +
106
+ one_liner_progress_stat_output_for(key)
107
+ end
108
+
109
+ def convert_key_to_date(key, no_of_space)
110
+ year = key.to_s.split(",")[0]
111
+ ' ' * no_of_space + get_month_from(key) +
112
+ " #{year}" + " : "
93
113
  end
94
114
 
95
- def convert_key_to_date(key)
115
+ def get_month_from(key)
96
116
  key = key.to_s.split(',')
97
- "#{Date::MONTHNAMES[key[1].to_i]} #{key[0]}: "
117
+ Date::MONTHNAMES[key[1].to_i]
98
118
  end
99
119
 
100
120
  # Get all of the progress of the habit in string form
101
121
  #
102
122
  # Example:
103
- #
123
+ #
104
124
  # habit.progress_output
105
125
  # # => "2017,5: 0010001010\n2017,6: 000010010\n"
106
126
  #
107
127
  def progress_output
108
128
  arr = @progress.map do |key, value|
109
- "#{key}:#{value}\n"
129
+ "#{key}: #{value}\n"
110
130
  end
111
131
  arr.join('')
112
132
  end
113
133
 
114
134
  def progress_stat
115
- @progress.map do |key, value|
116
- convert_key_to_date(key) + "\n" +
117
- progress_stat_output_for(key)
135
+ @progress.map do |key, _value|
136
+ convert_key_to_date(key, 0) + "\n" +
137
+ progress_stat_output_for(key)
118
138
  end.join("\n")
119
139
  end
120
140
 
141
+ def one_liner_progress_stat_output_for(key)
142
+ hash = progress_stat_for(key)
143
+ "(All: #{progress[key].size}," \
144
+ " Done: #{hash[:done]}, Undone: #{hash[:undone]})"
145
+ end
146
+
121
147
  def progress_stat_output_for(key)
122
148
  hash = progress_stat_for(key)
123
149
  Hbtrack::CLI.green("Done: #{hash[:done]}") + "\n" +
124
- Hbtrack::CLI.red("Undone: #{hash[:undone]}") + "\n"
150
+ Hbtrack::CLI.red("Undone: #{hash[:undone]}") + "\n"
125
151
  end
126
152
 
127
153
  # Get the stat of the progress.
128
- #
154
+ #
129
155
  # key - Key for the progress (hash)
130
156
  #
131
157
  # Example:
132
- #
158
+ #
133
159
  # habit.progress_stat_for("2017,5".to_sym)
134
160
  # # => { done: 5, undone: 2 }
135
161
  def progress_stat_for(key)
136
- undone = @progress[key].split("").count { |x| x == '0'}
137
- done = @progress[key].lstrip.length - undone
162
+ undone = @progress[key].split('').count { |x| x == '0' }
163
+ done = @progress[key].length - undone
138
164
  { done: done, undone: undone }
139
165
  end
140
166
 
@@ -147,11 +173,11 @@ module Hbtrack
147
173
  private
148
174
 
149
175
  def initialize_progress_hash_from(key)
150
- @progress[key] = ' ' unless @progress.key? key
176
+ @progress[key] = '' unless @progress.key? key
151
177
  end
152
178
 
153
179
  def update_progress_for(key, day, done)
154
- i = day - @progress[key].length
180
+ i = day - @progress[key].length - 1
155
181
  result = @progress[key].split('')
156
182
  i.times { result << '0' }
157
183
  result[day] = done ? '1' : '0'
@@ -47,7 +47,7 @@ module Hbtrack
47
47
  @habits.max_by(&:name_length).name
48
48
  end
49
49
 
50
- def method_missing(method_name, *arguments, &block)
50
+ def method_missing(*args)
51
51
  HabitTracker.help
52
52
  end
53
53
 
@@ -62,20 +62,28 @@ module Hbtrack
62
62
  def list(args)
63
63
  habit_name, _options = parse_options(args)
64
64
  habit = find(habit_name) do
65
- @habits.each_with_index do |h, index|
66
- space = longest_name.length - h.name_length
67
- puts "#{index + 1}. #{h.pretty_print_latest(space)}"
65
+ if habit_name.nil?
66
+ list_all_habits
67
+ else
68
+ raise_habit_not_found(habit_name)
68
69
  end
69
70
  return
70
71
  end
71
72
  puts habit.pretty_print_all
72
73
  end
73
74
 
75
+ def list_all_habits
76
+ @habits.each_with_index do |h, index|
77
+ space = longest_name.length - h.name_length
78
+ puts "#{index + 1}. #{h.pretty_print_latest(space)}"
79
+ end
80
+ end
81
+
74
82
  def add(args)
75
83
  habit_name, _options = parse_options(args)
76
84
  find(habit_name) do
77
85
  habit = create(habit_name)
78
- save_to_file(habit, "Add") unless habit.nil?
86
+ save_to_file(habit, 'Add') unless habit.nil?
79
87
  return
80
88
  end
81
89
  puts Hbtrack::CLI.blue("#{habit_name} already existed!")
@@ -85,7 +93,7 @@ module Hbtrack
85
93
  habit_name, options = parse_options(args)
86
94
  day = get_day_based_on(options)
87
95
  habit = find_or_create(habit_name)
88
- save_to_file(habit, "Done") do
96
+ save_to_file(habit, 'Done') do
89
97
  habit.done(true, day)
90
98
  end
91
99
  end
@@ -93,34 +101,39 @@ module Hbtrack
93
101
  def undone(args)
94
102
  habit_name, options = parse_options(args)
95
103
  day = get_day_based_on(options)
96
- habit = find(habit_name) { raise_habit_not_found(habit_name) }
97
- save_to_file(habit, "Undone", "blue") do
104
+ habit = find(habit_name) { raise_if_habit_error(habit_name) }
105
+ save_to_file(habit, 'Undone', 'blue') do
98
106
  habit.done(false, day)
99
107
  end
100
108
  end
101
109
 
102
110
  def remove(args)
103
111
  habit_name, _options = parse_options(args)
104
- habit = find(habit_name) { raise_habit_not_found(habit_name) }
105
- save_to_file(habit, "Remove", "blue") do
112
+ habit = find(habit_name) { raise_if_habit_error(habit_name) }
113
+ save_to_file(habit, 'Remove', 'blue') do
106
114
  @habits.delete(habit)
107
- end
115
+ end
108
116
  end
109
117
 
110
118
  def find_or_create(habit_name)
111
119
  habit = find(habit_name) do
112
- habit = create(habit_name)
120
+ habit = create(habit_name)
113
121
  return habit
114
122
  end
115
123
  end
116
124
 
117
125
  def create(habit_name)
118
- unless habit_name.nil? || habit_name =~ /\s+/
126
+ unless invalid_habit_name?(habit_name)
119
127
  habit = Hbtrack::Habit.new(habit_name)
120
128
  @habits << habit
121
129
  return habit
122
130
  end
123
- puts Hbtrack::CLI.red("Invalid argument: habit_name is expected.")
131
+
132
+ if habit_name && habit_name.length > 11
133
+ raise_habit_name_too_long
134
+ else
135
+ raise_invalid_arguments
136
+ end
124
137
  end
125
138
 
126
139
  def parse_options(args)
@@ -134,10 +147,31 @@ module Hbtrack
134
147
  Date.today - 1
135
148
  end
136
149
 
150
+ def raise_error_msg(msg)
151
+ puts Hbtrack::CLI.red msg
152
+ return
153
+ end
154
+
155
+ def raise_if_habit_error(habit_name)
156
+ return raise_invalid_arguments if habit_name.nil?
157
+ raise_habit_not_found(habit_name)
158
+ end
159
+
137
160
  def raise_habit_not_found(habit_name)
138
- last_words = habit_name ? 'not found' : 'is expected'
139
- habit_name ||= "habit_name"
140
- puts Hbtrack::CLI.red "Invalid argument: #{habit_name} #{last_words}."
161
+ raise_error_msg "Invalid argument: #{habit_name} not found."
162
+ end
163
+
164
+ def raise_invalid_arguments
165
+ raise_error_msg "Invalid argument: habit_name is expected."
166
+ end
167
+
168
+ def raise_habit_name_too_long
169
+ raise_error_msg "habit_name too long."
170
+ end
171
+
172
+ def invalid_habit_name?(habit_name)
173
+ habit_name.nil? || habit_name =~ /\s+/ ||
174
+ habit_name.length > 11
141
175
  end
142
176
 
143
177
  def save
@@ -148,7 +182,7 @@ module Hbtrack
148
182
  end
149
183
  end
150
184
 
151
- def save_to_file(habit, action, color = "green")
185
+ def save_to_file(habit, action, color = 'green')
152
186
  unless habit.nil?
153
187
  yield if block_given?
154
188
  save
@@ -158,5 +192,3 @@ module Hbtrack
158
192
  end
159
193
  end
160
194
  end
161
-
162
-
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Hbtrack
4
- VERSION = '0.0.3'
4
+ VERSION = '0.0.4'
5
5
  end
data/lib/hbtrack.rb CHANGED
@@ -4,7 +4,7 @@ require 'hbtrack/habit_tracker'
4
4
 
5
5
  module Hbtrack
6
6
  class << self
7
- def run *args
7
+ def run(*args)
8
8
  if ARGV.empty?
9
9
  HabitTracker.help
10
10
  else
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hbtrack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - kw7oe
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-07-20 00:00:00.000000000 Z
11
+ date: 2017-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: minitest
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '5.10'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '5.10'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,7 +52,7 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '10.0'
55
- description: Habit Tracker CLI
55
+ description: Habit Tracker CLI. A CLI to track your habits.
56
56
  email:
57
57
  - choongkwern@hotmail.com
58
58
  executables:
@@ -94,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
94
  version: '0'
95
95
  requirements: []
96
96
  rubyforge_project:
97
- rubygems_version: 2.5.2
97
+ rubygems_version: 2.6.11
98
98
  signing_key:
99
99
  specification_version: 4
100
100
  summary: A CLI to track your habits.