siteleaf 2.0.0.pre.beta9 → 2.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: ffdf39daf59542b67cb85f8953690eed8e4878f6
4
- data.tar.gz: cefb58dc50c17b2704cda475ace5d0c6aa35ccf6
2
+ SHA256:
3
+ metadata.gz: 1ec284cc046f9c5e51dfbba051755160066b078f14301e874b4196b2fe046d96
4
+ data.tar.gz: 964a33326bb9753b4676dc1754345b6de1dc8fc7786c75675faea4f178681fd9
5
5
  SHA512:
6
- metadata.gz: b817f87f1733ef8aacfe0199dd0aab699ab04ecd6e1179094905743637213ef4dfefd4b09bdc5b5c5226cb27a0399ccd58509e94a5770095041e6a2b0474a8d8
7
- data.tar.gz: d11c229b37885a7a89c166c24c81f0225058953f0bfee21161f2d653d34b2238f695a83376554440b210687b1487600109b49b22b5637f265140ff993c9183e3
6
+ metadata.gz: 95c90c707c9cc8f90ee16d9d07a2b00756a440d5c4201aeedda7d2d9511b70be421be8d7175be69ee8a3f810b864d634f3c3d3e6dc58291253fff205964b5b3c
7
+ data.tar.gz: aad52462704662408a6adbe07b39bd78ac1f125267a01bf34feb6cdc8e078208498dcfa28bbbb97b7eab755f3e95ea9ca8e19523760688abfcfb4cde33c26584
data/CNAME ADDED
@@ -0,0 +1 @@
1
+ gem.siteleaf.net
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- Siteleaf Gem V2
1
+ Siteleaf v2 Gem
2
2
  ===============
3
3
 
