siteleaf 1.0.0 → 1.0.1
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/bin/siteleaf +25 -31
- data/lib/siteleaf.rb +42 -4
- data/lib/siteleaf/client.rb +3 -1
- data/lib/siteleaf/page.rb +5 -2
- data/lib/siteleaf/site.rb +8 -6
- data/lib/siteleaf/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4625aee84a44eb9f07f7d8500060446eeec72a99
|
4
|
+
data.tar.gz: 47767d4e1d46f4e6d88ffc4ba3b69d44ced29199
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec90b144dfa9ddf7faf832edc949b82f8e2a09b7a985923f4416a9c954e867b70029e018829cd157fa3053d3fea19ca665ea8f7a5edaaf3cded4afb213207bec
|
7
|
+
data.tar.gz: 6fa276f547fc28f8394a80f6960bc148661543e74e4b2a38a075b9eeefcb11b4787bd5cb617c0ee59b7a5b7bb5e7a2ad8a81521b7019cf93ef3141bfe409371f
|
data/bin/siteleaf
CHANGED
@@ -4,6 +4,7 @@ require 'siteleaf'
|
|
4
4
|
require 'fileutils'
|
5
5
|
require 'open-uri'
|
6
6
|
require 'digest/md5'
|
7
|
+
require 'yaml'
|
7
8
|
|
8
9
|
def help
|
9
10
|
%Q(
|
@@ -46,9 +47,7 @@ def auth(re_auth = false)
|
|
46
47
|
puts "\nAuthorizing..."
|
47
48
|
|
48
49
|
if (auth = Siteleaf::Client.auth(email, password)) && (auth.is_a?(Hash)) && (auth.has_key?('api_key'))
|
49
|
-
|
50
|
-
Marshal.dump({:api_key => auth['api_key'], :api_secret => auth['api_secret']}, file)
|
51
|
-
end
|
50
|
+
Siteleaf.save_settings({api_key: auth['api_key'], api_secret: auth['api_secret']})
|
52
51
|
puts "=> Gem authorized." if re_auth
|
53
52
|
return true
|
54
53
|
else
|
@@ -106,6 +105,10 @@ end
|
|
106
105
|
|
107
106
|
def put_theme_assets(site_id)
|
108
107
|
theme = Siteleaf::Theme.find_by_site_id(site_id)
|
108
|
+
unless theme.id
|
109
|
+
puts "Could not retrieve theme, check your site configuration and try again.\n"
|
110
|
+
return false
|
111
|
+
end
|
109
112
|
assets = theme.assets
|
110
113
|
updated_count = 0
|
111
114
|
ignore_paths = ['config.ru', '.*']
|
@@ -172,31 +175,30 @@ def publish(site_id, quiet = true)
|
|
172
175
|
end
|
173
176
|
end
|
174
177
|
|
175
|
-
def export(site_id, posts_path = "posts")
|
176
|
-
FileUtils.mkdir_p 'export'
|
178
|
+
def export(site_id, posts_path = "posts", dir = 'export')
|
177
179
|
posts_path = "posts" if posts_path == ""
|
178
180
|
|
179
181
|
site = Siteleaf::Site.find(site_id)
|
180
182
|
site.posts_path = posts_path
|
181
183
|
|
182
|
-
export_uploads(site)
|
183
|
-
export_content(site)
|
184
|
-
export_config(site)
|
184
|
+
export_uploads(site, dir)
|
185
|
+
export_content(site, dir)
|
186
|
+
export_config(site, dir)
|
185
187
|
end
|
186
188
|
|
187
|
-
def export_config(site)
|
189
|
+
def export_config(site, dir = 'export')
|
188
190
|
filename = site.filename
|
189
191
|
print "Exporting #{filename}..."
|
190
192
|
|
191
|
-
filename = File.join(
|
193
|
+
filename = File.join(dir, filename)
|
192
194
|
open(filename, 'w:UTF-8') do |f|
|
193
|
-
f.puts site.to_file
|
195
|
+
f.puts site.to_file(dir)
|
194
196
|
end
|
195
197
|
|
196
198
|
print "complete.\n"
|
197
199
|
end
|
198
200
|
|
199
|
-
def export_content(site)
|
201
|
+
def export_content(site, dir = 'export')
|
200
202
|
pages = site.pages
|
201
203
|
|
202
204
|
pages.each do |page|
|
@@ -205,10 +207,10 @@ def export_content(site)
|
|
205
207
|
filename = page.filename
|
206
208
|
print "Exporting #{filename}..."
|
207
209
|
|
208
|
-
filename = File.join(
|
210
|
+
filename = File.join(dir, filename)
|
209
211
|
FileUtils.mkdir_p File.dirname(filename)
|
210
212
|
open(filename, 'w:UTF-8') do |f|
|
211
|
-
f.puts page.to_file
|
213
|
+
f.puts page.to_file(dir)
|
212
214
|
end
|
213
215
|
|
214
216
|
print "complete.\n"
|
@@ -218,10 +220,10 @@ def export_content(site)
|
|
218
220
|
filename = post.filename(site.posts_path)
|
219
221
|
print "Exporting #{filename}..."
|
220
222
|
|
221
|
-
filename = File.join(
|
223
|
+
filename = File.join(dir, filename)
|
222
224
|
FileUtils.mkdir_p File.dirname(filename)
|
223
225
|
open(filename, 'w:UTF-8') do |f|
|
224
|
-
f.puts post.to_file
|
226
|
+
f.puts post.to_file(dir)
|
225
227
|
end
|
226
228
|
|
227
229
|
print "complete.\n"
|
@@ -229,20 +231,10 @@ def export_content(site)
|
|
229
231
|
end
|
230
232
|
end
|
231
233
|
|
232
|
-
def export_uploads(site)
|
233
|
-
FileUtils::mkdir_p 'export/_uploads'
|
234
|
-
|
234
|
+
def export_uploads(site, dir = 'export')
|
235
235
|
if assets = site.assets
|
236
236
|
assets.each do |asset|
|
237
|
-
filename = File.join(
|
238
|
-
arr_path = filename.split('/')
|
239
|
-
|
240
|
-
# Make subdirectories if needed
|
241
|
-
if arr_path.length > 3
|
242
|
-
subdir = arr_path[0..(arr_path.length - 2)].join('/')
|
243
|
-
FileUtils::mkdir_p subdir
|
244
|
-
end
|
245
|
-
|
237
|
+
filename = File.join(dir, "_uploads", asset.filename)
|
246
238
|
if !File.exist?(filename) or (asset.checksum != Digest::MD5.hexdigest(IO.binread(filename)))
|
247
239
|
print "Exporting #{filename}..."
|
248
240
|
|
@@ -282,8 +274,8 @@ when 'n', 'new'
|
|
282
274
|
if auth != false
|
283
275
|
if (site = Siteleaf::Site.create(:title => ARGV[1], :domain => ARGV[1])) && (!site.error)
|
284
276
|
dir = ARGV.size >= 3 ? ARGV[2] : ARGV[1]
|
285
|
-
|
286
|
-
Dir.chdir
|
277
|
+
FileUtils.mkdir_p dir
|
278
|
+
Dir.chdir dir
|
287
279
|
config site
|
288
280
|
else
|
289
281
|
puts "Could not create site `#{ARGV[1]}`.\n"
|
@@ -329,7 +321,9 @@ when 'export'
|
|
329
321
|
if site_id = get_site_id
|
330
322
|
print 'Enter your main posts path (default "posts"): '
|
331
323
|
posts_path = $stdin.gets.chomp
|
332
|
-
export
|
324
|
+
dir = ARGV.size >= 2 ? ARGV[1] : 'export'
|
325
|
+
FileUtils.mkdir_p dir
|
326
|
+
export(site_id, posts_path, dir)
|
333
327
|
else
|
334
328
|
puts "Site not configured, run `siteleaf config yoursite.com`.\n"
|
335
329
|
end
|
data/lib/siteleaf.rb
CHANGED
@@ -30,12 +30,50 @@ module Siteleaf
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def self.settings_file
|
33
|
-
File.expand_path('~/.siteleaf')
|
33
|
+
::File.expand_path('~/.siteleaf.yml')
|
34
34
|
end
|
35
35
|
|
36
|
-
def self.load_settings
|
37
|
-
if File.exist?(
|
38
|
-
|
36
|
+
def self.load_settings(file = self.settings_file)
|
37
|
+
if ::File.exist?(file)
|
38
|
+
settings = ::File.open(file) { |f| YAML.load(f) }
|
39
|
+
|
40
|
+
[:api_key, :api_secret, :api_base, :api_version].each do |key|
|
41
|
+
self.send "#{key}=", settings[key.to_s] if settings.has_key?(key.to_s)
|
42
|
+
end
|
43
|
+
|
44
|
+
symbolized_settings = Hash.new
|
45
|
+
settings.each{|k,v| symbolized_settings[k.to_sym] = v}
|
46
|
+
|
47
|
+
symbolized_settings
|
48
|
+
|
49
|
+
# read legacy settings, upgrade old marshal format into yaml
|
50
|
+
elsif self.load_legacy_settings
|
51
|
+
symbolized_settings = {api_key: self.api_key, api_secret: self.api_secret}
|
52
|
+
self.save_settings(symbolized_settings)
|
53
|
+
::File.unlink(self.legacy_settings_file)
|
54
|
+
symbolized_settings
|
55
|
+
end
|
56
|
+
rescue
|
57
|
+
nil
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.save_settings(settings, file = self.settings_file)
|
61
|
+
stringified_settings = Hash.new
|
62
|
+
settings.each{|k,v| stringified_settings[k.to_s] = v}
|
63
|
+
|
64
|
+
::File.open(file, 'w') { |f| f.write stringified_settings.to_yaml }
|
65
|
+
|
66
|
+
settings
|
67
|
+
end
|
68
|
+
|
69
|
+
# here for v1 legacy purposes
|
70
|
+
def self.legacy_settings_file
|
71
|
+
::File.expand_path('~/.siteleaf')
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.load_legacy_settings
|
75
|
+
if ::File.exist?(legacy_settings_file)
|
76
|
+
config = ::File.open(legacy_settings_file) do|file|
|
39
77
|
Marshal.load(file)
|
40
78
|
end
|
41
79
|
self.api_key = config[:api_key] if config.has_key?(:api_key)
|
data/lib/siteleaf/client.rb
CHANGED
@@ -5,7 +5,8 @@ module Siteleaf
|
|
5
5
|
def self.auth(email, password)
|
6
6
|
begin
|
7
7
|
request = HTTParty.post(Siteleaf.api_url('auth'), {
|
8
|
-
:basic_auth => {:username => email, :password => password}
|
8
|
+
:basic_auth => {:username => email, :password => password},
|
9
|
+
:headers => {"User-Agent" => "Siteleaf Gem/#{Siteleaf::VERSION}"}
|
9
10
|
})
|
10
11
|
return request.parsed_response # parse JSON
|
11
12
|
rescue => e
|
@@ -35,6 +36,7 @@ module Siteleaf
|
|
35
36
|
request = HTTMultiParty.send(method, Siteleaf.api_url(path), {
|
36
37
|
:query => params,
|
37
38
|
:basic_auth => {:username => Siteleaf.api_key, :password => Siteleaf.api_secret},
|
39
|
+
:headers => {"User-Agent" => "Siteleaf Gem/#{Siteleaf::VERSION}"},
|
38
40
|
:timeout => 300
|
39
41
|
})
|
40
42
|
if request.respond_to?('parsed_response')
|
data/lib/siteleaf/page.rb
CHANGED
@@ -43,8 +43,11 @@ module Siteleaf
|
|
43
43
|
"#{url.sub('/','')}.markdown"
|
44
44
|
end
|
45
45
|
|
46
|
-
def to_file
|
47
|
-
assets = Dir.glob("
|
46
|
+
def to_file(dir = 'export')
|
47
|
+
assets = Dir.glob("#{dir}/_uploads/**/*").each_with_object({}) do |var, hash|
|
48
|
+
# remap assets to _uploads
|
49
|
+
hash[var.sub("#{dir}/_uploads",'/assets')] = var.sub("#{dir}/_uploads",'/uploads')
|
50
|
+
end
|
48
51
|
(frontmatter + "---\n\n".freeze + body.to_s).gsub(Regexp.union(assets.keys), assets)
|
49
52
|
end
|
50
53
|
|
data/lib/siteleaf/site.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Siteleaf
|
2
2
|
class Site < Entity
|
3
3
|
|
4
|
-
attr_accessor :title, :domain, :timezone, :meta, :posts_path
|
4
|
+
attr_accessor :title, :domain, :timezone, :meta, :posts_path, :version
|
5
5
|
attr_reader :id, :user_id, :created_at, :updated_at
|
6
6
|
|
7
7
|
def self.find_by_domain(domain)
|
@@ -53,8 +53,11 @@ module Siteleaf
|
|
53
53
|
"_config.yml"
|
54
54
|
end
|
55
55
|
|
56
|
-
def to_file
|
57
|
-
assets = Dir.glob("
|
56
|
+
def to_file(dir = 'export')
|
57
|
+
assets = Dir.glob("#{dir}/_uploads/**/*").each_with_object({}) do |var, hash|
|
58
|
+
# remap assets to _uploads
|
59
|
+
hash[var.sub("#{dir}/_uploads",'/assets')] = var.sub("#{dir}/_uploads",'/uploads')
|
60
|
+
end
|
58
61
|
config.gsub(Regexp.union(assets.keys), assets)
|
59
62
|
end
|
60
63
|
|
@@ -64,12 +67,11 @@ module Siteleaf
|
|
64
67
|
attrs = {}
|
65
68
|
attrs['title'] = title
|
66
69
|
attrs['url'] = "http://#{domain}"
|
67
|
-
|
68
|
-
meta.each{|m| attrs[m['key']] = m['value'].to_s.gsub("\r\n","\n")} unless meta.nil?
|
69
|
-
|
70
70
|
attrs['timezone'] = timezone
|
71
71
|
attrs['permalink'] = 'pretty'
|
72
72
|
|
73
|
+
meta.each{|m| attrs[m['key']] = m['value'].to_s.gsub("\r\n","\n")} unless meta.nil?
|
74
|
+
|
73
75
|
# output uploads using v1 /assets path
|
74
76
|
attrs['collections'] = {
|
75
77
|
'uploads' => {
|
data/lib/siteleaf/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: siteleaf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Siteleaf
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|