standup_md 0.3.0 → 0.3.5

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.
@@ -8,12 +8,12 @@ require_relative 'standup_md/cli'
8
8
  require_relative 'standup_md/config'
9
9
 
10
10
  ##
11
- # The class for handing reading/writing of entries.
11
+ # The main module for the gem. Provides access to configuration classes.
12
12
  module StandupMD
13
13
  @config_file_loaded = false
14
14
 
15
15
  ##
16
- # Shorthand for +StanupMD::Cli+
16
+ # Method for accessing the configuration.
17
17
  #
18
18
  # @return [StanupMD::Cli]
19
19
  def self.config
@@ -18,11 +18,11 @@ module StandupMD
18
18
  puts "No record found for #{StandupMD.config.cli.date}"
19
19
  return
20
20
  end
21
- puts '#' * StandupMD.config.file.header_depth + ' ' + entry.date.strftime(StandupMD.config.file.header_date_format)
22
- StandupMD.config.file.sub_header_order.each do |attr|
23
- tasks = entry.send(attr)
21
+ puts header(entry)
22
+ StandupMD.config.file.sub_header_order.each do |header_type|
23
+ tasks = entry.public_send(header_type)
24
24
  next if !tasks || tasks.empty?
25
- puts '#' * StandupMD.config.file.sub_header_depth + ' ' + StandupMD.config.file.send("#{attr}_header").capitalize
25
+ puts sub_header(header_type)
26
26
  tasks.each { |task| puts StandupMD.config.file.bullet_character + ' ' + task }
27
27
  end
28
28
  puts
@@ -137,7 +137,9 @@ module StandupMD
137
137
  #
138
138
  # @return [Array]
139
139
  def set_previous_entry(file)
140
- return [] unless StandupMD.config.cli.auto_fill_previous
140
+ unless StandupMD.config.cli.auto_fill_previous
141
+ return Standup.config.entry.previous_entry
142
+ end
141
143
  return prev_entry(prev_file.load.entries) if file.new? && prev_file
142
144
  prev_entry(file.entries)
143
145
  end
@@ -160,6 +162,28 @@ module StandupMD
160
162
  def prev_file
161
163
  StandupMD::File.find_by_date(Date.today.prev_month)
162
164
  end
165
+
166
+ ##
167
+ # The header.
168
+ #
169
+ # @param [StandupMD::Entry] entry
170
+ #
171
+ # @return [String]
172
+ def header(entry)
173
+ '#' * StandupMD.config.file.header_depth + ' ' +
174
+ entry.date.strftime(StandupMD.config.file.header_date_format)
175
+ end
176
+
177
+ ##
178
+ # The sub-header.
179
+ #
180
+ # @param [String] header_type
181
+ #
182
+ # @return [String]
183
+ def sub_header(header_type)
184
+ '#' * StandupMD.config.file.sub_header_depth + ' ' +
185
+ StandupMD.config.file.public_send("#{header_type}_header").capitalize
186
+ end
163
187
  end
164
188
  end
165
189
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'config/cli'
2
4
  require_relative 'config/file'
3
5
  require_relative 'config/entry'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'date'
3
4
 
4
5
  module StandupMD
@@ -7,6 +8,23 @@ module StandupMD
7
8
  ##
8
9
  # The configuration class for StandupMD::Cli
9
10
  class Cli
11
+
12
+ ##
13
+ # The default options.
14
+ #
15
+ # @return [Hash]
16
+ DEFAULTS = {
17
+ date: Date.today,
18
+ editor: ENV['VISUAL'] || ENV['EDITOR'] || 'vim',
19
+ verbose: false,
20
+ edit: true,
21
+ write: true,
22
+ print: false,
23
+ auto_fill_previous: true,
24
+ preference_file:
25
+ ::File.expand_path(::File.join(ENV['HOME'], '.standuprc')),
26
+ }
27
+
10
28
  ##
11
29
  # The editor to use when opening standup files. If one is not set, the
12
30
  # first of $VISUAL, $EDITOR, or vim will be used, in that order.
@@ -33,7 +51,7 @@ module StandupMD
33
51
  attr_accessor :edit
34
52
 
35
53
  ##
36
- # Should the cli write the file?
54
+ # Should the cli automatically write the new entry to the file?
37
55
  #
38
56
  # @param [Boolean] write
39
57
  #
@@ -41,7 +59,7 @@ module StandupMD
41
59
  attr_accessor :write
42
60
 
43
61
  ##
44
- # Should the cli print the entry?
62
+ # Should the cli print the entry to the command line?
45
63
  #
46
64
  # @param [Boolean] print
47
65
  #
@@ -49,7 +67,7 @@ module StandupMD
49
67
  attr_accessor :print
50
68
 
51
69
  ##
52
- # The date to use to find the file.
70
+ # The date to use to find the entry.
53
71
  #
54
72
  # @param [Date] date
55
73
  #
@@ -76,30 +94,15 @@ module StandupMD
76
94
  ##
77
95
  # Initializes the config with default values.
78
96
  def initialize
79
- reset_values
97
+ reset
80
98
  end
81
99
 
82
100
  ##
