smooster 0.1.81 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f8f41e175332327fd7df9ea447a94d48fcac86b5
4
- data.tar.gz: 8ba88fd360cf5df722f8d58dd8d5509e54cb0405
3
+ metadata.gz: 319f2bf2727611b53db7b538ce5b4be8839fd0ba
4
+ data.tar.gz: 80ba17c26da7d73631ca2a7228ceb8eb60d30375
5
5
  SHA512:
6
- metadata.gz: 4bf9a83707295dce2085e2a780a15ed50795a16b8b394ffe56452a10930d4db0bb7eb15199b6f64abaec7a52c7e1101e5536fad347b34c6aa238e3d6ad483d54
7
- data.tar.gz: 92d479e94b186d0a9fbf8840f2d1a3b19f40c53b78bfefa996f24e635ab193c29abdc2499aed14d938c8bf30e670908986b21d3b0dc4f163ab2584488ab18a8c
6
+ metadata.gz: 719c35cf83dee877165fe430e62d028c4916d504bc738ad76b943820ccd9e912223a3dfad8fab65da3a4a2962ee16e28297f5fb64be29010ed35df28fee10733
7
+ data.tar.gz: 70aeca8276ca2429a9cd480c99c8965c829e2be5aad31d87b66858dff806032eb78d49d53ddd8b035cff6756951ade6e5cc0f75d1a4963dfec8a3da0935e43ad
data/README.md CHANGED
@@ -39,6 +39,9 @@ This is a ruby gem
39
39
 
40
40
  ## Changelog
41
41
 
42
+ ###0.2.1
43
+ * Added Page create feature. smooster deploy initial will first upload medias, templates and then create a page for each uploaded template
44
+
42
45
  ###0.1.8
43
46
  * MAJOR: Changed smooster api v2 for site_templates and media_assets from ids to smo_ids
44
47
 
@@ -3,7 +3,7 @@ module Smooster
3
3
  include Singleton
4
4
  include ActiveModel::Model
5
5
 
6
- attr_accessor :config, :user_config, :site_templates_store, :media_assets_store
6
+ attr_accessor :config, :user_config, :site_templates_store, :media_assets_store, :pages_store
7
7
 
8
8
  def self.start
9
9
  self.instance
@@ -28,6 +28,10 @@ module Smooster
28
28
  @media_assets_store ||= YAML::Store.new("#{self.base_dir}/.smo/media_assets.yml")
29
29
  end
30
30
 
31
+ def pages_store
32
+ @pages_store ||= YAML::Store.new("#{self.base_dir}/.smo/pages.yml")
33
+ end
34
+
31
35
  def config
32
36
  @config ||= YAML::Store.new("#{self.base_dir}/.smo/configure.yml")
33
37
  end
@@ -40,11 +40,12 @@ module Smooster
40
40
  end
41
41
  end
42
42
 
43
- desc "deploy [TYPE]", "deploy your project to the smooster cloud DEFAULT=assets [assets,templates,all]"
43
+ desc "deploy [TYPE]", "deploy your project to the smooster cloud DEFAULT=assets [assets,templates,all,initial]"
44
+ method_option :validator, type: :boolean, default: false, desc: "If set to true and INITIAL than all pages will be opened in the browser with html validator"
44
45
  def deploy(type="assets")
45
46
  puts "Starting push to smooster..."
46
47
 
47
- if type == "assets" || type == "all"
48
+ if type == "assets" || type == "all" || type == "initial"
48
49
  Smooster::Deploy::MediaAsset.all.each do |ma|
49
50
  status = "[deployed]".colorize(:blue)
50
51
  status = "[unchanged]".colorize(:green) if ma.checksum.to_s == ma.load_checksum.to_s
@@ -53,7 +54,7 @@ module Smooster
53
54
  end
54
55
  end
55
56
 
56
- if type == "templates" || type == "all"
57
+ if type == "templates" || type == "all" || type == "initial"
57
58
  Smooster::Deploy::SiteTemplate.all.each do |st|
