noter 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e8f6fe54a4f2f67331927a21e0ea69f8dffb6f04
4
- data.tar.gz: e45c54aef26210f5b3a05c1c73467527717cc557
3
+ metadata.gz: c87786d868ea352b1cba38c7cc11531c8a438cc8
4
+ data.tar.gz: 27bc6a124918df8f115aac6ec4dd35669191ae13
5
5
  SHA512:
6
- metadata.gz: 452aff5b4e6a9ee30d831ab11b640dbdb9fedea44fecf12043a3bcd3a7a0d84d845546a679034ee93027149e678df3f092cd750798aaca17421b17d22cca674e
7
- data.tar.gz: 21ce2e5cf5db5677077f8e66157a3621a30ffcd35b5660a22c59eb3c80a254ee4ac29a522b0687640ff271c120546ab91ebe3d80eb9f85f2296cdaf980783c97
6
+ metadata.gz: e460c85a77f5e210dd9e1b44e85ea61e57dfc00f12955679cfd5de90f15a34d681090afcfd18691996073fa8a02fd4555ae8e0c81fc69c95870e0c79940d31d6
7
+ data.tar.gz: fa88760035b1659513e3846802b91eac0c80751f87e4cd42f0d0c2abcb3c8f633657a2402967f34acda8e6191c2b9d6aad28ae1a77bd2609000b836a8e89a15a
data/bin/noter CHANGED
@@ -4,22 +4,63 @@ require "noter"
4
4
  require "optparse"
5
5
 
6
6
  class NoteRunner
7
+ def initialize
8
+ @paging = true
9
+ end
10
+
7
11
  def run(args)
12
+ run_parser
13
+ run_command
14
+ end
15
+
16
+ def run_command
17
+ case @command
18
+ when :make_from_file
19
+ Noter::FileMaker.new.make_from_file(@filename)
20
+ when :show_first_lines
21
+ Noter::Viewer.new(:paging => @paging).show_first_lines(:with_filename => @show_names)
22
+ when :create_from_string
23
+ Noter::FileMaker.new(@message).save_file
24
+ when :show_last_n_files
25
+ Noter::Viewer.new(:paging => @paging).show_last_n_files(@count)
26
+ when :show_file_from_index
27
+ Noter::Viewer.new(:paging => @paging).show_file_from_index(@index)
28
+ end
29
+ end
30
+
31
+ def run_parser
8
32
  parser = OptionParser.new do |opts|
9
33
  opts.on("-f", "--file FILE", "Create a note using the given file") do |filename|
10
- Noter::FileMaker.new.make_from_file(filename)
34
+ @command = :make_from_file
35
+ @filename = filename
11
36
  end
12
37
 
13
38
  opts.on("-l", "--one-line", "Show first line of each note file") do
14
- Noter::Viewer.new.show_first_lines
39
+ @command = :show_first_lines
15
40
  end
16
41
 
17
- opts.on("-n", "--name", "Show first line of each note file, with filename") do
18
- Noter::Viewer.new.show_first_lines(with_filename: true)
42
+ opts.on("-n", "--name", "Include names when showing files") do
43
+ @command = :show_first_lines
44
+ @show_names = true
19
45
  end
20
46
 
21
47
  opts.on("-m", "--message MESSAGE", "Create a note using the given string") do |message|
22
- Noter::FileMaker.new(message).save_file
48
+ @command = :create_from_string
49
+ @message = message
50
+ end
51
+
52
+ opts.on("-t", "--tail COUNT", "the last n files") do |count|
53
+ @command = :show_last_n_files
54
+ @count = count
55
+ end
56
+
57
+ opts.on("-s", "--show INDEX", "Show a file with the given index") do |index|
58
+ @command = :show_file_from_index
59
+ @index = index
60
+ end
61
+
62
+ opts.on("-u", "--unpaged", "Don't page the output") do |count|
63
+ @paging = false
23
64
  end
24
65
  end
25
66
  parser.parse!
data/lib/noter/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Noter
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/noter/viewer.rb CHANGED
@@ -1,9 +1,18 @@
1
1
  require "noter/note_file"
2
+ require "pager"
2
3
 
3
4
  module Noter
4
5
  class Viewer
6
+ include Pager
7
+
8
+ attr_reader :do_paging
9
+
10
+ def initialize(options = {})
11
+ @do_paging = options[:paging].nil? ? true : options[:paging]
12
+ end
13
+
5
14
  def existing_files
6
- Dir.glob("#{NoteFile.dir}/*")
15
+ @existing_files ||= Dir.glob("#{NoteFile.dir}/*")
7
16
  end
8
17
 
9
18
  def show_first_lines(options = {})
@@ -16,5 +25,26 @@ module Noter
16
25
  puts "#{file.formatted_time}: #{filename_string}#{file.first_line}"