83
101
  # Sets all config values back to their defaults.
84
102
  #
85
- # @return [Boolean] true if successful
86
- def reset_values
87
- @date = Date.today
88
- @editor = set_editor
89
- @verbose = false
90
- @edit = true
91
- @write = true
92
- @print = false
93
- @auto_fill_previous = true
94
- @preference_file = ::File.expand_path(::File.join(ENV['HOME'], '.standuprc'))
95
- end
96
-
97
- private
98
-
99
- def set_editor # :nodoc:
100
- return ENV['VISUAL'] if ENV['VISUAL']
101
- return ENV['EDITOR'] if ENV['EDITOR']
102
- 'vim'
103
+ # @return [Hash]
104
+ def reset
105
+ DEFAULTS.each { |k, v| instance_variable_set("@#{k}", v) }
103
106
  end
104
107
  end
105
108
  end
@@ -7,6 +7,17 @@ module StandupMD
7
7
  # The configuration class for StandupMD::Entry
8
8
  class Entry
9
9
 
10
+ ##
11
+ # The default options.
12
+ #
13
+ # @return [Hash]
14
+ DEFAULTS = {
15
+ current: ["<!-- ADD TODAY'S WORK HERE -->"],
16
+ previous: [],
17
+ impediments: ['None'],
18
+ notes: [],
19
+ }
20
+
10
21
  ##
11
22
  # Tasks for "Current" section.
12
23
  #
@@ -42,19 +53,15 @@ module StandupMD
42
53
  ##
43
54
  # Initializes the config with default values.
44
55
  def initialize
45
- reset_values
56
+ reset
46
57
  end
47
58
 
48
59
  ##
49
60
  # Sets all config values back to their defaults.
50
61
  #
51
- # @return [Boolean] true if successful
52
- def reset_values
53
- @current = ["<!-- ADD TODAY'S WORK HERE -->"]
54
- @previous = []
55
- @impediments = ['None']
56
- @notes = []
57
- true
62
+ # @return [Hash]
63
+ def reset
64
+ DEFAULTS.each { |k, v| instance_variable_set("@#{k}", v) }
58
65
  end
59
66
  end
60
67
  end
@@ -7,19 +7,24 @@ module StandupMD
7
7
  # The configuration class for StandupMD::EntryList
8
8
  class EntryList
9
9
 
10
+ ##
11
+ # The default options.
12
+ #
13
+ # @return [Hash]
14
+ DEFAULTS = {}
15
+
10
16
  ##
11
17
  # Initializes the config with default values.
12
18
  def initalize
13
- reset_values
19
+ reset
14
20
  end
15
21
 
16
22
  ##
17
23
  # Sets all config values back to their defaults.
18
24
  #
19
- # @return [Boolean] true if successful
20
- def reset_values
21
- # TODO add order ascending or decending.
22
- true
25
+ # @return [Hash]
26
+ def reset
27
+ DEFAULTS.each { |k, v| instance_variable_set("@#{k}", v) }
23
28
  end
24
29
  end
25
30
  end
@@ -1,9 +1,31 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module StandupMD
2
4
  class Config
3
5
 
4
6
  ##
5
7
  # The configuration class for StandupMD::File
6
8
  class File
9
+
10
+ ##
11
+ # The default options.
12
+ #
13
+ # @return [Hash]
14
+ DEFAULTS = {
15
+ header_date_format: '%Y-%m-%d',
16
+ header_depth: 1,
17
+ sub_header_depth: 2,
18
+ current_header: 'Current',
19
+ previous_header: 'Previous',
20
+ impediments_header: 'Impediments',
21
+ notes_header: 'Notes',
22
+ sub_header_order: %w[previous current impediments notes],
23
+ directory: ::File.join(ENV['HOME'], '.cache', 'standup_md'),
24
+ bullet_character: '-',
25
+ name_format: '%Y_%m.md',
26
+ create: true,
27
+ }
28
+
7
29
  ##
8
30
  # Number of octothorps that should preface entry headers.
9
31
  #
@@ -116,27 +138,15 @@ module StandupMD
116
138
  ##
117
139
  # Initializes the config with default values.
118
140
  def initialize
119
- reset_values
141
+ reset
120
142
  end
121
143
 
122
144
  ##
123
145
  # Sets all config values back to their defaults.
124
146
  #
125
- # @return [Boolean] true if successful
126
- def reset_values
127
- @header_date_format = '%Y-%m-%d'
128
- @header_depth = 1
129
- @sub_header_depth = 2
130
- @current_header = 'Current'
131
- @previous_header = 'Previous'
132
- @impediments_header = 'Impediments'
133
- @notes_header = 'Notes'
134
- @sub_header_order = %w[previous current impediments notes]
135
- @directory = ::File.join(ENV['HOME'], '.cache', 'standup_md')
136
- @bullet_character = '-'
137
- @name_format = '%Y_%m.md'
138
- @create = true
139
- true
147
+ # @return [Hash]
148
+ def reset
149
+ DEFAULTS.each { |k, v| instance_variable_set("@#{k}", v) }
140
150
  end
141
151
 
