rb-dayone 0.6.0 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +4 -4
- data/Gemfile.lock +9 -7
- data/Manifest +5 -0
- data/README.md +43 -0
- data/lib/rb-dayone.rb +3 -2
- data/lib/rb-dayone/entry.rb +35 -14
- data/lib/rb-dayone/entry_importer.rb +5 -4
- data/lib/rb-dayone/search.rb +37 -46
- data/lib/rb-dayone/search_engine.rb +7 -0
- data/lib/rb-dayone/search_engines/creation_date_search.rb +32 -0
- data/lib/rb-dayone/search_engines/entry_text_search.rb +33 -0
- data/lib/rb-dayone/search_engines/starred_search.rb +30 -0
- data/lib/rb-dayone/search_engines/tag_search.rb +38 -0
- data/rb-dayone.gemspec +4 -4
- data/version.txt +1 -1
- metadata +38 -23
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: adbfa1eebd1eef8d92dcd87f14c71e94dcbf14a2
|
4
|
+
data.tar.gz: b27c9d5ca865527309979cafe70f77f78963f9e1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 326fbff745ce8c1bbc6d0dac35fe3bcb050977dfcac2514cba262dd8dd25733fc37babeb3cbda02d36ecfaecf531b7ac0334fbde23adcb1db1d061ef99d5fb99
|
7
|
+
data.tar.gz: c7c4deac6273fa964652bad4fab62113113eacac99731b403e574a448af039ef04c43adc36c79dcb976bf1391e5be093db87f3afdd870c787ed63bd66586e9be
|
data/Gemfile
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
source
|
1
|
+
source "https://www.rubygems.org"
|
2
2
|
|
3
|
-
gem
|
4
|
-
gem
|
5
|
-
gem
|
3
|
+
gem "builder", "~> 3.1.0"
|
4
|
+
gem "commander", "~> 4.1.2"
|
5
|
+
gem "nokogiri", "~> 1.6.0"
|
data/Gemfile.lock
CHANGED
@@ -1,16 +1,18 @@
|
|
1
1
|
GEM
|
2
|
-
remote:
|
2
|
+
remote: https://www.rubygems.org/
|
3
3
|
specs:
|
4
|
-
builder (
|
5
|
-
commander (4.1.
|
4
|
+
builder (3.1.4)
|
5
|
+
commander (4.1.5)
|
6
6
|
highline (~> 1.6.11)
|
7
|
-
highline (1.6.
|
8
|
-
|
7
|
+
highline (1.6.20)
|
8
|
+
mini_portile (0.5.2)
|
9
|
+
nokogiri (1.6.1)
|
10
|
+
mini_portile (~> 0.5.0)
|
9
11
|
|
10
12
|
PLATFORMS
|
11
13
|
ruby
|
12
14
|
|
13
15
|
DEPENDENCIES
|
14
|
-
builder (~>
|
16
|
+
builder (~> 3.1.0)
|
15
17
|
commander (~> 4.1.2)
|
16
|
-
nokogiri (~> 1.
|
18
|
+
nokogiri (~> 1.6.0)
|
data/Manifest
CHANGED
@@ -15,6 +15,11 @@ lib/rb-dayone/entry_importer.rb
|
|
15
15
|
lib/rb-dayone/location.rb
|
16
16
|
lib/rb-dayone/plist_reader.rb
|
17
17
|
lib/rb-dayone/search.rb
|
18
|
+
lib/rb-dayone/search_engine.rb
|
19
|
+
lib/rb-dayone/search_engines/creation_date_search.rb
|
20
|
+
lib/rb-dayone/search_engines/entry_text_search.rb
|
21
|
+
lib/rb-dayone/search_engines/starred_search.rb
|
22
|
+
lib/rb-dayone/search_engines/tag_search.rb
|
18
23
|
Manifest
|
19
24
|
Rakefile
|
20
25
|
rb-dayone.gemspec
|
data/README.md
CHANGED
@@ -21,6 +21,32 @@ When you're ready to save your entry, just run the `create!` method:
|
|
21
21
|
|
22
22
|
e.create!
|
23
23
|
|
24
|
+
### Searching
|
25
|
+
|
26
|
+
You can now search your DayOne archives. Use the `DayOne::Search` object to start a search:
|
27
|
+
|
28
|
+
s = DayOne::Search.new do
|
29
|
+
entry_text.include "Foo" # Entry must have "foo" in the entry text
|
30
|
+
entry_text.exclude "Bar" # Entry cannot have "bar" in the entry text
|
31
|
+
tag.include "baz" # Entry must be tagged "baz"
|
32
|
+
tag.exclude "caz" # Entry cannot be tagged "caz"
|
33
|
+
starred.is true # Entry is starred
|
34
|
+
starred.is false # Entry is not starred
|
35
|
+
creation_date.after t # Entry created after +t+
|
36
|
+
creation_date.before t # Entry created before +t+
|
37
|
+
end
|
38
|
+
|
39
|
+
s.results # Retrieve an array of search results
|
40
|
+
|
41
|
+
Most of these methods can be combined, e.g.:
|
42
|
+
|
43
|
+
s = DayOne::Search.new do
|
44
|
+
entry_text.include "Eggs"
|
45
|
+
entry_text.include "Milk"
|
46
|
+
end
|
47
|
+
|
48
|
+
This will only find posts that contain both the words "Eggs" and "Milk" in the entry text.
|
49
|
+
|
24
50
|
## Binary
|
25
51
|
|
26
52
|
Rb-dayone ships with a binary, `dayone`. Run `dayone --help` for instructions on how to use it.
|
@@ -35,6 +61,23 @@ Original author: [Jan-Yves Ruzicka](http://www.1klb.com). Get in touch [via emai
|
|
35
61
|
|
36
62
|
## History
|
37
63
|
|
64
|
+
### 0.7.1 / 2014-01-15
|
65
|
+
|
66
|
+
* [NEW] Save entries with `Entry#save!`, delete them with `Entry#delete!`
|
67
|
+
* [NEW] Remove entry tags with `Entry#remove_tag`.
|
68
|
+
* [FIXED] Will now recognise hashtags at the start of lines.
|
69
|
+
* [FIXED] EntryImporter now adds the UUID to generated Entries
|
70
|
+
* [FIXED] The `Entry#auto_tag` will now only accept tags with letters, numbers and underscores in them.
|
71
|
+
|
72
|
+
### 0.7.0 / 2014-01-14
|
73
|
+
|
74
|
+
* [NEW] Use `Entry#created_at` for `Entry#creation_date`, `Entry#auto_tag` for `Entry#add_tags_from_entry_text`
|
75
|
+
* [NEW] Search!
|
76
|
+
|
77
|
+
### 0.6.1 / 2014-01-13
|
78
|
+
|
79
|
+
* [FIXED] Updated gem versions
|
80
|
+
|
38
81
|
### 0.6.0 / 2013-01-14
|
39
82
|
|
40
83
|
* [NEW] Location support
|
data/lib/rb-dayone.rb
CHANGED
@@ -38,7 +38,7 @@ module DayOne
|
|
38
38
|
|
39
39
|
# The location of the DayOne journal file as determined by
|
40
40
|
# the DayOne plist file stored in +~/Library/Preferences+.
|
41
|
-
# @return [String] the
|
41
|
+
# @return [String] the DayOne journal location
|
42
42
|
def auto_journal_location
|
43
43
|
@auto_journal_location ||= File.expand_path(plist_reader.journal_location)
|
44
44
|
end
|
@@ -64,7 +64,8 @@ module DayOne
|
|
64
64
|
end
|
65
65
|
|
66
66
|
|
67
|
-
Dir[File.join(lib_root, "rb-dayone
|
67
|
+
Dir[File.join(lib_root, "rb-dayone/*.rb")].each{ |f| require f }
|
68
|
+
Dir[File.join(lib_root, "rb-dayone/search_engines/*.rb")].each{ |f| require f }
|
68
69
|
|
69
70
|
# Default values
|
70
71
|
DayOne::dayone_folder = File.join(ENV['HOME'], '.rb-dayone')
|
data/lib/rb-dayone/entry.rb
CHANGED
@@ -6,6 +6,8 @@ class DayOne::Entry
|
|
6
6
|
|
7
7
|
# The date of the journal entry
|
8
8
|
attr_accessor :creation_date
|
9
|
+
alias_method :created_at, :creation_date
|
10
|
+
alias_method :created_at=, :creation_date=
|
9
11
|
|
10
12
|
# The journal entry's body text
|
11
13
|
attr_accessor :entry_text
|
@@ -24,6 +26,10 @@ class DayOne::Entry
|
|
24
26
|
|
25
27
|
# The location of the entry.
|
26
28
|
attr_accessor :location
|
29
|
+
|
30
|
+
# The UUID of the entry. Auto-generated if it doesn't already exist, this
|
31
|
+
# shouldn't be manually set.
|
32
|
+
attr_accessor :uuid
|
27
33
|
|
28
34
|
# The PList doctype, used for XML export
|
29
35
|
DOCTYPE = [:DOCTYPE, :plist, :PUBLIC, "-//Apple//DTD PLIST 1.0//EN", "http://www.apple.com/DTDs/PropertyList-1.0.dtd"]
|
@@ -54,27 +60,34 @@ class DayOne::Entry
|
|
54
60
|
@uuid ||= `uuidgen`.gsub('-','').strip
|
55
61
|
end
|
56
62
|
|
63
|
+
# The file where this entry should/will be saved
|
64
|
+
def file
|
65
|
+
@file ||= File.join(DayOne::journal_location,'entries',"#{uuid}.doentry")
|
66
|
+
end
|
67
|
+
|
57
68
|
# Add a tag to the entry
|
58
69
|
# @param [String] str The string tag to add to the list.
|
59
70
|
def tag str
|
60
71
|
@tags << str.to_s
|
61
72
|
end
|
62
73
|
|
63
|
-
|
64
|
-
|
65
|
-
#
|
74
|
+
alias_method :add_tag, :tag
|
75
|
+
|
76
|
+
# Remove a tag from the entry
|
77
|
+
def remove_tag str
|
78
|
+
@tags.delete(str)
|
79
|
+
end
|
80
|
+
|
81
|
+
# Searches the entry text for tags (#foo) and adds them to the entry's tags.
|
82
|
+
# Only recognises letters, numbers and underscores in tags.
|
66
83
|
def add_tags_from_entry_text
|
67
|
-
@entry_text.scan(/(?<=[ \t])#(
|
68
|
-
m = m.shift
|
69
|
-
if m[-1] !~ /[a-zA-Z0-9]/
|
70
|
-
# Then the last char is a symbol or punctuation, and we should wipe it
|
71
|
-
m = m[0..-2]
|
72
|
-
end
|
73
|
-
tag m
|
74
|
-
end
|
84
|
+
@entry_text.scan(/(?<=[ \t\n])#([a-zA-Z0-9_]+)/){ |m| tag m.shift }
|
75
85
|
end
|
86
|
+
|
87
|
+
alias_method :auto_tag, :add_tags_from_entry_text
|
76
88
|
|
77
|
-
# The same as calling Entry#saved
|
89
|
+
# The same as calling Entry#saved. Tells you if this entry has been saved to
|
90
|
+
# file yet.
|
78
91
|
def saved?
|
79
92
|
saved
|
80
93
|
end
|
@@ -124,8 +137,7 @@ class DayOne::Entry
|
|
124
137
|
# @return [Boolean] true if the operation was successful.
|
125
138
|
def create!
|
126
139
|
xml = self.to_xml
|
127
|
-
|
128
|
-
File.open(file_location,'w'){ |io| io << xml }
|
140
|
+
File.open(self.file,'w'){ |io| io << xml }
|
129
141
|
if image
|
130
142
|
new_image_path = File.join(DayOne::journal_location, 'photos', "#{uuid}.jpg")
|
131
143
|
FileUtils.cp(image, new_image_path)
|
@@ -133,6 +145,15 @@ class DayOne::Entry
|
|
133
145
|
end
|
134
146
|
return true
|
135
147
|
end
|
148
|
+
|
149
|
+
alias_method :save!, :create!
|
150
|
+
|
151
|
+
# Deletes the .doentry file of this entry. This will remove the entry from
|
152
|
+
# your database, although you can reinstate it by calling +#save!+ on this
|
153
|
+
# object.
|
154
|
+
def delete!
|
155
|
+
FileUtils::rm self.file
|
156
|
+
end
|
136
157
|
|
137
158
|
# Check to make sure that we output valid xml
|
138
159
|
def xml_valid?
|
@@ -44,21 +44,22 @@ class DayOne::EntryImporter
|
|
44
44
|
creation_date: self['Creation Date'],
|
45
45
|
saved: true,
|
46
46
|
tags: self['Tags']||[],
|
47
|
-
location: self['Location']||{}
|
47
|
+
location: self['Location']||{},
|
48
|
+
uuid: self["UUID"]
|
48
49
|
)
|
49
50
|
end
|
50
51
|
|
51
52
|
private
|
52
53
|
|
54
|
+
# TODO Import images
|
55
|
+
|
53
56
|
# Process an XML tag. Returns a the value of the tag as a ruby value.
|
54
57
|
# @param [Nokogiri::XML::Element] element The element to process
|
55
58
|
# @return The values contained within the element
|
56
59
|
def process_value element
|
57
60
|
case element.name
|
58
61
|
when 'date'
|
59
|
-
|
60
|
-
Time.utc($1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i)
|
61
|
-
end
|
62
|
+
Time.parse(element.content)
|
62
63
|
when 'string'
|
63
64
|
element.content
|
64
65
|
when 'real'
|
data/lib/rb-dayone/search.rb
CHANGED
@@ -1,46 +1,24 @@
|
|
1
1
|
# A search of the database.
|
2
2
|
# Create this object with Search.new. Give it some parameters to search for, then
|
3
|
-
#
|
3
|
+
# use Search#[] to access results.
|
4
4
|
class DayOne::Search
|
5
|
-
|
6
|
-
#
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
attr_accessor :starred
|
11
|
-
|
12
|
-
# The entry must have this tag
|
13
|
-
attr_accessor :tag
|
14
|
-
|
15
|
-
# Initialize the search. Currently you can search by:
|
16
|
-
# * entry text
|
17
|
-
# * starred status
|
18
|
-
# * tag
|
19
|
-
#
|
20
|
-
# These can be passed in via hash.
|
21
|
-
# @param [Hash] hash a hash of search criteria, including:
|
22
|
-
# * +:entry_text+ - Text that the entry must include
|
23
|
-
# * +:starred+ - whether the entry is starred or not
|
24
|
-
# * +:tag+ - a tag that the entry must have
|
25
|
-
def initialize hash={}
|
26
|
-
hash.each do |k,v|
|
27
|
-
setter = "#{k}="
|
28
|
-
self.send(setter, v) if self.respond_to?(setter)
|
29
|
-
end
|
5
|
+
|
6
|
+
# Initialize the search. Takes a block, which allows
|
7
|
+
# access to an array of +SearchEngine+ subclasses.
|
8
|
+
def initialize &blck
|
9
|
+
instance_eval(&blck) if block_given?
|
30
10
|
end
|
31
11
|
|
32
|
-
# Fetch the results by searching.
|
12
|
+
# Fetch the results by searching.
|
33
13
|
# @return [Array] all entries matching your results
|
34
14
|
def results
|
35
15
|
if !@results
|
36
|
-
|
37
|
-
|
16
|
+
# Fetch files + data
|
17
|
+
@results = DayOne::entries.each_with_object({}){ |file, hash| hash[file] = File.read(file) }
|
38
18
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
@results = working_results
|
19
|
+
search_engines = self.active_search_engines
|
20
|
+
@results = @results.select{ |k,v| search_engines.all?{ |se| se.matches?(v) }}
|
21
|
+
@results = @results.map{ |file,data| DayOne::EntryImporter.new(data,file).to_entry }
|
44
22
|
end
|
45
23
|
@results
|
46
24
|
end
|
@@ -51,17 +29,30 @@ class DayOne::Search
|
|
51
29
|
def [] index
|
52
30
|
results[index]
|
53
31
|
end
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
32
|
+
|
33
|
+
# entry_text search engine
|
34
|
+
def entry_text
|
35
|
+
@entry_text ||= DayOne::EntryTextSearch.new
|
36
|
+
end
|
37
|
+
|
38
|
+
# starred search engine
|
39
|
+
def starred
|
40
|
+
@starred ||= DayOne::StarredSearch.new
|
41
|
+
end
|
42
|
+
|
43
|
+
# Tags search engine
|
44
|
+
def tag
|
45
|
+
@tag ||= DayOne::TagSearch.new
|
46
|
+
end
|
47
|
+
|
48
|
+
# Creation date search engine
|
49
|
+
def creation_date
|
50
|
+
@creation_date ||= DayOne::CreationDateSearch.new
|
51
|
+
end
|
52
|
+
|
53
|
+
# Returns an array of search engines which are defined and will actually do
|
54
|
+
# filtering.
|
55
|
+
def active_search_engines
|
56
|
+
[@entry_text, @starred, @tag, @creation_date].compact
|
66
57
|
end
|
67
58
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# Searches posts with a given creation date
|
2
|
+
class DayOne::CreationDateSearch < DayOne::SearchEngine
|
3
|
+
|
4
|
+
# No-argument initializer, sets default ivars.
|
5
|
+
def initialize
|
6
|
+
@before = nil
|
7
|
+
@after = nil
|
8
|
+
end
|
9
|
+
|
10
|
+
# Post must have occured before a given date
|
11
|
+
def before date
|
12
|
+
@before = date
|
13
|
+
end
|
14
|
+
|
15
|
+
# Post must have occured after a given date
|
16
|
+
def after date
|
17
|
+
@after = date
|
18
|
+
end
|
19
|
+
|
20
|
+
# Does this search widget match the date value of the given string?
|
21
|
+
# @returns [Boolean] Whether it matches or not
|
22
|
+
def matches? string
|
23
|
+
return true if !(@before || @after)
|
24
|
+
|
25
|
+
t = Time.parse string[%r|<key>Creation Date</key>\s+<date>(.*?)</date>|,1]
|
26
|
+
|
27
|
+
return (
|
28
|
+
!(@before && t >= @before) && # NOT (@before defined and event occurs after @before)
|
29
|
+
!(@after && t <= @after)
|
30
|
+
)
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# Searches the entry_text of a post
|
2
|
+
class DayOne::EntryTextSearch < DayOne::SearchEngine
|
3
|
+
|
4
|
+
# No-argument initializer, sets default ivars.
|
5
|
+
def initialize
|
6
|
+
@include = []
|
7
|
+
@exclude = []
|
8
|
+
end
|
9
|
+
|
10
|
+
# Posts must contain the following string in their entry text.
|
11
|
+
def include string
|
12
|
+
@include << string
|
13
|
+
end
|
14
|
+
|
15
|
+
# Posts cannot contain the following string in their entry text
|
16
|
+
def exclude string
|
17
|
+
@exclude << string
|
18
|
+
end
|
19
|
+
|
20
|
+
# Does this search widget match the entry text of the given string?
|
21
|
+
# @returns [Boolean] Whether it matches or not
|
22
|
+
def matches? string
|
23
|
+
entry_text = string[%r|<key>Entry Text</key>\s+<string>(.*?)</string>|m,1]
|
24
|
+
|
25
|
+
# Edge case: no entry text
|
26
|
+
return true if entry_text.nil? && @include.empty?
|
27
|
+
|
28
|
+
return (entry_text &&
|
29
|
+
@include.all?{ |s| entry_text.include?(s) } &&
|
30
|
+
@exclude.all?{ |s| !entry_text.include?(s) }
|
31
|
+
)
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Searches starred or unstarred posts
|
2
|
+
class DayOne::StarredSearch < DayOne::SearchEngine
|
3
|
+
|
4
|
+
# No-argument initializer, sets default ivars.
|
5
|
+
def initialize
|
6
|
+
@is = nil
|
7
|
+
end
|
8
|
+
|
9
|
+
# Posts must be starred true or false.
|
10
|
+
def is bool
|
11
|
+
@is = bool
|
12
|
+
end
|
13
|
+
|
14
|
+
# Unset search criterion
|
15
|
+
def unset
|
16
|
+
@is = nil
|
17
|
+
end
|
18
|
+
|
19
|
+
# Does this search widget match the starred value of the given string?
|
20
|
+
# @returns [Boolean] Whether it matches or not
|
21
|
+
def matches? string
|
22
|
+
return true if @is.nil?
|
23
|
+
|
24
|
+
starred_string = string[%r|<key>Starred</key>\s+<(.*)/>|m,1]
|
25
|
+
|
26
|
+
return (starred_string &&
|
27
|
+
(starred_string == "true") == @is
|
28
|
+
)
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# Searches the tags of a post
|
2
|
+
class DayOne::TagSearch < DayOne::SearchEngine
|
3
|
+
|
4
|
+
# No-argument initializer, sets default ivars.
|
5
|
+
def initialize
|
6
|
+
@include = []
|
7
|
+
@exclude = []
|
8
|
+
end
|
9
|
+
|
10
|
+
# Posts must have the following tag.
|
11
|
+
def include string
|
12
|
+
@include << to_tag(string)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Posts cannot have the following tag.
|
16
|
+
def exclude string
|
17
|
+
@exclude << to_tag(string)
|
18
|
+
end
|
19
|
+
|
20
|
+
# Does this search widget match the tags of the given string?
|
21
|
+
# @returns [Boolean] Whether it matches or not
|
22
|
+
def matches? string
|
23
|
+
tag_string = string[%r|<key>Tags</key>\s+<array>(.*?)</array>|m,1]
|
24
|
+
|
25
|
+
# Edge case: no tags
|
26
|
+
return true if @include.empty? && tag_string.nil?
|
27
|
+
|
28
|
+
return (tag_string &&
|
29
|
+
@include.all?{ |s| tag_string.include?(s) } &&
|
30
|
+
@exclude.all?{ |s| !tag_string.include?(s) }
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
def to_tag s
|
36
|
+
"<string>#{s}</string>"
|
37
|
+
end
|
38
|
+
end
|
data/rb-dayone.gemspec
CHANGED
@@ -5,7 +5,7 @@ Gem::Specification.new do |s|
|
|
5
5
|
s.version = File.read('version.txt')
|
6
6
|
|
7
7
|
s.summary = "Create DayOne journal entries in ruby."
|
8
|
-
s.description = "Create or search [DayOne](http://www.dayoneapp.com) journal entries simply and easily in ruby.
|
8
|
+
s.description = "Create or search [DayOne](http://www.dayoneapp.com) journal entries simply and easily in ruby."
|
9
9
|
|
10
10
|
s.author = 'Jan-Yves Ruzicka'
|
11
11
|
s.email = 'janyves.ruzicka@gmail.com'
|
@@ -18,8 +18,8 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.executables << 'dayone'
|
19
19
|
|
20
20
|
|
21
|
-
s.add_runtime_dependency 'builder', '~>
|
21
|
+
s.add_runtime_dependency 'builder', '~> 3.1.0'
|
22
22
|
s.add_runtime_dependency 'commander', '~> 4.1.2'
|
23
|
-
s.add_runtime_dependency 'libxml-ruby', '~> 2.
|
24
|
-
s.add_runtime_dependency 'nokogiri', '~> 1.
|
23
|
+
s.add_runtime_dependency 'libxml-ruby', '~> 2.7.0'
|
24
|
+
s.add_runtime_dependency 'nokogiri', '~> 1.6.0'
|
25
25
|
end
|
data/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.7.1
|
metadata
CHANGED
@@ -1,62 +1,73 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rb-dayone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.7.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Jan-Yves Ruzicka
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-01-14 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: builder
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
19
|
+
version: 3.1.0
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.1.0
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
28
|
name: commander
|
27
|
-
requirement:
|
28
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
31
|
- - ~>
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: 4.1.2
|
33
34
|
type: :runtime
|
34
35
|
prerelease: false
|
35
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 4.1.2
|
36
41
|
- !ruby/object:Gem::Dependency
|
37
42
|
name: libxml-ruby
|
38
|
-
requirement:
|
39
|
-
none: false
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
40
44
|
requirements:
|
41
45
|
- - ~>
|
42
46
|
- !ruby/object:Gem::Version
|
43
|
-
version: 2.
|
47
|
+
version: 2.7.0
|
44
48
|
type: :runtime
|
45
49
|
prerelease: false
|
46
|
-
version_requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.7.0
|
47
55
|
- !ruby/object:Gem::Dependency
|
48
56
|
name: nokogiri
|
49
|
-
requirement:
|
50
|
-
none: false
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
51
58
|
requirements:
|
52
59
|
- - ~>
|
53
60
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.
|
61
|
+
version: 1.6.0
|
55
62
|
type: :runtime
|
56
63
|
prerelease: false
|
57
|
-
version_requirements:
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.6.0
|
58
69
|
description: Create or search [DayOne](http://www.dayoneapp.com) journal entries simply
|
59
|
-
and easily in ruby.
|
70
|
+
and easily in ruby.
|
60
71
|
email: janyves.ruzicka@gmail.com
|
61
72
|
executables:
|
62
73
|
- dayone
|
@@ -74,6 +85,11 @@ files:
|
|
74
85
|
- lib/rb-dayone/location.rb
|
75
86
|
- lib/rb-dayone/plist_reader.rb
|
76
87
|
- lib/rb-dayone/search.rb
|
88
|
+
- lib/rb-dayone/search_engine.rb
|
89
|
+
- lib/rb-dayone/search_engines/creation_date_search.rb
|
90
|
+
- lib/rb-dayone/search_engines/entry_text_search.rb
|
91
|
+
- lib/rb-dayone/search_engines/starred_search.rb
|
92
|
+
- lib/rb-dayone/search_engines/tag_search.rb
|
77
93
|
- Manifest
|
78
94
|
- Rakefile
|
79
95
|
- rb-dayone.gemspec
|
@@ -81,27 +97,26 @@ files:
|
|
81
97
|
- version.txt
|
82
98
|
homepage: https://github.com/jyruzicka/rb-dayone
|
83
99
|
licenses: []
|
100
|
+
metadata: {}
|
84
101
|
post_install_message:
|
85
102
|
rdoc_options: []
|
86
103
|
require_paths:
|
87
104
|
- lib
|
88
105
|
- lib
|
89
106
|
required_ruby_version: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
107
|
requirements:
|
92
108
|
- - ! '>='
|
93
109
|
- !ruby/object:Gem::Version
|
94
110
|
version: '0'
|
95
111
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
-
none: false
|
97
112
|
requirements:
|
98
113
|
- - ! '>='
|
99
114
|
- !ruby/object:Gem::Version
|
100
115
|
version: '0'
|
101
116
|
requirements: []
|
102
117
|
rubyforge_project:
|
103
|
-
rubygems_version: 1.
|
118
|
+
rubygems_version: 2.1.0
|
104
119
|
signing_key:
|
105
|
-
specification_version:
|
120
|
+
specification_version: 4
|
106
121
|
summary: Create DayOne journal entries in ruby.
|
107
122
|
test_files: []
|