standup_md 0.3.2 → 0.3.7

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.
data/lib/standup_md.rb CHANGED
@@ -8,7 +8,7 @@ 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
 
@@ -34,7 +34,7 @@ module StandupMD
34
34
  # @example
35
35
  # StandupMD.configure { |s| s.cli.editor = 'mate' }
36
36
  def self.configure
37
- yield self.config
37
+ yield config
38
38
  end
39
39
 
40
40
  ##
@@ -52,6 +52,7 @@ module StandupMD
52
52
  def self.load_config_file(file)
53
53
  file = ::File.expand_path(file)
54
54
  raise "File #{file} does not exist." unless ::File.file?(file)
55
+
55
56
  @config_file_loaded = true
56
57
  load file
57
58
  end
@@ -4,7 +4,6 @@ require 'optparse'
4
4
  require_relative 'cli/helpers'
5
5
 
6
6
  module StandupMD
7
-
8
7
  ##
9
8
  # Class for handing the command-line interface.
10
9
  class Cli
@@ -66,10 +65,10 @@ module StandupMD
66
65
  @preference_file_loaded = false
67
66
  @options = options
68
67
  load_preferences if load_config
69
- set_preferences(options)
68
+ load_runtime_preferences(options)
70
69
  @file = StandupMD::File.find_by_date(@config.date)
71
70
  @file.load
72
- @entry = set_entry(@file)
71
+ @entry = new_entry(@file)
73
72
  end
74
73
 
75
74
  ##
@@ -2,11 +2,9 @@
2
2
 
3
3
  module StandupMD
4
4
  class Cli
5
-
6
5
  ##
7
6
  # Module responsible for reading and writing standup files.
8
7
  module Helpers
9
-
10
8
  ##
11
9
  # Print an entry to the command line.
12
10
  #
@@ -15,99 +13,108 @@ module StandupMD
15
13
  # @return [nil]
16
14
  def print(entry)
17
15
  if entry.nil?
18
- puts "No record found for #{StandupMD.config.cli.date}"
16
+ puts "No record found for #{config.cli.date}"
19
17
  return
20
18
  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)
19
+ puts header(entry)
20
+ config.file.sub_header_order.each do |header_type|
21
+ tasks = entry.public_send(header_type)
24
22
  next if !tasks || tasks.empty?
25
- puts '#' * StandupMD.config.file.sub_header_depth + ' ' + StandupMD.config.file.send("#{attr}_header").capitalize
26
- tasks.each { |task| puts StandupMD.config.file.bullet_character + ' ' + task }
23
+
24
+ puts sub_header(header_type)
25
+ tasks.each { |task| puts config.file.bullet_character + ' ' + task }
27
26
  end
28
27
  puts
29
28
  end
30
29
 
31
30
  private
32
31
 
32
+ ##
33
+ # Helper for accessing config.
34
+ #
35
+ # @return [StandupMD::Config]
36
+ def config # :nodoc:
37
+ StandupMD.config
38
+ end
39
+
33
40
  ##
34
41
  # Parses options passed at runtime and concatenates them with the options
35
42
  # in the user's preferences file. Reveal source to see options.
36
43
  #
37
44
  # @return [Hash]
38
- def set_preferences(options)
45
+ def load_runtime_preferences(options)
39
46
  OptionParser.new do |opts|
40
47
  opts.banner = 'The Standup Doctor'
41
- opts.version = "[StandupMD] #{::StandupMD::VERSION}"
48
+ opts.version = "[StandupMD] #{::StandupMD::Version}"
42
49
  opts.on(
43
50
  '--current ARRAY', Array,
44
51
  "List of current entry's tasks"
45
- ) { |v| StandupMD.config.entry.current = v }
52
+ ) { |v| config.entry.current = v }
46
53
 
47
54
  opts.on(
48
55
  '--previous ARRAY', Array,
49
56
  "List of precious entry's tasks"
50
- ) { |v| StandupMD.config.entry.previous = v }
57
+ ) { |v| config.entry.previous = v }
51
58
 
52
59
  opts.on(
53
60
  '--impediments ARRAY', Array,
54
61
  'List of impediments for current entry'
55
- ) { |v| StandupMD.config.entry.impediments = v }
62
+ ) { |v| config.entry.impediments = v }
56
63
 
57
64
  opts.on(
58
65
  '--notes ARRAY', Array,
59
66
  'List of notes for current entry'
60
- ) { |v| StandupMD.config.entry.notes = v }
67
+ ) { |v| config.entry.notes = v }
61
68
 
62
69
  opts.on(
63
70
  '--sub-header-order ARRAY', Array,
64
71
  'The order of the sub-headers when writing the file'
65
- ) { |v| StandupMD.config.file.sub_header_order = v }
72
+ ) { |v| config.file.sub_header_order = v }
66
73
 