4
4
  - [Installation](#installation)
@@ -11,11 +11,13 @@ Siteleaf Gem V2
11
11
  Installation
12
12
  ------------
13
13
 
14
- The Siteleaf gem is available for installation on [Rubygems](https://rubygems.org/gems/siteleaf). To install run:
14
+ The [Siteleaf](https://www.siteleaf.com) gem is available for installation on [Rubygems](https://rubygems.org/gems/siteleaf). To install run:
15
15
 
16
- gem install siteleaf --pre
16
+ gem install siteleaf
17
17
 
18
- Important: make sure to use `--pre` for V2. If maintaining sites with multiple versions, we recommend using a Gemfile.
18
+ **Note:** the v2 gem only works with v2 sites. For documentation on v1 see: https://github.com/siteleaf/siteleaf-gem/tree/v1
19
+
20
+ If maintaining sites with multiple versions, we recommend using a [Gemfile](#using-this-gem-in-your-application).
19
21
 
20
22
 
21
23
  Using the CLI
@@ -78,7 +80,7 @@ Using this gem in your application
78
80
 
79
81
  To use this gem in your application, add the following to your Gemfile:
80
82
 
81
- gem 'siteleaf', :git => 'git://github.com/siteleaf/siteleaf-gem.git', :branch => '2.0.0.pre'
83
+ gem 'siteleaf', '~>2'
82
84
 
83
85
 
84
86
  Using the API
@@ -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,28 +44,28 @@ def auth(re_auth = false)
42
44
  system 'stty echo'
43
45
 
44
46
  puts "\nAuthorizing..."
45
-
46
- if (auth = Siteleaf::Client.auth(email, password)) && (auth.is_a?(Hash)) && (auth.has_key?('api_key'))
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
- puts "=> Gem authorized." if re_auth
51
+ Siteleaf.load_settings
52
+ puts "=> Account authorized." if re_auth
49
53
  return true
50
54
  else
51
- puts auth['error'] || "Could not authorize, check your email or password."
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)
60
61
  print "Reading site...\n"
61
-
62
+
62
63
  # get all the things
63
64
  site = Siteleaf::Site.find(site_id)
64
- site_files = site.source_tree
65
+ site_files = site.source_files('.', recursive: true)
66
+
65
67
  updated_count = 0
66
-
68
+
67
69
  # download unmatched files
68
70
  site_files.each do |file|
69
71
  sha = ::File.exist?(file.name) && Siteleaf::GitHash.file(file.name)
@@ -75,11 +77,11 @@ def pull(site_id)
75
77
  print "complete.\n"
76
78
  end
77
79
  end
78
-
80
+
79
81
  # check for old files
80
82
  local_files = read_dir
81
83
  missing_files = []
82
- local_files.each do |path|
84
+ local_files.each do |path|
83
85
  missing_files << path if !site_files.find{|a| a.name.casecmp(path) == 0 }
84
86
  end
85
87
  if missing_files.empty?
@@ -99,42 +101,40 @@ def pull(site_id)
99
101
  puts "=> #{missing_files.size} file(s) deleted.\n"
100
102
  end
101
103
  end
102
- rescue Exception => e
103
- print "Error: #{e.message}\n"
104
104
  end
105
105
 
106
106
  def push(site_id)
107
107
  print "Reading site...\n"
108
-
108
+
109
109
  # get all the things
110
110
  site = Siteleaf::Site.find(site_id)
111
- site_files = site.source_tree
111
+
112
+ site_files = site.source_files('.', recursive: true)
112
113
  local_files = read_dir
113
114
  updated_count = 0
114
-
115
+
115
116
  # find changed files
116
117
  changed_files = local_files.reject do |path|
117
118
  file = site_files.find{|a| a.name.casecmp(path) == 0 }
118
119
  file && Siteleaf::GitHash.file(path) == file.sha
119
120
  end
120
- changed_files.unshift('_config.yml') if changed_files.delete('_config.yml')
121
-
121
+ changed_files.unshift('_config.yml') if changed_files.delete('_config.yml')
122
+
122
123
  # upload changed files
123
- changed_files.each do |path|
124
- print "Uploading #{path}..."
124
+ changed_files.each do |path|
125
+ print "Uploading #{path}..."
125
126
  response = Siteleaf::SourceFile.create(site_id: site_id, name: path, file: ::File.new(path))
126
- if error = !response || response.error || response.message
127
- print (error) ? "error: #{error}\n" : "error.\n"
128
- return
129
- else
130
- updated_count += 1
131
- 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}`."
132
132
  end
133
133
  end
134
-
134
+
135
135
  # check for old files
136
136
  missing_assets = []
137
- site_files.each do |asset|
137
+ site_files.each do |asset|
138
138
  missing_assets << asset if !local_files.find{|p| p.casecmp(asset.name) == 0 }
139
139
  end
140
140
  if missing_assets.empty?
@@ -154,13 +154,11 @@ def push(site_id)
154
154
  puts "=> #{missing_assets.size} file(s) deleted.\n"
155
155
  end
156
156
  end
157
- rescue Exception => e
158
- print "Error: #{e.message}\n"
159
157
  end
160
158
 
161
159
  def import(file, quiet = true)
162
160
  job = Siteleaf::Site.import(file: ::File.new(file))
163
-
161
+
164
162
  if quiet
165
163
  puts "=> Import queued.\n"
166
164
  else
@@ -173,14 +171,12 @@ def import(file, quiet = true)
173
171
  end
174
172
  puts "=> Import completed.\n"
175
173
  end
176
- rescue Exception => e
177
- print "Error: #{e.message}\n"
178
174
  end
179
175
 
180
176
  def publish(site_id, quiet = true)
181
177
  site = Siteleaf::Site.new(id: site_id)
182
178
  job = site.publish
183
-
179
+
184
180
  if quiet
185
181
  puts "=> Publish queued.\n"
186
182
  else
@@ -193,8 +189,6 @@ def publish(site_id, quiet = true)
193
189
  end
194
190
  puts "=> Publish completed.\n"
195
191
  end
196
- rescue Exception => e
197
- print "Error: #{e.message}\n"
198
192
  end
199
193
 
200
194
  def config(site)
@@ -209,101 +203,105 @@ def get_site_id
209
203
  Siteleaf.send "#{key}=", value
210
204
  end
211
205
  end
212
-
206
+
213
207
  ENV['SITELEAF_SITE_ID'] || if settings = Siteleaf.load_settings('.siteleaf.yml')
214
208
  settings[:site_id]
215
209
  end
216
210
  end
217
211
 
218
212
  def read_dir
219
- jekyll_config = ::File.exist?('_config.yml') ? YAML::load(::File.read('_config.yml')) : {}
220
-
213
+ jekyll_site = Jekyll::Site.new(Jekyll.configuration(quiet: true))
214
+
221
215
  ignore_paths = ['config.ru', '.*', '_site/*', 'Gemfile', 'Gemfile.lock']
222
216
  ignore_paths += ::File.read('.siteleafignore').split(/\r?\n/) if ::File.exists?('.siteleafignore')
223
- ignore_paths += jekyll_config['exclude'] if jekyll_config['exclude'].is_a? Array
217
+ ignore_paths += jekyll_site.exclude
224
218
 
219
+ entry_filter = Jekyll::EntryFilter.new(jekyll_site)
220
+
225
221
  Dir.glob("**/*").reject do |path|
226
- ::File.directory?(path) ||
227
- 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)
228
223
  end
229
224
  end
230
225
 
231
- case ARGV[0]
232
- when '-v', '--version', 'version'
233
- puts Siteleaf::VERSION
234
- when '-h', '--help', 'help'
235
- puts help
236
- when 'auth'
237
- auth true
238
- when 'c', 'config', 'setup'
239
- if auth != false
240
- if site = Siteleaf::Site.find_by_domain(ARGV[1])
241
- config site
242
- else
243
- puts "No site found for `#{ARGV[1]}`, run `siteleaf new #{ARGV[1]}` to create it.\n"
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
244
241
  end
245
- end
246
- when 'n', 'new'
247
- if auth != false
248
- 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])
249
245
  dir = ARGV.size >= 3 ? ARGV[2] : ARGV[1]
