Class: Writer::FileNamer

Inherits:
Object
  • Object
show all
Defined in:
lib/writer/file_namer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeFileNamer

Returns a new instance of FileNamer.



7
8
9
# File 'lib/writer/file_namer.rb', line 7

def initialize
  @config = Writer.config
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



5
6
7
# File 'lib/writer/file_namer.rb', line 5

def config
  @config
end

Instance Method Details

#default_filenameObject



52
53
54
55
# File 'lib/writer/file_namer.rb', line 52

def default_filename
  date = Date.today
  date.strftime("#{date_format}.md")
end

#fix_no_ext(name) ⇒ Object



31
32
33
34
35
36
37
# File 'lib/writer/file_namer.rb', line 31

def fix_no_ext(name)
  if /\.$/ =~ name
    basename = name.gsub('.', '')

    prevent_overwrite(name, basename)
  end
end

#fix_standard(name) ⇒ Object



21
22
23
24
25
26
27
28
29
# File 'lib/writer/file_namer.rb', line 21

def fix_standard(name)
  if /.+\..+/ =~ name
    parts = name.split('.')
    basename = parts[0..-2].join('.')
    extension = parts.last

    prevent_overwrite(name, basename, extension)
  end
end

#name_for(filename) ⇒ Object



11
12
13
14
15
16
17
18
19
# File 'lib/writer/file_namer.rb', line 11

def name_for(filename)
  filename ||= default_filename

  name   = fix_standard(filename)
  name ||= fix_no_ext(filename)
  name ||= prevent_overwrite(filename)

  name
end

#prevent_overwrite(name, base = nil, ext = nil) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/writer/file_namer.rb', line 39

def prevent_overwrite(name, base = nil, ext = nil)
  separator = separator_for(name, base)
  to_fix = base || name
  count = 1

  while File.exists?(name)
    name = append_count(to_fix, separator, count += 1)
    name << ".#{ext}" if base
  end

  name
end

#separator_for(name, base = nil) ⇒ Object



57
58
59
60
# File 'lib/writer/file_namer.rb', line 57

def separator_for(name, base = nil)
  return "." if base || name.include?('.')
  "--"
end