dropboximus_prime 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/dropboximus_prime.rb +181 -0
- metadata +46 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5532f0bc696c5c601838a3d6ce9d3b6ada885eba
|
4
|
+
data.tar.gz: 76ab84b5a565016c2a7ecf56c920a3ae0aabdfa6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4aaab11bab033a435a07112a2c6e8a70b918506cbffebe4058626509e9ee0b1e97cd19d80a2783fe8f4447882af5bfc63b303584420ae8a4cfefa16249ff02d1
|
7
|
+
data.tar.gz: 4bf2ecba2e7e8c67d4ff938cfca20355c6018b32d23d8b64bc4d6887d68ee1a35b814cad286b391f2172a2161fd14b74973e4d3e5d9663e62ce3a68a1fb43180
|
@@ -0,0 +1,181 @@
|
|
1
|
+
require 'delegate'
|
2
|
+
require 'yaml'
|
3
|
+
require 'dropbox_sdk'
|
4
|
+
require 'redcarpet'
|
5
|
+
require 'guid'
|
6
|
+
require 'pathname'
|
7
|
+
require 'fileutils'
|
8
|
+
|
9
|
+
class DropboximusPrime
|
10
|
+
attr_accessor :settings
|
11
|
+
|
12
|
+
def initialize settings=false
|
13
|
+
@settings = !settings ? YAML.load_file('config/drizzle_settings.yml') : settings
|
14
|
+
@dropbox = DropboxClient.new(@settings['dropbox']['access_token'])
|
15
|
+
@markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: true, tables: true)
|
16
|
+
end
|
17
|
+
|
18
|
+
def get *items
|
19
|
+
gotten = []
|
20
|
+
items.each { |item| gotten << get_item(item) }
|
21
|
+
gotten.length == 1 ? gotten.first : gotten
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_item simple_path
|
25
|
+
filepath = proper_path(simple_path)
|
26
|
+
puts filepath
|
27
|
+
|
28
|
+
return false unless File.exist?(filepath)
|
29
|
+
|
30
|
+
item = File.read(filepath)
|
31
|
+
|
32
|
+
return YAML.load(item) if is_yaml?(filepath)
|
33
|
+
return @markdown.render(item) if is_markdown?(filepath)
|
34
|
+
return image_info(simple_path) if is_image?(filepath)
|
35
|
+
item
|
36
|
+
end
|
37
|
+
|
38
|
+
def refresh! *items
|
39
|
+
items = dropbox_lsr_f(@settings['dropbox']['path']) unless items.length > 0
|
40
|
+
items.each { |i| refresh_item!(dropbox_path_to_simple_path(i), @settings['cache']['timeout']) }
|
41
|
+
end
|
42
|
+
|
43
|
+
def refresh_item! simple_path, cache_timeout=nil
|
44
|
+
filename = Pathname.new(simple_path).basename.to_s
|
45
|
+
local_filepath = proper_path(simple_path)
|
46
|
+
local_path = local_filepath.sub('/' + filename,'')
|
47
|
+
dropbox_filepath = dropbox_path(simple_path)
|
48
|
+
tmp_filepath = make_tmp_path
|
49
|
+
|
50
|
+
return false unless item_stale?(local_filepath, cache_timeout)
|
51
|
+
return false unless dropbox_file_exists?(dropbox_filepath)
|
52
|
+
|
53
|
+
store(dropbox_filepath, local_filepath, local_path, tmp_filepath)
|
54
|
+
|
55
|
+
if is_image? filename
|
56
|
+
dropbox_thumbnail_sizes.each { |size| store_thumbnail(dropbox_filepath, local_filepath, local_path, tmp_filepath, size) }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def store(dropbox_filepath, local_filepath, local_path, tmp_filepath)
|
63
|
+
File.open(tmp_filepath, 'w') { |file| file.write(@dropbox.get_file(dropbox_filepath)) }
|
64
|
+
FileUtils::mkdir_p local_path unless File.directory? local_path
|
65
|
+
FileUtils.mv tmp_filepath, local_filepath
|
66
|
+
end
|
67
|
+
|
68
|
+
def store_thumbnail(dropbox_filepath, local_filepath, local_path, tmp_filepath, size)
|
69
|
+
extension = File.extname(local_filepath)
|
70
|
+
File.open(tmp_filepath, 'w') { |file| file.write(@dropbox.thumbnail(dropbox_filepath, size)) }
|
71
|
+
FileUtils::mkdir_p local_path unless File.directory? local_path
|
72
|
+
FileUtils.mv tmp_filepath, local_filepath.sub(extension, '_' + size + extension)
|
73
|
+
end
|
74
|
+
|
75
|
+
def dropbox_path simple_path
|
76
|
+
simple_path = strip_initial_path(simple_path)
|
77
|
+
@settings['dropbox']['path'] + '/' + simple_path
|
78
|
+
end
|
79
|
+
|
80
|
+
def dropbox_path_to_simple_path dropbox_path
|
81
|
+
dropbox_path.downcase.sub(@settings['dropbox']['path'].downcase + '/', '')
|
82
|
+
end
|
83
|
+
|
84
|
+
def dropbox_lsr(root_path, list=[])
|
85
|
+
@dropbox.metadata(root_path)['contents'].each { |obj|
|
86
|
+
dropbox_lsr(obj['path'], list) if obj['is_dir']
|
87
|
+
list << obj
|
88
|
+
}
|
89
|
+
list
|
90
|
+
end
|
91
|
+
|
92
|
+
def dropbox_lsr_d root_path
|
93
|
+
list = []
|
94
|
+
dropbox_lsr(root_path).each { |item| list << item['path'].downcase if item['is_dir'] == true }
|
95
|
+
list
|
96
|
+
end
|
97
|
+
|
98
|
+
def dropbox_lsr_f root_path
|
99
|
+
list = []
|
100
|
+
dropbox_lsr(root_path).each { |item| list << item['path'].downcase if item['is_dir'] == false }
|
101
|
+
list
|
102
|
+
end
|
103
|
+
|
104
|
+
def dropbox_file_exists? path
|
105
|
+
begin
|
106
|
+
meta = @dropbox.metadata path
|
107
|
+
!meta['is_deleted'] && !meta['is_dir']
|
108
|
+
rescue
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def strip_initial_path simple_path
|
113
|
+
simple_path = simple_path.sub('/','') if simple_path[0,1] == '/'
|
114
|
+
simple_path = simple_path.sub('./','') if simple_path[0,2] == './'
|
115
|
+
simple_path
|
116
|
+
end
|
117
|
+
|
118
|
+
def private_path simple_path
|
119
|
+
simple_path = strip_initial_path(simple_path)
|
120
|
+
@settings['cache']['path'] + '/' + simple_path
|
121
|
+
end
|
122
|
+
|
123
|
+
def public_path simple_path
|
124
|
+
simple_path = strip_initial_path(simple_path)
|
125
|
+
@settings['cache']['public_path'] + '/' + simple_path
|
126
|
+
end
|
127
|
+
|
128
|
+
def proper_path simple_path
|
129
|
+
public_file?(simple_path) ? public_path(simple_path) : private_path(simple_path)
|
130
|
+
end
|
131
|
+
|
132
|
+
def make_tmp_path
|
133
|
+
@settings['cache']['tmp_path'] + '/' + Guid.new.to_s
|
134
|
+
end
|
135
|
+
|
136
|
+
def dropbox_thumbnail_sizes
|
137
|
+
['s', 'm', 'l', 'xl']
|
138
|
+
end
|
139
|
+
|
140
|
+
def public_file? filepath
|
141
|
+
Pathname.new(filepath).basename.to_s.index('_') != 0
|
142
|
+
end
|
143
|
+
|
144
|
+
def is_image? filename
|
145
|
+
['.jpg', '.gif', '.png', '.bmp'].any? { |word| filename.include?(word) }
|
146
|
+
end
|
147
|
+
|
148
|
+
def is_markdown? filename
|
149
|
+
['.md','.markdown'].any? { |word| filename.include?(word) }
|
150
|
+
end
|
151
|
+
|
152
|
+
def is_yaml? filename
|
153
|
+
['.yml','.yaml'].any? { |word| filename.include?(word) }
|
154
|
+
end
|
155
|
+
|
156
|
+
def item_stale? filepath, cache_timeout=nil
|
157
|
+
return true unless File.exist? filepath
|
158
|
+
cache_timeout ||= @settings['cache']['timeout']
|
159
|
+
(Time.now - File.stat(filepath).mtime).to_i > cache_timeout
|
160
|
+
end
|
161
|
+
|
162
|
+
def image_info simple_path
|
163
|
+
p_path = @settings['cache']['public_prefix'] + simple_path
|
164
|
+
|
165
|
+
{
|
166
|
+
'public_path' => p_path,
|
167
|
+
'thumbnails' => {
|
168
|
+
's' => insert_into_filename_before_extension(p_path, '_s'),
|
169
|
+
'm' => insert_into_filename_before_extension(p_path, '_m'),
|
170
|
+
'l' => insert_into_filename_before_extension(p_path, '_l'),
|
171
|
+
'xl' => insert_into_filename_before_extension(p_path, '_xl')
|
172
|
+
}
|
173
|
+
}
|
174
|
+
end
|
175
|
+
|
176
|
+
def insert_into_filename_before_extension(filename, insert)
|
177
|
+
extension = File.extname(filename)
|
178
|
+
filename.reverse.sub(extension.reverse, (insert + extension).reverse).reverse
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
metadata
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dropboximus_prime
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ryan Burnette
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-07-28 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Dropboximus Prime is a content cacher and processor written for Dropbox
|
14
|
+
in Ruby.
|
15
|
+
email: ryan.burnette@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/dropboximus_prime.rb
|
21
|
+
homepage: http://ryanburnette.com/dropboximus-prime
|
22
|
+
licenses:
|
23
|
+
- Apache2
|
24
|
+
metadata: {}
|
25
|
+
post_install_message:
|
26
|
+
rdoc_options: []
|
27
|
+
require_paths:
|
28
|
+
- lib
|
29
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
requirements: []
|
40
|
+
rubyforge_project:
|
41
|
+
rubygems_version: 2.2.2
|
42
|
+
signing_key:
|
43
|
+
specification_version: 4
|
44
|
+
summary: Dropboximus Prime is a content cacher and processor written for Dropbox in
|
45
|
+
Ruby.
|
46
|
+
test_files: []
|