250
246
  Dir.mkdir(dir) unless ::File.directory?(dir)
251
247
  Dir.chdir(dir)
252
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
253
260
  else
254
- puts "Could not create site `#{ARGV[1]}`.\n"
261
+ raise "`#{ARGV.join(' ')}` command not found.\n"
255
262
  end
256
- end
257
- when 'pull'
258
- if ARGV.size == 1
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'
259
277
  site_id = get_site_id
260
278
  if auth != false
279
+ quiet = %w[-q --quiet].include?(ARGV[1]) && ARGV[1]
261
280
  if site_id
262
- pull(site_id)
281
+ publish(site_id, quiet)
263
282
  else
264
- puts "Site not configured, run `siteleaf config yoursite.com`.\n"
283
+ raise "Site not configured, run `siteleaf config yoursite.com`.\n"
265
284
  end
266
285
  end
267
- else
268
- puts "`#{ARGV.join(' ')}` command not found.\n"
269
- end
270
- when 'push'
271
- if ARGV.size == 1
286
+ when 'import'
272
287
  site_id = get_site_id
273
288
  if auth != false
274
- if site_id
275
- push(site_id)
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"
276
294
  else
277
- puts "Site not configured, run `siteleaf config yoursite.com`.\n"
295
+ quiet = %w[-q --quiet].include?(ARGV[2]) && ARGV[2]
296
+ import(file, quiet)
278
297
  end
279
298
  end
280
299
  else
281
- puts "`#{ARGV.join(' ')}` command not found.\n"
300
+ puts "Error: `#{ARGV[0]}` command not found.\n"
301
+ puts help
302
+ exit(1)
282
303
  end
283
- when 'publish'
284
- site_id = get_site_id
285
- if auth != false
286
- quiet = %w[-q --quiet].include?(ARGV[1]) && ARGV[1]
287
- if site_id
288
- publish(site_id, quiet)
289
- else
290
- puts "Site not configured, run `siteleaf config yoursite.com`.\n"
291
- end
292
- end
293
- when 'import'
294
- site_id = get_site_id
295
- if auth != false
296
- file = ARGV[1]
297
- if File.extname(file) != '.zip'
298
- puts "Import file must be ZIP format.\n"
299
- elsif !File.exist?(file)
300
- puts "Import file not found.\n"
301
- else
302
- quiet = %w[-q --quiet].include?(ARGV[2]) && ARGV[2]
303
- import(file, quiet)
304
- end
305
- end
306
- else
307
- puts "`#{ARGV[0]}` command not found.\n"
308
- puts help
304
+ rescue Exception => e
305
+ puts "Error: #{e.message}\n"
306
+ exit(1)
309
307
  end
@@ -1,17 +1,17 @@
1
- require 'httmultiparty'
1
+ require 'httparty'
2
2
 
3
3
  module Siteleaf
4
4
  class Client
5
5
  def self.auth(email, password)