58
59
  status = "[deployed]".colorize(:blue)
59
60
  status = "[unchanged]".colorize(:green) if st.checksum.to_s == st.load_checksum.to_s
@@ -62,6 +63,26 @@ module Smooster
62
63
  end
63
64
  end
64
65
 
66
+ if type == "initial"
67
+ urls = []
68
+ Smooster::Deploy::SiteTemplate.all.each do |st|
69
+ status = "[create]".colorize(:blue)
70
+ #status = "[exists]".colorize(:green) if st.checksum.to_s == st.load_checksum.to_s
71
+ p = Smooster::Deploy::Page.new({:title => st.title, :filename => st.title, :site_template_id => st.smo_id})
72
+ p.upload
73
+ urls << p.url
74
+ puts "#{p.filename} #{status}"
75
+ end
76
+ urls.each do |url|
77
+ puts "#{url}"
78
+ url_encoded = CGI.escape(url)
79
+ if options[:validator]
80
+ Launchy.open("http://validator.w3.org/check?uri=#{url_encoded}&charset=%28detect+automatically%29&doctype=Inline&group=0")
81
+ sleep 1
82
+ end
83
+ end
84
+ end
85
+
65
86
  puts "#{type} done!"
66
87
  end
67
88
 
@@ -0,0 +1,69 @@
1
+ module Smooster
2
+ module Deploy
3
+ class Page
4
+ include ActiveModel::Model
5
+ include ActiveModel::Serializers::JSON
6
+ #extend Smooster::Deploy::Pages
7
+
8
+ attr_accessor :title, :filename, :site_template_id, :smo_id, :url
9
+
10
+ def attributes
11
+ {'title' => title, 'filename' => filename, 'site_template_id' => site_template_id, 'smo_id' => smo_id, 'url' => url}
12
+ end
13
+
14
+ def store
15
+ Smooster::Application.instance.pages_store
16
+ end
17
+
18
+ def load_smo_id
19
+ store.transaction { store[self.site_template_id][:smo_id] if store[self.site_template_id].present? }
20
+ end
21
+
22
+ def filename=(filename)
23
+ @filename = sanitize_filename(filename)
24
+ end
25
+
26
+ def upload
27
+ #return false if self.checksum.to_s == self.load_checksum.to_s
28
+
29
+ if self.smo_id.present?
30
+ #response = RestClient.put "#{Smooster::Application.instance.api_url()}/#{Smooster::Application.instance.site_id()}/site_templates/#{self.smo_id}", {:site_template => {:body => self.body, :title => self.title}}, {"Authorization" => 'Token token="'+ Smooster::Application.instance.api_key() +'"', "Accept" => 'application/vnd.smoosterid.v2'}
31
+ else
32
+ begin
33
+ response = RestClient.post "#{Smooster::Application.instance.api_url()}/#{Smooster::Application.instance.site_id()}/folders/root/pages", {:page => {:title => self.title, :filename => self.filename, :site_template_id => self.site_template_id, :folder_id => "root"}}, {"Authorization" => 'Token token="'+ Smooster::Application.instance.api_key() +'"', "Accept" => 'application/vnd.smoosterid.v2'}
34
+ data = JSON.parse(response)
35
+ self.url = data['url']
36
+ self.smo_id = data['smo_id']
37
+ self.save
38
+ rescue => e
39
+ Smooster::Application.instance.logger.error "Error in page create for #{self.title} / #{self.filename}!: #{e} / #{e.backtrace.inspect}"
40
+ puts "This page failed to create: #{self.title} / #{self.filename}".colorize(:red)
41
+ end
42
+ end
43
+
44
+ end
45
+
46
+ def save
47
+ store.transaction do
48
+ store[self.site_template_id] = {:smo_id => self.smo_id}
49
+ end
50
+ end
51
+
52
+ def sanitize_filename(filename)
53
+ # Split the name when finding a period which is preceded by some
54
+ # character, and is followed by some character other than a period,
55
+ # if there is no following period that is followed by something
56
+ # other than a period (yeah, confusing, I know)
57
+ fn = filename.split /(?<=.)\.(?=[^.])(?!.*\.[^.])/m
58
+
59
+ # We now have one or two parts (depending on whether we could find
60
+ # a suitable period). For each of these parts, replace any unwanted
61
+ # sequence of characters with an underscore
62
+ fn.map! { |s| s.gsub /[^a-z0-9\-]+/i, '-' }
63
+
64
+ # Finally, join the parts with a period and return the result
65
+ return fn.join '.'
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,49 @@
1
+ module Smooster
2
+ module Deploy
3
+ module Pages
4
+
5
+ def collection
6
+ collection = []
7
+ response.each do |file|
8
+ body = File.read(file)
9
+ template = SiteTemplate.new({:body => body, :path => file, :checksum => Digest::MD5.hexdigest(body)})
10
+ template.smo_id = template.load_smo_id if template.load_smo_id.present?
11
+ source = Nokogiri::HTML(body)
12
+ template.title = source.css('title').first.inner_html
13
+ collection << template
14
+ end
15
+ collection
16
+ end
17
+ alias_method :all, :collection
18
+
19
+ def response
20
+ @response ||= initialize_collection
21
+ end
22
+
23
+ def reload!
24
+ @response = initialize_collection
25
+ end
26
+
27
+ def upload_all
28
+ self.all.each do |template|
29
+ template.upload
30
+ end
31
+ end
32
+
33
+ def method_missing(name, *args, &block)
34
+ if collection.respond_to? name
35
+ collection.send(name, *args)
36
+ else
37
+ super
38
+ end
39
+ end
40
+
41
+ private
42
+ def initialize_collection
43
+ Dir.glob("#{Smooster::Application.instance.base_dir}/#{Smooster::Application.instance.html_folder()}/**/*.html")
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+
@@ -1,3 +1,3 @@
1
1
  module Smooster
