siteleaf 2.0.2 → 2.1.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/bin/siteleaf +82 -85
- data/lib/siteleaf/client.rb +30 -35
- data/lib/siteleaf/collection.rb +3 -3
- data/lib/siteleaf/entity.rb +4 -2
- data/lib/siteleaf/site.rb +4 -4
- data/lib/siteleaf/source_file.rb +2 -4
- data/lib/siteleaf/version.rb +1 -1
- data/siteleaf.gemspec +4 -4
- metadata +16 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b58e2191052b78089839ad0f0b413ffd3a621f96
|
4
|
+
data.tar.gz: 6da80855926d96b93ab727d976d76a6dc3c69056
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0dd932d6d6f2c16e996ef39609914b906f9c3069838af7f37db3fa9eca8c3248d1c6848eb2281ae4f5de40d8917803460c9b567cc021adc0b59d8440bc25d8f3
|
7
|
+
data.tar.gz: 3818d0f20838566907748e7aab27d3bc9c80b2af7dada8a01759460b93421767d938e008e76c7aecee6dd062b0ed4cf1afd626bac160c685c43ac70b977c2d42
|
data/bin/siteleaf
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'siteleaf'
|
4
|
+
require 'jekyll'
|
4
5
|
require 'fileutils'
|
6
|
+
require 'pathutil'
|
5
7
|
require 'open-uri'
|
6
8
|
require 'tempfile'
|
7
9
|
require 'yaml'
|
@@ -30,9 +32,9 @@ See https://github.com/siteleaf/siteleaf-gem for additional documentation.
|
|
30
32
|
end
|
31
33
|
|
32
34
|
def auth(re_auth = false)
|
33
|
-
Siteleaf.load_settings if !re_auth && !Siteleaf.api_key
|
35
|
+
Siteleaf.load_settings if !re_auth && !(Siteleaf.api_key && Siteleaf.api_secret)
|
34
36
|
|
35
|
-
if re_auth or !Siteleaf.api_key
|
37
|
+
if re_auth or !(Siteleaf.api_key && Siteleaf.api_secret)
|
36
38
|
print 'Enter your Siteleaf email: '
|
37
39
|
email = $stdin.gets.chomp
|
38
40
|
|
@@ -42,18 +44,17 @@ def auth(re_auth = false)
|
|
42
44
|
system 'stty echo'
|
43
45
|
|
44
46
|
puts "\nAuthorizing..."
|
45
|
-
|
46
|
-
|
47
|
+
|
48
|
+
auth = Siteleaf::Client.auth(email, password)
|
49
|
+
if auth.is_a?(Hash) && auth.has_key?('api_key')
|
47
50
|
Siteleaf.save_settings({api_key: auth['api_key'], api_secret: auth['api_secret']})
|
48
|
-
|
51
|
+
Siteleaf.load_settings
|
52
|
+
puts "=> Account authorized." if re_auth
|
49
53
|
return true
|
50
54
|
else
|
51
|
-
|
52
|
-
return false
|
55
|
+
raise "Could not authorize, check your email or password."
|
53
56
|
end
|
54
57
|
end
|
55
|
-
rescue Exception => e
|
56
|
-
print "Error: #{e.message}\n"
|
57
58
|
end
|
58
59
|
|
59
60
|
def pull(site_id)
|
@@ -100,8 +101,6 @@ def pull(site_id)
|
|
100
101
|
puts "=> #{missing_files.size} file(s) deleted.\n"
|
101
102
|
end
|
102
103
|
end
|
103
|
-
rescue Exception => e
|
104
|
-
print "Error: #{e.message}\n"
|
105
104
|
end
|
106
105
|
|
107
106
|
def push(site_id)
|
@@ -109,6 +108,7 @@ def push(site_id)
|
|
109
108
|
|
110
109
|
# get all the things
|
111
110
|
site = Siteleaf::Site.find(site_id)
|
111
|
+
|
112
112
|
site_files = site.source_files('.', recursive: true)
|
113
113
|
local_files = read_dir
|
114
114
|
updated_count = 0
|
@@ -124,12 +124,11 @@ def push(site_id)
|
|
124
124
|
changed_files.each do |path|
|
125
125
|
print "Uploading #{path}..."
|
126
126
|
response = Siteleaf::SourceFile.create(site_id: site_id, name: path, file: ::File.new(path))
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
print "complete.\n"
|
127
|
+
updated_count += 1
|
128
|
+
print "complete.\n"
|
129
|
+
if response.name && response.name != path
|
130
|
+
local_files.push(response.name)
|
131
|
+
puts "Warning: Remote filename has been normalized to `#{response.name}`."
|
133
132
|
end
|
134
133
|
end
|
135
134
|
|
@@ -155,8 +154,6 @@ def push(site_id)
|
|
155
154
|
puts "=> #{missing_assets.size} file(s) deleted.\n"
|
156
155
|
end
|
157
156
|
end
|
158
|
-
rescue Exception => e
|
159
|
-
print "Error: #{e.message}\n"
|
160
157
|
end
|
161
158
|
|
162
159
|
def import(file, quiet = true)
|
@@ -174,8 +171,6 @@ def import(file, quiet = true)
|
|
174
171
|
end
|
175
172
|
puts "=> Import completed.\n"
|
176
173
|
end
|
177
|
-
rescue Exception => e
|
178
|
-
print "Error: #{e.message}\n"
|
179
174
|
end
|
180
175
|
|
181
176
|
def publish(site_id, quiet = true)
|
@@ -194,8 +189,6 @@ def publish(site_id, quiet = true)
|
|
194
189
|
end
|
195
190
|
puts "=> Publish completed.\n"
|
196
191
|
end
|
197
|
-
rescue Exception => e
|
198
|
-
print "Error: #{e.message}\n"
|
199
192
|
end
|
200
193
|
|
201
194
|
def config(site)
|
@@ -217,94 +210,98 @@ def get_site_id
|
|
217
210
|
end
|
218
211
|
|
219
212
|
def read_dir
|
220
|
-
|
213
|
+
jekyll_site = Jekyll::Site.new(Jekyll.configuration(quiet: true))
|
221
214
|
|
222
215
|
ignore_paths = ['config.ru', '.*', '_site/*', 'Gemfile', 'Gemfile.lock']
|
223
216
|
ignore_paths += ::File.read('.siteleafignore').split(/\r?\n/) if ::File.exists?('.siteleafignore')
|
224
|
-
ignore_paths +=
|
217
|
+
ignore_paths += jekyll_site.exclude
|
218
|
+
|
219
|
+
entry_filter = Jekyll::EntryFilter.new(jekyll_site)
|
225
220
|
|
226
221
|
Dir.glob("**/*").reject do |path|
|
227
|
-
::File.directory?(path) ||
|
228
|
-
ignore_paths.any? {|i| ::File.fnmatch?(i, path, File::FNM_CASEFOLD) || ::File.fnmatch?(i, ::File.basename(path), File::FNM_CASEFOLD) }
|
222
|
+
::File.directory?(path) || entry_filter.glob_include?(ignore_paths, path)
|
229
223
|
end
|
230
224
|
end
|
231
225
|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
auth
|
239
|
-
|
240
|
-
|
241
|
-
if
|
242
|
-
|
243
|
-
|
244
|
-
|
226
|
+
begin
|
227
|
+
case ARGV[0]
|
228
|
+
when '-v', '--version', 'version'
|
229
|
+
puts Siteleaf::VERSION
|
230
|
+
when '-h', '--help', 'help'
|
231
|
+
puts help
|
232
|
+
when 'auth'
|
233
|
+
auth true
|
234
|
+
when 'c', 'config', 'setup'
|
235
|
+
if auth != false
|
236
|
+
if site = Siteleaf::Site.find_by_domain(ARGV[1])
|
237
|
+
config site
|
238
|
+
else
|
239
|
+
raise "No site found for `#{ARGV[1]}`, run `siteleaf new #{ARGV[1]}` to create it.\n"
|
240
|
+
end
|
245
241
|
end
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
if (site = Siteleaf::Site.create(:title => ARGV[1], :domain => ARGV[1])) && (!site.error)
|
242
|
+
when 'n', 'new'
|
243
|
+
if auth != false
|
244
|
+
site = Siteleaf::Site.create(:title => ARGV[1], :domain => ARGV[1])
|
250
245
|
dir = ARGV.size >= 3 ? ARGV[2] : ARGV[1]
|
251
246
|
Dir.mkdir(dir) unless ::File.directory?(dir)
|
252
247
|
Dir.chdir(dir)
|
253
248
|
config site
|
249
|
+
end
|
250
|
+
when 'pull'
|
251
|
+
if ARGV.size == 1
|
252
|
+
site_id = get_site_id
|
253
|
+
if auth != false
|
254
|
+
if site_id
|
255
|
+
pull(site_id)
|
256
|
+
else
|
257
|
+
raise "Site not configured, run `siteleaf config yoursite.com`.\n"
|
258
|
+
end
|
259
|
+
end
|
254
260
|
else
|
255
|
-
|
261
|
+
raise "`#{ARGV.join(' ')}` command not found.\n"
|
256
262
|
end
|
257
|
-
|
258
|
-
|
259
|
-
|
263
|
+
when 'push'
|
264
|
+
if ARGV.size == 1
|
265
|
+
site_id = get_site_id
|
266
|
+
if auth != false
|
267
|
+
if site_id
|
268
|
+
push(site_id)
|
269
|
+
else
|
270
|
+
raise "Site not configured, run `siteleaf config yoursite.com`.\n"
|
271
|
+
end
|
272
|
+
end
|
273
|
+
else
|
274
|
+
raise "`#{ARGV.join(' ')}` command not found.\n"
|
275
|
+
end
|
276
|
+
when 'publish'
|
260
277
|
site_id = get_site_id
|
261
278
|
if auth != false
|
279
|
+
quiet = %w[-q --quiet].include?(ARGV[1]) && ARGV[1]
|
262
280
|
if site_id
|
263
|
-
|
281
|
+
publish(site_id, quiet)
|
264
282
|
else
|
265
|
-
|
283
|
+
raise "Site not configured, run `siteleaf config yoursite.com`.\n"
|
266
284
|
end
|
267
285
|
end
|
268
|
-
|
269
|
-
puts "`#{ARGV.join(' ')}` command not found.\n"
|
270
|
-
end
|
271
|
-
when 'push'
|
272
|
-
if ARGV.size == 1
|
286
|
+
when 'import'
|
273
287
|
site_id = get_site_id
|
274
288
|
if auth != false
|
275
|
-
|
276
|
-
|
289
|
+
file = ARGV[1]
|
290
|
+
if File.extname(file) != '.zip'
|
291
|
+
raise "Import file must be ZIP format.\n"
|
292
|
+
elsif !File.exist?(file)
|
293
|
+
raise "Import file not found.\n"
|
277
294
|
else
|
278
|
-
|
295
|
+
quiet = %w[-q --quiet].include?(ARGV[2]) && ARGV[2]
|
296
|
+
import(file, quiet)
|
279
297
|
end
|
280
298
|
end
|
281
299
|
else
|
282
|
-
puts "`#{ARGV
|
283
|
-
|
284
|
-
|
285
|
-
site_id = get_site_id
|
286
|
-
if auth != false
|
287
|
-
quiet = %w[-q --quiet].include?(ARGV[1]) && ARGV[1]
|
288
|
-
if site_id
|
289
|
-
publish(site_id, quiet)
|
290
|
-
else
|
291
|
-
puts "Site not configured, run `siteleaf config yoursite.com`.\n"
|
292
|
-
end
|
300
|
+
puts "Error: `#{ARGV[0]}` command not found.\n"
|
301
|
+
puts help
|
302
|
+
exit(1)
|
293
303
|
end
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
file = ARGV[1]
|
298
|
-
if File.extname(file) != '.zip'
|
299
|
-
puts "Import file must be ZIP format.\n"
|
300
|
-
elsif !File.exist?(file)
|
301
|
-
puts "Import file not found.\n"
|
302
|
-
else
|
303
|
-
quiet = %w[-q --quiet].include?(ARGV[2]) && ARGV[2]
|
304
|
-
import(file, quiet)
|
305
|
-
end
|
306
|
-
end
|
307
|
-
else
|
308
|
-
puts "`#{ARGV[0]}` command not found.\n"
|
309
|
-
puts help
|
304
|
+
rescue Exception => e
|
305
|
+
puts "Error: #{e.message}\n"
|
306
|
+
exit(1)
|
310
307
|
end
|
data/lib/siteleaf/client.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
require '
|
1
|
+
require 'httparty'
|
2
2
|
|
3
3
|
module Siteleaf
|
4
4
|
class Client
|
5
5
|
def self.auth(email, password)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
return 'error' => e.message # error
|
6
|
+
request = HTTParty.post(Siteleaf.api_url('auth'), {
|
7
|
+
:basic_auth => {:username => email, :password => password},
|
8
|
+
:headers => {"User-Agent" => "Siteleaf Gem/#{Siteleaf::VERSION}"}
|
9
|
+
})
|
10
|
+
response = request.parsed_response
|
11
|
+
if response.is_a?(Hash) && error = response['message'] || response['error']
|
12
|
+
raise error
|
14
13
|
end
|
14
|
+
response
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.get(path, params = {})
|
@@ -33,33 +33,28 @@ module Siteleaf
|
|
33
33
|
|
34
34
|
def self.execute(method, path, params = nil)
|
35
35
|
Siteleaf.load_settings if !Siteleaf.api_key
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
:basic_auth => {:username => Siteleaf.api_key, :password => Siteleaf.api_secret},
|
51
|
-
:headers => {"User-Agent" => "Siteleaf Gem/#{Siteleaf::VERSION}"},
|
52
|
-
:timeout => 300
|
53
|
-
})
|
54
|
-
end
|
55
|
-
if request.respond_to?('parsed_response')
|
56
|
-
return request.parsed_response # parse JSON
|
57
|
-
else
|
58
|
-
return request # raw
|
59
|
-
end
|
60
|
-
rescue => e
|
61
|
-
return 'error' => e.message # error
|
36
|
+
|
37
|
+
options = {
|
38
|
+
:basic_auth => {:username => Siteleaf.api_key, :password => Siteleaf.api_secret},
|
39
|
+
:headers => {"User-Agent" => "Siteleaf Gem/#{Siteleaf::VERSION}"},
|
40
|
+
:timeout => 300
|
41
|
+
}
|
42
|
+
|
43
|
+
if method == :get || method == :delete
|
44
|
+
options[:query] = params
|
45
|
+
elsif params.has_key?('file') || params.has_key?(:file)
|
46
|
+
options[:body] = params
|
47
|
+
else
|
48
|
+
options[:body] = params.to_json
|
49
|
+
options[:headers]["Content-Type"] = "application/json"
|
62
50
|
end
|
51
|
+
|
52
|
+
request = HTTParty.send(method, Siteleaf.api_url(path), options)
|
53
|
+
response = request.parsed_response
|
54
|
+
if response.is_a?(Hash) && error = response['message'] || response['error']
|
55
|
+
raise error
|
56
|
+
end
|
57
|
+
response
|
63
58
|
end
|
64
59
|
end
|
65
60
|
end
|
data/lib/siteleaf/collection.rb
CHANGED
@@ -22,12 +22,12 @@ module Siteleaf
|
|
22
22
|
|
23
23
|
def documents
|
24
24
|
result = Client.get "#{entity_endpoint}/documents"
|
25
|
-
result.map { |r| Document.new(r) } if result.
|
25
|
+
result.map { |r| Document.new(r) } if result.is_a? Array
|
26
26
|
end
|
27
27
|
|
28
28
|
def files
|
29
29
|
result = Client.get "#{entity_endpoint}/files"
|
30
|
-
result.map { |r| File.new(r) } if result.
|
30
|
+
result.map { |r| File.new(r) } if result.is_a? Array
|
31
31
|
end
|
32
32
|
|
33
33
|
def output?
|
@@ -39,4 +39,4 @@ module Siteleaf
|
|
39
39
|
end
|
40
40
|
|
41
41
|
end
|
42
|
-
end
|
42
|
+
end
|
data/lib/siteleaf/entity.rb
CHANGED
@@ -9,7 +9,7 @@ module Siteleaf
|
|
9
9
|
|
10
10
|
def self.all
|
11
11
|
result = Client.get endpoint
|
12
|
-
result.map { |r| new(r) } if result.
|
12
|
+
result.map { |r| new(r) } if result.is_a? Array
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.find(identifier)
|
@@ -31,9 +31,11 @@ module Siteleaf
|
|
31
31
|
else
|
32
32
|
result = Client.post create_endpoint, attributes
|
33
33
|
end
|
34
|
-
if result
|
34
|
+
if result.is_a?(Hash)
|
35
35
|
self.attributes = result
|
36
36
|
return self
|
37
|
+
else
|
38
|
+
raise 'Invalid response'
|
37
39
|
end
|
38
40
|
end
|
39
41
|
|
data/lib/siteleaf/site.rb
CHANGED
@@ -17,17 +17,17 @@ module Siteleaf
|
|
17
17
|
|
18
18
|
def source_files(dir = '.', opts = {})
|
19
19
|
result = Client.get ::File.join(entity_endpoint, "source", dir), opts
|
20
|
-
result.map { |r| SourceFile.new(r.merge('site_id' => id)) } if result.
|
20
|
+
result.map { |r| SourceFile.new(r.merge('site_id' => id)) } if result.is_a? Array
|
21
21
|
end
|
22
22
|
|
23
23
|
def pages
|
24
24
|
result = Client.get "#{entity_endpoint}/pages"
|
25
|
-
result.map { |r| Page.new(r) } if result.
|
25
|
+
result.map { |r| Page.new(r) } if result.is_a? Array
|
26
26
|
end
|
27
27
|
|
28
28
|
def collections
|
29
29
|
result = Client.get "#{entity_endpoint}/collections"
|
30
|
-
result.map { |r| Collection.new(r) } if result.
|
30
|
+
result.map { |r| Collection.new(r) } if result.is_a? Array
|
31
31
|
end
|
32
32
|
|
33
33
|
def posts
|
@@ -56,4 +56,4 @@ module Siteleaf
|
|
56
56
|
end
|
57
57
|
|
58
58
|
end
|
59
|
-
end
|
59
|
+
end
|
data/lib/siteleaf/source_file.rb
CHANGED
@@ -17,10 +17,8 @@ module Siteleaf
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def to_file
|
20
|
-
|
21
|
-
raise response['message'] if response.parsed_response.is_a?(Hash) && response['message'] # indicates API error
|
22
|
-
response.body
|
20
|
+
Client.get(::File.join("sites", site_id, "source", "#{URI.escape(identifier)}?download"))
|
23
21
|
end
|
24
22
|
|
25
23
|
end
|
26
|
-
end
|
24
|
+
end
|
data/lib/siteleaf/version.rb
CHANGED
data/siteleaf.gemspec
CHANGED
@@ -11,13 +11,13 @@ Gem::Specification.new do |gem|
|
|
11
11
|
gem.email = ["api@siteleaf.com"]
|
12
12
|
gem.description = %q{A Ruby interface and command line utility for the Siteleaf API.}
|
13
13
|
gem.summary = "Siteleaf Ruby interface"
|
14
|
-
gem.homepage = "
|
14
|
+
gem.homepage = "https://www.siteleaf.com"
|
15
15
|
|
16
16
|
gem.required_ruby_version = '>= 1.9.3'
|
17
17
|
|
18
|
-
gem.add_dependency 'httparty', '
|
19
|
-
gem.add_dependency '
|
20
|
-
gem.add_dependency '
|
18
|
+
gem.add_dependency 'httparty', '>= 0.16.0'
|
19
|
+
gem.add_dependency 'psych', '>= 2.1.0'
|
20
|
+
gem.add_dependency 'jekyll', '>= 1.4.1'
|
21
21
|
gem.add_dependency 'rack'
|
22
22
|
|
23
23
|
gem.files = `git ls-files`.split($/)
|
metadata
CHANGED
@@ -1,57 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: siteleaf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Siteleaf
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-08-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.16.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.16.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: psych
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 2.1.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 2.1.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: jekyll
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 1.4.1
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 1.4.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rack
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -96,7 +96,7 @@ files:
|
|
96
96
|
- lib/siteleaf/user.rb
|
97
97
|
- lib/siteleaf/version.rb
|
98
98
|
- siteleaf.gemspec
|
99
|
-
homepage:
|
99
|
+
homepage: https://www.siteleaf.com
|
100
100
|
licenses:
|
101
101
|
- MIT
|
102
102
|
metadata: {}
|
@@ -116,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
116
|
version: '0'
|
117
117
|
requirements: []
|
118
118
|
rubyforge_project:
|
119
|
-
rubygems_version: 2.
|
119
|
+
rubygems_version: 2.6.13
|
120
120
|
signing_key:
|
121
121
|
specification_version: 4
|
122
122
|
summary: Siteleaf Ruby interface
|