6
- begin
7
- request = HTTParty.post(Siteleaf.api_url('auth'), {
8
- :basic_auth => {:username => email, :password => password},
9
- :headers => {"User-Agent" => "Siteleaf Gem/#{Siteleaf::VERSION}"}
10
- })
11
- return request.parsed_response # parse JSON
12
- rescue => e
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
- begin
37
- if (method == :post || method == :put) && !params.has_key?('file') && !params.has_key?(:file)
38
- request = HTTParty.send(method, Siteleaf.api_url(path), {
39
- :body => params.to_json,
40
- :basic_auth => {:username => Siteleaf.api_key, :password => Siteleaf.api_secret},
41
- :headers => {
42
- "Content-Type" => "application/json",
43
- "User-Agent" => "Siteleaf Gem/#{Siteleaf::VERSION}"
44
- },
45
- :timeout => 300
46
- })
47
- else
48
- request = HTTMultiParty.send(method, Siteleaf.api_url(path), {
49
- :query => params,
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
@@ -3,40 +3,40 @@ module Siteleaf
3
3
 
4
4
  attr_accessor :title, :path, :permalink, :output, :site_id, :user_id, :metadata
5
5
  attr_reader :id, :directory, :created_at, :updated_at
6
-
6
+
7
7
  def create_endpoint
8
8
  ::File.join("sites", site_id, "collections")
9
9
  end
10
-
10
+
11
11
  def entity_endpoint
12
12
  ::File.join(create_endpoint, identifier)
13
13
  end
14
-
14
+
15
15
  def identifier
16
16
  path
17
17
  end
18
-
18
+
19
19
  def site
20
20
  Site.find(site_id)
21
21
  end
22
-
22
+
23
23
  def documents
24
24
  result = Client.get "#{entity_endpoint}/documents"
25
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
30
  result.map { |r| File.new(r) } if result.is_a? Array
31
31
  end
32
-
32
+
33
33
  def output?
34
34
  output == true
35
35
  end
36
-
36
+
37
37
  def filename
38
38
  path
39
39
  end
40
-
40
+
41
41
  end
42
- end
42
+ end
@@ -3,27 +3,27 @@ module Siteleaf
3
3
 
4
4
  attr_accessor :title, :body, :path, :permalink, :visibility, :date, :user_id, :site_id, :metadata
5
5
  attr_reader :id, :filename, :basename, :directory, :url, :sha, :created_at, :updated_at
6
-
6
+
7
7
  def site
8
8
  Site.find(site_id) if site_id
9
9
  end
10
-
10
+
11
11
  def draft?
12
12
  visibility == 'draft'
13
13
  end
14
-
14
+
15
15
  def hidden?
16
16
  visibility == 'hidden'
17
17
  end
18
-
18
+
19
19
  def visible?
20
20
  visibility == 'visible'
21
21
  end
22
22
  alias_method :published?, :visible?
23
-
23
+
24
24
  def to_file
25
25
  SourceFile.new(site_id: site_id, name: filename).to_file
26
26
  end
27
-
27
+
28
28
  end
29
29
  end
@@ -1,6 +1,6 @@
1
1
  module Siteleaf
2
2
  class Entity
3
-
3
+
4
4
  attr_reader :error, :message
5
5
 
6
6
  def initialize(attributes = {})
@@ -20,7 +20,7 @@ module Siteleaf
20
20
  def self.create(attributes = {})
21
21
  new(attributes).save
22
22
  end
23
-
23
+
24
24
  def self.delete(identifier)
25
25
  Client.delete "#{endpoint}/#{identifier}"
26
26
  end
@@ -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
 
@@ -60,11 +62,11 @@ module Siteleaf
60
62
  def create_endpoint
61
63
  self.class.endpoint
62
64
  end
63
-
65
+
64
66
  def entity_endpoint
65
67
  "#{self.class.endpoint}/#{identifier}"
66
68
  end
67
-
69
+
68
70
  def identifier
69
71
  id
70
72
  end
@@ -3,79 +3,57 @@ module Siteleaf
3
3
 
4
4
  attr_accessor :title, :domain, :timezone, :metadata, :defaults
5
5
  attr_reader :id, :user_id, :created_at, :updated_at
6
-
6
+
7
7
  def self.find_by_domain(domain)
8
8
  results = Client.get self.endpoint
9
9
  result = results.find {|d| d['domain'] == domain }
10
10
  self.new(result) if result
11
11
  end
12
-
12
+
13
13
  def self.import(attrs)
14
14
  result = Client.post "import", attrs
15
15
  Job.new(id: result["job_id"]) if result
16
16
  end
17
-
18
- def source_files(dir = '.')
19
- result = Client.get ::File.join(entity_endpoint, "source", dir)
17
+
18
+ def source_files(dir = '.', opts = {})
19
+ result = Client.get ::File.join(entity_endpoint, "source", dir), opts
20
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
25
  result.map { |r| Page.new(r) } if result.is_a? Array
26
- end
27
-
26
+ end
27
+
28
28
  def collections
29
29
  result = Client.get "#{entity_endpoint}/collections"
30
30
  result.map { |r| Collection.new(r) } if result.is_a? Array
31
31
  end
32
-
32
+
33
33
  def posts
34
34
  Collection.new(path: 'posts', site_id: id).documents
35
35
  end
36
-
36
+
37
37
  def uploads
38
38
  Collection.new(path: 'uploads', site_id: id).files
39
39
  end
40
-
40
+
41
41
  def publish
42
42
  result = Client.post "#{entity_endpoint}/publish", {}
43
43
  Job.new(id: result["job_id"]) if result
44
44
  end
45
-
45
+
46
46
  def full_url
47
47
  "http://#{domain}"
48
48
  end
49
-
49
+
50
50
  def filename
51
51
  "_config.yml"
52
52
  end
53
-
53
+
54
54
  def sha
55
55
  Siteleaf::GitHash.string(to_file)
56
56
  end
57
-
58
- def source_tree(dir = '.')
59
- @tree_files = []
60
- @tree_dirs = []
61
- recursive_source_files(dir)
62
- @tree_files
63
- end
64
-
65
- protected
66
-
67
- def recursive_source_files(dir = '.')
68
- source_files(dir).each do |file|
69
- if file.type == 'directory'
70
- unless @tree_dirs.include?(file.name)
71
- @tree_dirs << file.name
72
- recursive_source_files(file.name)
73
- end
74
- else
75
- @tree_files << file
76
- end
77
- end
78
- end
79
-
57
+
80
58
  end
81
- end
59
+ end
@@ -1,26 +1,26 @@
1
1
  module Siteleaf
2
2
  class SourceFile < Entity
3
-
3
+
4
4
  attr_accessor :file, :name, :site_id
5
5
  attr_reader :name, :url, :download_url, :type, :filesize, :sha, :created_at, :updated_at, :user_id
6
-
6
+
7
7
  def create_endpoint
8
- ::File.join("sites", site_id, "source", URI.escape(identifier))
8
+ uri = URI.encode(identifier)
9
+ uri = uri.gsub('[', '%5B').gsub(']', '%5D') # workaround for https://bugs.ruby-lang.org/issues/12235
10
+ ::File.join('sites', site_id, 'source', uri)
9
11
  end
10
-
12
+
11
13
  def entity_endpoint
12
14
  create_endpoint
13
15
  end
14
-
16
+
15
17
  def identifier
16
18
  name
17
19
  end
18
-
20
+
19
21
  def to_file
20
- response = Client.get(::File.join("sites", site_id, "source", "#{URI.escape(identifier)}?download"))
21
- raise response['message'] if response['message'] # indicates API error
22
- response.body
22
+ Client.get("#{entity_endpoint}?download")
23
23
  end
24
-
24
+
25
25
  end
26
- end
26
+ end
@@ -1,3 +1,3 @@
1
1
  module Siteleaf
2
- VERSION = "2.0.0.pre.beta9"
2
+ VERSION = "2.1.1"
3
3
  end
@@ -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 = "http://siteleaf.com"
15
-
14
+ gem.homepage = "https://www.siteleaf.com"
15
+
16
16
  gem.required_ruby_version = '>= 1.9.3'
17
-
18
- gem.add_dependency 'httparty', '>= 0.13.3'
19
- gem.add_dependency 'httmultiparty', '>= 0.3.13'
20
- gem.add_dependency 'psych', '2.0.8'
17
+
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,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: siteleaf
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre.beta9
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Siteleaf
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-26 00:00:00.000000000 Z
11
+ date: 2020-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.13.3
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.13.3
26
+ version: 0.16.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: httmultiparty
28
+ name: psych
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.3.13
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: 0.3.13
40
+ version: 2.1.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: psych
42
+ name: jekyll
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 2.0.8
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: 2.0.8
54
+ version: 1.4.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rack
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -75,6 +75,7 @@ extensions: []
75
75
  extra_rdoc_files: []
76
76
  files:
77
77
  - ".gitignore"
78
+ - CNAME
78
79
  - Gemfile
79
80
  - LICENSE.txt
80
81
  - README.md
@@ -95,7 +96,7 @@ files:
95
96
  - lib/siteleaf/user.rb
96
97
  - lib/siteleaf/version.rb
97
98
  - siteleaf.gemspec
98
- homepage: http://siteleaf.com
99
+ homepage: https://www.siteleaf.com
99
100
  licenses:
100
101
  - MIT
101
102
  metadata: {}
@@ -110,12 +111,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
110
111
  version: 1.9.3
111
112
  required_rubygems_version: !ruby/object:Gem::Requirement
112
113
  requirements:
113
- - - ">"
114
+ - - ">="
114
115
  - !ruby/object:Gem::Version
115
- version: 1.3.1
116
+ version: '0'
116
117
  requirements: []
117
- rubyforge_project:
118
- rubygems_version: 2.4.7
118
+ rubygems_version: 3.1.2
119
119
  signing_key:
120
120
  specification_version: 4
121
121
  summary: Siteleaf Ruby interface