142
152
  ##
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'json'
3
4
 
4
5
  module StandupMD
@@ -38,7 +39,7 @@ module StandupMD
38
39
  attr_accessor :previous
39
40
 
40
41
  ##
41
- # Iimpediments for this entry.
42
+ # Impediments for this entry.
42
43
  #
43
44
  # @return [Array]
44
45
  attr_accessor :impediments
@@ -1,10 +1,12 @@
1
1
  # frozen_string_literal: true
2
+ require 'forwardable'
2
3
 
3
4
  module StandupMD
4
5
 
5
6
  ##
6
7
  # Enumerable list of entries.
7
8
  class EntryList
9
+ extend Forwardable
8
10
  include Enumerable
9
11
 
10
12
  ##
@@ -29,12 +31,6 @@ module StandupMD
29
31
  @entries = entries
30
32
  end
31
33
 
32
- ##
33
- # Iterate over the list and yield each entry.
34
- def each(&block)
35
- @entries.each(&block)
36
- end
37
-
38
34
  ##
39
35
  # Appends entries to list.
40
36
  #
@@ -51,24 +47,12 @@ module StandupMD
51
47
  ##
52
48
  # Finds an entry based on date. This method assumes the list has already
53
49
  # been sorted.
54
- def find(key)
55
- to_a.bsearch { |e| e.date == key }
56
- end
57
-
58
- ##
59
- # How many entries are in the list.
60
50
  #
61
- # @return [Integer]
62
- def size
63
- @entries.size
64
- end
65
-
66
- ##
67
- # Is the list empty?
51
+ # @param [Date] date
68
52
  #
69
- # @return [Boolean] true if empty
70
- def empty?
71
- @entries.empty?
53
+ # @return [StandupMD::Entry]
54
+ def find(date)
55
+ entries.bsearch { |e| e.date == date }
72
56
  end
73
57
 
74
58
  ##
@@ -124,24 +108,6 @@ module StandupMD
124
108
  self
125
109
  end
126
110
 
127
- ##
128
- # The first entry in the list. This method assumes the list has
129
- # already been sorted.
130
- #
131
- # @return [StandupMD::Entry]
132
- def first
133
- to_a.first
134
- end
135
-
136
- ##
137
- # The last entry in the list. This method assumes the list has
138
- # already been sorted.
139
- #
140
- # @return [StandupMD::Entry]
141
- def last
142
- to_a.last
143
- end
144
-
145
111
  ##
146
112
  # The list as a hash, with the dates as keys.
147
113
  #
@@ -162,5 +128,22 @@ module StandupMD
162
128
  def to_json
163
129
  to_h.to_json
164
130
  end
131
+
132
+ # :section: Delegators
133
+
134
+ ##
135
+ # The following are forwarded to @entries, which is the underly array of
136
+ # entries.
137
+ #
138
+ # +each+:: Iterate over each entry.
139
+ #
140
+ # +empty?+:: Is the list empty?
141
+ #
142
+ # +size+:: How many items are in the list?
143
+ #
144
+ # +first+:: The first record in the list.
145
+ #
146
+ # +last+:: The last record in the list.
147
+ def_delegators :@entries, :each, :empty?, :size, :first, :last
165
148
  end
166
149
  end
@@ -19,6 +19,16 @@ module StandupMD
19
19
  @config ||= StandupMD.config.file
20
20
  end
21
21
 
22
+ ##
23
+ # Convenience method for calling File.find(file_name).load
24
+ #
25
+ # @param [String] file_name
26
+ #
27
+ # @return [StandupMD::File]
28
+ def self.load(file_name)
29
+ new(file_name).load
30
+ end
31
+
22
32
  ##
23
33
  # Find standup file in directory by file name.
24
34
  #
@@ -138,6 +148,7 @@ module StandupMD
138
148
  entry_list << new_entry(record) unless record.empty?
139
149
  @loaded = true
140
150
  @entries = entry_list.sort
151
+ self
141
152
  rescue => e
142
153
  raise "File malformation: #{e}"
143
154
  end
@@ -147,7 +158,7 @@ module StandupMD
147
158
  # This method is destructive; if a file for entries in the date range
148
159
  # already exists, it will be clobbered with the entries in the range.
149
160
  #
150
- # @param [Hash] start_and_end_date
161
+ # @param [Hash] {start_date: Date, end_date: Date}
151
162
  #
152
163
  # @return [Boolean] true if successful
153
164
  def write(dates = {})
@@ -158,9 +169,9 @@ module StandupMD
158
169
  sorted_entries.filter(start_date, end_date).sort_reverse.each do |entry|
159
170
  f.puts header(entry.date)
160
171
  @config.sub_header_order.each do |attr|
161
- tasks = entry.send(attr)
172
+ tasks = entry.public_send(attr)
162
173
  next if !tasks || tasks.empty?
163
- f.puts sub_header(@config.send("#{attr}_header").capitalize)
174
+ f.puts sub_header(@config.public_send("#{attr}_header").capitalize)
164
175
  tasks.each { |task| f.puts @config.bullet_character + ' ' + task }
165
176
  end
166
177
  f.puts