skypager 0.1.2 → 0.2.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.
- checksums.yaml +4 -4
- data/Rakefile +0 -11
- data/bin/skypager +16 -10
- data/lib/skypager.rb +1 -69
- data/lib/skypager/cli.rb +14 -0
- data/lib/skypager/cli/01_extensions.rb +25 -0
- data/lib/skypager/cli/config.rb +41 -0
- data/lib/skypager/proxy.rb +0 -10
- data/lib/skypager/version.rb +1 -1
- data/skypager.gemspec +1 -15
- metadata +9 -216
- data/ARCHITECTURE.md +0 -34
- data/CONTRIBUTING.md +0 -7
- data/LICENSE.txt +0 -22
- data/bin/bootstrap.sh +0 -29
- data/examples/.gitignore +0 -4
- data/examples/blog-site/.gitignore +0 -18
- data/examples/blog-site/.pryrc +0 -4
- data/examples/blog-site/Gemfile +0 -8
- data/examples/blog-site/config.rb +0 -17
- data/examples/blog-site/data/dropbox.json +0 -1
- data/examples/blog-site/source/images/background.png +0 -0
- data/examples/blog-site/source/images/middleman.png +0 -0
- data/examples/blog-site/source/index.html.erb +0 -10
- data/examples/blog-site/source/javascripts/all.js +0 -1
- data/examples/blog-site/source/layouts/layout.erb +0 -19
- data/examples/blog-site/source/posts/introduction-to-skypager.html.md +0 -23
- data/examples/blog-site/source/posts/skypager-and-dnsimple-and-amazon-web-services-combo.html.md +0 -9
- data/examples/blog-site/source/stylesheets/all.css +0 -55
- data/examples/blog-site/source/stylesheets/normalize.css +0 -375
- data/examples/gallery-site/.gitignore +0 -18
- data/examples/gallery-site/.pryrc +0 -4
- data/examples/gallery-site/Gemfile +0 -11
- data/examples/gallery-site/config.rb +0 -38
- data/examples/gallery-site/data/dropbox.json +0 -1
- data/examples/gallery-site/data/galleries.json +0 -1
- data/examples/gallery-site/source/gallery.html.erb +0 -7
- data/examples/gallery-site/source/images/background.png +0 -0
- data/examples/gallery-site/source/images/galleries/cristian-gallery-1/001.jpg +0 -0
- data/examples/gallery-site/source/images/galleries/cristian-gallery-1/002.jpg +0 -0
- data/examples/gallery-site/source/images/galleries/cristian-gallery-1/003.jpg +0 -0
- data/examples/gallery-site/source/images/galleries/cristian-gallery-1/004.jpg +0 -0
- data/examples/gallery-site/source/images/galleries/luca-gallery-1/001.jpg +0 -0
- data/examples/gallery-site/source/images/galleries/luca-gallery-1/002.JPG +0 -0
- data/examples/gallery-site/source/images/galleries/luca-gallery-1/003.jpg +0 -0
- data/examples/gallery-site/source/images/galleries/luca-gallery-1/004.JPG +0 -0
- data/examples/gallery-site/source/images/middleman.png +0 -0
- data/examples/gallery-site/source/index.html.erb +0 -10
- data/examples/gallery-site/source/javascripts/all.js +0 -1
- data/examples/gallery-site/source/layouts/layout.erb +0 -20
- data/examples/gallery-site/source/stylesheets/all.css +0 -0
- data/examples/gallery-site/source/stylesheets/normalize.css +0 -375
- data/examples/gallery-site/source/tutorial.md +0 -151
- data/lib/skypager/builder.rb +0 -158
- data/lib/skypager/cli/commands/build.rb +0 -64
- data/lib/skypager/cli/commands/config.rb +0 -58
- data/lib/skypager/cli/commands/create.rb +0 -98
- data/lib/skypager/cli/commands/deploy.rb +0 -62
- data/lib/skypager/cli/commands/edit.rb +0 -32
- data/lib/skypager/cli/commands/list.rb +0 -12
- data/lib/skypager/cli/commands/setup.rb +0 -153
- data/lib/skypager/cli/commands/site.rb +0 -22
- data/lib/skypager/cli/commands/sync.rb +0 -20
- data/lib/skypager/data.rb +0 -8
- data/lib/skypager/data/excel_spreadsheet.rb +0 -8
- data/lib/skypager/data/google_spreadsheet.rb +0 -227
- data/lib/skypager/data/request.rb +0 -12
- data/lib/skypager/data/source.rb +0 -194
- data/lib/skypager/data/source_routes_proxy.rb +0 -30
- data/lib/skypager/dns.rb +0 -69
- data/lib/skypager/extension.rb +0 -271
- data/lib/skypager/middleman/commands/data.rb +0 -0
- data/lib/skypager/middleman/commands/deploy.rb +0 -0
- data/lib/skypager/middleman/commands/sync.rb +0 -0
- data/lib/skypager/sync.rb +0 -23
- data/lib/skypager/sync/amazon.rb +0 -181
- data/lib/skypager/sync/dropbox.rb +0 -173
- data/lib/skypager/sync/dropbox/delta.rb +0 -67
- data/lib/skypager/sync/folder.rb +0 -266
- data/lib/skypager/sync/github.rb +0 -55
- data/lib/skypager/sync/google.rb +0 -143
- data/spec/dummy/site-one/.gitignore +0 -18
- data/spec/dummy/site-one/Gemfile +0 -14
- data/spec/dummy/site-one/config.rb +0 -13
- data/spec/dummy/site-one/source/images/background.png +0 -0
- data/spec/dummy/site-one/source/images/middleman.png +0 -0
- data/spec/dummy/site-one/source/index.html.erb +0 -10
- data/spec/dummy/site-one/source/javascripts/all.js +0 -1
- data/spec/dummy/site-one/source/layouts/layout.erb +0 -19
- data/spec/dummy/site-one/source/stylesheets/all.css +0 -55
- data/spec/dummy/site-one/source/stylesheets/normalize.css +0 -375
- data/spec/lib/skypager/builder/server_spec.rb +0 -5
- data/spec/lib/skypager/configuration_spec.rb +0 -12
- data/spec/lib/skypager/data_spec.rb +0 -5
- data/spec/lib/skypager/site_spec.rb +0 -44
- data/spec/lib/skypager_spec.rb +0 -9
- data/spec/skypager-test-config.rb.example +0 -22
- data/spec/spec_helper.rb +0 -49
- data/spec/support/fixtures/cwd_config.json +0 -3
- data/spec/support/fixtures/home_config.json +0 -1
- data/spec/support/json_helper.rb +0 -7
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/lib/skypager/sync.rb
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
module Skypager
|
|
2
|
-
module Sync
|
|
3
|
-
def self.sync_dropbox_path(path, options={})
|
|
4
|
-
dropbox.sync_path(path, options)
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
def self.amazon(options={})
|
|
8
|
-
require 'skypager/sync/amazon'
|
|
9
|
-
Skypager::Sync::Amazon.client
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def self.google(options={})
|
|
13
|
-
require 'skypager/sync/google'
|
|
14
|
-
Skypager::Sync::Google.client
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def self.dropbox(options={})
|
|
18
|
-
require 'skypager/sync/dropbox'
|
|
19
|
-
Skypager::Sync::Dropbox.client(options)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
data/lib/skypager/sync/amazon.rb
DELETED
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
module Skypager
|
|
2
|
-
module Sync
|
|
3
|
-
class Amazon
|
|
4
|
-
include Singleton
|
|
5
|
-
|
|
6
|
-
require 'fog'
|
|
7
|
-
|
|
8
|
-
def aws_access_key_id
|
|
9
|
-
options[:aws_access_key_id] || options[:access_key_id] || Skypager.config.aws_access_key_id
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def aws_secret_access_key
|
|
13
|
-
options[:aws_secret_access_key] || options[:secret_access_key] || Skypager.config.aws_secret_access_key
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def storage
|
|
17
|
-
return @storage if @storage
|
|
18
|
-
|
|
19
|
-
# Silence fog warnings
|
|
20
|
-
Fog::Logger.define_singleton_method(:warning) do |*args|
|
|
21
|
-
nil
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
@storage = Fog::Storage.new({
|
|
25
|
-
provider: 'AWS',
|
|
26
|
-
aws_access_key_id: aws_access_key_id,
|
|
27
|
-
aws_secret_access_key: aws_secret_access_key,
|
|
28
|
-
path_style: true
|
|
29
|
-
})
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
@storage
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def cdn
|
|
36
|
-
@cdn ||= Fog::CDN.new({
|
|
37
|
-
provider: 'AWS',
|
|
38
|
-
aws_access_key_id: aws_access_key_id,
|
|
39
|
-
aws_secret_access_key: aws_secret_access_key
|
|
40
|
-
})
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def s3_bucket_website_url
|
|
44
|
-
if s3_bucket.is_a?(Fog::Storage::AWS::Directory)
|
|
45
|
-
website_url_for(s3_bucket)
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def site_description
|
|
50
|
-
options[:description] || options[:site_name] || s3_bucket.key
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# the domain, and the domain with www
|
|
54
|
-
def site_domain_aliases
|
|
55
|
-
options[:aliases]
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def s3_bucket
|
|
59
|
-
if bucket_name = options[:bucket_name] || Skypager.config.get("bucket_name") || Skypager.app.deploy_options[:bucket_name]
|
|
60
|
-
if bucket = find_bucket_by_name(bucket_name)
|
|
61
|
-
return bucket
|
|
62
|
-
else
|
|
63
|
-
"There is no bucket named: #{ bucket_name }. You can create one by running 'skypager setup amazon --create-bucket=BUCKET_NAME"
|
|
64
|
-
end
|
|
65
|
-
else
|
|
66
|
-
puts "Can't determine what bucket name to use."
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def create_cdn_for(site)
|
|
71
|
-
o = cdn_options(website_url: site.bucket_host,
|
|
72
|
-
comment: site.description,
|
|
73
|
-
aliases: site.aliases.join(","))
|
|
74
|
-
|
|
75
|
-
existing = cdn.distributions.find do |distribution|
|
|
76
|
-
distribution.comment == site.description
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
return existing if existing
|
|
80
|
-
|
|
81
|
-
cdn.distributions.create(o).tap do |distribution|
|
|
82
|
-
site.set distribution.domain
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def cdn_options(o={})
|
|
87
|
-
{
|
|
88
|
-
enabled: true,
|
|
89
|
-
custom_origin: {
|
|
90
|
-
'DNSName'=> o.fetch(:website_url) { s3_bucket_website_url },
|
|
91
|
-
'OriginProtocolPolicy'=>'match-viewer'
|
|
92
|
-
},
|
|
93
|
-
comment: o.fetch(:description) { site_description },
|
|
94
|
-
caller_reference: Time.now.to_i.to_s,
|
|
95
|
-
cname: o.fetch(:domain_aliases) { site_domain_aliases },
|
|
96
|
-
default_root_object: 'index.html'
|
|
97
|
-
}
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
def self.client(options={})
|
|
101
|
-
@client ||= begin
|
|
102
|
-
instance.with_options(options)
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
def self.method_missing(meth, *args, &block)
|
|
108
|
-
if client.respond_to?(meth)
|
|
109
|
-
return client.send(meth, *args, &block)
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
super
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
def website_host_for(bucket_or_bucket_name)
|
|
116
|
-
URI.parse(webite_url_for(bucket_or_bucket_name)).host
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
def website_url_for(bucket_or_bucket_name)
|
|
120
|
-
bucket = bucket_or_bucket_name
|
|
121
|
-
|
|
122
|
-
if bucket_or_bucket_name.is_a?(String)
|
|
123
|
-
bucket = storage.directories.get(bucket_or_bucket_name)
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
if bucket
|
|
127
|
-
"http://#{bucket.key}.s3-website-#{ bucket.location }.amazonaws.com"
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
def find_or_create_bucket(bucket_name)
|
|
132
|
-
find_bucket_by_name(bucket_name) || create_bucket(bucket_name)
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
def find_bucket_by_name(bucket_name)
|
|
136
|
-
storage.directories.get(bucket_name) rescue nil
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
def create_bucket(bucket_name)
|
|
140
|
-
storage.directories.create(key: bucket_name, public: true).tap do |bucket|
|
|
141
|
-
storage.put_bucket_website(bucket_name, 'index.html', key: 'error.html')
|
|
142
|
-
#storage.put_bucket_cors(bucket_name, {"AllowedOrigin"=>"*","AllowedMethod"=>"GET","AllowedHeader"=>"Authorization"})
|
|
143
|
-
end
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
def create_redirect_bucket(bucket_name, redirect_to_bucket_name)
|
|
147
|
-
create_bucket(redirect_to_bucket_name) unless find_bucket_by_name(redirect_to_bucket_name)
|
|
148
|
-
create_bucket(bucket_name)
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
def with_options(opts={})
|
|
152
|
-
options.merge!(opts)
|
|
153
|
-
self
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
def options
|
|
157
|
-
@options ||= {}
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
def has_application_keys?
|
|
161
|
-
(Skypager.config.aws_access_key_id.to_s.length > 0 && Skypager.config.aws_secret_access_key.to_s.length > 0)
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
def setup(options={})
|
|
165
|
-
return if has_application_keys?
|
|
166
|
-
|
|
167
|
-
unless Skypager.config.aws_access_key_id.to_s.length > 0
|
|
168
|
-
if value = options[:access_key_id] || ask("What is the AWS Access Key ID?", String)
|
|
169
|
-
Skypager.config.set 'aws_access_key_id', value
|
|
170
|
-
end
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
unless Skypager.config.aws_secret_access_key.to_s.length > 0
|
|
174
|
-
if value = options[:secret_access_key] || ask("What is the AWS Secret Access Key?", String)
|
|
175
|
-
Skypager.config.set 'aws_secret_access_key', value
|
|
176
|
-
end
|
|
177
|
-
end
|
|
178
|
-
end
|
|
179
|
-
end
|
|
180
|
-
end
|
|
181
|
-
end
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
module Skypager
|
|
2
|
-
module Sync
|
|
3
|
-
class Dropbox
|
|
4
|
-
include Singleton
|
|
5
|
-
|
|
6
|
-
def self.method_missing(meth, *args, &block)
|
|
7
|
-
if client.respond_to?(meth)
|
|
8
|
-
return client.send(meth, *args, &block)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
super
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def self.client(options={})
|
|
15
|
-
@client ||= begin
|
|
16
|
-
::Dropbox::API::Config.app_key = options.fetch(:dropbox_app_key) { Skypager.config.dropbox_app_key }
|
|
17
|
-
::Dropbox::API::Config.app_secret = options.fetch(:dropbox_app_secret) { Skypager.config.dropbox_app_secret }
|
|
18
|
-
::Dropbox::API::Config.mode = options.fetch(:dropbox_app_type) { Skypager.config.dropbox_app_type }
|
|
19
|
-
instance.with_options(options)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def sandboxed_app?
|
|
24
|
-
entry = api.ls.first
|
|
25
|
-
entry && entry.root == "app_folder"
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def api
|
|
29
|
-
@api ||= begin
|
|
30
|
-
token = options.fetch(:token) { Skypager.config.dropbox_client_token }
|
|
31
|
-
secret = options.fetch(:secret) { Skypager.config.dropbox_client_secret }
|
|
32
|
-
::Dropbox::API::Client.new(token: token , secret: secret)
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def find(path)
|
|
37
|
-
api.find(path)
|
|
38
|
-
rescue ::Dropbox::API::Error::NotFound
|
|
39
|
-
nil
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def push_from(local_path, options={})
|
|
43
|
-
path_prefix = options.fetch(:prefix)
|
|
44
|
-
root = options[:root]
|
|
45
|
-
|
|
46
|
-
unless find(path_prefix)
|
|
47
|
-
api.mkdir(path_prefix)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
uploader = lambda do |node|
|
|
51
|
-
next if node.to_s == ".DS_Store"
|
|
52
|
-
|
|
53
|
-
if node.directory?
|
|
54
|
-
Array(node.children).each(&uploader)
|
|
55
|
-
elsif node.file?
|
|
56
|
-
relative = node.relative_path_from(local_path)
|
|
57
|
-
target = "#{path_prefix}/#{relative}"
|
|
58
|
-
target = target.gsub(/^\//,'')
|
|
59
|
-
api.upload(target, node.read)
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
Pathname(local_path).children.each(&uploader)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def create_site_folder(folder, allow_overwrite=false)
|
|
67
|
-
found = find(folder)
|
|
68
|
-
|
|
69
|
-
unless (!found || (found && !allow_overwrite))
|
|
70
|
-
api.mkdir("/#{folder}")
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def sync(local_path, remote_path, options={})
|
|
75
|
-
sync_folders(local_path, remote_path, options)
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
# Instructs Skypager to create a syncable folder
|
|
79
|
-
# between the local and remote path, and optionally
|
|
80
|
-
# modifies the middleman config for the site
|
|
81
|
-
def sync_folders(local_path, remote_path, options={})
|
|
82
|
-
app = options[:app]
|
|
83
|
-
|
|
84
|
-
folder = Skypager::Sync::Folder.new(local_path: local_path,
|
|
85
|
-
remote_path: remote_path,
|
|
86
|
-
app: app).synced
|
|
87
|
-
|
|
88
|
-
if !!options[:append_config] == true
|
|
89
|
-
Skypager.append_config(folder.config_line)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
folder
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
def method_missing meth, *args, &block
|
|
96
|
-
if api.respond_to?(meth)
|
|
97
|
-
return api.send(meth, *args, &block)
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
super
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
def authorize(token, secret)
|
|
104
|
-
@api = nil if @api
|
|
105
|
-
options[:token] = token
|
|
106
|
-
options[:secret] = secret
|
|
107
|
-
self
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def options
|
|
111
|
-
@options ||= {}
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
def with_options(opts={})
|
|
115
|
-
options.merge!(opts)
|
|
116
|
-
self
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
def requires_setup?
|
|
120
|
-
!(dropbox_app_key.length > 0 && dropbox_app_secret.length > 0)
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
def dropbox_app_key
|
|
124
|
-
Skypager.config.dropbox_app_key.to_s
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
def dropbox_app_secret
|
|
128
|
-
Skypager.config.dropbox_app_secret.to_s
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
def setup(options={})
|
|
132
|
-
if requires_setup?
|
|
133
|
-
if dropbox_app_key.length == 0
|
|
134
|
-
if answer = options[:dropbox_app_key] || ask("What is the dropbox app key?", String)
|
|
135
|
-
Skypager.config.set("dropbox_app_key", answer)
|
|
136
|
-
end
|
|
137
|
-
if answer = options[:dropbox_app_secret] || ask("What is the dropbox app secret?", String)
|
|
138
|
-
Skypager.config.set("dropbox_app_secret", answer)
|
|
139
|
-
end
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
raise 'Missing dropbox application values' if requires_setup?
|
|
144
|
-
|
|
145
|
-
::Dropbox::API::Config.app_key = Skypager.config.dropbox_app_key
|
|
146
|
-
::Dropbox::API::Config.app_secret = Skypager.config.dropbox_app_secret
|
|
147
|
-
|
|
148
|
-
consumer = ::Dropbox::API::OAuth.consumer(:authorize)
|
|
149
|
-
request_token = consumer.get_request_token
|
|
150
|
-
puts "\nGo to this url and click 'Authorize' to get the token:"
|
|
151
|
-
puts request_token.authorize_url
|
|
152
|
-
Launchy.open(request_token.authorize_url)
|
|
153
|
-
|
|
154
|
-
query = request_token.authorize_url.split('?').last
|
|
155
|
-
params = CGI.parse(query)
|
|
156
|
-
token = params['oauth_token'].first
|
|
157
|
-
print "\nOnce you authorize the app on Dropbox, press enter... "
|
|
158
|
-
STDIN.gets.chomp
|
|
159
|
-
|
|
160
|
-
access_token = request_token.get_access_token(:oauth_verifier => token)
|
|
161
|
-
|
|
162
|
-
Skypager.config.set 'dropbox_client_token', access_token.token
|
|
163
|
-
Skypager.config.set 'dropbox_client_secret', access_token.secret
|
|
164
|
-
|
|
165
|
-
puts "\nAuthorization complete!:\n\n"
|
|
166
|
-
puts " Dropbox::API::Config.app_key = '#{consumer.key}'"
|
|
167
|
-
puts " Dropbox::API::Config.app_secret = '#{consumer.secret}'"
|
|
168
|
-
puts " client = Dropbox::API::Client.new(:token => '#{access_token.token}', :secret => '#{access_token.secret}')"
|
|
169
|
-
puts "\n"
|
|
170
|
-
end
|
|
171
|
-
end
|
|
172
|
-
end
|
|
173
|
-
end
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
module Skypager
|
|
2
|
-
module Sync
|
|
3
|
-
class DropboxDelta
|
|
4
|
-
|
|
5
|
-
attr_accessor :client,
|
|
6
|
-
:data,
|
|
7
|
-
:cursor,
|
|
8
|
-
:entries,
|
|
9
|
-
:path_prefix
|
|
10
|
-
|
|
11
|
-
def initialize(client, cursor, path_prefix=nil)
|
|
12
|
-
@client = client
|
|
13
|
-
@cursor = cursor
|
|
14
|
-
@path_prefix = path_prefix
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def processed!
|
|
18
|
-
# TODO
|
|
19
|
-
# Should update cursor
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def entries
|
|
23
|
-
return @entries if @entries
|
|
24
|
-
fetch
|
|
25
|
-
@entries
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def _dropbox_delta at=nil
|
|
29
|
-
at ||= cursor
|
|
30
|
-
response = client.delta(at, path_prefix)
|
|
31
|
-
self.cursor = response["cursor"]
|
|
32
|
-
response
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def data
|
|
36
|
-
@data ||= fetch
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def on_reset path_prefix, cursor
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def fetch
|
|
43
|
-
return @response if @response
|
|
44
|
-
|
|
45
|
-
response = _dropbox_delta
|
|
46
|
-
|
|
47
|
-
if response["reset"] == true
|
|
48
|
-
on_reset(path_prefix, cursor)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
self.entries = {}.to_mash
|
|
52
|
-
|
|
53
|
-
response["entries"].each do |entry|
|
|
54
|
-
path, meta = entry
|
|
55
|
-
self.entries[path] = meta
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
if response["has_more"] == true
|
|
59
|
-
# TODO Implement
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
@response = response
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|