smooster 0.0.1 → 0.1.4
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 +9 -9
- data/.gitignore +1 -0
- data/README.md +35 -2
- data/Rakefile +4 -0
- data/bin/smooster +1 -3
- data/lib/smooster.rb +19 -1
- data/lib/smooster/application.rb +62 -0
- data/lib/smooster/cli/executable.rb +70 -3
- data/lib/smooster/deploy/media_asset.rb +84 -0
- data/lib/smooster/deploy/media_assets.rb +46 -0
- data/lib/smooster/deploy/site_template.rb +47 -0
- data/lib/smooster/deploy/site_templates.rb +49 -0
- data/lib/smooster/rest-client/rest-client-purge.rb +13 -0
- data/lib/smooster/templates/configure.yml +4 -0
- data/lib/smooster/version.rb +1 -1
- data/logs/application.log +0 -0
- data/smooster.gemspec +8 -0
- data/spec/smooster/deploy/site_template_spec.rb +26 -0
- data/spec/smooster/example/html/index.html +426 -0
- data/spec/spec_helper.rb +8 -1
- metadata +127 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OTk5NmY4MGEzZmRlMWMzOTUwNzBkMWIxMWU1NTg3ZGM3OTI3ODA3Ng==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
7
|
-
|
6
|
+
ZWJmZjk4Y2Q1M2U5MTZjZDU4ZTlkOWYxZDc2MGRjODg1OWE3NDNhOQ==
|
7
|
+
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
N2NiMDYzZDU0ZDdhMWMwZGJhNWU4ZWY1MjM1YzViZWRhODQ4MDExZWFhZTAw
|
10
|
+
M2ZmYWU1N2U2Mjc0MmUzOTk4ZTgwMmMyMjQ5ZjkxZDgxNTY3MTFjZjZjYzEx
|
11
|
+
MGRkNTMxYzM4MzljZmY0ZmQ3YWQ4N2IwNmIxYTJiNmMyZTE3NmU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NGQzMmNlMDcwOWM2MjJlOTliYTU1ODg2NzBmNTBhMzU3YTQ1M2VhNzk1Mzli
|
14
|
+
ZTVhY2IxMjU1ZWIzNmZlZjA2ZmY5OTA0ZTYzNDhhMTMyY2E5MTJjMjQ2MTAy
|
15
|
+
OWE2ZjhlNzFkMjliOWMzYzljMzQ2NWUxMmFhYzYyNWE2MmE1ZDc=
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -6,16 +6,49 @@ This is a ruby gem
|
|
6
6
|
|
7
7
|
$ gem install smooster
|
8
8
|
|
9
|
+
get your api key from http://cms.smooster.com/api_keys
|
10
|
+
|
11
|
+
$ smooster setup THIS_SHOULD_BE_YOUR_PERSONAL_API_KEY
|
12
|
+
|
9
13
|
## Usage
|
10
14
|
|
11
|
-
Type
|
15
|
+
Type smooster in terminal for usage info
|
16
|
+
|
17
|
+
$ smooster
|
18
|
+
|
19
|
+
To add a new project navigate to your local folder with the new smooster html project
|
20
|
+
|
21
|
+
$ cd ~/my_html_project/
|
22
|
+
|
23
|
+
$ smooster site THIS_SHOULD_BE_YOUR_SITE_ID
|
12
24
|
|
13
|
-
|
25
|
+
$ smooster deploy
|
14
26
|
|
15
27
|
## Running tests
|
16
28
|
|
17
29
|
bundle exec rake
|
18
30
|
|
31
|
+
## Wishlist
|
32
|
+
* A wizard for project for new sites - best case even creates a new site in smooster before deployment
|
33
|
+
* Detecting liquid variables in site_templates an auto activating liquid feature
|
34
|
+
* add subtemplate feature - auto detect similar parts in html and create subtemplates
|
35
|
+
* Feature that can create a page for each uploaded site_template (so that it's easier to check, if they are working) and return the links for all of them
|
36
|
+
|
37
|
+
## Changelog
|
38
|
+
|
39
|
+
###0.1.2
|
40
|
+
* Uploading assets first
|
41
|
+
* Enhanced deploy command default is assets only. options are assets, templates, all
|
42
|
+
|
43
|
+
###0.1.1
|
44
|
+
* Added a setup wizard for the users api_key
|
45
|
+
* Added a setup wizard for new projects / sites
|
46
|
+
* Minor improvements to configuration
|
47
|
+
|
48
|
+
###0.1.0
|
49
|
+
* upload or update files in html folder to site_templates in smooster
|
50
|
+
* upload or update files in media folder to media_assets in smooster (including creating needed folder structure)
|
51
|
+
|
19
52
|
## Contributing
|
20
53
|
|
21
54
|
1. Fork it ( https://github.com/[my-github-username]/smooster/fork )
|
data/Rakefile
CHANGED
data/bin/smooster
CHANGED
data/lib/smooster.rb
CHANGED
@@ -1,5 +1,23 @@
|
|
1
1
|
require "smooster/version"
|
2
|
+
require 'active_model'
|
3
|
+
require 'rest_client'
|
4
|
+
require 'nokogiri'
|
5
|
+
require "yaml/store"
|
6
|
+
require 'logger'
|
7
|
+
|
8
|
+
#base
|
9
|
+
require 'smooster/rest-client/rest-client-purge'
|
10
|
+
|
11
|
+
#deploy
|
12
|
+
require 'smooster/deploy/site_templates'
|
13
|
+
require 'smooster/deploy/site_template'
|
14
|
+
require 'smooster/deploy/media_assets'
|
15
|
+
require 'smooster/deploy/media_asset'
|
16
|
+
|
17
|
+
#debug
|
18
|
+
require 'pry'
|
19
|
+
|
2
20
|
|
3
21
|
module Smooster
|
4
|
-
|
22
|
+
autoload :Application, "smooster/application"
|
5
23
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Smooster
|
2
|
+
class Application
|
3
|
+
include Singleton
|
4
|
+
include ActiveModel::Model
|
5
|
+
|
6
|
+
attr_accessor :config, :user_config, :site_templates_store, :media_assets_store
|
7
|
+
|
8
|
+
def self.start
|
9
|
+
self.instance
|
10
|
+
end
|
11
|
+
|
12
|
+
def base_dir
|
13
|
+
Dir.pwd
|
14
|
+
end
|
15
|
+
|
16
|
+
def logger
|
17
|
+
unless File.directory?("#{Dir.pwd}/.smo")
|
18
|
+
FileUtils.mkdir_p("#{Dir.pwd}/.smo")
|
19
|
+
end
|
20
|
+
@logger ||= Logger.new(Dir.pwd + '/.smo/error.log', 'monthly')
|
21
|
+
end
|
22
|
+
|
23
|
+
def site_templates_store
|
24
|
+
@site_templates_store ||= YAML::Store.new("#{self.base_dir}/.smo/site_templates.yml")
|
25
|
+
end
|
26
|
+
|
27
|
+
def media_assets_store
|
28
|
+
@media_assets_store ||= YAML::Store.new("#{self.base_dir}/.smo/media_assets.yml")
|
29
|
+
end
|
30
|
+
|
31
|
+
def config
|
32
|
+
@config ||= YAML::Store.new("#{self.base_dir}/.smo/configure.yml")
|
33
|
+
end
|
34
|
+
|
35
|
+
def html_folder
|
36
|
+
config.transaction { config[:html_folder] }
|
37
|
+
end
|
38
|
+
|
39
|
+
def api_url
|
40
|
+
config.transaction { config[:api_url] }
|
41
|
+
end
|
42
|
+
|
43
|
+
def site_id
|
44
|
+
config.transaction { config[:site_id] }
|
45
|
+
end
|
46
|
+
|
47
|
+
def user_config
|
48
|
+
@user_config ||= YAML::Store.new("#{Dir.home}/.smo/user_configure.yml")
|
49
|
+
end
|
50
|
+
|
51
|
+
def api_key
|
52
|
+
user_config.transaction { user_config[:api_key] }
|
53
|
+
end
|
54
|
+
|
55
|
+
def update_api_key(api_key)
|
56
|
+
user_config.transaction do
|
57
|
+
user_config[:api_key] = api_key
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
@@ -1,12 +1,79 @@
|
|
1
|
-
require "smooster
|
1
|
+
require "smooster"
|
2
|
+
require "colorize"
|
2
3
|
require "thor"
|
3
4
|
|
4
5
|
module Smooster
|
5
6
|
module Cli
|
6
7
|
|
7
8
|
class Executable < Thor
|
8
|
-
|
9
|
-
|
9
|
+
desc "test", "Returns test data"
|
10
|
+
def test
|
11
|
+
puts Smooster::Application.instance.api_key()
|
12
|
+
puts Dir.pwd
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "setup API_KEY", "Setup your smooster gem. Add your API_KEY"
|
16
|
+
def setup(api_key)
|
17
|
+
Smooster::Application.instance.update_api_key(api_key)
|
18
|
+
puts Smooster::Application.instance.api_key()
|
19
|
+
puts "done!"
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "site SITE_ID [API_URL, HTML_FOLDER]", "Setup a new site / project. SITE_ID is the smooster site_id given, when you create a new site in smooster."
|
23
|
+
#method_options :force => :boolean, :alias => :string
|
24
|
+
def site(site_id, api_url="http://cms.smooster.com/api", html_folder="html")
|
25
|
+
|
26
|
+
unless File.directory?("#{Smooster::Application.instance.base_dir}/.smo")
|
27
|
+
FileUtils.mkdir_p("#{Smooster::Application.instance.base_dir}/.smo")
|
28
|
+
end
|
29
|
+
|
30
|
+
config_store = Smooster::Application.instance.config
|
31
|
+
config_store.transaction do
|
32
|
+
config_store[:api_url] = api_url
|
33
|
+
config_store[:html_folder] = html_folder
|
34
|
+
config_store[:site_id] = site_id
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
desc "deploy [TYPE]", "deploy your project to the smooster cloud DEFAULT=assets [assets,templates,all]"
|
39
|
+
def deploy(type="assets")
|
40
|
+
puts "Starting push to smooster..."
|
41
|
+
|
42
|
+
if type == "assets" || type == "all"
|
43
|
+
Smooster::Deploy::MediaAsset.all.each do |ma|
|
44
|
+
status = "[deployed]".colorize(:blue)
|
45
|
+
status = "[unchanged]".colorize(:green) if ma.checksum.to_s == ma.load_checksum.to_s
|
46
|
+
puts "#{ma.file_path} #{status}"
|
47
|
+
ma.upload
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
if type == "templates" || type == "all"
|
52
|
+
Smooster::Deploy::SiteTemplate.all.each do |st|
|
53
|
+
status = "[deployed]".colorize(:blue)
|
54
|
+
status = "[unchanged]".colorize(:green) if st.checksum.to_s == st.load_checksum.to_s
|
55
|
+
st.upload
|
56
|
+
puts "#{st.path} #{status}"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
puts "#{type} done!"
|
61
|
+
end
|
62
|
+
|
63
|
+
desc "load [TYPE]", "load your project from the smooster cloud DEFAULT=assets [assets,templates,all]"
|
64
|
+
def load(type="assets")
|
65
|
+
puts "Starting loading from smooster..."
|
66
|
+
|
67
|
+
if type == "assets" || type == "all"
|
68
|
+
Smooster::Deploy::MediaAsset.all.each do |ma|
|
69
|
+
status = "[loading]".colorize(:blue)
|
70
|
+
status = "[unchanged]".colorize(:green) if ma.checksum.to_s == ma.load_checksum.to_s
|
71
|
+
puts "#{ma.file_path} #{status}"
|
72
|
+
ma.download
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
puts "#{type} done!"
|
10
77
|
end
|
11
78
|
end
|
12
79
|
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
|
3
|
+
module Smooster
|
4
|
+
module Deploy
|
5
|
+
class MediaAsset
|
6
|
+
include ActiveModel::Model
|
7
|
+
include ActiveModel::Serializers::JSON
|
8
|
+
extend Smooster::Deploy::MediaAssets
|
9
|
+
|
10
|
+
attr_accessor :file_path, :folder_path, :checksum, :smo_id
|
11
|
+
|
12
|
+
def attributes
|
13
|
+
{'file_path' => file_path, 'checksum' => checksum, 'smo_id' => smo_id}
|
14
|
+
end
|
15
|
+
|
16
|
+
def file_path=(file_path)
|
17
|
+
@file_path = file_path
|
18
|
+
file_path = file_path.gsub("#{Smooster::Application.instance.base_dir}/#{Smooster::Application.instance.html_folder()}/","")
|
19
|
+
self.folder_path= File.dirname(file_path)
|
20
|
+
@file_path
|
21
|
+
end
|
22
|
+
|
23
|
+
def store
|
24
|
+
Smooster::Application.instance.media_assets_store
|
25
|
+
end
|
26
|
+
|
27
|
+
def load_checksum
|
28
|
+
store.transaction { store[self.file_path][:checksum] if store[self.file_path].present? }
|
29
|
+
end
|
30
|
+
|
31
|
+
def load_smo_id
|
32
|
+
store.transaction { store[self.file_path][:smo_id] if store[self.file_path].present? }
|
33
|
+
end
|
34
|
+
|
35
|
+
def download
|
36
|
+
begin
|
37
|
+
response = RestClient.get("#{Smooster::Application.instance.api_url()}/#{Smooster::Application.instance.site_id()}/media_assets/find_by_slug/#{self.folder_path}/#{File.basename(self.file_path)}", {"Authorization" => 'Token token="'+ Smooster::Application.instance.api_key() +'"', "Accept" => 'application/vnd.smoosterid.v2'})
|
38
|
+
data = JSON.parse(response)
|
39
|
+
self.checksum = open(data['file']['url']) {|f| Digest::MD5.hexdigest(f.read) }
|
40
|
+
self.smo_id = data['id']
|
41
|
+
self.save
|
42
|
+
rescue => e
|
43
|
+
Smooster::Application.instance.logger.error "Error in media_asset download for #{self.file_path}!: #{e} / #{e.backtrace.inspect}"
|
44
|
+
puts "This file failed to load: #{self.file_path}".colorize(:red)
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
def upload
|
51
|
+
return false if self.checksum.to_s == self.load_checksum.to_s
|
52
|
+
|
53
|
+
if self.smo_id.present?
|
54
|
+
begin
|
55
|
+
response = RestClient.put "#{Smooster::Application.instance.api_url()}/#{Smooster::Application.instance.site_id()}/media_assets/#{self.smo_id}", {:media_asset => {:file => File.new(self.file_path, 'rb'), :folder_path => self.folder_path}}, {"Authorization" => 'Token token="'+ Smooster::Application.instance.api_key() +'"', "Accept" => 'application/vnd.smoosterid.v2'}
|
56
|
+
rescue => e
|
57
|
+
puts "This file couldn't be updated: #{self.file_path}".colorize(:red)
|
58
|
+
end
|
59
|
+
else
|
60
|
+
begin
|
61
|
+
response = RestClient.post "#{Smooster::Application.instance.api_url()}/#{Smooster::Application.instance.site_id()}/media_assets", {:media_asset => {:file => File.new(self.file_path, 'rb'), :folder_path => self.folder_path}}, {"Authorization" => 'Token token="'+ Smooster::Application.instance.api_key() +'"', "Accept" => 'application/vnd.smoosterid.v2'}
|
62
|
+
rescue => e
|
63
|
+
Smooster::Application.instance.logger.error "Error in media_asset upload for #{self.file_path}!: #{e}"
|
64
|
+
puts "This file couldn't be uploaded: #{self.file_path}".colorize(:red)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
if response.present?
|
69
|
+
data = JSON.parse(response)
|
70
|
+
RestClient.purge data['file']['url'] if self.smo_id.present? && Smooster::Application.instance.api_url() != "http://127.0.0.1/api"
|
71
|
+
self.smo_id = data['id']
|
72
|
+
self.save
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
def save
|
78
|
+
store.transaction do
|
79
|
+
store[self.file_path] = {:checksum => self.checksum.to_s, :smo_id => self.smo_id}
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Smooster
|
2
|
+
module Deploy
|
3
|
+
module MediaAssets
|
4
|
+
|
5
|
+
def collection
|
6
|
+
collection = []
|
7
|
+
response.each do |file|
|
8
|
+
media_asset = MediaAsset.new({:file_path => file, :checksum => Digest::MD5.hexdigest(File.read(file))})
|
9
|
+
media_asset.smo_id = media_asset.load_smo_id if media_asset.load_smo_id.present?
|
10
|
+
collection << media_asset
|
11
|
+
end
|
12
|
+
collection
|
13
|
+
end
|
14
|
+
alias_method :all, :collection
|
15
|
+
|
16
|
+
def response
|
17
|
+
@response ||= initialize_collection
|
18
|
+
end
|
19
|
+
|
20
|
+
def reload!
|
21
|
+
@response = initialize_collection
|
22
|
+
end
|
23
|
+
|
24
|
+
def upload_all
|
25
|
+
self.all.each do |media_asset|
|
26
|
+
media_asset.upload
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def method_missing(name, *args, &block)
|
31
|
+
if collection.respond_to? name
|
32
|
+
collection.send(name, *args)
|
33
|
+
else
|
34
|
+
super
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
def initialize_collection
|
40
|
+
Dir.glob("#{Smooster::Application.instance.base_dir}/#{Smooster::Application.instance.html_folder()}/media/**/*.*")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Smooster
|
2
|
+
module Deploy
|
3
|
+
class SiteTemplate
|
4
|
+
include ActiveModel::Model
|
5
|
+
include ActiveModel::Serializers::JSON
|
6
|
+
extend Smooster::Deploy::SiteTemplates
|
7
|
+
|
8
|
+
attr_accessor :title, :body, :path, :checksum, :smo_id
|
9
|
+
|
10
|
+
def attributes
|
11
|
+
{'title' => title, 'body' => body, 'path' => path, 'checksum' => checksum, 'smo_id' => smo_id}
|
12
|
+
end
|
13
|
+
|
14
|
+
def store
|
15
|
+
Smooster::Application.instance.site_templates_store
|
16
|
+
end
|
17
|
+
|
18
|
+
def load_checksum
|
19
|
+
store.transaction { store[self.path][:checksum] if store[self.path].present? }
|
20
|
+
end
|
21
|
+
|
22
|
+
def load_smo_id
|
23
|
+
store.transaction { store[self.path][:smo_id] if store[self.path].present? }
|
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
|
+
response = RestClient.post "#{Smooster::Application.instance.api_url()}/#{Smooster::Application.instance.site_id()}/site_templates", {:body => self.body, :title => self.title}, {"Authorization" => 'Token token="'+ Smooster::Application.instance.api_key() +'"', "Accept" => 'application/vnd.smoosterid.v2'}
|
33
|
+
end
|
34
|
+
|
35
|
+
data = JSON.parse(response)
|
36
|
+
self.smo_id = data['id']
|
37
|
+
self.save
|
38
|
+
end
|
39
|
+
|
40
|
+
def save
|
41
|
+
store.transaction do
|
42
|
+
store[self.path] = {:checksum => self.checksum.to_s, :smo_id => self.smo_id}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Smooster
|
2
|
+
module Deploy
|
3
|
+
module SiteTemplates
|
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
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rest-client'
|
2
|
+
|
3
|
+
class Net::HTTP::Purge < Net::HTTPRequest
|
4
|
+
METHOD = 'PURGE'
|
5
|
+
REQUEST_HAS_BODY = false
|
6
|
+
RESPONSE_HAS_BODY = true
|
7
|
+
end
|
8
|
+
|
9
|
+
module RestClient
|
10
|
+
def self.purge(url, headers={}, &block)
|
11
|
+
Request.execute(:method => :purge, :url => url, :headers => headers, &block)
|
12
|
+
end
|
13
|
+
end
|
data/lib/smooster/version.rb
CHANGED
File without changes
|
data/smooster.gemspec
CHANGED
@@ -19,7 +19,15 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_dependency("thor")
|
22
|
+
spec.add_dependency("activesupport")
|
23
|
+
spec.add_dependency("activemodel")
|
24
|
+
spec.add_dependency("rest-client")
|
25
|
+
spec.add_dependency("colorize")
|
26
|
+
spec.add_dependency("nokogiri", ["~> 1.5"])
|
22
27
|
|
28
|
+
spec.add_development_dependency "pry"
|
29
|
+
spec.add_development_dependency "pry-debugger"
|
30
|
+
spec.add_development_dependency "pry-stack_explorer"
|
23
31
|
spec.add_development_dependency "bundler", "~> 1.7"
|
24
32
|
spec.add_development_dependency "rake", "~> 10.0"
|
25
33
|
spec.add_development_dependency "rspec"
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'smooster'
|
3
|
+
include Smooster::Deploy
|
4
|
+
|
5
|
+
describe SiteTemplate do
|
6
|
+
|
7
|
+
describe "has a body" do
|
8
|
+
|
9
|
+
let(:site_template) { SiteTemplate.new(body: "www.xyz.de")}
|
10
|
+
|
11
|
+
it "should return body " do
|
12
|
+
expect(site_template.body).to eql "www.xyz.de"
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "collection" do
|
18
|
+
|
19
|
+
it "should return all SiteTemplates" do
|
20
|
+
expect(SiteTemplate.all.count).to eql 1
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,426 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="de">
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
5
|
+
|
6
|
+
<meta charset="utf-8">
|
7
|
+
<title>Startseite</title>
|
8
|
+
<meta name="description" content="">
|
9
|
+
<meta name="keywords" content="">
|
10
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
11
|
+
<meta name="robots" content="index,follow">
|
12
|
+
<link rel="canonical" href="">
|
13
|
+
|
14
|
+
<!--<link rel="shortcut icon" href="/media/favicon.ico" type="image/x-icon">-->
|
15
|
+
|
16
|
+
<link href="media/css/style.css" rel="stylesheet">
|
17
|
+
<link rel="stylesheet" href="http://code.smooster.com/libs/jquery.nivo.lightbox/1.0/themes/default/default.css" type="text/css">
|
18
|
+
<link href="http://code.smooster.com/libs/jquery.nivo.lightbox/1.0/nivo-lightbox.css" rel="stylesheet">
|
19
|
+
<!--[if lte IE 8]><script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
|
20
|
+
|
21
|
+
<!-- Optional style - delete what you don't need (DONT FORGET TO: Fix path if you keep it!) -->
|
22
|
+
<link href="lib/selectBoxIt/jquery.selectBoxIt.css" rel="stylesheet">
|
23
|
+
<link href="http://code.smooster.com/libs/jquery.glide/1.0.6/style.css" rel="stylesheet">
|
24
|
+
<!-- END -->
|
25
|
+
</head>
|
26
|
+
<body>
|
27
|
+
<div id="wrapper">
|
28
|
+
<header>
|
29
|
+
<nav id="mainnavi" data-mercury="extra" data-extra="html-list" data-extra-name="Main-Navigation" data-extra-list-type="multilevel">
|
30
|
+
<ul>
|
31
|
+
<li><a href="" class="active">Start</a></li>
|
32
|
+
<li><a href="">Über uns</a></li>
|
33
|
+
<li><a href="">Leistungen</a>
|
34
|
+
<ul>
|
35
|
+
<li><a href="">Brot</a></li>
|
36
|
+
<li><a href="">Zucker</a></li>
|
37
|
+
<li><a href="">Spiele</a></li>
|
38
|
+
</ul>
|
39
|
+
</li>
|
40
|
+
<li><a href="">Kontakt</a></li>
|
41
|
+
</ul>
|
42
|
+
</nav>
|
43
|
+
|
44
|
+
<!--OPTIONS:
|
45
|
+
for multilanguage add this: data-scope="folder" data-depth="2"
|
46
|
+
-->
|
47
|
+
</header>
|
48
|
+
|
49
|
+
<main>
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
<section>
|
54
|
+
<h2>Beispiel: basic slider<h2>
|
55
|
+
<div class="slider basic">
|
56
|
+
<div class="slides">
|
57
|
+
<article class="slide">
|
58
|
+
<div id="slideshow-teaser">
|
59
|
+
<p>Slogan Slide1</p>
|
60
|
+
</div>
|
61
|
+
<div class="slide-background-image">
|
62
|
+
<img src="http://dummyimage.com/940x600/000/ccc" alt="">
|
63
|
+
</div>
|
64
|
+
</article>
|
65
|
+
<article class="slide">
|
66
|
+
<div id="slideshow-teaser">
|
67
|
+
<p>Slogan Slide2</p>
|
68
|
+
</div>
|
69
|
+
<div class="slide-background-image">
|
70
|
+
<img src="http://dummyimage.com/600x400/000/ccc" alt="">
|
71
|
+
</div>
|
72
|
+
</article>
|
73
|
+
<article class="slide">
|
74
|
+
<div class="slide-background-image">
|
75
|
+
<img src="http://dummyimage.com/600x400/000/ccc" alt="">
|
76
|
+
</div>
|
77
|
+
</article>
|
78
|
+
<article class="slide">
|
79
|
+
<div class="slide-background-image">
|
80
|
+
<img src="http://dummyimage.com/600x400/000/ccc" alt="">
|
81
|
+
</div>
|
82
|
+
</article>
|
83
|
+
</div>
|
84
|
+
</div>
|
85
|
+
|
86
|
+
<!-- LESS:
|
87
|
+
@import 'lib/smo-glide-basic.less';
|
88
|
+
-->
|
89
|
+
|
90
|
+
<!-- CSS:
|
91
|
+
<link href="http://code.smooster.com/libs/jquery.glide/1.0.6/style.css" rel="stylesheet">
|
92
|
+
-->
|
93
|
+
|
94
|
+
<!-- JS:
|
95
|
+
<script src="http://code.smooster.com/libs/jquery/1.9.1/jquery.js" type="text/javascript"></script>
|
96
|
+
<script src="http://code.smooster.com/libs/jquery.glide/1.0.6/jquery.glide.min.js" type="text/javascript"></script>
|
97
|
+
-->
|
98
|
+
|
99
|
+
</section>
|
100
|
+
|
101
|
+
<section>
|
102
|
+
<h2>Beispiel: theilig slider<h2>
|
103
|
+
<div class="slider th-version">
|
104
|
+
<div class="slides">
|
105
|
+
<article class="slide">
|
106
|
+
<div id="slideshow-teaser">
|
107
|
+
<p>Slogan Slide1</p>
|
108
|
+
</div>
|
109
|
+
<div class="slide-background-image">
|
110
|
+
<img src="http://dummyimage.com/940x600/000/ccc" alt="">
|
111
|
+
</div>
|
112
|
+
</article>
|
113
|
+
<article class="slide">
|
114
|
+
<div id="slideshow-teaser">
|
115
|
+
<p>Slogan Slide2</p>
|
116
|
+
</div>
|
117
|
+
<div class="slide-background-image">
|
118
|
+
<img src="http://dummyimage.com/600x400/000/ccc" alt="">
|
119
|
+
</div>
|
120
|
+
</article>
|
121
|
+
<article class="slide">
|
122
|
+
<div class="slide-background-image">
|
123
|
+
<img src="http://dummyimage.com/600x400/000/ccc" alt="">
|
124
|
+
</div>
|
125
|
+
</article>
|
126
|
+
<article class="slide">
|
127
|
+
<div class="slide-background-image">
|
128
|
+
<img src="http://dummyimage.com/600x400/000/ccc" alt="">
|
129
|
+
</div>
|
130
|
+
</article>
|
131
|
+
</div>
|
132
|
+
</div>
|
133
|
+
<div class="slider_navigation"></div>
|
134
|
+
|
135
|
+
<!-- LESS:
|
136
|
+
@import 'lib/smo-glide-th-version.less';
|
137
|
+
-->
|
138
|
+
|
139
|
+
<!-- CSS:
|
140
|
+
<link href="http://code.smooster.com/libs/jquery.glide/1.0.6/style.css" rel="stylesheet">
|
141
|
+
-->
|
142
|
+
|
143
|
+
<!-- JS:
|
144
|
+
<script src="http://code.smooster.com/libs/jquery/1.9.1/jquery.js" type="text/javascript"></script>
|
145
|
+
<script src="http://code.smooster.com/libs/jquery.glide/1.0.6/jquery.glide.min.js" type="text/javascript"></script>
|
146
|
+
<script>
|
147
|
+
$(window).load(function() {
|
148
|
+
$('.slide-background-image').each(function(index,value){
|
149
|
+
$(value).closest('article').css('background-image', "url("+$(value).find('img').attr('src')+")")
|
150
|
+
$(value).find('img').hide()
|
151
|
+
})
|
152
|
+
});
|
153
|
+
|
154
|
+
$('.slider').glide({
|
155
|
+
arrowRightText: '<i class="fa fa-play"></i>',
|
156
|
+
arrowLeftText: '<i class="fa fa-play fa-rotate-180"></i>',
|
157
|
+
navigation: '.slider_navigation',
|
158
|
+
navigationCenter: false,
|
159
|
+
navigationClass: 'th_slide_navi',
|
160
|
+
navigationItemClass: "th_slide_navi_item",
|
161
|
+
navigationCurrentItemClass: "th_slide_navi_item_current"
|
162
|
+
});
|
163
|
+
</script>
|
164
|
+
-->
|
165
|
+
|
166
|
+
</section>
|
167
|
+
|
168
|
+
<section>
|
169
|
+
<h2>Beispiel: theilig piktos toolbar<h2>
|
170
|
+
<p>Siehe Toolbar an der linken Seite</p>
|
171
|
+
|
172
|
+
<aside id="piktos" class="hidden-mobile">
|
173
|
+
<div id="piktos-image">
|
174
|
+
<ul>
|
175
|
+
<li><a href=""><i class="fa fa-phone"></i></a></li>
|
176
|
+
<li><a href=""><i class="fa fa-car"></i></a></li>
|
177
|
+
<li><a href=""><i class="fa fa-envelope"></i></a></li>
|
178
|
+
<li><a href=""><i class="fa fa-camera"></i></a></li>
|
179
|
+
</ul>
|
180
|
+
</div>
|
181
|
+
<div id="piktos-content">
|
182
|
+
<p>Sie haben Fragen? <br>Oder wollen einen Termin vereinbaren? <br>Rufen Sie und einfach an!</p>
|
183
|
+
<span>FON: 012 3456789</span>
|
184
|
+
</div>
|
185
|
+
</aside>
|
186
|
+
|
187
|
+
<!-- LESS:
|
188
|
+
@import 'lib/smo-piktos-toolbar-th.less';
|
189
|
+
-->
|
190
|
+
|
191
|
+
|
192
|
+
<!-- COFFEE:
|
193
|
+
loadShortLinksToolbar = ->
|
194
|
+
$('#piktos').hover (->
|
195
|
+
$("#piktos").toggleClass('open')
|
196
|
+
return
|
197
|
+
), ->
|
198
|
+
$("#piktos").toggleClass('open')
|
199
|
+
return
|
200
|
+
-->
|
201
|
+
|
202
|
+
</section>
|
203
|
+
|
204
|
+
<section>
|
205
|
+
<h2>Beispiel: Textausblenden (more Funktion)<h2>
|
206
|
+
|
207
|
+
<div id="lead">
|
208
|
+
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
|
209
|
+
eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
|
210
|
+
At vero eos et accusam et justo duo dolores et ea rebum. </p>
|
211
|
+
</div>
|
212
|
+
<div id="further">
|
213
|
+
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
|
214
|
+
eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
|
215
|
+
At vero eos et accusam et justo duo dolores et ea rebum. </p>
|
216
|
+
</div>
|
217
|
+
|
218
|
+
<!-- COFFEE:
|
219
|
+
loadMoreButton = ->
|
220
|
+
if $("#further").length
|
221
|
+
unless $('#more_link').length > 0 or $('#further').html().length == 0
|
222
|
+
more_link = $('<a>', {href: '#',id: 'more_link'}).html("mehr")
|
223
|
+
$('#lead p').last().append(more_link)
|
224
|
+
more_link.click (event) ->
|
225
|
+
event.preventDefault()
|
226
|
+
$('#further').slideDown()
|
227
|
+
more_link.remove()
|
228
|
+
$('#further').hide()
|
229
|
+
-->
|
230
|
+
|
231
|
+
</section>
|
232
|
+
|
233
|
+
|
234
|
+
<section>
|
235
|
+
<h2>Beispiel: Formular<h2>
|
236
|
+
|
237
|
+
<form action="/f/[HIER_MUSS_DIE_ID_EINGESETZT_WERDEN]/send" method="post" class="form_validation">
|
238
|
+
<div class="row">
|
239
|
+
<div class="col-1-2 hidden-mobile">
|
240
|
+
<label for="Anrede">Anrede</label>
|
241
|
+
</div>
|
242
|
+
<div class="col-2-2">
|
243
|
+
<label><input type="radio" name="f[Anrede]" value="Herr">Herr</label>
|
244
|
+
<label><input type="radio" name="f[Anrede]" value="Frau">Frau</label>
|
245
|
+
</div>
|
246
|
+
</div>
|
247
|
+
<div class="row">
|
248
|
+
<div class="col-1-2">
|
249
|
+
<label for="nachname">Name*</label>
|
250
|
+
</div>
|
251
|
+
<div class="col-2-2">
|
252
|
+
<input type="text" name="f[Nachname]" id="nachname" required="">
|
253
|
+
</div>
|
254
|
+
</div>
|
255
|
+
<div class="row">
|
256
|
+
<div class="col-1-2">
|
257
|
+
<label for="Telefon">Telefon</label>
|
258
|
+
</div>
|
259
|
+
<div class="col-2-2">
|
260
|
+
<input type="text" name="f[Telefon]" id="Telefon">
|
261
|
+
</div>
|
262
|
+
</div>
|
263
|
+
<div class="row">
|
264
|
+
<div class="col-1-2">
|
265
|
+
<label for="email">E-Mail*</label>
|
266
|
+
</div>
|
267
|
+
<div class="col-2-2">
|
268
|
+
<input type="email" name="f[E-mail]" id="email" required="">
|
269
|
+
</div>
|
270
|
+
</div>
|
271
|
+
<div class="row">
|
272
|
+
<div class="col-1-2">
|
273
|
+
<label for="Nachricht">Nachricht</label>
|
274
|
+
</div>
|
275
|
+
<div class="col-2-2">
|
276
|
+
<textarea name="f[Nachricht]" id="Nachricht"></textarea>
|
277
|
+
</div>
|
278
|
+
</div>
|
279
|
+
<div class="row">
|
280
|
+
<div class="col-1-2">
|
281
|
+
|
282
|
+
</div>
|
283
|
+
<div class="col-2-2">
|
284
|
+
<input type="submit" id="button-abschicken" value="senden">
|
285
|
+
</div>
|
286
|
+
</div>
|
287
|
+
</form>
|
288
|
+
|
289
|
+
|
290
|
+
<!-- CSS:
|
291
|
+
.field_error {
|
292
|
+
box-shadow: red 0 0 .5em inset !important;
|
293
|
+
}
|
294
|
+
-->
|
295
|
+
|
296
|
+
</section>
|
297
|
+
|
298
|
+
<section>
|
299
|
+
<h2>Beispiel: Formular (mit individueller Selectbox)<h2>
|
300
|
+
|
301
|
+
<form action="/f/[HIER_MUSS_DIE_ID_EINGESETZT_WERDEN]/send" method="post" class="form_validation">
|
302
|
+
<div class="form-row">
|
303
|
+
<label for="name">Name</label>
|
304
|
+
<input type="text" name="f[name]" id="name" required="">
|
305
|
+
</div>
|
306
|
+
<div class="form-row">
|
307
|
+
<label for="mail">E-Mail</label>
|
308
|
+
<input type="email" name="f[mail]" id="mail" required="">
|
309
|
+
</div>
|
310
|
+
<div class="form-row">
|
311
|
+
<label for="mail">E-Mail</label>
|
312
|
+
<select id="selectboxit" name="f[month]" required>
|
313
|
+
<option value="please-choose">Monat wählen*</option>
|
314
|
+
<option value="januar">Januar</option>
|
315
|
+
<option value="februar">Februar</option>
|
316
|
+
</select>
|
317
|
+
</div>
|
318
|
+
<div class="form-row">
|
319
|
+
<label for="nachricht">Nachricht</label>
|
320
|
+
<textarea name="f[nachricht]" id="nachricht" required=""></textarea>
|
321
|
+
</div>
|
322
|
+
<div class="form-row">
|
323
|
+
<input type="submit" id="button" value="Senden">
|
324
|
+
</div>
|
325
|
+
|
326
|
+
|
327
|
+
<!-- CSS:
|
328
|
+
<link href="lib/selectBoxIt/jquery.selectBoxIt.css" rel="stylesheet">
|
329
|
+
-->
|
330
|
+
|
331
|
+
<!-- JS:
|
332
|
+
<script src="http://code.smooster.com/libs/jquery/1.9.1/jquery.js" type="text/javascript"></script>
|
333
|
+
<script src="http://code.smooster.com/libs/jquery-ui/1.10.3/js/jquery-ui.min.js" type="text/javascript"></script>
|
334
|
+
<script src="lib/selectBoxIt/jquery.selectBoxIt.js" type="text/javascript"></script>
|
335
|
+
-->
|
336
|
+
|
337
|
+
|
338
|
+
</form>
|
339
|
+
|
340
|
+
</section>
|
341
|
+
|
342
|
+
<section>
|
343
|
+
|
344
|
+
<div class="row">
|
345
|
+
<div class="col-1-3">
|
346
|
+
<div class="picture">
|
347
|
+
<div data-mercury="full" id="pic1-1">
|
348
|
+
<img src="http://dummyimage.com/300x200/000/fff">
|
349
|
+
</div>
|
350
|
+
</div>
|
351
|
+
<h3 data-mercury="simple" id="hl1-1">Lorem ipsum dolor sit amet</h3>
|
352
|
+
<div class="teaser" data-mercury="full" id="teaser1-1">
|
353
|
+
<p>
|
354
|
+
<span class="s1">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cra
|
355
|
+
<a href="http://www.deerberg-dental.de/vollkeramik" rel="">>></a>
|
356
|
+
</span>
|
357
|
+
</p>
|
358
|
+
</div>
|
359
|
+
</div>
|
360
|
+
<div class="col-2-3">
|
361
|
+
<div class="picture">
|
362
|
+
<div data-mercury="full" id="pic1-2">
|
363
|
+
<img src="http://dummyimage.com/300x200/000/fff">
|
364
|
+
</div>
|
365
|
+
</div>
|
366
|
+
<h3 data-mercury="simple" id="hl1-2">Lorem ipsum dolor sit amet</h3>
|
367
|
+
<div class="teaser" data-mercury="full" id="teaser1-2">
|
368
|
+
<p>
|
369
|
+
<span class="s1">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cra
|
370
|
+
<a href="http://www.deerberg-dental.de/vollkeramik" rel="">>></a>
|
371
|
+
</span>
|
372
|
+
</p>
|
373
|
+
</div>
|
374
|
+
</div>
|
375
|
+
<div class="col-3-3">
|
376
|
+
<div class="picture">
|
377
|
+
<div data-mercury="full" id="pic1-3">
|
378
|
+
<img src="http://dummyimage.com/300x200/000/fff">
|
379
|
+
</div>
|
380
|
+
</div>
|
381
|
+
<h3 data-mercury="simple" id="hl1-3">Lorem ipsum dolor sit amet</h3>
|
382
|
+
<div class="teaser" data-mercury="full" id="teaser1-3">
|
383
|
+
<p>
|
384
|
+
<span class="s1">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cra
|
385
|
+
<a href="http://www.deerberg-dental.de/vollkeramik" rel="">>></a>
|
386
|
+
</span>
|
387
|
+
</p>
|
388
|
+
</div>
|
389
|
+
</div>
|
390
|
+
</div>
|
391
|
+
|
392
|
+
<!-- LESS:
|
393
|
+
.row{
|
394
|
+
.clearfix();
|
395
|
+
|
396
|
+
.col-1-3, .col-2-3, .col-3-3{
|
397
|
+
width: 33.3%;
|
398
|
+
float: left;
|
399
|
+
}
|
400
|
+
|
401
|
+
}
|
402
|
+
-->
|
403
|
+
|
404
|
+
</section>
|
405
|
+
|
406
|
+
|
407
|
+
|
408
|
+
</main>
|
409
|
+
|
410
|
+
<footer>
|
411
|
+
</footer>
|
412
|
+
</div>
|
413
|
+
|
414
|
+
<script src="http://code.smooster.com/libs/jquery/1.9.1/jquery.js" type="text/javascript"></script>
|
415
|
+
<!-- Optional scripts - delete what you don't need (DONT FORGET TO: Fix path if you keep it!)-->
|
416
|
+
<script src="http://code.smooster.com/libs/jquery-ui/1.10.3/js/jquery-ui.min.js" type="text/javascript"></script>
|
417
|
+
|
418
|
+
<script src="http://code.smooster.com/libs/jquery.glide/1.0.6/jquery.glide.min.js" type="text/javascript"></script>
|
419
|
+
|
420
|
+
<script src="lib/selectBoxIt/jquery.selectBoxIt.js" type="text/javascript"></script>
|
421
|
+
<!-- END -->
|
422
|
+
<script src="http://code.smooster.com/libs/jquery.nivo.lightbox/1.0/nivo-lightbox.min.js" type="text/javascript"></script>
|
423
|
+
<script src="http://code.smooster.com/libs/jquery.nivo.lightbox/1.0/nivo-lightbox.start.js" type="text/javascript"></script>
|
424
|
+
<script src="media/js/functions.js" type="text/javascript"></script>
|
425
|
+
</body>
|
426
|
+
</html>
|
data/spec/spec_helper.rb
CHANGED
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.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sebastian Maier
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -24,6 +24,118 @@ dependencies:
|
|
24
24
|
- - ! '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activemodel
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rest-client
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: colorize
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: nokogiri
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.5'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.5'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: pry-debugger
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ! '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: pry-stack_explorer
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ! '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
27
139
|
- !ruby/object:Gem::Dependency
|
28
140
|
name: bundler
|
29
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,9 +195,19 @@ files:
|
|
83
195
|
- Rakefile
|
84
196
|
- bin/smooster
|
85
197
|
- lib/smooster.rb
|
198
|
+
- lib/smooster/application.rb
|
86
199
|
- lib/smooster/cli/executable.rb
|
200
|
+
- lib/smooster/deploy/media_asset.rb
|
201
|
+
- lib/smooster/deploy/media_assets.rb
|
202
|
+
- lib/smooster/deploy/site_template.rb
|
203
|
+
- lib/smooster/deploy/site_templates.rb
|
204
|
+
- lib/smooster/rest-client/rest-client-purge.rb
|
205
|
+
- lib/smooster/templates/configure.yml
|
87
206
|
- lib/smooster/version.rb
|
207
|
+
- logs/application.log
|
88
208
|
- smooster.gemspec
|
209
|
+
- spec/smooster/deploy/site_template_spec.rb
|
210
|
+
- spec/smooster/example/html/index.html
|
89
211
|
- spec/smooster/smooster_spec.rb
|
90
212
|
- spec/spec_helper.rb
|
91
213
|
homepage: http://www.smooster.com
|
@@ -108,10 +230,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
230
|
version: '0'
|
109
231
|
requirements: []
|
110
232
|
rubyforge_project:
|
111
|
-
rubygems_version: 2.
|
233
|
+
rubygems_version: 2.4.5
|
112
234
|
signing_key:
|
113
235
|
specification_version: 4
|
114
236
|
summary: smooster command line tool writen in ruby.
|
115
237
|
test_files:
|
238
|
+
- spec/smooster/deploy/site_template_spec.rb
|
239
|
+
- spec/smooster/example/html/index.html
|
116
240
|
- spec/smooster/smooster_spec.rb
|
117
241
|
- spec/spec_helper.rb
|