67
74
  opts.on(
68
75
  '-f', '--file-name-format STRING',
69
76
  'Date-formattable string to use for standup file name'
70
- ) { |v| StandupMD.config.file.name_format = v }
77
+ ) { |v| config.file.name_format = v }
71
78
 
72
79
  opts.on(
73
80
  '-E', '--editor EDITOR',
74
81
  'Editor to use for opening standup files'
75
- ) { |v| StandupMD.config.cli.editor = v }
82
+ ) { |v| config.cli.editor = v }
76
83
 
77
84
  opts.on(
78
85
  '-d', '--directory DIRECTORY',
79
86
  'The directories where standup files are located'
80
- ) { |v| StandupMD.config.file.directory = v }
87
+ ) { |v| config.file.directory = v }
81
88
 
82
89
  opts.on(
83
90
  '-w', '--[no-]write',
84
91
  "Write current entry if it doesn't exist. Default is true"
85
- ) { |v| StandupMD.config.cli.write = v }
92
+ ) { |v| config.cli.write = v }
86
93
 
87
94
  opts.on(
88
95
  '-a', '--[no-]auto-fill-previous',
89
96
  "Auto-generate 'previous' tasks for new entries. Default is true"
90
- ) { |v| StandupMD.config.cli.auto_fill_previous = v }
97
+ ) { |v| config.cli.auto_fill_previous = v }
91
98
 
92
99
  opts.on(
93
100
  '-e', '--[no-]edit',
94
101
  'Open the file in the editor. Default is true'
95
- ) { |v| StandupMD.config.cli.edit = v }
102
+ ) { |v| config.cli.edit = v }
96
103
 
97
104
  opts.on(
98
105
  '-v', '--[no-]verbose',
99
106
  'Verbose output. Default is false.'
100
- ) { |v| StandupMD.config.cli.verbose = v }
107
+ ) { |v| config.cli.verbose = v }
101
108
 
102
109
  opts.on(
103
110
  '-p', '--print [DATE]',
104
111
  'Print current entry.',
105
112
  'If DATE is passed, will print entry for DATE, if it exists.',
106
- 'DATE must be in the same format as file-name-format',
113
+ 'DATE must be in the same format as file-name-format'
107
114
  ) do |v|
108
- StandupMD.config.cli.print = true
109
- StandupMD.config.cli.date =
110
- v.nil? ? Date.today : Date.strptime(v, StandupMD.config.file.header_date_format)
115
+ config.cli.print = true
116
+ config.cli.date =
117
+ v.nil? ? Date.today : Date.strptime(v, config.file.header_date_format)
111
118
  end
112
119
  end.parse!(options)
113
120
  end
@@ -116,16 +123,16 @@ module StandupMD
116
123
  # The entry for today.
117
124
  #
118
125
  # @return [StandupMD::Entry]
119
- def set_entry(file)
120
- entry = file.entries.find(StandupMD.config.cli.date)
121
- if entry.nil? && StandupMD.config.cli.date == Date.today
126
+ def new_entry(file)
127
+ entry = file.entries.find(config.cli.date)
128
+ if entry.nil? && config.cli.date == Date.today
122
129
  previous_entry = set_previous_entry(file)
123
130
  entry = StandupMD::Entry.new(
124
- StandupMD.config.cli.date,
125
- StandupMD.config.entry.current,
131
+ config.cli.date,
132
+ config.entry.current,
126
133
  previous_entry,
127
- StandupMD.config.entry.impediments,
128
- StandupMD.config.entry.notes
134
+ config.entry.impediments,
135
+ config.entry.notes
129
136
  )
130
137
  file.entries << entry
131
138
  end
@@ -137,8 +144,10 @@ module StandupMD
137
144
  #
138
145
  # @return [Array]
139
146
  def set_previous_entry(file)
140
- return [] unless StandupMD.config.cli.auto_fill_previous
147
+ return config.entry.previous_entry unless config.cli.auto_fill_previous
148
+
141
149
  return prev_entry(prev_file.load.entries) if file.new? && prev_file
150
+
142
151
  prev_entry(file.entries)
143
152
  end
144
153
 
@@ -150,6 +159,7 @@ module StandupMD
150
159
  # @return [StandupMD::Entry]
151
160
  def prev_entry(entries)
152
161
  return [] if entries.empty?
162
+
153
163
  entries.last.current
154
164
  end
155
165
 
@@ -160,6 +170,28 @@ module StandupMD
160
170
  def prev_file
161
171
  StandupMD::File.find_by_date(Date.today.prev_month)
162
172
  end
173
+
174
+ ##
175
+ # The header.
176
+ #
177
+ # @param [StandupMD::Entry] entry
178
+ #
179
+ # @return [String]
180
+ def header(entry)
181
+ '#' * config.file.header_depth + ' ' +
182
+ entry.date.strftime(config.file.header_date_format)
183
+ end
184
+
185
+ ##
186
+ # The sub-header.
187
+ #
188
+ # @param [String] header_type
189
+ #
190
+ # @return [String]
191
+ def sub_header(header_type)
192
+ '#' * config.file.sub_header_depth + ' ' +
193
+ config.file.public_send("#{header_type}_header").capitalize
194
+ end
163
195
  end
