siteleaf 0.9.12 → 0.9.13

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.
@@ -83,16 +83,18 @@ def get_site_id
83
83
  end
84
84
 
85
85
  def get_theme_assets(site_id)
86
- if assets = Siteleaf::Client.get("sites/#{site_id}/theme/assets")
86
+ if assets = Siteleaf::Theme.assets_by_site_id(site_id)
87
87
  updated_count = 0
88
88
  assets.each do |asset|
89
- if File.exist?(asset['filename']) && (file = File.read(asset['filename'])) && (Digest::MD5.hexdigest(file) == asset['checksum'])
89
+ if File.exist?(asset.filename) && asset.checksum == Digest::MD5.hexdigest(File.read(asset.filename))
90
90
  # file is up to date
91
91
  else
92
- file = open("#{asset['file']['url']}?#{SecureRandom.hex(16)}", /^1\.8/.match(RUBY_VERSION) ? 'r' : 'r:UTF-8') { |f| f.read }
93
- FileUtils.mkdir_p(File.dirname(asset['filename']))
94
- File.open(asset['filename'], /^1\.8/.match(RUBY_VERSION) ? 'w' : 'w:UTF-8') { |f| f.write(file) }
92
+ print "Downloading #{asset.filename}..."
93
+ file = open("#{asset.file['url']}?#{SecureRandom.hex(16)}", /^1\.8/.match(RUBY_VERSION) ? 'r' : 'r:UTF-8') { |f| f.read }
94
+ FileUtils.mkdir_p(File.dirname(asset.filename))
95
+ File.open(asset.filename, /^1\.8/.match(RUBY_VERSION) ? 'w' : 'w:UTF-8') { |f| f.write(file) }
95
96
  updated_count += 1
97
+ print "complete.\n"
96
98
  end
97
99
  end
98
100
  puts "=> #{updated_count} asset(s) downloaded.\n"
@@ -100,20 +102,53 @@ def get_theme_assets(site_id)
100
102
  end
101
103
 
102
104
  def put_theme_assets(site_id)
103
- theme = 'theme.zip'
104
- FileUtils.rm(theme) if File.exist?(theme)
105
- Zip::ZipFile.open(theme, Zip::ZipFile::CREATE) do |zip|
106
- Dir.glob("**/*").each do |path|
107
- zip.add(path, path) if !['config.ru'].include?(path) && !path.start_with?('.')
105
+ theme = Siteleaf::Theme.find_by_site_id(site_id)
106
+ assets = theme.assets
107
+ updated_count = 0
108
+ ignore_paths = ['config.ru', '.*']
109
+ ignore_paths += File.read('.siteleafignore').split(/\r?\n/) if File.exists?('.siteleafignore')
110
+
111
+ # upload files
112
+ paths = Dir.glob("**/*")
113
+ paths.each do |path|
114
+ if !File.directory?(path) && !ignore_paths.any?{|i| File.fnmatch?(i, path, File::FNM_CASEFOLD) || File.fnmatch?(i, File.basename(path), File::FNM_CASEFOLD) }
115
+ asset = assets.find{|a| a.filename == path }
116
+ if asset.nil? || (asset && asset.checksum != Digest::MD5.hexdigest(File.read(path)))
117
+ print "Uploading #{path}..."
118
+ asset.delete if asset
119
+ if response = Siteleaf::Asset.create({:site_id => site_id, :theme_id => theme.id, :file => File.new(path), :filename => path})
120
+ updated_count += 1
121
+ print "complete.\n"
122
+ else
123
+ print "error.\n"
124
+ break
125
+ end
126
+ end
108
127
  end
109
128
  end
110
- if response = Siteleaf::Client.post("sites/#{site_id}/theme/assets", {:file => File.new(theme), :replace => true})
111
- updated_count = response.is_a?(Array) ? response.size : 1
129
+
130
+ # check for old files
131
+ missing_assets = []
132
+ assets.each do |asset|
133
+ missing_assets << asset if !paths.include?(asset.filename)
134
+ end
135
+ if missing_assets.empty?
112
136
  puts "=> #{updated_count} asset(s) uploaded.\n"
