writer 0.3.0 → 0.3.1
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 +15 -0
- data/Rakefile +9 -0
- data/bin/wr +3 -3
- data/lib/writer/configuration.rb +25 -1
- data/lib/writer/file_creator.rb +3 -6
- data/lib/writer/file_namer.rb +22 -7
- data/lib/writer/version.rb +1 -1
- data/lib/writer.rb +7 -11
- data/spec/config_spec.rb +47 -0
- data/spec/creator_spec.rb +40 -0
- data/spec/namer_spec.rb +61 -0
- data/spec/writer_spec.rb +7 -74
- data/writer.gemspec +2 -0
- metadata +31 -10
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MDQ3ZTE5YWEwNzVlZTA4M2NmNzUyY2ExYzkwMWIyZWY4MTU5NDA0NQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NDdhNGJhZDYzNTZlZTY2YmNiNmM1MWM3NzcxMDlhMjRiYzU1NzkxYw==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MDUyNTE4ZWM4YjliZTg4OWQxMWZkZWU4N2EwNzVlZThhNDU3NWFiOGM4YTg5
|
10
|
+
NDg5MWQ2ZWFkMjQwYTczOWMwYzgyYmU5MmI1OGY5OGI3NTRiZTFlNjFmOWZj
|
11
|
+
YjgwYTBhYmIyNDQ3YTA0ZDhjOWZiNGIyMmZmZTFhNGQ5ODRhMDc=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NzU4NWUyOGRjNTExYjM5MmZlMzc5NWVmM2UwNTA1M2IxNDg4YjBhNWZiMWVi
|
14
|
+
ODY3ZWNkNzAzZjM4NjA3NzEzNjZkYTI3NjQ3MWE5ZDJhMDllZTA1OGQzNWFk
|
15
|
+
MmZiYmZjYTcyMGNhZjY1YzgyNzdmNTQxNzYxYzI5NDEzODRmOTI=
|
data/Rakefile
CHANGED
@@ -1,2 +1,11 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
2
|
require "bundler/gem_tasks"
|
3
|
+
require 'rspec/core/rake_task'
|
4
|
+
|
5
|
+
RSpec::Core::RakeTask.new(:spec)
|
6
|
+
task :default => :spec
|
7
|
+
|
8
|
+
RSpec::Core::RakeTask.new(:nested_spec) do |t|
|
9
|
+
t.rspec_opts = "--format nested"
|
10
|
+
end
|
11
|
+
task :nested => :nested_spec
|
data/bin/wr
CHANGED
@@ -6,10 +6,10 @@ filename = ARGV[0]
|
|
6
6
|
content = ARGV[1]
|
7
7
|
|
8
8
|
if (load_config = File.open('config/writer.yml') rescue nil)
|
9
|
-
|
9
|
+
writer_config = YAML.load(load_config)
|
10
10
|
|
11
|
-
Writer.configure do |
|
12
|
-
|
11
|
+
Writer.configure do |config|
|
12
|
+
config.template_path = writer_config['template_path']
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
data/lib/writer/configuration.rb
CHANGED
@@ -1,5 +1,29 @@
|
|
1
|
+
require "active_support/all"
|
2
|
+
|
1
3
|
module Writer
|
2
4
|
class Configuration
|
3
|
-
attr_accessor :template_path
|
5
|
+
attr_accessor :template_path, :date_format, :namer, :creator
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@namer ||= 'Writer::FileNamer'
|
9
|
+
@creator ||= 'Writer::FileCreator'
|
10
|
+
end
|
11
|
+
|
12
|
+
def namer
|
13
|
+
const(@namer)
|
14
|
+
end
|
15
|
+
|
16
|
+
def creator
|
17
|
+
const(@creator)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
def const(name)
|
22
|
+
if (parts = name.to_s.split('_')).size > 1
|
23
|
+
parts.collect(&:capitalize).join.constantize
|
24
|
+
else
|
25
|
+
name.constantize
|
26
|
+
end
|
27
|
+
end
|
4
28
|
end
|
5
29
|
end
|
data/lib/writer/file_creator.rb
CHANGED
@@ -3,12 +3,9 @@ require "writer/file_namer"
|
|
3
3
|
module Writer
|
4
4
|
class FileCreator
|
5
5
|
class << self
|
6
|
-
def create!(filename, content)
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
create_file(name, content)
|
11
|
-
File.open(name, 'r')
|
6
|
+
def create!(filename, content = nil)
|
7
|
+
create_file(filename, content)
|
8
|
+
File.open(filename, 'r')
|
12
9
|
end
|
13
10
|
|
14
11
|
private
|
data/lib/writer/file_namer.rb
CHANGED
@@ -1,10 +1,15 @@
|
|
1
|
+
require "date"
|
2
|
+
|
1
3
|
module Writer
|
2
4
|
class FileNamer
|
3
5
|
class << self
|
4
6
|
def name_for(filename)
|
5
|
-
|
7
|
+
filename ||= default_filename
|
8
|
+
|
9
|
+
name = fix_standard(filename)
|
6
10
|
name ||= fix_no_ext(filename)
|
7
11
|
name ||= prevent_overwrite(filename)
|
12
|
+
|
8
13
|
name
|
9
14
|
end
|
10
15
|
|
@@ -39,6 +44,20 @@ module Writer
|
|
39
44
|
name
|
40
45
|
end
|
41
46
|
|
47
|
+
def default_filename
|
48
|
+
date = Date.today
|
49
|
+
date.strftime("#{date_format}.md")
|
50
|
+
end
|
51
|
+
|
52
|
+
def separator_for(name, base = nil)
|
53
|
+
return "." if base || name.include?('.')
|
54
|
+
"--"
|
55
|
+
end
|
56
|
+
|
57
|
+
def config
|
58
|
+
@configuration ||= Writer.config
|
59
|
+
end
|
60
|
+
|
42
61
|
private
|
43
62
|
def append_count(name, separator, count)
|
44
63
|
basename = name.gsub(/(--|\.)\d*$/, '')
|
@@ -47,12 +66,8 @@ module Writer
|
|
47
66
|
[basename, separator, zero_pad, count].join
|
48
67
|
end
|
49
68
|
|
50
|
-
def
|
51
|
-
|
52
|
-
"."
|
53
|
-
else
|
54
|
-
"--"
|
55
|
-
end
|
69
|
+
def date_format
|
70
|
+
config.date_format || '%Y-%m%b-%d'
|
56
71
|
end
|
57
72
|
end
|
58
73
|
end
|
data/lib/writer/version.rb
CHANGED
data/lib/writer.rb
CHANGED
@@ -1,13 +1,11 @@
|
|
1
|
-
require "date"
|
2
1
|
require "writer/configuration"
|
3
2
|
require "writer/version"
|
4
|
-
require "writer/file_creator"
|
5
3
|
|
6
4
|
module Writer
|
7
5
|
class << self
|
8
6
|
def write!(name = nil, content = nil)
|
9
|
-
name
|
10
|
-
|
7
|
+
name = namer.name_for(name)
|
8
|
+
creator.create!(name, content)
|
11
9
|
end
|
12
10
|
|
13
11
|
def configure
|
@@ -16,15 +14,11 @@ module Writer
|
|
16
14
|
|
17
15
|
# attempt delegation to config
|
18
16
|
def method_missing(name, *args)
|
19
|
-
|
20
|
-
rescue
|
21
|
-
super
|
17
|
+
config.send(name, *args)
|
22
18
|
end
|
23
19
|
|
24
|
-
|
25
|
-
|
26
|
-
date = Date.today
|
27
|
-
date.strftime('%Y-%m%b-%d.md')
|
20
|
+
def config=(other)
|
21
|
+
@config = other
|
28
22
|
end
|
29
23
|
|
30
24
|
def config
|
@@ -33,6 +27,8 @@ module Writer
|
|
33
27
|
end
|
34
28
|
end
|
35
29
|
|
30
|
+
require "writer/file_creator"
|
31
|
+
|
36
32
|
def wr(*args)
|
37
33
|
`wr #{args.join(' ')}`
|
38
34
|
end
|
data/spec/config_spec.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require "writer"
|
2
|
+
class MyCreator; end
|
3
|
+
class MyNamer; end
|
4
|
+
|
5
|
+
module Writer
|
6
|
+
describe Configuration do
|
7
|
+
after :all do
|
8
|
+
Writer.config = Configuration.new
|
9
|
+
end
|
10
|
+
|
11
|
+
it "defaults template_path to nil" do
|
12
|
+
Writer.template_path.should be_nil
|
13
|
+
end
|
14
|
+
|
15
|
+
it "takes a template_path" do
|
16
|
+
Writer.configure do |c|
|
17
|
+
c.template_path = 'hi'
|
18
|
+
end
|
19
|
+
|
20
|
+
Writer.template_path.should == 'hi'
|
21
|
+
end
|
22
|
+
|
23
|
+
it "defaults creator to FileCreator" do
|
24
|
+
Writer.creator.should == FileCreator
|
25
|
+
end
|
26
|
+
|
27
|
+
it "takes a creator" do
|
28
|
+
Writer.configure do |c|
|
29
|
+
c.creator = :my_creator
|
30
|
+
end
|
31
|
+
|
32
|
+
Writer.creator.should == MyCreator
|
33
|
+
end
|
34
|
+
|
35
|
+
it "defaults namer to FileNamer" do
|
36
|
+
Writer.namer.should == FileNamer
|
37
|
+
end
|
38
|
+
|
39
|
+
it "takes a namer" do
|
40
|
+
Writer.configure do |c|
|
41
|
+
c.namer = :my_namer
|
42
|
+
end
|
43
|
+
|
44
|
+
Writer.namer.should == MyNamer
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require "writer/file_creator"
|
2
|
+
|
3
|
+
module Writer
|
4
|
+
describe FileCreator do
|
5
|
+
let(:file) { stub(:file) }
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
File.stub(:open)
|
9
|
+
.with('filename', 'w')
|
10
|
+
.and_yield(file)
|
11
|
+
|
12
|
+
File.stub(:open)
|
13
|
+
.with('filename', 'r')
|
14
|
+
.and_return(true)
|
15
|
+
end
|
16
|
+
|
17
|
+
context "with content" do
|
18
|
+
it "writes the content" do
|
19
|
+
file.should_receive(:puts).with('hi')
|
20
|
+
FileCreator.create!('filename', 'hi')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "without content" do
|
25
|
+
it "leaves a blank line" do
|
26
|
+
FileCreator.stub(:template) { nil }
|
27
|
+
file.should_receive(:puts).with(nil)
|
28
|
+
FileCreator.create!('filename')
|
29
|
+
end
|
30
|
+
|
31
|
+
it "uses a template, if it exists" do
|
32
|
+
template = stub(:read => "hello\nworld")
|
33
|
+
FileCreator.stub(:template) { template.read }
|
34
|
+
|
35
|
+
file.should_receive(:puts).with("hello\nworld")
|
36
|
+
FileCreator.create!('filename')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/spec/namer_spec.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
require "writer"
|
2
|
+
|
3
|
+
module Writer
|
4
|
+
describe FileNamer do
|
5
|
+
before :each do
|
6
|
+
File.stub(:exists?)
|
7
|
+
.with(/^\D+[^(\-\-)\d]$/)
|
8
|
+
.and_return(true)
|
9
|
+
|
10
|
+
File.stub(:exists?)
|
11
|
+
.with(/^\S*\d+.*$/)
|
12
|
+
.and_return(false)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "defaults to today's date" do
|
16
|
+
Date.stub(:today) do
|
17
|
+
Date.new(2012, 1, 3)
|
18
|
+
end
|
19
|
+
name = FileNamer.name_for(nil)
|
20
|
+
name.should == "2012-01Jan-03.md"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "uses a configured date format" do
|
24
|
+
Writer.configure do |config|
|
25
|
+
config.date_format = '%e-%m%b-%Y'
|
26
|
+
end
|
27
|
+
|
28
|
+
Date.stub(:today) do
|
29
|
+
Date.new(2013, 8, 12)
|
30
|
+
end
|
31
|
+
|
32
|
+
name = FileNamer.name_for(nil)
|
33
|
+
name.should == "12-08Aug-2013.md"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "prevents overwriting" do
|
37
|
+
name = FileNamer.name_for('hi')
|
38
|
+
name.should == 'hi--02'
|
39
|
+
end
|
40
|
+
|
41
|
+
it "plays well with standard filenames" do
|
42
|
+
name = FileNamer.name_for('std.rb')
|
43
|
+
name.should == 'std.02.rb'
|
44
|
+
end
|
45
|
+
|
46
|
+
it "plays well with a dot at the end" do
|
47
|
+
name = FileNamer.name_for('dot.')
|
48
|
+
name.should == 'dot.02.'
|
49
|
+
end
|
50
|
+
|
51
|
+
it "plays well with a dot at the beginning" do
|
52
|
+
name = FileNamer.name_for('.dot')
|
53
|
+
name.should == '.dot.02'
|
54
|
+
end
|
55
|
+
|
56
|
+
it "plays well with multiple dots" do
|
57
|
+
name = FileNamer.name_for('some.jquery.file')
|
58
|
+
name.should == 'some.jquery.02.file'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/spec/writer_spec.rb
CHANGED
@@ -1,14 +1,8 @@
|
|
1
1
|
require 'writer'
|
2
2
|
|
3
3
|
describe Writer do
|
4
|
-
before :each do
|
5
|
-
Date.stub(:today) do
|
6
|
-
Date.new(2012, 1, 3)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
4
|
after :all do
|
11
|
-
|
5
|
+
delete_files
|
12
6
|
end
|
13
7
|
|
14
8
|
it "creates today's file, blank" do
|
@@ -21,77 +15,16 @@ describe Writer do
|
|
21
15
|
file.read.should == "\n"
|
22
16
|
end
|
23
17
|
|
24
|
-
it "
|
25
|
-
50.times do
|
26
|
-
Writer.write!
|
27
|
-
end
|
28
|
-
|
29
|
-
File.open('2012-01Jan-03.02.md')
|
30
|
-
File.open('2012-01Jan-03.52.md')
|
31
|
-
end
|
32
|
-
|
33
|
-
it "plays well with no dots" do
|
34
|
-
file = Writer.write!('nodots')
|
35
|
-
File.basename(file).should == 'nodots'
|
36
|
-
|
37
|
-
file = Writer.write!('nodots')
|
38
|
-
File.basename(file).should == 'nodots--02'
|
39
|
-
end
|
40
|
-
|
41
|
-
it "plays well with a dot at the end" do
|
42
|
-
file = Writer.write!('dot.')
|
43
|
-
File.basename(file).should == 'dot.'
|
44
|
-
|
45
|
-
file = Writer.write!('dot.')
|
46
|
-
File.basename(file).should == 'dot.02.'
|
47
|
-
end
|
48
|
-
|
49
|
-
it "plays well with a dot at the beginning" do
|
50
|
-
file = Writer.write!('.dot')
|
51
|
-
File.basename(file).should == '.dot'
|
52
|
-
|
53
|
-
file = Writer.write!('.dot')
|
54
|
-
File.basename(file).should == '.dot.02'
|
55
|
-
end
|
56
|
-
|
57
|
-
it "plays well with multiple dots" do
|
58
|
-
Writer.write!('some.jquery.file')
|
59
|
-
file = Writer.write!('some.jquery.file')
|
60
|
-
File.basename(file).should == 'some.jquery.02.file'
|
61
|
-
end
|
62
|
-
|
63
|
-
it "creates the file with your custom name" do
|
18
|
+
it "uses your custom name" do
|
64
19
|
filename = "My custom filename.txt"
|
65
|
-
Writer.write!(filename)
|
66
|
-
File.open(filename)
|
67
|
-
end
|
68
|
-
|
69
|
-
it "uses a template, if it exists" do
|
70
|
-
body = "hello\nworld"
|
71
|
-
Writer.write!('.template', body)
|
72
|
-
|
73
|
-
Writer.configure do |c|
|
74
|
-
c.template_path = '.template'
|
75
|
-
end
|
76
20
|
|
77
|
-
|
78
|
-
|
21
|
+
Writer.write!(filename)
|
22
|
+
File.delete(filename)
|
79
23
|
end
|
80
24
|
end
|
81
25
|
|
82
|
-
def
|
83
|
-
|
84
|
-
|
85
|
-
File.delete("2012-01Jan-03.#{'0' if n < 8}#{n + 2}.md")
|
26
|
+
def delete_files
|
27
|
+
Dir.glob("20*.md") do |filename|
|
28
|
+
File.delete(filename)
|
86
29
|
end
|
87
|
-
File.delete('nodots')
|
88
|
-
File.delete('dot.')
|
89
|
-
File.delete('dot.02.')
|
90
|
-
File.delete('some.jquery.file')
|
91
|
-
File.delete('some.jquery.02.file')
|
92
|
-
File.delete('.template')
|
93
|
-
File.delete('My custom filename.txt')
|
94
|
-
File.delete('.dot')
|
95
|
-
File.delete('.dot.02')
|
96
|
-
File.delete('nodots--2')
|
97
30
|
end
|
data/writer.gemspec
CHANGED
metadata
CHANGED
@@ -1,27 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: writer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
5
|
-
prerelease:
|
4
|
+
version: 0.3.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Joe Sak
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-08-13 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ! '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
14
27
|
- !ruby/object:Gem::Dependency
|
15
28
|
name: rspec
|
16
|
-
requirement:
|
17
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
18
30
|
requirements:
|
19
31
|
- - ! '>='
|
20
32
|
- !ruby/object:Gem::Version
|
21
33
|
version: '0'
|
22
34
|
type: :development
|
23
35
|
prerelease: false
|
24
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
25
41
|
description: Easily start a new file to write in.
|
26
42
|
email:
|
27
43
|
- joe@joesak.com
|
@@ -44,32 +60,37 @@ files:
|
|
44
60
|
- lib/writer/file_namer.rb
|
45
61
|
- lib/writer/version.rb
|
46
62
|
- spec/.gitkeep
|
63
|
+
- spec/config_spec.rb
|
64
|
+
- spec/creator_spec.rb
|
65
|
+
- spec/namer_spec.rb
|
47
66
|
- spec/writer_spec.rb
|
48
67
|
- writer.gemspec
|
49
68
|
homepage: ''
|
50
69
|
licenses: []
|
70
|
+
metadata: {}
|
51
71
|
post_install_message:
|
52
72
|
rdoc_options: []
|
53
73
|
require_paths:
|
54
74
|
- lib
|
55
75
|
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
-
none: false
|
57
76
|
requirements:
|
58
77
|
- - ! '>='
|
59
78
|
- !ruby/object:Gem::Version
|
60
79
|
version: '0'
|
61
80
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
-
none: false
|
63
81
|
requirements:
|
64
82
|
- - ! '>='
|
65
83
|
- !ruby/object:Gem::Version
|
66
84
|
version: '0'
|
67
85
|
requirements: []
|
68
86
|
rubyforge_project:
|
69
|
-
rubygems_version:
|
87
|
+
rubygems_version: 2.0.5
|
70
88
|
signing_key:
|
71
|
-
specification_version:
|
89
|
+
specification_version: 4
|
72
90
|
summary: Start a new file and write in it.
|
73
91
|
test_files:
|
74
92
|
- spec/.gitkeep
|
93
|
+
- spec/config_spec.rb
|
94
|
+
- spec/creator_spec.rb
|
95
|
+
- spec/namer_spec.rb
|
75
96
|
- spec/writer_spec.rb
|