rubyfocus 0.4.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Manifest +2 -1
- data/README.md +2 -34
- data/lib/rubyfocus/fetchers/fetcher.rb +19 -1
- data/lib/rubyfocus/items/named_item.rb +4 -0
- data/lib/rubyfocus/items/task.rb +1 -1
- data/lib/rubyfocus/patch.rb +17 -2
- data/version.txt +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2de36243510c62436694de980a91adeee728d06a
|
4
|
+
data.tar.gz: ba5e7631fcab8e3e15b1f29b9ea3aaa631fe1bec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ef2f8b0838f15d69405d4905ff88d5c70c13b88d31453afbf67bca75cc881202c4df4b5ca628cec5e95348bf7623f752d911f842fe73be0b1847ce2736a0322
|
7
|
+
data.tar.gz: 98c217b5fe2f8adf38a584bb26737b94c4f1b9719af4a8b24831220f13d0d8073930aca00fc7ba8f3169461b9adb3eb5fd3952e12e2a8fe6e82eeeab95300f9e
|
data/Manifest
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Version: 0.
|
1
|
+
# Version: 0.5.0
|
2
2
|
|
3
3
|
Rubyfocus is a one-way (read-only) ruby bridge to OmniFocus. Analyse, store, inspect, or play with your projects and tasks in OmniFocus from the comfort and flexibility of ruby!
|
4
4
|
|
@@ -106,36 +106,4 @@ Rubyfocus makes use of this by fetching and reading OmniFocus' local store on yo
|
|
106
106
|
|
107
107
|
`rubyfocus` is a work in progress. In the near future I hope to release a more comprehensive document detailing exactly which details of OmniFocus' projects and tasks are available to the user, and what you can do with them.
|
108
108
|
|
109
|
-
|
110
|
-
|
111
|
-
* Registering with the Omni Sync Server, so you don't need to always delete + reinstantiate the database.
|
112
|
-
* Determining when you're "detached" from the latest version on the OSS.
|
113
|
-
* A couple of example projects using rubyfocus (especially a static webpage generator for kanban)
|
114
|
-
|
115
|
-
# History
|
116
|
-
|
117
|
-
## 0.4.0 // 2016-01-01
|
118
|
-
|
119
|
-
* Happy new year!
|
120
|
-
* [Modified] Container IDRef is now located on RankedItem, rather than having several on each RankedItem subclass.
|
121
|
-
* [New] RankedItems can look at their ancestry much more easily, using RankedItem#ancestry and RankedItem#contained_within?
|
122
|
-
* [New] Documents now forbid elements with duplicate IDs unless Document#allow_duplicate_ids is set to true.
|
123
|
-
* [New] Patchers now treate CREATE nodes on elements whose IDs already exist in the database as UPDATE nodes
|
124
|
-
* [Fixed] Patchers will now interpret missing parameters as "default values" e.g. project update without `status` parameter assumed to be active.
|
125
|
-
|
126
|
-
## 0.3.1 // 2015-12-31
|
127
|
-
|
128
|
-
* [Bugfix] IDRefs will now return +nil+ if the relevant ID is not set.
|
129
|
-
|
130
|
-
## 0.3.0 // 2015-10-17
|
131
|
-
|
132
|
-
* [New] Now supports remote syncing with the Omni Sync Server!
|
133
|
-
|
134
|
-
## 0.2.0 // 2015-10-11
|
135
|
-
|
136
|
-
* [Bugfix] Will now turn tasks into projects and projects into tasks if the user has done this in OmniFocus.
|
137
|
-
* [Bugfix] Rubyfocus::Patch now does patch application, rather than delegating to the Fetcher.
|
138
|
-
|
139
|
-
## 0.1.0 // 2015-10-10
|
140
|
-
|
141
|
-
* Hello, world!
|
109
|
+
My main goal is to register with the Omni Sync Server, so you don't need to always delete + reinstantiate the database.
|
@@ -38,6 +38,24 @@ class Rubyfocus::Fetcher
|
|
38
38
|
raise RuntimeError, "Method Fetcher#patch called for abstract class Fetcher."
|
39
39
|
end
|
40
40
|
|
41
|
+
# Returns the latest patch
|
42
|
+
def head
|
43
|
+
@head ||= patches.sort.last
|
44
|
+
end
|
45
|
+
|
46
|
+
# Can you reach head from the given ID?
|
47
|
+
def can_reach_head_from?(id)
|
48
|
+
patch_array = patches.select{ |p| p.from_ids.include?(id) }
|
49
|
+
until patch_array.empty?
|
50
|
+
p = patch_array.first
|
51
|
+
return true if p == self.head
|
52
|
+
|
53
|
+
next_patches = patches.select{ |np| np.from_ids.include? p.to_id }
|
54
|
+
patch_array = patch_array[1..-1] + next_patches
|
55
|
+
end
|
56
|
+
return false
|
57
|
+
end
|
58
|
+
|
41
59
|
#---------------------------------------
|
42
60
|
# Patching methods
|
43
61
|
|
@@ -65,7 +83,7 @@ class Rubyfocus::Fetcher
|
|
65
83
|
# apply the latest one.
|
66
84
|
def next_patch(document)
|
67
85
|
all_possible_patches = self.patches.select{ |patch| patch.can_patch?(document) }
|
68
|
-
return all_possible_patches.
|
86
|
+
return all_possible_patches.sort.first
|
69
87
|
end
|
70
88
|
|
71
89
|
|
data/lib/rubyfocus/items/task.rb
CHANGED
@@ -67,7 +67,7 @@ class Rubyfocus::Task < Rubyfocus::RankedItem
|
|
67
67
|
# The first non-completed task, determined by order
|
68
68
|
def next_available_task
|
69
69
|
nat_candidate = immediate_tasks.select{ |t| !t.completed? }.sort_by(&:rank).first
|
70
|
-
if nat_candidate.has_subtasks?
|
70
|
+
if nat_candidate && nat_candidate.has_subtasks?
|
71
71
|
nat_candidate.next_available_task
|
72
72
|
else
|
73
73
|
nat_candidate
|
data/lib/rubyfocus/patch.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# The patch class represents a text-file patch, storing update, delete, and creation operations.
|
2
2
|
# It should also be able to apply itself to an existing document.
|
3
3
|
class Rubyfocus::Patch
|
4
|
+
include Comparable
|
4
5
|
# The fetcher this patch belongs to. We mainly use this to work out how to fetch content for the patch proper
|
5
6
|
attr_accessor :fetcher
|
6
7
|
|
@@ -113,8 +114,6 @@ class Rubyfocus::Patch
|
|
113
114
|
new_node = Rubyfocus::Parser.parse(nil, node)
|
114
115
|
if new_node
|
115
116
|
document.add_element(new_node, overwrite: true)
|
116
|
-
else
|
117
|
-
raise(RuntimeError, "Encountered unparsable XML during patch reading: #{node}.")
|
118
117
|
end
|
119
118
|
end
|
120
119
|
|
@@ -126,4 +125,20 @@ class Rubyfocus::Patch
|
|
126
125
|
"([#{from_ids.join(", ")}] -> #{to_id})"
|
127
126
|
end
|
128
127
|
end
|
128
|
+
|
129
|
+
def <=> o
|
130
|
+
if self.time.nil?
|
131
|
+
if o.time.nil?
|
132
|
+
0
|
133
|
+
else
|
134
|
+
-1
|
135
|
+
end
|
136
|
+
else
|
137
|
+
if o.time.nil?
|
138
|
+
1
|
139
|
+
else
|
140
|
+
self.time <=> o.time
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
129
144
|
end
|
data/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.1
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubyfocus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan-Yves Ruzicka
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -112,3 +112,4 @@ signing_key:
|
|
112
112
|
specification_version: 4
|
113
113
|
summary: Pure ruby bridge to OmniFocus.
|
114
114
|
test_files: []
|
115
|
+
has_rdoc:
|