17
26
  end
18
27
  end
28
+
29
+ def filename_from_index(index)
30
+ existing_files[index.to_i]
31
+ end
32
+
33
+ def show_file_from_index(index)
34
+ show_file(filename_from_index(index))
35
+ end
36
+
37
+ def show_file(filename)
38
+ contents = File.read(filename)
39
+ page if @do_paging
40
+ puts contents
41
+ end
42
+
43
+ def show_last_n_files(num_files)
44
+ existing_files.last(num_files.to_i).each do |filename|
45
+ puts "\n\n#{filename}"
46
+ show_file(filename)
47
+ end
48
+ end
19
49
  end
20
50
  end
data/noter.gemspec CHANGED
@@ -25,4 +25,5 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency "fakefs", "~> 0.5"
26
26
  spec.add_development_dependency "pry", "~> 0.10"
27
27
  spec.add_development_dependency "pry-nav", "~> 0.2"
28
+ spec.add_dependency "pager", "~> 1.0"
28
29
  end
@@ -5,11 +5,16 @@ require "noter/viewer"
5
5
  module Noter
6
6
  describe Viewer do
7
7
  let(:viewer) { Noter::Viewer.new }
8
+ let(:file_1_name) { "#{NoteFile.dir}/2014_09_21_18_20_22.txt" }
9
+ let(:file_2_name) { "#{NoteFile.dir}/2014_09_21_19_20_22.txt" }
10
+ let(:file_1_contents) { "file 1\nline 2" }
11
+ let(:file_2_contents) { "file 2\nline 2" }
8
12
 
9
13
  before do
10
14
  FileUtils.mkdir_p NoteFile.dir
11
- File.write("#{NoteFile.dir}/2014_09_21_18_20_22.txt", "file 1\nline 2")
12
- File.write("#{NoteFile.dir}/2014_09_21_19_20_22.txt", "file 2\nline 2")
15
+ File.write(file_1_name, file_1_contents)
16
+ File.write(file_2_name, file_2_contents)
17
+ allow(viewer).to receive(:puts)
13
18
  end
14
19
 
15
20
  describe "#existing_files" do
@@ -31,6 +36,63 @@ module Noter
31
36
  viewer.show_first_lines(with_filename: true)
32
37
  end
33
38
  end
39
+
40
+ describe "#show_file" do
41
+ it "puts the file" do
42
+ expect(viewer).to receive(:puts).with(file_1_contents)
43
+ viewer.show_file(file_1_name)
44
+ end
45
+ end
46
+
47
+ describe "#show_file_from_index" do
48
+ it "puts the file" do
49
+ expect(viewer).to receive(:puts).with(file_1_contents)
50
+ viewer.show_file_from_index(0)
51
+ end
52
+ end
53
+
54
+ describe "when paging is enabled" do
55
+ let(:viewer) { Noter::Viewer.new({:paging => false}) }
56
+
57
+ it "doesn't page" do
58
+ expect(viewer).to_not receive(:page)
59
+ viewer.show_file_from_index(0)
60
+ end
61
+ end
62
+
63
+ describe "when paging is not enabled" do
64
+ let(:viewer) { Noter::Viewer.new }
65
+
66
+ it "doesn't page" do
67
+ expect(viewer).to receive(:page)
68
+ viewer.show_file_from_index(0)
69
+ end
70
+ end
71
+
72
+ describe "#show_last_n_files" do
73
+ it "puts the last two files" do
74
+ expect(viewer).to receive(:puts).with("\n\n#{file_1_name}")
75
+ expect(viewer).to receive(:puts).with(file_1_contents)
76
+ expect(viewer).to receive(:puts).with("\n\n#{file_2_name}")
77
+ expect(viewer).to receive(:puts).with(file_2_contents)
78
+ viewer.show_last_n_files(2)
79
+ end
80
+
81
+ it "converts string args to int" do
82
+ expect {
83
+ viewer.show_last_n_files("2")
84
+ }.to_not raise_error
85
+ end
86
+ end
87
+
88
+ describe "#filename_from_index" do
89
+ it "returns the filename associated with the index" do
90
+ expect(viewer.filename_from_index(0)).to eql(file_1_name)
91
+ end
92
+
93
+ it "converts the index from string to int" do
94
+ expect(viewer.filename_from_index("0")).to eql(file_1_name)
95
+ end
96
+ end
34
97
  end
35
98
  end
36
-
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: noter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Roush
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-23 00:00:00.000000000 Z
11
+ date: 2014-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0.2'
111
+ - !ruby/object:Gem::Dependency
112
+ name: pager
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.0'
111
125
  description: 'Inspired (read: stolen) from the ''journal'' and ''jrnl'' python progrsm.
112
126
  At the moment, those are more developed; use them instead of this.'
113
127
  email: