theme_bandit 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/bin/bandit +26 -21
- data/lib/theme_bandit/document_writer.rb +25 -12
- data/lib/theme_bandit/downloader.rb +23 -8
- data/lib/theme_bandit/init.rb +2 -1
- data/lib/theme_bandit/parser/css.rb +7 -8
- data/lib/theme_bandit/parser/html.rb +0 -1
- data/lib/theme_bandit/parser/js.rb +3 -2
- data/lib/theme_bandit/rack_generator.rb +0 -1
- data/lib/theme_bandit/url_formatter.rb +16 -9
- data/lib/theme_bandit/util/log.rb +40 -0
- data/lib/theme_bandit/util/version.rb +1 -1
- data/test/helper.rb +6 -61
- data/test/sanity_check.rb +30 -0
- data/test/support/common.rb +58 -0
- data/test/test_document_writer.rb +3 -3
- data/test/test_downloader.rb +16 -3
- data/test/test_url_formatter.rb +25 -7
- metadata +7 -3
- data/lib/theme_bandit/util/logger.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: afe66789b9e5f2f5f5ec9423e12e5014b585891e
|
4
|
+
data.tar.gz: 66f473dd65b4fee63cdde94991cdd0a0e9c1b80f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4543e39293d4097d5c338d0e384b1942f7a77348be98f2f4c6d6f7f14086c4eaaff66ad704884a98837d2761230fb4c384a9c322a009d832abdc0d9e76e32e8e
|
7
|
+
data.tar.gz: c549898c2f46ba33443d6e885f4a9ad7976114df89fa64d2b52a879afd8d5a9e8ad998005cfa5cc7559962085bbaf82818be8e51e82aea6bb727fdf89f64a624
|
data/bin/bandit
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require 'pry' if ENV['DEBUG']
|
4
|
+
|
3
5
|
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
4
6
|
|
5
|
-
require 'fileutils'
|
6
7
|
require 'theme_bandit'
|
7
|
-
require 'uri'
|
8
8
|
require 'bundler'
|
9
9
|
|
10
10
|
SUPPORTED_ENGINES = /^(erb|haml|slim)$/
|
11
11
|
|
12
12
|
def get_root
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
Dir.pwd
|
17
|
-
end
|
13
|
+
Gem::Specification.find_by_name('theme_bandit').gem_dir
|
14
|
+
rescue Gem::LoadError
|
15
|
+
Dir.pwd
|
18
16
|
end
|
19
17
|
|
20
18
|
def init
|
@@ -30,8 +28,14 @@ def init
|
|
30
28
|
end
|
31
29
|
|
32
30
|
def start_fresh
|
33
|
-
|
34
|
-
|
31
|
+
if File.directory?('theme')
|
32
|
+
ThemeBandit::Log.yellow "Deleting #{Dir.pwd}/theme/* - is this ok? (y/n)"
|
33
|
+
answer = $stdin.gets.chomp
|
34
|
+
if answer == 'y'
|
35
|
+
`rm -rf theme`
|
36
|
+
make_a_directory
|
37
|
+
end
|
38
|
+
end
|
35
39
|
end
|
36
40
|
|
37
41
|
def generate_app(document)
|
@@ -46,23 +50,26 @@ end
|
|
46
50
|
def ask_user_for_domain
|
47
51
|
puts 'Enter the URL of the theme you wish to download (example: http://www.google.com)'
|
48
52
|
url = $stdin.gets.chomp
|
49
|
-
|
50
53
|
begin
|
51
54
|
URI.parse(url)
|
52
|
-
|
55
|
+
default_to_http url
|
53
56
|
rescue => e
|
54
|
-
ThemeBandit::
|
55
|
-
exit
|
57
|
+
ThemeBandit::Log.red e
|
58
|
+
exit 0
|
56
59
|
end
|
57
60
|
end
|
58
61
|
|
62
|
+
def default_to_http(url)
|
63
|
+
url[/(^http:\/\/|^https:\/\/)/] ? url : "http://#{url}"
|
64
|
+
end
|
65
|
+
|
59
66
|
def ask_user_for_language
|
60
67
|
puts 'Select your favorite template engine (erb, haml, slim)'
|
61
68
|
answer = $stdin.gets.chomp
|
62
69
|
answer = 'erb' if answer == ''
|
63
70
|
unless match = answer.match(SUPPORTED_ENGINES)
|
64
|
-
ThemeBandit::
|
65
|
-
exit
|
71
|
+
ThemeBandit::Log.red 'You must select a supported template engine (erb, haml, or slim)'
|
72
|
+
exit 0
|
66
73
|
end
|
67
74
|
match[0]
|
68
75
|
end
|
@@ -74,20 +81,20 @@ def ask_user_to_start_rack_app
|
|
74
81
|
app_message
|
75
82
|
Dir.chdir 'theme' do
|
76
83
|
Bundler.with_clean_env do
|
77
|
-
ThemeBandit::
|
84
|
+
ThemeBandit::Log.green "running `bundle` in #{Dir.pwd}/"
|
78
85
|
`bundle install`
|
79
|
-
ThemeBandit::
|
86
|
+
ThemeBandit::Log.green 'running `bundle exec rackup -p 3000`'
|
80
87
|
system('bundle exec rackup -p 3000')
|
81
88
|
end
|
82
89
|
end
|
83
90
|
else
|
84
91
|
app_message
|
85
|
-
ThemeBandit::
|
92
|
+
ThemeBandit::Log.yellow "Don't forget to bundle before starting!"
|
86
93
|
end
|
87
94
|
end
|
88
95
|
|
89
96
|
def app_message
|
90
|
-
|
97
|
+
ThemeBandit::Log.yellow "Your rack app can be found at #{Dir.pwd}/theme/"
|
91
98
|
end
|
92
99
|
|
93
100
|
begin
|
@@ -97,5 +104,3 @@ rescue LoadError => e
|
|
97
104
|
require 'rubygems'
|
98
105
|
require 'theme_bandit'
|
99
106
|
end
|
100
|
-
|
101
|
-
|
@@ -32,7 +32,6 @@ module ThemeBandit
|
|
32
32
|
write_html_file
|
33
33
|
end
|
34
34
|
|
35
|
-
|
36
35
|
def html
|
37
36
|
document.to_html
|
38
37
|
end
|
@@ -41,7 +40,7 @@ module ThemeBandit
|
|
41
40
|
FileUtils.mkdir_p folder
|
42
41
|
end
|
43
42
|
|
44
|
-
def download_css(files, these_are_import_files=false)
|
43
|
+
def download_css(files, these_are_import_files = false)
|
45
44
|
files.each_with_index do |file, order|
|
46
45
|
if these_are_import_files
|
47
46
|
download_and_replace_import_in_css_file(file, order)
|
@@ -54,18 +53,22 @@ module ThemeBandit
|
|
54
53
|
def download_and_replace_import_in_css_file(file, order)
|
55
54
|
destination = file[:destination]
|
56
55
|
rule = file[:rule]
|
57
|
-
doc = Downloader.fetch(destination, {})
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
56
|
+
doc = Downloader.fetch(destination, {})
|
57
|
+
if doc
|
58
|
+
new_doc = @doc_with_imports.gsub(rule, doc.body)
|
59
|
+
new_file_name = @file_with_imports.split('/').last
|
60
|
+
File.open("#{CSS_FOLDER}#{order}_#{new_file_name}", 'w') { |f| f.write(new_doc) }
|
61
|
+
download_css_imports(new_doc, destination) do |imports|
|
62
|
+
download_css(imports, true) if imports
|
63
|
+
end
|
64
|
+
else
|
65
|
+
log_failure file_name
|
63
66
|
end
|
64
67
|
end
|
65
68
|
|
66
69
|
def download_single_css_file(file_name, order)
|
67
|
-
doc = Downloader.fetch(file_name, {})
|
68
|
-
download_css_imports(doc, file_name) do |imports|
|
70
|
+
doc = Downloader.fetch(file_name, {})
|
71
|
+
download_css_imports(doc.body, file_name) do |imports|
|
69
72
|
if imports
|
70
73
|
download_css(imports, true)
|
71
74
|
else
|
@@ -89,13 +92,23 @@ module ThemeBandit
|
|
89
92
|
def download_js(files)
|
90
93
|
files.each_with_index do |file_name, order|
|
91
94
|
doc = Downloader.fetch(file_name, {})
|
92
|
-
|
93
|
-
|
95
|
+
if doc
|
96
|
+
new_file = file_name.split('/').last
|
97
|
+
if doc.code != 200
|
98
|
+
log_failure(file_name, new_file)
|
99
|
+
end
|
100
|
+
File.open("#{JS_FOLDER}#{order}_#{new_file}", 'w') { |file| file.write(doc.body) }
|
101
|
+
end
|
94
102
|
end
|
95
103
|
end
|
96
104
|
|
97
105
|
def write_html_file
|
98
106
|
File.open("#{HTML_FOLDER}index.html", 'w') { |file| file.write(html) }
|
99
107
|
end
|
108
|
+
|
109
|
+
def log_failure(file_name, new_file_name)
|
110
|
+
Log.red "Failed to write #{file_name}. Please view error.log for more details"
|
111
|
+
Log.patch file_name, new_file_name
|
112
|
+
end
|
100
113
|
end
|
101
114
|
end
|
@@ -13,23 +13,38 @@ module ThemeBandit
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.error
|
16
|
-
|
16
|
+
Log.red 'Invalid configuration, please configure through ./bin wrapper or ThemeBandit::Configure'
|
17
17
|
end
|
18
18
|
|
19
|
-
attr_reader :url, :options, :document
|
19
|
+
attr_reader :url, :options, :document, :error
|
20
20
|
|
21
21
|
def initialize(url, options = {})
|
22
|
-
@url, @options = url, options
|
22
|
+
@url, @options = default_to_http(url), options
|
23
23
|
@document = get_document(url)
|
24
24
|
end
|
25
25
|
|
26
26
|
def get_document(url)
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
27
|
+
response = self.class.get(url, options)
|
28
|
+
log_request(url, response)
|
29
|
+
response
|
30
|
+
rescue => e
|
31
|
+
Log.red "request failed for #{url} #{e}"
|
32
|
+
false
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def log_request(url, response)
|
38
|
+
if response.code != 200
|
39
|
+
@error = response.code
|
40
|
+
Log.red "Request failure trying to download #{url}, status #{response.code}"
|
41
|
+
else
|
42
|
+
Log.green "Downloading #{url}"
|
32
43
|
end
|
33
44
|
end
|
45
|
+
|
46
|
+
def default_to_http(url)
|
47
|
+
url[/(^http:\/\/|^https:\/\/)/] ? url : "http://#{url}"
|
48
|
+
end
|
34
49
|
end
|
35
50
|
end
|
data/lib/theme_bandit/init.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
|
-
require 'pry'
|
2
1
|
module ThemeBandit
|
3
2
|
module CSSParser
|
4
|
-
|
5
3
|
include ThemeBandit::URLFormatter
|
6
4
|
|
7
5
|
RE_IMPORT = /\@import\s*(?:url\s*)?(?:\()?(?:\s*)["']?([^'"\s\)]*)["']?\)?([\w\s\,^\]\(\))]*)\)?[;\n]?/
|
@@ -18,20 +16,22 @@ module ThemeBandit
|
|
18
16
|
|
19
17
|
def link_tag_values
|
20
18
|
link_tags.map do |tag|
|
21
|
-
href =
|
19
|
+
href = tag.attribute('href').to_s
|
20
|
+
href = cdn_to_fqd(href)
|
21
|
+
href = URI.parse(href)
|
22
22
|
if href.absolute?
|
23
23
|
strip_query_string href.to_s
|
24
24
|
else
|
25
|
-
# strip_query_string "#{url.scheme}://#{url.host}#{href}"
|
26
25
|
new_href = strip_query_string(href.to_s)
|
27
|
-
|
28
|
-
"#{url.
|
26
|
+
absolute_path = get_absolute_path "#{@url.path}", new_href
|
27
|
+
absolute = "#{@url.host}#{absolute_path}"
|
28
|
+
"#{@url.scheme}://#{absolute}"
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
33
|
def get_import_urls(file, file_name)
|
34
|
-
imports = file.scan(RE_IMPORT).map
|
34
|
+
imports = file.scan(RE_IMPORT).map(&:first).select { |import| import[/\.css/] }
|
35
35
|
imports_arr = []
|
36
36
|
imports.each do |import|
|
37
37
|
dot_dots_length = import.split('/').select { |x| x[/\.\./] }.length
|
@@ -51,6 +51,5 @@ module ThemeBandit
|
|
51
51
|
end
|
52
52
|
imports_arr.length > 0 ? imports_arr : nil
|
53
53
|
end
|
54
|
-
|
55
54
|
end
|
56
55
|
end
|
@@ -15,13 +15,14 @@ module ThemeBandit
|
|
15
15
|
def script_tag_values
|
16
16
|
script_tags.map do |tag|
|
17
17
|
src = tag.attribute('src').to_s
|
18
|
-
src =
|
18
|
+
src = cdn_to_fqd(src)
|
19
19
|
src = URI.parse(src)
|
20
20
|
if src.absolute?
|
21
21
|
strip_query_string src.to_s
|
22
22
|
else
|
23
23
|
new_src = strip_query_string(src.to_s)
|
24
|
-
|
24
|
+
absolute_path = get_absolute_path "#{@url.path}", new_src
|
25
|
+
absolute = "#{@url.host}#{absolute_path}"
|
25
26
|
"#{url.scheme}://#{absolute}"
|
26
27
|
end
|
27
28
|
end
|
@@ -4,21 +4,28 @@ module ThemeBandit
|
|
4
4
|
str.split('?').first
|
5
5
|
end
|
6
6
|
|
7
|
-
def
|
7
|
+
def cdn_to_fqd(src)
|
8
8
|
src[/^\/\//] ? "http:#{src}" : src
|
9
9
|
end
|
10
10
|
|
11
|
-
# returns
|
12
|
-
def
|
13
|
-
number_of_dot_dots =
|
11
|
+
# returns resolved path, ready for use with host
|
12
|
+
def get_absolute_path(old_path, new_path)
|
13
|
+
number_of_dot_dots = new_path.split('/').select { |v| v == '..' }.length
|
14
14
|
if number_of_dot_dots > 0
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
# TODO: should be separate method
|
16
|
+
new_path = new_path.gsub('../', '')
|
17
|
+
old_path = old_path.split('/')
|
18
|
+
old_path.pop(number_of_dot_dots + 1)
|
19
|
+
new_path = old_path.push(new_path).join('/')
|
20
|
+
"#{path_with_leading_slash(new_path)}"
|
19
21
|
else
|
20
|
-
"#{
|
22
|
+
"#{path_with_leading_slash(new_path)}"
|
21
23
|
end
|
22
24
|
end
|
25
|
+
|
26
|
+
def path_with_leading_slash(str)
|
27
|
+
str[/^\//] ? str : "/#{str}"
|
28
|
+
end
|
29
|
+
|
23
30
|
end
|
24
31
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'logger'
|
2
|
+
module ThemeBandit
|
3
|
+
class Log < Logger
|
4
|
+
class << self
|
5
|
+
attr_accessor :message
|
6
|
+
|
7
|
+
def colorize(text, color_code)
|
8
|
+
$stdout.write "\e[#{color_code}m#{text}\e[0m\n"
|
9
|
+
end
|
10
|
+
|
11
|
+
def red(text)
|
12
|
+
@message = text
|
13
|
+
colorize(text, 31)
|
14
|
+
logger.error text
|
15
|
+
end
|
16
|
+
|
17
|
+
def patch(old_file_name, new_file_name)
|
18
|
+
@message = "#{old_file_name} failed to download. Manually patch .theme/public/*/#{new_file_name} in its place"
|
19
|
+
logger.error @message
|
20
|
+
end
|
21
|
+
|
22
|
+
def yellow(text)
|
23
|
+
@message = text
|
24
|
+
colorize(text, 33)
|
25
|
+
end
|
26
|
+
|
27
|
+
def green(text)
|
28
|
+
@message = text
|
29
|
+
colorize(text, 32)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def logger
|
35
|
+
@logger ||= new 'error.log'
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/test/helper.rb
CHANGED
@@ -1,79 +1,24 @@
|
|
1
1
|
ENV['RACK_ENV'] = 'test'
|
2
2
|
|
3
3
|
require 'pry'
|
4
|
+
|
4
5
|
require 'rubygems'
|
5
6
|
require 'minitest/autorun'
|
6
7
|
require 'webmock/minitest'
|
7
8
|
|
8
9
|
require_relative '../lib/theme_bandit'
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
def load_html_fixture
|
13
|
-
@fixture ||= File.read(File.open("#{Dir.pwd}/test/fixtures/index.html", 'r'))
|
14
|
-
end
|
15
|
-
|
16
|
-
def load_css_fixture
|
17
|
-
File.read(File.open("#{Dir.pwd}/test/fixtures/css/style.css", 'r'))
|
18
|
-
end
|
19
|
-
|
20
|
-
def load_import_fixture
|
21
|
-
File.read(File.open("#{Dir.pwd}/test/fixtures/css/import.css", 'r'))
|
22
|
-
end
|
23
|
-
|
24
|
-
def load_style_with_import_fixture
|
25
|
-
File.read(File.open("#{Dir.pwd}/test/fixtures/css/style_with_import.css", 'r'))
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_url
|
29
|
-
'http://www.example.com'
|
30
|
-
end
|
31
|
-
|
32
|
-
def stub_request_stack
|
33
|
-
stub_request(:any, test_url).to_return(body: load_html_fixture)
|
34
|
-
stub_css
|
35
|
-
stub_import_css
|
36
|
-
stub_style_with_import_css
|
37
|
-
stub_js
|
38
|
-
end
|
11
|
+
require_relative 'support/common'
|
39
12
|
|
40
|
-
|
41
|
-
ThemeBandit.configure do |config|
|
42
|
-
config.template_engine = 'erb'
|
43
|
-
config.url = test_url
|
44
|
-
config.gem_root = Dir.pwd
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def stub_css
|
49
|
-
url = 'http://www.example.com/css/style.css'
|
50
|
-
stub_request(:any, url).to_return(body: load_css_fixture)
|
51
|
-
end
|
52
|
-
|
53
|
-
def stub_import_css
|
54
|
-
url = 'http://www.example.com/css/import.css'
|
55
|
-
stub_request(:any, url).to_return(body: load_import_fixture)
|
56
|
-
end
|
57
|
-
|
58
|
-
def stub_style_with_import_css
|
59
|
-
url = 'http://www.example.com/css/style_with_import.css'
|
60
|
-
stub_request(:any, url).to_return(body: load_style_with_import_fixture)
|
61
|
-
end
|
62
|
-
|
63
|
-
|
64
|
-
def stub_js
|
65
|
-
url = 'http://www.example.com/js/script.js'
|
66
|
-
stub_request(:any, url).to_return(body: '')
|
67
|
-
url = 'http://www.example.com/js/script_2.js'
|
68
|
-
stub_request(:any, url).to_return(body: '')
|
69
|
-
end
|
13
|
+
MiniTest.autorun
|
70
14
|
|
71
15
|
# supress log output when running tests
|
72
16
|
module ThemeBandit
|
73
|
-
class
|
17
|
+
class Log
|
74
18
|
class << self
|
75
|
-
def colorize(
|
19
|
+
def colorize(_text, _color_code)
|
76
20
|
end
|
77
21
|
end
|
78
22
|
end
|
79
23
|
end
|
24
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Bulk check of random urls
|
2
|
+
|
3
|
+
require_relative '../lib/theme_bandit'
|
4
|
+
require 'rubygems'
|
5
|
+
|
6
|
+
urls = [
|
7
|
+
'https://wp-themes.com/crawford/',
|
8
|
+
'http://yootheme.com/demo/themes/joomla/2014/peak/index.php?style=default',
|
9
|
+
'http://ign.com',
|
10
|
+
'http://gamespot.com',
|
11
|
+
'http://news.ycombinator.com',
|
12
|
+
'http://reddit.com'
|
13
|
+
]
|
14
|
+
|
15
|
+
def get_root
|
16
|
+
Gem::Specification.find_by_name('theme_bandit').gem_dir
|
17
|
+
rescue Gem::LoadError
|
18
|
+
Dir.pwd
|
19
|
+
end
|
20
|
+
|
21
|
+
urls.each do |url|
|
22
|
+
ThemeBandit.configure do |config|
|
23
|
+
config.url = url
|
24
|
+
config.template_engine = 'erb'
|
25
|
+
config.gem_root = get_root
|
26
|
+
end
|
27
|
+
document = ThemeBandit::Downloader.get_theme
|
28
|
+
ThemeBandit::DocumentWriter.new(document).write
|
29
|
+
ThemeBandit::RackGenerator.build
|
30
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
def load_html_fixture
|
2
|
+
@fixture ||= File.read(File.open("#{Dir.pwd}/test/fixtures/index.html", 'r'))
|
3
|
+
end
|
4
|
+
|
5
|
+
def load_css_fixture
|
6
|
+
File.read(File.open("#{Dir.pwd}/test/fixtures/css/style.css", 'r'))
|
7
|
+
end
|
8
|
+
|
9
|
+
def load_import_fixture
|
10
|
+
File.read(File.open("#{Dir.pwd}/test/fixtures/css/import.css", 'r'))
|
11
|
+
end
|
12
|
+
|
13
|
+
def load_style_with_import_fixture
|
14
|
+
File.read(File.open("#{Dir.pwd}/test/fixtures/css/style_with_import.css", 'r'))
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_url
|
18
|
+
'http://www.example.com'
|
19
|
+
end
|
20
|
+
|
21
|
+
def stub_request_stack
|
22
|
+
stub_request(:any, test_url).to_return(body: load_html_fixture)
|
23
|
+
stub_css
|
24
|
+
stub_import_css
|
25
|
+
stub_style_with_import_css
|
26
|
+
stub_js
|
27
|
+
end
|
28
|
+
|
29
|
+
def prep_config
|
30
|
+
ThemeBandit.configure do |config|
|
31
|
+
config.template_engine = 'erb'
|
32
|
+
config.url = test_url
|
33
|
+
config.gem_root = Dir.pwd
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def stub_css
|
38
|
+
url = 'http://www.example.com/css/style.css'
|
39
|
+
stub_request(:any, url).to_return(body: load_css_fixture)
|
40
|
+
end
|
41
|
+
|
42
|
+
def stub_import_css
|
43
|
+
url = 'http://www.example.com/css/import.css'
|
44
|
+
stub_request(:any, url).to_return(body: load_import_fixture)
|
45
|
+
end
|
46
|
+
|
47
|
+
def stub_style_with_import_css
|
48
|
+
url = 'http://www.example.com/css/style_with_import.css'
|
49
|
+
stub_request(:any, url).to_return(body: load_style_with_import_fixture)
|
50
|
+
end
|
51
|
+
|
52
|
+
def stub_js
|
53
|
+
url = 'http://www.example.com/js/script.js'
|
54
|
+
stub_request(:any, url).to_return(body: '')
|
55
|
+
url = 'http://www.example.com/js/script_2.js'
|
56
|
+
stub_request(:any, url).to_return(body: '')
|
57
|
+
end
|
58
|
+
|
@@ -65,15 +65,15 @@ describe ThemeBandit::DocumentWriter do
|
|
65
65
|
|
66
66
|
describe ThemeBandit::CSSParser do
|
67
67
|
it '#get_css_files' do
|
68
|
-
assert_equal(@subject.get_css_files, ["http://www.example.com#{Dir.pwd}/theme/public/css/0_style.css", "http://www.example.com#{Dir.pwd}/theme/public/css/0_style_with_import.css"
|
68
|
+
assert_equal(@subject.get_css_files, ["http://www.example.com#{Dir.pwd}/theme/public/css/0_style.css", "http://www.example.com#{Dir.pwd}/theme/public/css/0_style_with_import.css"])
|
69
69
|
end
|
70
70
|
|
71
71
|
describe '#get_import_urls' do
|
72
72
|
it 'returns false if none found' do
|
73
|
-
assert_equal(@subject.get_import_urls(load_css_fixture, 'import.css'), nil
|
73
|
+
assert_equal(@subject.get_import_urls(load_css_fixture, 'import.css'), nil)
|
74
74
|
end
|
75
75
|
it 'returns import urls' do
|
76
|
-
expected = [{:
|
76
|
+
expected = [{ destination: 'import.css', rule: "@import url('import.css');" }]
|
77
77
|
assert_equal(@subject.get_import_urls(load_style_with_import_fixture, 'style_with_import.css'), expected)
|
78
78
|
end
|
79
79
|
end
|
data/test/test_downloader.rb
CHANGED
@@ -15,7 +15,7 @@ describe ThemeBandit::Downloader do
|
|
15
15
|
it 'requires url configuration' do
|
16
16
|
ThemeBandit.configure { |config| config.url = nil }
|
17
17
|
@subject.get_theme
|
18
|
-
|
18
|
+
refute_empty(ThemeBandit::Log.message, 'Invalid configuration, please configure through ./bin wrapper')
|
19
19
|
end
|
20
20
|
|
21
21
|
describe 'attributes' do
|
@@ -23,8 +23,21 @@ describe ThemeBandit::Downloader do
|
|
23
23
|
@instance = @subject.new(@url)
|
24
24
|
end
|
25
25
|
|
26
|
-
|
27
|
-
|
26
|
+
describe '#url' do
|
27
|
+
describe 'with scheme' do
|
28
|
+
it 'returns url' do
|
29
|
+
assert_equal(@instance.url, @url)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe 'without scheme' do
|
34
|
+
before do
|
35
|
+
@instance = @subject.new('reddit.com')
|
36
|
+
end
|
37
|
+
it 'defaults to http' do
|
38
|
+
assert_equal(@instance.url, "http://reddit.com")
|
39
|
+
end
|
40
|
+
end
|
28
41
|
end
|
29
42
|
|
30
43
|
it '#options' do
|
data/test/test_url_formatter.rb
CHANGED
@@ -9,16 +9,34 @@ describe ThemeBandit::URLFormatter do
|
|
9
9
|
assert_equal(strip_query_string(url), 'http://www.example.com')
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
describe '#get_absolute_path' do
|
13
|
+
it 'it plays nicely with dot dots' do
|
14
|
+
host = '/demo/abc/test.html'
|
15
|
+
path = '../doc/docs.css'
|
16
|
+
assert_equal(get_absolute_path(host, path), '/demo/doc/docs.css')
|
17
|
+
end
|
18
|
+
|
19
|
+
describe 'non root-domain themes' do
|
20
|
+
before do
|
21
|
+
ThemeBandit.configure do |config|
|
22
|
+
config.template_engine = 'erb'
|
23
|
+
config.url = 'http://yootheme.com/demo/themes/joomla/2014/peak/index.php?style=default'
|
24
|
+
config.gem_root = Dir.pwd
|
25
|
+
end
|
26
|
+
end
|
27
|
+
it 'plays nice with non trailing slashes' do
|
28
|
+
old_path = '/demo/themes/joomla/2014/peak/index.php'
|
29
|
+
new_path = '/demo/themes/joomla/2014/peak/cache/template/widgetkit-627a3380-4ea1c88a.css'
|
30
|
+
assert_equal(get_absolute_path(old_path, new_path), '/demo/themes/joomla/2014/peak/cache/template/widgetkit-627a3380-4ea1c88a.css')
|
31
|
+
end
|
32
|
+
end
|
16
33
|
end
|
17
|
-
|
34
|
+
|
35
|
+
it '#cdn_to_fqd' do
|
18
36
|
src = '//cdn.optimizely.com/js/2953003.js'
|
19
|
-
assert_equal(
|
37
|
+
assert_equal(cdn_to_fqd(src), "http:#{src}")
|
20
38
|
src = 'https://cdn.optimizely.com/js/2953003.js'
|
21
|
-
assert_equal(
|
39
|
+
assert_equal(cdn_to_fqd(src), src)
|
22
40
|
end
|
23
41
|
|
24
42
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: theme_bandit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luke Fender
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -158,7 +158,7 @@ files:
|
|
158
158
|
- lib/theme_bandit/recipes/sinatra/slim/config.ru
|
159
159
|
- lib/theme_bandit/url_formatter.rb
|
160
160
|
- lib/theme_bandit/util/configure.rb
|
161
|
-
- lib/theme_bandit/util/
|
161
|
+
- lib/theme_bandit/util/log.rb
|
162
162
|
- lib/theme_bandit/util/version.rb
|
163
163
|
- test/fixtures/css/import.css
|
164
164
|
- test/fixtures/css/style.css
|
@@ -167,6 +167,8 @@ files:
|
|
167
167
|
- test/fixtures/js/script.js
|
168
168
|
- test/fixtures/js/script_2.js
|
169
169
|
- test/helper.rb
|
170
|
+
- test/sanity_check.rb
|
171
|
+
- test/support/common.rb
|
170
172
|
- test/test_configure.rb
|
171
173
|
- test/test_document_writer.rb
|
172
174
|
- test/test_downloader.rb
|
@@ -205,6 +207,8 @@ test_files:
|
|
205
207
|
- test/fixtures/js/script.js
|
206
208
|
- test/fixtures/js/script_2.js
|
207
209
|
- test/helper.rb
|
210
|
+
- test/sanity_check.rb
|
211
|
+
- test/support/common.rb
|
208
212
|
- test/test_configure.rb
|
209
213
|
- test/test_document_writer.rb
|
210
214
|
- test/test_downloader.rb
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module ThemeBandit
|
2
|
-
class Logger
|
3
|
-
class << self
|
4
|
-
|
5
|
-
attr_accessor :message
|
6
|
-
|
7
|
-
def colorize(text, color_code)
|
8
|
-
$stdout.write "\e[#{color_code}m#{text}\e[0m\n"
|
9
|
-
end
|
10
|
-
|
11
|
-
def red text
|
12
|
-
@message = text
|
13
|
-
colorize(text, 31)
|
14
|
-
end
|
15
|
-
|
16
|
-
def green text
|
17
|
-
@message = text
|
18
|
-
colorize(text, 32)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|