113
137
  else
114
- puts "=> Could not upload assets.\n"
138
+ print "=> #{updated_count} asset(s) uploaded. Delete the following #{missing_assets.size} unmatched asset(s)?\n"
139
+ missing_assets.each do |asset|
140
+ puts asset.filename
141
+ end
142
+ print '(y/n)? '
143
+ if $stdin.gets.chomp == 'y'
144
+ missing_assets.each do |asset|
145
+ print "Deleteing #{asset.filename}..."
146
+ asset.delete
147
+ print "complete.\n"
148
+ end
149
+ puts "=> #{missing_assets.size} asset(s) deleted.\n"
150
+ end
115
151
  end
116
- FileUtils.rm(theme) if File.exist?(theme)
117
152
  end
118
153
 
119
154
  case ARGV[0]
@@ -3,11 +3,13 @@ $LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
3
3
 
4
4
  require 'siteleaf/version'
5
5
  require 'siteleaf/client'
6
- require 'siteleaf/server'
7
6
  require 'siteleaf/entity'
8
- require 'siteleaf/site'
7
+ require 'siteleaf/asset'
9
8
  require 'siteleaf/page'
10
9
  require 'siteleaf/post'
10
+ require 'siteleaf/server'
11
+ require 'siteleaf/site'
12
+ require 'siteleaf/theme'
11
13
  require 'siteleaf/user'
12
14
  require 'rbconfig'
13
15
 
@@ -0,0 +1,36 @@
1
+ module Siteleaf
2
+ class Asset < Entity
3
+
4
+ attr_accessor :file, :filename, :replace, :site_id, :page_id, :post_id, :theme_id
5
+ attr_reader :id, :url, :content_type, :filesize, :checksum, :created_at, :updated_at
6
+
7
+ def create_endpoint
8
+ if !self.post_id.nil?
9
+ "posts/#{self.post_id}/assets"
10
+ elsif !self.page_id.nil?
11
+ "pages/#{self.page_id}/assets"
12
+ elsif !self.theme_id.nil?
13
+ "sites/#{self.site_id}/theme/assets"
14
+ else
15
+ "sites/#{self.site_id}/assets"
16
+ end
17
+ end
18
+
19
+ def post
20
+ Post.find(self.post_id) if self.post_id
21
+ end
22
+
23
+ def page
24
+ Page.find(self.page_id) if self.page_id
25
+ end
26
+
27
+ def theme
28
+ Theme.find(self.theme_id) if self.theme_id
29
+ end
30
+
31
+ def site
32
+ Site.find(self.site_id) if self.site_id
33
+ end
34
+
35
+ end
36
+ end
@@ -4,16 +4,6 @@ module Siteleaf
4
4
  attr_accessor :title, :body, :slug, :url, :parent_id, :site_id, :published_at, :user_id, :meta, :assets
5
5
  attr_reader :id, :created_at, :updated_at
6
6
 
7
- def self.all
8
- result = Client.get "#{self.endpoint}"
9
- result.map { |r| self.new(r) } if result
10
- end
11
-
12
- def self.find(id)
13
- result = Client.get "#{self.endpoint}/#{id}"
14
- self.new(result) if result
15
- end
16
-
17
7
  def create_endpoint
18
8
  "sites/#{self.site_id}/pages"
19
9
  end
@@ -22,6 +12,11 @@ module Siteleaf
22
12
  Site.find(self.site_id) if self.site_id
23
13
  end
24
14
 
15
+ def assets
16
+ result = Client.get "pages/#{self.id}/assets"
17
+ result.map { |r| Asset.new(r) } if result
18
+ end
19
+
25
20
  def posts
26
21
  result = Client.get "pages/#{self.id}/posts"
27
22
  result.map { |r| Post.new(r) } if result
@@ -3,16 +3,6 @@ module Siteleaf
3
3
 
4
4
  attr_accessor :taxonomy
