rb-dayone 0.3.3 → 0.4.0
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/History.rdoc +4 -0
- data/bin/dayone +22 -5
- data/lib/rb-dayone/entry.rb +28 -2
- data/spec/entry_spec.rb +2 -3
- data/spec/spec_helper.rb +10 -0
- data/version.txt +1 -1
- metadata +2 -2
data/History.rdoc
CHANGED
data/bin/dayone
CHANGED
@@ -42,23 +42,40 @@ Note: setting location to "auto" will set it from the DayOne plist file.
|
|
42
42
|
end
|
43
43
|
|
44
44
|
command :add do |c|
|
45
|
-
c.syntax = "add [--text
|
45
|
+
c.syntax = "add [--text \"Entry text\"] [--image path/to/image.jpg] [--starred]"
|
46
46
|
c.description = "Add an entry to your DayOne journal."
|
47
47
|
c.summary = <<-end
|
48
48
|
Add an entry to your DayOne journal. By default will add an unstarred entry - use the --starred flag to change this.
|
49
49
|
|
50
|
-
If you don't specify the --text tag, it will read text from STDIN and use this as the journal entry.
|
50
|
+
If you don't specify the --text or --image tag, it will read text from STDIN and use this as the journal entry.
|
51
51
|
end
|
52
52
|
|
53
53
|
c.option "--text STRING", String, "Specify the journal entry text. If not specified, will read from STDIN"
|
54
54
|
c.option "--starred", "Mark the entry starrd"
|
55
|
+
c.option "--image path/to/image.jpg", "Add an image to the entry"
|
55
56
|
|
56
57
|
c.action do |args, opts|
|
57
58
|
require 'rb-dayone'
|
58
|
-
|
59
|
-
|
59
|
+
entry = DayOne::Entry.new
|
60
|
+
|
61
|
+
needs_stdin_help = !(opts.image || opts.text)
|
62
|
+
if needs_stdin_help
|
63
|
+
entry.entry_text = $stdin.read.strip
|
64
|
+
else
|
65
|
+
entry.entry_text = opts.text if opts.text
|
66
|
+
|
67
|
+
if opts.image
|
68
|
+
if File.exists? opts.image
|
69
|
+
entry.image = opts.image
|
70
|
+
else
|
71
|
+
puts "Can't find image: #{opts.image}"
|
72
|
+
exit 1
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
entry.starred = opts.starred
|
60
78
|
|
61
|
-
entry = DayOne::Entry.new entry_text, starred:starred
|
62
79
|
entry.create!
|
63
80
|
end
|
64
81
|
end
|
data/lib/rb-dayone/entry.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
require 'libxml'
|
2
|
+
require 'fileutils'
|
2
3
|
|
3
4
|
# A text-only journal entry for DayOne.
|
4
5
|
class DayOne::Entry
|
5
6
|
|
7
|
+
# A list of image extensions allowed for attached images
|
8
|
+
ALLOWED_IMAGES = ['.jpg','.jpeg']
|
9
|
+
|
6
10
|
# The date of the journal entry
|
7
11
|
attr_accessor :creation_date
|
8
12
|
|
@@ -14,6 +18,9 @@ class DayOne::Entry
|
|
14
18
|
|
15
19
|
# Whether the entry has been saved to file at all.
|
16
20
|
attr_accessor :saved
|
21
|
+
|
22
|
+
# Path to the entry image
|
23
|
+
attr_accessor :image
|
17
24
|
|
18
25
|
# The PList doctype, used for XML export
|
19
26
|
DOCTYPE = [:DOCTYPE, :plist, :PUBLIC, "-//Apple//DTD PLIST 1.0//EN", "http://www.apple.com/DTDs/PropertyList-1.0.dtd"]
|
@@ -76,13 +83,18 @@ class DayOne::Entry
|
|
76
83
|
end
|
77
84
|
|
78
85
|
# Create a .doentry file with this entry.
|
79
|
-
# This uses the #to_xml method to generate
|
80
|
-
#
|
86
|
+
# This uses the #to_xml method to generate the entry proper.
|
87
|
+
# It will also relocate its attached image, if required.
|
81
88
|
# @return [Boolean] true if the operation was successful.
|
82
89
|
def create!
|
83
90
|
xml = self.to_xml
|
84
91
|
file_location = File.join(DayOne::journal_location,'entries',"#{uuid}.doentry")
|
85
92
|
File.open(file_location,'w'){ |io| io << xml }
|
93
|
+
if image
|
94
|
+
new_image_path = File.join(DayOne::journal_location, 'photos', "#{uuid}.jpg")
|
95
|
+
FileUtils.cp(image, new_image_path)
|
96
|
+
@image = new_image_path
|
97
|
+
end
|
86
98
|
return true
|
87
99
|
end
|
88
100
|
|
@@ -97,4 +109,18 @@ class DayOne::Entry
|
|
97
109
|
return true
|
98
110
|
end
|
99
111
|
end
|
112
|
+
|
113
|
+
# Assign an image to the entry
|
114
|
+
# For now, this will only accept jpeg images (extension is 'jpg' or 'jpeg', case-insensitive)
|
115
|
+
# Later, may support conversion via the appropriate library
|
116
|
+
# @param image_path [String] the path to the image
|
117
|
+
def image= image_path
|
118
|
+
if !File.exists?(image_path)
|
119
|
+
raise RuntimeError, "Tried to link a journal entry to the image #{image_path}, but it doesn't exist."
|
120
|
+
elsif image_path =~ /\.[^.]+$/ && ALLOWED_IMAGES.include?($&.downcase)
|
121
|
+
@image = image_path
|
122
|
+
else
|
123
|
+
raise RuntimeError, "Tried to link a journal entry to the image #{image_path}, but it's not a supported image format (#{ALLOWED_IMAGES.join(", ")})."
|
124
|
+
end
|
125
|
+
end
|
100
126
|
end
|
data/spec/entry_spec.rb
CHANGED
@@ -3,11 +3,11 @@ require 'fileutils'
|
|
3
3
|
|
4
4
|
describe DayOne::Entry do
|
5
5
|
before :each do
|
6
|
-
|
6
|
+
setup_working
|
7
7
|
end
|
8
8
|
|
9
9
|
after :each do
|
10
|
-
|
10
|
+
clean_working
|
11
11
|
end
|
12
12
|
|
13
13
|
describe "#to_xml" do
|
@@ -34,7 +34,6 @@ describe DayOne::Entry do
|
|
34
34
|
describe "#create!" do
|
35
35
|
it "should correctly create a .doentry file" do
|
36
36
|
|
37
|
-
DayOne::journal_location = spec_data('working')
|
38
37
|
|
39
38
|
e = subject
|
40
39
|
e.entry_text = "Hello, world!"
|
data/spec/spec_helper.rb
CHANGED
@@ -2,4 +2,14 @@ require './lib/rb-dayone'
|
|
2
2
|
|
3
3
|
def spec_data *path
|
4
4
|
File.join(File.dirname(__FILE__), 'data', *path)
|
5
|
+
end
|
6
|
+
|
7
|
+
def setup_working
|
8
|
+
FileUtils::mkdir_p spec_data('working/entries')
|
9
|
+
FileUtils::mkdir_p spec_data('working/photos')
|
10
|
+
DayOne::journal_location = spec_data('working')
|
11
|
+
end
|
12
|
+
|
13
|
+
def clean_working
|
14
|
+
FileUtils::rm_rf spec_data('working')
|
5
15
|
end
|
data/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rb-dayone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-10-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: builder
|