2
- VERSION = "0.1.81"
2
+ VERSION = "0.2.1"
3
3
  end
data/lib/smooster.rb CHANGED
@@ -4,6 +4,8 @@ require 'rest_client'
4
4
  require 'nokogiri'
5
5
  require "yaml/store"
6
6
  require 'logger'
7
+ require 'cgi'
8
+ require 'launchy'
7
9
 
8
10
  #base
9
11
  require 'smooster/rest-client/rest-client-purge'
@@ -11,6 +13,8 @@ require 'smooster/rest-client/rest-client-purge'
11
13
  #deploy
12
14
  require 'smooster/deploy/site_templates'
13
15
  require 'smooster/deploy/site_template'
16
+ require 'smooster/deploy/pages'
17
+ require 'smooster/deploy/page'
14
18
  require 'smooster/deploy/media_assets'
15
19
  require 'smooster/deploy/media_asset'
16
20
 
data/smooster.gemspec CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_dependency("activemodel")
24
24
  spec.add_dependency("rest-client")
25
25
  spec.add_dependency("colorize")
26
+ spec.add_dependency("launchy")
26
27
  spec.add_dependency("nokogiri", ["~> 1.5"])
27
28
 
28
29
  spec.add_development_dependency "pry"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smooster
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.81
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastian Maier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-01 00:00:00.000000000 Z
11
+ date: 2015-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: launchy
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: nokogiri
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -199,6 +213,8 @@ files:
199
213
  - lib/smooster/cli/executable.rb
200
214
  - lib/smooster/deploy/media_asset.rb
201
215
  - lib/smooster/deploy/media_assets.rb
216
+ - lib/smooster/deploy/page.rb
217
+ - lib/smooster/deploy/pages.rb
202
218
  - lib/smooster/deploy/site_template.rb
203
219
  - lib/smooster/deploy/site_templates.rb
204
220
  - lib/smooster/rest-client/rest-client-purge.rb