standup_md 0.3.2 → 0.3.7

Sign up to get free protection for your applications and to get access to all the features.
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
  ##