5
5
 
6
- def self.all
7
- result = Client.get "#{self.endpoint}"
8
- result.map { |r| self.new(r) } if result
9
- end
10
-
11
- def self.find(id)
12
- result = Client.get "#{self.endpoint}/#{id}"
13
- self.new(result) if result
14
- end
15
-
16
6
  def create_endpoint
17
7
  "pages/#{self.parent_id}/posts"
18
8
  end
@@ -21,5 +11,10 @@ module Siteleaf
21
11
  Page.find(self.parent_id)
22
12
  end
23
13
 
14
+ def assets
15
+ result = Client.get "posts/#{self.id}/assets"
16
+ result.map { |r| Asset.new(r) } if result
17
+ end
18
+
24
19
  end
25
20
  end
@@ -5,10 +5,23 @@ module Siteleaf
5
5
  attr_reader :id, :user_id, :created_at, :updated_at
6
6
 
7
7
  def self.find_by_domain(domain)
8
- result = Client.get "sites", {"domain" => domain}
8
+ result = Client.get self.endpoint, {"domain" => domain}
9
9
  self.new(result.first) if result and result.size >= 1
10
10
  end
11
11
 
12
+ def theme
13
+ @theme ||= if result = Client.get("sites/#{self.id}/theme")
14
+ theme = Theme.new(result)
15
+ theme.site_id = self.id
16
+ theme
17
+ end
18
+ end
19
+
20
+ def assets
21
+ result = Client.get "sites/#{self.id}/assets"
22
+ result.map { |r| Asset.new(r) } if result
23
+ end
24
+
12
25
  def pages
13
26
  result = Client.get "sites/#{self.id}/pages"
14
27
  result.map { |r| Page.new(r) } if result
@@ -0,0 +1,25 @@
1
+ module Siteleaf
2
+ class Theme < Entity
3
+
4
+ attr_accessor :name, :site_id
5
+ attr_reader :id, :created_at, :updated_at
6
+
7
+ def self.find_by_site_id(site_id)
8
+ Site.new({:id => site_id}).theme
9
+ end
10
+
11
+ def self.assets_by_site_id(site_id)
12
+ Theme.new({:site_id => site_id}).assets
13
+ end
14
+
15
+ def site
16
+ Site.find(self.site_id)
17
+ end
18
+
19
+ def assets
20
+ result = Client.get "sites/#{self.site_id}/theme/assets"
21
+ result.map { |r| Asset.new(r) } if result
22
+ end
23
+
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module Siteleaf
2
- VERSION = "0.9.12"
2
+ VERSION = "0.9.13"
3
3
  end
@@ -16,7 +16,6 @@ Gem::Specification.new do |gem|
16
16
 
17
17
  gem.add_dependency 'httparty'
18
18
  gem.add_dependency 'httmultiparty'
19
- gem.add_dependency 'zip'
20
19
  gem.add_dependency 'rack'
21
20
 
22
21
  gem.files = `git ls-files`.split($/)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: siteleaf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.12
4
+ version: 0.9.13
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-27 00:00:00.000000000 Z
12
+ date: 2013-09-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty
@@ -43,22 +43,6 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: zip
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
46
  - !ruby/object:Gem::Dependency
63
47
  name: rack
64
48
  requirement: !ruby/object:Gem::Requirement
@@ -90,12 +74,14 @@ files:
90
74
  - Rakefile
91
75
  - bin/siteleaf
92
76
  - lib/siteleaf.rb
77
+ - lib/siteleaf/asset.rb
93
78
  - lib/siteleaf/client.rb
94
79
  - lib/siteleaf/entity.rb
95
80
  - lib/siteleaf/page.rb
96
81
  - lib/siteleaf/post.rb
97
82
  - lib/siteleaf/server.rb
98
83
  - lib/siteleaf/site.rb
84
+ - lib/siteleaf/theme.rb
99
85
  - lib/siteleaf/user.rb
100
86
  - lib/siteleaf/version.rb
101
87
  - siteleaf.gemspec