dewey 0.2.2 → 0.2.3
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/CHANGELOG.md +12 -0
- data/README.md +26 -6
- data/lib/dewey/core.rb +54 -27
- data/lib/dewey/version.rb +1 -1
- metadata +3 -3
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
## 0.2.3 (October 30, 2010)
|
2
|
+
|
3
|
+
Additions:
|
4
|
+
|
5
|
+
- #delete and #delete! accept an optional :trash option to send a resource
|
6
|
+
to the trash, rather than being fully deleted.
|
7
|
+
- #get and #elete by title. Handles exact matches only.
|
8
|
+
|
9
|
+
Bugfixes:
|
10
|
+
|
11
|
+
- Not setting the :format option on #get no longers raises
|
12
|
+
|
1
13
|
## 0.2.2 (October 27, 2010)
|
2
14
|
|
3
15
|
Changes:
|
data/README.md
CHANGED
@@ -42,35 +42,55 @@ first operation.
|
|
42
42
|
### Putting a Document
|
43
43
|
|
44
44
|
document = File.new('my_document.doc')
|
45
|
-
resource = Dewey.put(document, :title => 'My First Upload')
|
45
|
+
resource = Dewey.put(document, :title => 'My First Upload') #=> 'document:12345'
|
46
46
|
|
47
47
|
### Searching Documents
|
48
48
|
|
49
49
|
Exact search
|
50
50
|
|
51
|
-
|
51
|
+
Dewey.search('My Document', :exact => true) #=> ['document:12345']
|
52
52
|
|
53
53
|
Loose search
|
54
54
|
|
55
|
-
ids = Dewey.search('notes')
|
55
|
+
ids = Dewey.search('notes') #=> ['document:12', 'document:456']
|
56
56
|
|
57
57
|
### Getting a Document
|
58
58
|
|
59
59
|
Upload your file
|
60
60
|
|
61
61
|
id = Dewey.put(File.new('my_document.doc'), 'My Second Upload')
|
62
|
-
|
62
|
+
|
63
63
|
Get it in various formats
|
64
64
|
|
65
65
|
original = Dewey.get(id) #=> Tempfile
|
66
66
|
pdf = Dewey.get(id, :format => :pdf) #=> Tempfile
|
67
67
|
html = Dewey.get(id, :format => :html) #=> Tempfile
|
68
|
-
|
68
|
+
|
69
69
|
A tempfile is returned, so you'll have to move it
|
70
70
|
|
71
71
|
FileUtils.mv html.path, 'path/to/destination'
|
72
72
|
|
73
|
+
Getting a document by title. Unmatched searches return nil
|
74
|
+
|
75
|
+
Dewey.get('My Document') #=> Tempfile
|
76
|
+
Dewey.get('No Match') #=> nil
|
77
|
+
|
73
78
|
### Deleting a Document
|
74
79
|
|
80
|
+
Deleting a document from a resource id
|
81
|
+
|
75
82
|
id = Dewey.put(File.new('my_spreadsheet.xls'))
|
76
|
-
|
83
|
+
Dewey.delete(id) #=> true
|
84
|
+
|
85
|
+
Deleting by title. Unmatched searches return false
|
86
|
+
|
87
|
+
Dewey.delete('My Document') #=> true
|
88
|
+
Dewey.delete('No Match') #=> false
|
89
|
+
|
90
|
+
Sending to the trash rather than deleting
|
91
|
+
|
92
|
+
Dewey.delete('My Document', :trash => true) #=> true
|
93
|
+
|
94
|
+
If you would prefer an error when deletion fails
|
95
|
+
|
96
|
+
Dewey.delete!('My Document') #=> raise DeweyException
|
data/lib/dewey/core.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'uri'
|
2
2
|
require 'net/https'
|
3
|
-
require 'open-uri'
|
4
3
|
require 'rexml/document'
|
5
4
|
require 'tempfile'
|
6
5
|
|
@@ -88,22 +87,26 @@ module Dewey
|
|
88
87
|
|
89
88
|
# Download a file. You may optionally specify a format for export.
|
90
89
|
#
|
91
|
-
# @param [String]
|
90
|
+
# @param [String] query A resource id or title, `document:12345` or
|
91
|
+
# `My Document` for example
|
92
92
|
# @param [Hash] options Options for downloading the document
|
93
93
|
# @option options [Symbol] :format The output format
|
94
94
|
#
|
95
|
-
# @return [Tempfile] The downloaded file
|
95
|
+
# @return [Tempfile, nil] The downloaded file, otherwise `nil` if the file
|
96
|
+
# couldn't be found.
|
96
97
|
#
|
97
98
|
# @see Dewey::Validation::DOCUMENT_EXPORT_FORMATS
|
98
99
|
# @see Dewey::Validation::SPREADSHEET_EXPORT_FORMATS
|
99
100
|
# @see Dewey::Validation::PRESENTATION_EXPORT_FORMATS
|
100
|
-
def get(
|
101
|
-
|
102
|
-
format = options[:format].to_s
|
101
|
+
def get(query, options = {})
|
102
|
+
resource_id = is_id?(query) ? query : search(query, :exact => true).first
|
103
103
|
|
104
|
-
|
104
|
+
return nil if resource_id.nil?
|
105
|
+
|
106
|
+
service, id = resource_id.split(':')
|
107
|
+
format = options[:format].to_s
|
108
|
+
url = ''
|
105
109
|
|
106
|
-
url = ''
|
107
110
|
case service
|
108
111
|
when 'document'
|
109
112
|
url << GOOGLE_DOCUMENT_URL
|
@@ -113,28 +116,47 @@ module Dewey
|
|
113
116
|
url << "?key=#{id}"
|
114
117
|
end
|
115
118
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
119
|
+
unless format.blank?
|
120
|
+
if Dewey::Validation.valid_export_format?(format, service)
|
121
|
+
url << "&exportFormat=#{format}" unless format.blank?
|
122
|
+
else
|
123
|
+
raise DeweyException, "Invalid format: #{format}"
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
response = get_request(url, base_headers)
|
128
|
+
|
129
|
+
if response.kind_of?(Net::HTTPOK)
|
130
|
+
file = Tempfile.new([id, format].join('.'))
|
131
|
+
file.binmode
|
132
|
+
file.write(response.body)
|
133
|
+
file
|
134
|
+
else
|
135
|
+
nil
|
136
|
+
end
|
124
137
|
end
|
125
138
|
|
126
|
-
# Deletes a document
|
139
|
+
# Deletes a document. The default behavior is to delete the document
|
140
|
+
# permanently, rather than trashing it.
|
127
141
|
#
|
128
|
-
# @param [String]
|
142
|
+
# @param [String] query A resource id or title. If a title is provided
|
143
|
+
# a search will be performed automatically.
|
144
|
+
# @param [Hash] options Options for deleting the document
|
145
|
+
# @option options [Symbol] :trash If `true` the resource will be sent to
|
146
|
+
# the trash, rather than being permanently deleted.
|
129
147
|
#
|
130
148
|
# @return [Boolean] `true` if delete was successful, `false` otherwise
|
131
|
-
def delete(
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
149
|
+
def delete(query, options = {})
|
150
|
+
|
151
|
+
# We use 'If-Match' => '*' to make sure we delete regardless of others
|
152
|
+
headers = base_headers(false).merge({'If-Match' => '*'})
|
153
|
+
trash = options.delete(:trash) || false
|
154
|
+
id = (is_id?(query)) ? query : search(query, :exact => true).first
|
155
|
+
|
156
|
+
return false if id.nil?
|
157
|
+
|
158
|
+
url = "#{GOOGLE_FEED_URL}/#{Dewey::Utils.escape(id)}"
|
159
|
+
url << "?delete=true" unless trash
|
138
160
|
|
139
161
|
response = delete_request(url, headers)
|
140
162
|
|
@@ -145,8 +167,8 @@ module Dewey
|
|
145
167
|
# the request fails.
|
146
168
|
#
|
147
169
|
# @see #delete
|
148
|
-
def delete!(
|
149
|
-
delete(
|
170
|
+
def delete!(query, options = {})
|
171
|
+
delete(query, options) || raise(DeweyException, "Unable to delete document")
|
150
172
|
end
|
151
173
|
|
152
174
|
[:search, :put, :get, :delete].each do |method|
|
@@ -237,5 +259,10 @@ module Dewey
|
|
237
259
|
xml = REXML::Document.new(response)
|
238
260
|
xml.elements.collect('//id') { |e| e.text.gsub('%3A', ':') }.reject(&:blank?)
|
239
261
|
end
|
262
|
+
|
263
|
+
# Is the string an id or a search query?
|
264
|
+
def is_id?(string)
|
265
|
+
string.match(/^(doc|spr|pres).+:.+$/)
|
266
|
+
end
|
240
267
|
end
|
241
268
|
end
|
data/lib/dewey/version.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
8
|
+
- 3
|
9
|
+
version: 0.2.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Parker Selbert
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-10-
|
17
|
+
date: 2010-10-30 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|