164
196
  end
165
197
  end
@@ -1,14 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'config/cli'
2
4
  require_relative 'config/file'
3
5
  require_relative 'config/entry'
4
6
  require_relative 'config/entry_list'
5
7
 
6
8
  module StandupMD
7
-
8
9
  ##
9
10
  # This class provides a connector from StandupMD to the configuration classes.
10
11
  class Config
11
-
12
12
  ##
13
13
  # Reader for Cli config.
14
14
  #
@@ -1,12 +1,28 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'date'
3
4
 
4
5
  module StandupMD
5
6
  class Config
6
-
7
7
  ##
8
8
  # The configuration class for StandupMD::Cli
9
9
  class Cli
10
+ ##
11
+ # The default options.
12
+ #
13
+ # @return [Hash]
14
+ DEFAULTS = {
15
+ date: Date.today,
16
+ editor: ENV['VISUAL'] || ENV['EDITOR'] || 'vim',
17
+ verbose: false,
18
+ edit: true,
19
+ write: true,
20
+ print: false,
21
+ auto_fill_previous: true,
22
+ preference_file:
23
+ ::File.expand_path(::File.join(ENV['HOME'], '.standuprc'))
24
+ }.freeze
25
+
10
26
  ##
11
27
  # The editor to use when opening standup files. If one is not set, the
12
28
  # first of $VISUAL, $EDITOR, or vim will be used, in that order.
@@ -33,7 +49,7 @@ module StandupMD
33
49
  attr_accessor :edit
34
50
 
35
51
  ##
36
- # Should the cli write the file?
52
+ # Should the cli automatically write the new entry to the file?
37
53
  #
38
54
  # @param [Boolean] write
39
55
  #
@@ -41,7 +57,7 @@ module StandupMD
41
57
  attr_accessor :write
42
58
 
43
59
  ##
44
- # Should the cli print the entry?
60
+ # Should the cli print the entry to the command line?
45
61
  #
46
62
  # @param [Boolean] print
47
63
  #
@@ -49,7 +65,7 @@ module StandupMD
49
65
  attr_accessor :print
50
66
 
51
67
  ##
52
- # The date to use to find the file.
68
+ # The date to use to find the entry.
53
69
  #
54
70
  # @param [Date] date
55
71
  #
@@ -82,24 +98,9 @@ module StandupMD
82
98
  ##
83
99
  # Sets all config values back to their defaults.
84
100
  #
85
- # @return [Boolean] true if successful
101
+ # @return [Hash]
86
102
  def reset
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
+ DEFAULTS.each { |k, v| instance_variable_set("@#{k}", v) }
103
104
  end
104
105
  end
105
106
  end
@@ -2,10 +2,19 @@
2
2
 
3
3
  module StandupMD
4
4
  class Config
5
-
6
5
  ##
7
6
  # The configuration class for StandupMD::Entry
8
7
  class Entry
8
+ ##
9
+ # The default options.
10
+ #
11
+ # @return [Hash]
12
+ DEFAULTS = {
13
+ current: ["<!-- ADD TODAY'S WORK HERE -->"],
14
+ previous: [],
15
+ impediments: ['None'],
16
+ notes: []
17
+ }.freeze
9
18
 
10
19
  ##
11
20
  # Tasks for "Current" section.
@@ -48,13 +57,9 @@ module StandupMD
48
57
  ##
49
58
  # Sets all config values back to their defaults.
50
59
  #
51
- # @return [Boolean] true if successful
60
+ # @return [Hash]
52
61
  def reset
53
- @current = ["<!-- ADD TODAY'S WORK HERE -->"]
54
- @previous = []
55
- @impediments = ['None']
56
- @notes = []
57
- true
62
+ DEFAULTS.each { |k, v| instance_variable_set("@#{k}", v) }
58
63
  end
59
64
  end
60
65
  end
@@ -7,6 +7,12 @@ 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
@@ -16,10 +22,9 @@ module StandupMD
16
22
  ##
17
23
  # Sets all config values back to their defaults.
18
24
  #
19
- # @return [Boolean] true if successful
25
+ # @return [Hash]
20
26
  def reset
21
- # TODO add order ascending or decending.
22
- true
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
  #
@@ -122,21 +144,9 @@ module StandupMD
122
144
  ##
123
145
  # Sets all config values back to their defaults.
124
146
  #
125
- # @return [Boolean] true if successful
147
+ # @return [Hash]
126
148
  def reset
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
149
+ DEFAULTS.each { |k, v| instance_variable_set("@#{k}", v) }
140
150
  end
141
151
 
142
152
  ##