theme_bandit 0.0.2
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 +15 -0
- data/.gitignore +30 -0
- data/Gemfile +9 -0
- data/LICENSE.txt +22 -0
- data/README.md +53 -0
- data/Rakefile +17 -0
- data/bin/bandit +93 -0
- data/lib/theme_bandit/document_writer.rb +65 -0
- data/lib/theme_bandit/downloader.rb +30 -0
- data/lib/theme_bandit/init.rb +16 -0
- data/lib/theme_bandit/parser/css.rb +26 -0
- data/lib/theme_bandit/parser/html.rb +65 -0
- data/lib/theme_bandit/parser/js.rb +26 -0
- data/lib/theme_bandit/rack_generator.rb +56 -0
- data/lib/theme_bandit/recipes/sinatra/erb/Gemfile +4 -0
- data/lib/theme_bandit/recipes/sinatra/erb/app/application.rb +10 -0
- data/lib/theme_bandit/recipes/sinatra/erb/app/views/.keep +0 -0
- data/lib/theme_bandit/recipes/sinatra/erb/app/views/templates/.keep +0 -0
- data/lib/theme_bandit/recipes/sinatra/erb/config.ru +25 -0
- data/lib/theme_bandit/recipes/sinatra/haml/Gemfile +5 -0
- data/lib/theme_bandit/recipes/sinatra/haml/app/application.rb +10 -0
- data/lib/theme_bandit/recipes/sinatra/haml/config.ru +25 -0
- data/lib/theme_bandit/recipes/sinatra/slim/Gemfile +5 -0
- data/lib/theme_bandit/recipes/sinatra/slim/app/application.rb +10 -0
- data/lib/theme_bandit/recipes/sinatra/slim/config.ru +25 -0
- data/lib/theme_bandit/url_formatter.rb +7 -0
- data/lib/theme_bandit/util/configure.rb +50 -0
- data/lib/theme_bandit/util/version.rb +3 -0
- data/lib/theme_bandit.rb +4 -0
- data/test/fixtures/css/style.css +0 -0
- data/test/fixtures/index.html +83 -0
- data/test/fixtures/js/script.js +0 -0
- data/test/fixtures/js/script_2.js +0 -0
- data/test/helper.rb +39 -0
- data/test/test_configure.rb +14 -0
- data/test/test_document_writer.rb +64 -0
- data/test/test_downloader.rb +39 -0
- data/test/test_rack_generator.rb +52 -0
- data/test/test_url_formatter.rb +12 -0
- data/theme_bandit.gemspec +29 -0
- metadata +206 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MmM3OTY5MzM4ZWExYjI2NDZmZTU2M2U5ZTNmOWUwOWMzYTM1ZDIxMw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YmM5MTg1N2NjMzc4ZTFmMjU5YjNhY2RhMjc0MDEwYWMyYzU3YTc3YQ==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
YjY4ZDM3NTViN2YxYjhhNTg0MGYxMDdkYjc2NWQ1ZmQ3MzkwYjM1MWY4ZTE2
|
10
|
+
M2IyZjZlZjlmNjYzNjRiN2EzNmFhMDA2YjE2YjU5Njg1ODg4ZWZlOTdmM2I1
|
11
|
+
ZjQ4MWY4MzdkMjM4MzA2MGJiZTZkNTU3NTY0ZjFiZjBlMjhmZmQ=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MWZlYTIyOWYwMzQzOTFjNjhhYmU4MWU2MzcyNWIwMTAzZDNjZjEyNTE4N2Yx
|
14
|
+
MGI4MzNkZTJlOTQ3YWE3NThmY2I0M2QzZTEwNDcyMTg1NjRhNjE3ZmZjYmU0
|
15
|
+
NGI4ODRhOWEyM2M5YWE3NGQxYjA0MTlkN2VlYTI0ZTlhMWE2OTY=
|
data/.gitignore
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
theme
|
2
|
+
|
3
|
+
*.gem
|
4
|
+
*.rbc
|
5
|
+
*.so
|
6
|
+
*.o
|
7
|
+
*.a
|
8
|
+
.bundle
|
9
|
+
.config
|
10
|
+
.yardoc
|
11
|
+
.rvmrc
|
12
|
+
.ruby-gemset
|
13
|
+
.ruby-version
|
14
|
+
vendor/ruby
|
15
|
+
doc
|
16
|
+
tmp
|
17
|
+
pkg
|
18
|
+
rdoc
|
19
|
+
Gemfile.lock
|
20
|
+
InstalledFiles
|
21
|
+
_yardoc
|
22
|
+
lib/bundler/man
|
23
|
+
spec/reports
|
24
|
+
test/tmp
|
25
|
+
test/version_tmp
|
26
|
+
mkmf.log
|
27
|
+
.bundle
|
28
|
+
coverage
|
29
|
+
.swp
|
30
|
+
.dump
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Luke Fender
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# ThemeBandit
|
2
|
+
|
3
|
+
Enjoy rapid prototyping with theme bandit :heart:
|
4
|
+
|
5
|
+
Convert any site template (Wordpress, Joomla, HTML) into a small and
|
6
|
+
simple sinatra rack application.
|
7
|
+
|
8
|
+
`bandit`
|
9
|
+
- Select a url to download
|
10
|
+
- Select a templating engine (erb, haml, slim)
|
11
|
+
- Start your rack app!
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
Add this line to your application's Gemfile:
|
16
|
+
|
17
|
+
gem 'theme_bandit'
|
18
|
+
|
19
|
+
And then execute:
|
20
|
+
|
21
|
+
$ bundle
|
22
|
+
|
23
|
+
Or install it yourself as:
|
24
|
+
|
25
|
+
$ gem install theme_bandit
|
26
|
+
|
27
|
+
## Usage
|
28
|
+
`./bin/bandit/` -> Builds a rack application in the `theme` directory of
|
29
|
+
your project root.
|
30
|
+
|
31
|
+
## Caveats
|
32
|
+
Not all templating engines play nicely with html. If you run into
|
33
|
+
templating issues, `erb` will be your safest bet because it renders as
|
34
|
+
pure html.
|
35
|
+
|
36
|
+
## TODO
|
37
|
+
- Support for binaries (images + fonts + embeds)
|
38
|
+
- Support for multiple pages
|
39
|
+
- HTML Sanitization
|
40
|
+
- HTML Formatting
|
41
|
+
|
42
|
+
## Tests
|
43
|
+
|
44
|
+
```
|
45
|
+
rake test
|
46
|
+
```
|
47
|
+
## Contributing
|
48
|
+
|
49
|
+
1. Fork it
|
50
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
51
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
52
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
53
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'bundler'
|
5
|
+
Bundler::GemHelper.install_tasks
|
6
|
+
rescue => e
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'rake/testtask'
|
10
|
+
|
11
|
+
Rake::TestTask.new(:test) do |t|
|
12
|
+
t.libs << 'lib' << 'test'
|
13
|
+
t.pattern = 'test/**/test_*.rb'
|
14
|
+
t.verbose = true
|
15
|
+
end
|
16
|
+
|
17
|
+
task default: 'test'
|
data/bin/bandit
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
4
|
+
|
5
|
+
require 'fileutils'
|
6
|
+
require 'theme_bandit'
|
7
|
+
require 'uri'
|
8
|
+
require 'bundler'
|
9
|
+
|
10
|
+
SUPPORTED_ENGINES = /^(erb|haml|slim)$/
|
11
|
+
|
12
|
+
def get_root
|
13
|
+
begin
|
14
|
+
Gem::Specification.find_by_name('theme_bandit').gem_dir
|
15
|
+
rescue
|
16
|
+
Dir.pwd
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def init
|
21
|
+
ThemeBandit.configure do |config|
|
22
|
+
config.url = ask_user_for_domain
|
23
|
+
config.template_engine = ask_user_for_language
|
24
|
+
config.gem_root = get_root
|
25
|
+
end
|
26
|
+
start_fresh
|
27
|
+
document = ThemeBandit::Downloader.get_theme
|
28
|
+
generate_app(document)
|
29
|
+
ask_user_to_start_rack_app
|
30
|
+
end
|
31
|
+
|
32
|
+
def start_fresh
|
33
|
+
`rm -rf theme`
|
34
|
+
make_a_directory
|
35
|
+
end
|
36
|
+
|
37
|
+
def generate_app(document)
|
38
|
+
ThemeBandit::DocumentWriter.new(document).write
|
39
|
+
ThemeBandit::RackGenerator.build
|
40
|
+
end
|
41
|
+
|
42
|
+
def make_a_directory
|
43
|
+
FileUtils.mkdir_p 'theme'
|
44
|
+
end
|
45
|
+
|
46
|
+
def ask_user_for_domain
|
47
|
+
puts 'Enter the URL of the theme you wish to download (example: http://www.google.com)'
|
48
|
+
url = gets.chomp
|
49
|
+
if url == ''
|
50
|
+
raise 'Invalid url'
|
51
|
+
else
|
52
|
+
url
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def ask_user_for_language
|
57
|
+
puts 'Select your favorite template engine (erb, haml, slim)'
|
58
|
+
answer = gets.chomp
|
59
|
+
fail "You must select a supported template engine (erb, haml, or slim)" unless match = answer.match(SUPPORTED_ENGINES)
|
60
|
+
match[0]
|
61
|
+
end
|
62
|
+
|
63
|
+
def ask_user_to_start_rack_app
|
64
|
+
puts 'Do you want to start your new rack app? y/n'
|
65
|
+
answer = gets.chomp
|
66
|
+
if answer == 'y'
|
67
|
+
app_message
|
68
|
+
puts 'changing directory to ./theme'
|
69
|
+
Dir.chdir 'theme' do
|
70
|
+
Bundler.with_clean_env do
|
71
|
+
puts "running bundle in #{Dir.pwd}/"
|
72
|
+
`bundle install`
|
73
|
+
puts 'running `bundle exec rackup -p 3000`'
|
74
|
+
system('bundle exec rackup -p 3000')
|
75
|
+
end
|
76
|
+
end
|
77
|
+
else
|
78
|
+
app_message
|
79
|
+
puts "Don't forget to bundle before starting!"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def app_message
|
84
|
+
puts "Your rack app can be found at #{Dir.pwd}/theme/"
|
85
|
+
end
|
86
|
+
|
87
|
+
begin
|
88
|
+
require 'theme_bandit'
|
89
|
+
init
|
90
|
+
rescue LoadError => e
|
91
|
+
require 'rubygems'
|
92
|
+
require 'theme_bandit'
|
93
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module ThemeBandit
|
2
|
+
class DocumentWriter
|
3
|
+
include ThemeBandit::CSSParser
|
4
|
+
include ThemeBandit::JSParser
|
5
|
+
include ThemeBandit::HTMLParser
|
6
|
+
# TODO: image parser
|
7
|
+
# TODO: font parser
|
8
|
+
|
9
|
+
attr_accessor :document
|
10
|
+
attr_reader :url
|
11
|
+
|
12
|
+
CSS_FOLDER = './theme/public/css/'
|
13
|
+
JS_FOLDER = './theme/public/js/'
|
14
|
+
HTML_FOLDER = './theme/public/'
|
15
|
+
|
16
|
+
def initialize(doc, url = ThemeBandit.configuration.url)
|
17
|
+
@document, @url = Nokogiri::HTML(doc), URI.parse(url)
|
18
|
+
end
|
19
|
+
|
20
|
+
def write
|
21
|
+
write_html_revision
|
22
|
+
end
|
23
|
+
|
24
|
+
def html
|
25
|
+
document.to_html
|
26
|
+
end
|
27
|
+
|
28
|
+
def write_html_revision
|
29
|
+
download_css(get_css_files)
|
30
|
+
download_js(get_js_files)
|
31
|
+
revise_head_tags
|
32
|
+
write_html_file
|
33
|
+
end
|
34
|
+
|
35
|
+
# def build_rack_app
|
36
|
+
# ThemeBandit::RackGenerator.build
|
37
|
+
# end
|
38
|
+
|
39
|
+
def make_dir(folder)
|
40
|
+
FileUtils.mkdir_p folder
|
41
|
+
end
|
42
|
+
|
43
|
+
def download_css(files)
|
44
|
+
make_dir(CSS_FOLDER)
|
45
|
+
files.each_with_index do |file_name, _count|
|
46
|
+
doc = Downloader.fetch(file_name, {})
|
47
|
+
new_file = file_name.split('/').last
|
48
|
+
File.open("#{CSS_FOLDER}#{new_file}", 'w') { |file| file.write(doc.body) }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def download_js(files)
|
53
|
+
make_dir(JS_FOLDER)
|
54
|
+
files.each_with_index do |file_name, order|
|
55
|
+
doc = Downloader.fetch(file_name, {})
|
56
|
+
new_file = file_name.split('/').last
|
57
|
+
File.open("#{JS_FOLDER}#{order}_#{new_file}", 'w') { |file| file.write(doc.body) }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def write_html_file
|
62
|
+
File.open("#{HTML_FOLDER}index.html", 'w') { |file| file.write(html) }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
module ThemeBandit
|
4
|
+
class Downloader
|
5
|
+
include HTTParty
|
6
|
+
|
7
|
+
def self.get_theme(url = ThemeBandit.configuration.url)
|
8
|
+
url ? fetch(url) : error
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.fetch(url, options = {})
|
12
|
+
new(url, options).document
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.error
|
16
|
+
fail 'Invalid configuration, please configure through ./bin wrapper'
|
17
|
+
end
|
18
|
+
|
19
|
+
attr_reader :url, :options, :document
|
20
|
+
|
21
|
+
def initialize(url, options = {})
|
22
|
+
@url, @options = url, options
|
23
|
+
@document = get_document(url)
|
24
|
+
end
|
25
|
+
|
26
|
+
def get_document(url)
|
27
|
+
self.class.get(url, options)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'nokogiri'
|
3
|
+
|
4
|
+
require_relative 'downloader'
|
5
|
+
require_relative 'url_formatter'
|
6
|
+
|
7
|
+
require_relative 'parser/css'
|
8
|
+
require_relative 'parser/js'
|
9
|
+
require_relative 'parser/html'
|
10
|
+
|
11
|
+
require_relative 'document_writer'
|
12
|
+
|
13
|
+
require_relative 'rack_generator'
|
14
|
+
|
15
|
+
require_relative 'util/configure'
|
16
|
+
require_relative 'util/version'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module ThemeBandit
|
2
|
+
module CSSParser
|
3
|
+
include ThemeBandit::URLFormatter
|
4
|
+
|
5
|
+
def get_css_files
|
6
|
+
link_tag_values
|
7
|
+
end
|
8
|
+
|
9
|
+
def link_tags
|
10
|
+
document.css('link').select do |tag|
|
11
|
+
tag.attribute('rel').value == 'stylesheet'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def link_tag_values
|
16
|
+
link_tags.map do |tag|
|
17
|
+
href = URI.parse(tag.attribute('href'))
|
18
|
+
if href.absolute?
|
19
|
+
strip_query_string href.to_s
|
20
|
+
else
|
21
|
+
strip_query_string "#{url.scheme}://#{url.host}#{href}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module ThemeBandit
|
2
|
+
module HTMLParser
|
3
|
+
def revise_head_tags
|
4
|
+
remove_link_tags
|
5
|
+
remove_script_tags
|
6
|
+
inject_link_nodes
|
7
|
+
inject_script_nodes
|
8
|
+
end
|
9
|
+
|
10
|
+
def remove_link_tags
|
11
|
+
document.search('link').remove
|
12
|
+
end
|
13
|
+
|
14
|
+
def remove_script_tags
|
15
|
+
document.search('script').remove
|
16
|
+
end
|
17
|
+
|
18
|
+
def local_link_names
|
19
|
+
path = "#{Dir.pwd}/theme/public/css/"
|
20
|
+
Dir.entries(path).map do |file_name|
|
21
|
+
"#{path}#{file_name}" if file_name['css']
|
22
|
+
end.compact
|
23
|
+
end
|
24
|
+
|
25
|
+
def local_script_names
|
26
|
+
path = "#{Dir.pwd}/theme/public/js/"
|
27
|
+
Dir.entries(path).map do |file_name|
|
28
|
+
"#{path}#{file_name}" if file_name['js']
|
29
|
+
end.compact.sort
|
30
|
+
end
|
31
|
+
|
32
|
+
def link_nodes
|
33
|
+
[].tap do |arr|
|
34
|
+
local_link_names.each do |link_path|
|
35
|
+
link = Nokogiri::XML::Node.new 'link', document
|
36
|
+
link.set_attribute('rel', 'stylesheet')
|
37
|
+
link.set_attribute('href', "#{link_path}")
|
38
|
+
arr << link
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def script_nodes
|
44
|
+
[].tap do |arr|
|
45
|
+
local_script_names.each do |script_path|
|
46
|
+
script = Nokogiri::XML::Node.new 'script', document
|
47
|
+
script.set_attribute('src', "#{script_path}")
|
48
|
+
arr << script
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def inject_link_nodes
|
54
|
+
link_nodes.each do |node|
|
55
|
+
document.search('head').first.add_child(node)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def inject_script_nodes
|
60
|
+
script_nodes.each do |node|
|
61
|
+
document.search('head').first.add_child(node)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module ThemeBandit
|
2
|
+
module JSParser
|
3
|
+
include ThemeBandit::URLFormatter
|
4
|
+
|
5
|
+
def get_js_files
|
6
|
+
script_tag_values
|
7
|
+
end
|
8
|
+
|
9
|
+
def script_tags
|
10
|
+
document.css('script').select do |tag|
|
11
|
+
tag.attribute('src')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def script_tag_values
|
16
|
+
script_tags.map do |tag|
|
17
|
+
src = URI.parse(tag.attribute('src'))
|
18
|
+
if src.absolute?
|
19
|
+
strip_query_string src.to_s
|
20
|
+
else
|
21
|
+
strip_query_string "#{url.scheme}://#{url.host}#{src}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'html2slim/command'
|
2
|
+
|
3
|
+
require 'html2haml'
|
4
|
+
|
5
|
+
module ThemeBandit
|
6
|
+
class RackGenerator
|
7
|
+
def self.build
|
8
|
+
new
|
9
|
+
end
|
10
|
+
|
11
|
+
THEME_DIR = "#{Dir.pwd}/theme/"
|
12
|
+
TEMPLATE_ERROR = 'Templating engine not supported'
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
copy_template_to_dir(THEME_DIR)
|
16
|
+
generate_view
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_recipe(root = ThemeBandit.configuration.gem_root)
|
20
|
+
src = "#{root}/lib/theme_bandit/recipes/sinatra/#{ThemeBandit.configuration.template_engine}/"
|
21
|
+
Dir.glob("#{src}/**/*")
|
22
|
+
end
|
23
|
+
|
24
|
+
# NOTE: to copy the innards of a dir, use a /., with a dot at the end
|
25
|
+
# example - recipes/sinatra/.
|
26
|
+
def copy_template_to_dir(destination)
|
27
|
+
t = get_recipe
|
28
|
+
FileUtils.cp_r t, destination
|
29
|
+
end
|
30
|
+
|
31
|
+
def index_file_contents
|
32
|
+
index_html = File.open("#{Dir.pwd}/theme/public/index.html", 'r')
|
33
|
+
absolute_to_relative(File.read(index_html))
|
34
|
+
end
|
35
|
+
|
36
|
+
# Convert all links in html document to relative for ruby app
|
37
|
+
def absolute_to_relative(contents)
|
38
|
+
contents.gsub("#{Dir.pwd}/theme/public", '')
|
39
|
+
end
|
40
|
+
|
41
|
+
def generate_view(root = Dir.pwd)
|
42
|
+
case ThemeBandit.configuration.template_engine
|
43
|
+
when 'slim'
|
44
|
+
slim_contents = HTML2Slim.convert!(index_file_contents, :html)
|
45
|
+
File.open("#{root}/theme/app/views/templates/index.slim", 'w') { |file| file.write(slim_contents) }
|
46
|
+
when ('erb' || 'html')
|
47
|
+
File.open("#{root}/theme/app/views/templates/index.erb", 'w') { |file| file.write(index_file_contents) }
|
48
|
+
when 'haml'
|
49
|
+
haml_contents = Haml::HTML.new(index_file_contents, erb: nil).render
|
50
|
+
File.open("#{root}/theme/app/views/templates/index.haml", 'w') { |file| file.write(haml_contents) }
|
51
|
+
else
|
52
|
+
fail TEMPLATE_ERROR
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
File without changes
|
File without changes
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
def env
|
4
|
+
(ENV['RACK_ENV'] || 'development').to_sym
|
5
|
+
end
|
6
|
+
|
7
|
+
gemfile = File.expand_path('../../Gemfile', __FILE__)
|
8
|
+
|
9
|
+
ROOT = Dir.pwd
|
10
|
+
|
11
|
+
begin
|
12
|
+
ENV['BUNDLE_GEMFILE'] = gemfile
|
13
|
+
require 'bundler'
|
14
|
+
Bundler.setup
|
15
|
+
rescue Bundler::GemNotFound => e
|
16
|
+
STDERR.puts e.message
|
17
|
+
STDERR.puts 'Try running `bundle install`.'
|
18
|
+
exit!
|
19
|
+
end if File.exist?(gemfile)
|
20
|
+
|
21
|
+
Bundler.require(:default, env)
|
22
|
+
|
23
|
+
require File.join(File.dirname(__FILE__),'app','application.rb')
|
24
|
+
|
25
|
+
run Application
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
def env
|
4
|
+
(ENV['RACK_ENV'] || 'development').to_sym
|
5
|
+
end
|
6
|
+
|
7
|
+
gemfile = File.expand_path('../../Gemfile', __FILE__)
|
8
|
+
|
9
|
+
ROOT = Dir.pwd
|
10
|
+
|
11
|
+
begin
|
12
|
+
ENV['BUNDLE_GEMFILE'] = gemfile
|
13
|
+
require 'bundler'
|
14
|
+
Bundler.setup
|
15
|
+
rescue Bundler::GemNotFound => e
|
16
|
+
STDERR.puts e.message
|
17
|
+
STDERR.puts 'Try running `bundle install`.'
|
18
|
+
exit!
|
19
|
+
end if File.exist?(gemfile)
|
20
|
+
|
21
|
+
Bundler.require(:default, env)
|
22
|
+
|
23
|
+
require File.join(File.dirname(__FILE__),'app','application.rb')
|
24
|
+
|
25
|
+
run Application
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
def env
|
4
|
+
(ENV['RACK_ENV'] || 'development').to_sym
|
5
|
+
end
|
6
|
+
|
7
|
+
gemfile = File.expand_path('../../Gemfile', __FILE__)
|
8
|
+
|
9
|
+
ROOT = Dir.pwd
|
10
|
+
|
11
|
+
begin
|
12
|
+
ENV['BUNDLE_GEMFILE'] = gemfile
|
13
|
+
require 'bundler'
|
14
|
+
Bundler.setup
|
15
|
+
rescue Bundler::GemNotFound => e
|
16
|
+
STDERR.puts e.message
|
17
|
+
STDERR.puts 'Try running `bundle install`.'
|
18
|
+
exit!
|
19
|
+
end if File.exist?(gemfile)
|
20
|
+
|
21
|
+
Bundler.require(:default, env)
|
22
|
+
|
23
|
+
require File.join(File.dirname(__FILE__),'app','application.rb')
|
24
|
+
|
25
|
+
run Application
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module ThemeBandit
|
2
|
+
class << self
|
3
|
+
attr_accessor :configuration
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.configure
|
7
|
+
self.configuration ||= Config.new
|
8
|
+
yield configuration
|
9
|
+
configuration
|
10
|
+
end
|
11
|
+
|
12
|
+
class Config
|
13
|
+
attr_accessor :data
|
14
|
+
|
15
|
+
def initialize(data = {})
|
16
|
+
@data = {}
|
17
|
+
update!(data)
|
18
|
+
end
|
19
|
+
|
20
|
+
def update!(data)
|
21
|
+
data.each do |key, value|
|
22
|
+
self[key.to_sym] = value
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def [](key)
|
27
|
+
@data[key.to_sym]
|
28
|
+
end
|
29
|
+
|
30
|
+
def []=(key, value)
|
31
|
+
@data[key.to_sym] = value
|
32
|
+
end
|
33
|
+
|
34
|
+
def keys
|
35
|
+
@data.keys
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_hash
|
39
|
+
@data
|
40
|
+
end
|
41
|
+
|
42
|
+
def method_missing(sym, *args)
|
43
|
+
if sym.to_s =~ /(.+)=$/
|
44
|
+
self[Regexp.last_match[1]] = args.first
|
45
|
+
else
|
46
|
+
self[sym]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/theme_bandit.rb
ADDED
File without changes
|
@@ -0,0 +1,83 @@
|
|
1
|
+
<html>
|
2
|
+
|
3
|
+
<head>
|
4
|
+
|
5
|
+
<title>A very simple webpage</title>
|
6
|
+
<basefont size=4>
|
7
|
+
<link rel='stylesheet' href='/css/style.css'></link>
|
8
|
+
<script type='text/javascripts' src='/js/script.js'></script>
|
9
|
+
<script type='text/javascripts' src='/js/script_2.js'></script>
|
10
|
+
</head>
|
11
|
+
|
12
|
+
<body bgcolor=FFFFFF>
|
13
|
+
|
14
|
+
<h1>A very simple webpage. This is an "h1" level header.</h1>
|
15
|
+
|
16
|
+
<h2>This is a level h2 header.</h2>
|
17
|
+
|
18
|
+
<h6>This is a level h6 header. Pretty small!</h6>
|
19
|
+
|
20
|
+
<p>This is a standard paragraph.</p>
|
21
|
+
|
22
|
+
<p align=center>Now I've aligned it in the center of the screen.</p>
|
23
|
+
|
24
|
+
<p align=right>Now aligned to the right</p>
|
25
|
+
|
26
|
+
<p><b>Bold text</b></p>
|
27
|
+
|
28
|
+
<p><strong>Strongly emphasized text</strong> Can you tell the difference vs. bold?</p>
|
29
|
+
|
30
|
+
<p><i>Italics</i></p>
|
31
|
+
|
32
|
+
<p><em>Emphasized text</em> Just like Italics!</p>
|
33
|
+
|
34
|
+
<p>Here is a pretty picture: <img src=example/prettypicture.jpg alt="Pretty Picture"></p>
|
35
|
+
|
36
|
+
<p>Same thing, aligned differently to the paragraph: <img align=top src=example/prettypicture.jpg alt="Pretty Picture"></p>
|
37
|
+
|
38
|
+
<hr>
|
39
|
+
|
40
|
+
<h2>How about a nice ordered list!</h2>
|
41
|
+
<ol>
|
42
|
+
<li>This little piggy went to market
|
43
|
+
<li>This little piggy went to SB228 class
|
44
|
+
<li>This little piggy went to an expensive restaurant in Downtown Palo Alto
|
45
|
+
<li>This little piggy ate too much at Indian Buffet.
|
46
|
+
<li>This little piggy got lost
|
47
|
+
</ol>
|
48
|
+
|
49
|
+
<h2>Unordered list</h2>
|
50
|
+
<ul>
|
51
|
+
<li>First element
|
52
|
+
<li>Second element
|
53
|
+
<li>Third element
|
54
|
+
</ul>
|
55
|
+
|
56
|
+
<hr>
|
57
|
+
|
58
|
+
<h2>Nested Lists!</h2>
|
59
|
+
<ul>
|
60
|
+
<li>Things to to today:
|
61
|
+
<ol>
|
62
|
+
<li>Walk the dog
|
63
|
+
<li>Feed the cat
|
64
|
+
<li>Mow the lawn
|
65
|
+
</ol>
|
66
|
+
<li>Things to do tomorrow:
|
67
|
+
<ol>
|
68
|
+
<li>Lunch with mom
|
69
|
+
<li>Feed the hamster
|
70
|
+
<li>Clean kitchen
|
71
|
+
</ol>
|
72
|
+
</ul>
|
73
|
+
|
74
|
+
<p>And finally, how about some <a href=http://www.yahoo.com/>Links?</a></p>
|
75
|
+
|
76
|
+
<p>Or let's just link to <a href=../../index.html>another page on this server</a></p>
|
77
|
+
|
78
|
+
<p>Remember, you can view the HTMl code from this or any other page by using the "View Page Source" command of your browser.</p>
|
79
|
+
|
80
|
+
</body>
|
81
|
+
|
82
|
+
</html>
|
83
|
+
|
File without changes
|
File without changes
|
data/test/helper.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'pry'
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'webmock/minitest'
|
5
|
+
|
6
|
+
require_relative '../lib/theme_bandit'
|
7
|
+
|
8
|
+
MiniTest.autorun
|
9
|
+
|
10
|
+
def load_html_fixture
|
11
|
+
@fixture ||= File.read(File.open("#{Dir.pwd}/test/fixtures/index.html", 'r'))
|
12
|
+
end
|
13
|
+
|
14
|
+
def stub_request_stack
|
15
|
+
@url = 'http://www.example.com'
|
16
|
+
stub_request(:get, @url).to_return(body: load_html_fixture)
|
17
|
+
stub_css
|
18
|
+
stub_js
|
19
|
+
end
|
20
|
+
|
21
|
+
def prep_config
|
22
|
+
ThemeBandit.configure do |config|
|
23
|
+
config.template_engine = 'erb'
|
24
|
+
config.url = 'http://www.example.com'
|
25
|
+
config.gem_root = Dir.pwd
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def stub_css
|
30
|
+
url = 'http://www.example.com/css/style.css'
|
31
|
+
stub_request(:get, url).to_return(body: '')
|
32
|
+
end
|
33
|
+
|
34
|
+
def stub_js
|
35
|
+
url = 'http://www.example.com/js/script.js'
|
36
|
+
stub_request(:get, url).to_return(body: '')
|
37
|
+
url = 'http://www.example.com/js/script_2.js'
|
38
|
+
stub_request(:get, url).to_return(body: '')
|
39
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
class TestConfigure < MiniTest::Test
|
4
|
+
def setup
|
5
|
+
@subject = ThemeBandit
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_configuration
|
9
|
+
@subject.configure do |config|
|
10
|
+
config.foo = 'bar'
|
11
|
+
end
|
12
|
+
assert_equal @subject.configuration.foo, 'bar'
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe ThemeBandit::DocumentWriter do
|
4
|
+
|
5
|
+
before do
|
6
|
+
stub_request_stack
|
7
|
+
prep_config
|
8
|
+
@subject = ThemeBandit::DocumentWriter.new(load_html_fixture, @url)
|
9
|
+
end
|
10
|
+
|
11
|
+
after do
|
12
|
+
`rm -rf theme`
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'attributes' do
|
16
|
+
it 'document' do
|
17
|
+
assert_kind_of(Nokogiri::HTML::Document, @subject.document)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'url' do
|
21
|
+
assert_kind_of(URI, @subject.url)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#write' do
|
26
|
+
|
27
|
+
before do
|
28
|
+
@subject.write
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#write' do
|
32
|
+
it 'writes index.html' do
|
33
|
+
assert File.file?("#{Dir.pwd}/theme/public/index.html")
|
34
|
+
end
|
35
|
+
it 'writes styles' do
|
36
|
+
assert File.file?("#{Dir.pwd}/theme/public/css/style.css")
|
37
|
+
end
|
38
|
+
describe 'script writers' do
|
39
|
+
# Preserve order of script tags
|
40
|
+
it 'orders and renames script 1' do
|
41
|
+
assert File.file?("#{Dir.pwd}/theme/public/js/0_script.js")
|
42
|
+
end
|
43
|
+
it 'orders and renames script 2' do
|
44
|
+
assert File.file?("#{Dir.pwd}/theme/public/js/1_script_2.js")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe 'parsers/mixin behavior' do
|
50
|
+
describe ThemeBandit::CSSParser do
|
51
|
+
it '#get_css_files' do
|
52
|
+
assert_equal(@subject.get_css_files, ['http://www.example.com/Users/lfender/source/theme_bandit/theme/public/css/style.css'])
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe ThemeBandit::JSParser do
|
57
|
+
it '#get_js_files' do
|
58
|
+
assert_equal(@subject.get_js_files, ['http://www.example.com/Users/lfender/source/theme_bandit/theme/public/js/0_script.js', 'http://www.example.com/Users/lfender/source/theme_bandit/theme/public/js/1_script_2.js'])
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
describe ThemeBandit::Downloader do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@url = 'https://www.example.com/'
|
7
|
+
stub_request(:get, @url).to_return(body: load_html_fixture)
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '.get_theme' do
|
11
|
+
before do
|
12
|
+
@subject = ThemeBandit::Downloader
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'requires url configuration' do
|
16
|
+
ThemeBandit.configure { |config| config.url = nil }
|
17
|
+
lambda { @subject.get_theme }.must_raise RuntimeError
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'attributes' do
|
21
|
+
before do
|
22
|
+
@instance = @subject.new(@url)
|
23
|
+
end
|
24
|
+
|
25
|
+
it '#url' do
|
26
|
+
assert_equal(@instance.url, @url)
|
27
|
+
end
|
28
|
+
|
29
|
+
it '#options' do
|
30
|
+
assert_equal(@instance.options, {})
|
31
|
+
end
|
32
|
+
|
33
|
+
it '#document returns html' do
|
34
|
+
assert_kind_of(String, @instance.document)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe ThemeBandit::RackGenerator do
|
4
|
+
|
5
|
+
supported_engines = %w(slim haml erb)
|
6
|
+
|
7
|
+
supported_engines.each do |engine|
|
8
|
+
describe "#builds a recipe #{engine}" do
|
9
|
+
|
10
|
+
before do
|
11
|
+
stub_request_stack
|
12
|
+
@engine = engine
|
13
|
+
configure_and_write_files
|
14
|
+
ThemeBandit::RackGenerator.build
|
15
|
+
end
|
16
|
+
|
17
|
+
after do
|
18
|
+
`rm -rf theme`
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'Gemfile' do
|
22
|
+
assert File.file?("#{Dir.pwd}/theme/Gemfile")
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'config.ru' do
|
26
|
+
assert File.file?("#{Dir.pwd}/theme/config.ru")
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'config.ru' do
|
30
|
+
assert File.file?("#{Dir.pwd}/theme/app/application.rb")
|
31
|
+
end
|
32
|
+
|
33
|
+
describe 'app/views/templates' do
|
34
|
+
it "build .#{@engine} file" do
|
35
|
+
assert File.file?("#{Dir.pwd}/theme/app/views/templates/index.#{@engine}")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def configure_and_write_files
|
43
|
+
ThemeBandit.configure do |config|
|
44
|
+
config.template_engine = @engine
|
45
|
+
config.gem_root = Dir.pwd
|
46
|
+
config.url = 'http://www.example.com'
|
47
|
+
end
|
48
|
+
ThemeBandit::DocumentWriter.new(load_html_fixture, @url).write
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
describe ThemeBandit::URLFormatter do
|
4
|
+
|
5
|
+
include ThemeBandit::URLFormatter
|
6
|
+
|
7
|
+
it '#strip_query_string' do
|
8
|
+
url = 'http://www.example.com?foo=bar'
|
9
|
+
assert_equal(strip_query_string(url), 'http://www.example.com')
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'theme_bandit/util/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'theme_bandit'
|
8
|
+
spec.version = ThemeBandit::VERSION
|
9
|
+
spec.email = ['lfender6445@gmail.com']
|
10
|
+
spec.authors = ['Luke Fender']
|
11
|
+
spec.summary = 'Convert any site to a simple rack app'
|
12
|
+
spec.description = 'Convert any site to a simple rack app'
|
13
|
+
spec.homepage = ''
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables << 'bandit'
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
spec.add_dependency 'httparty', '~> 0.11.0'
|
21
|
+
spec.add_dependency 'nokogiri', '~> 1.6.3.1'
|
22
|
+
spec.add_dependency 'html2slim', '~> 0.1.0'
|
23
|
+
spec.add_dependency 'html2haml', '~> 1.0.1'
|
24
|
+
|
25
|
+
spec.add_development_dependency 'bundler', '~> 1.6'
|
26
|
+
spec.add_development_dependency 'rake', '~> 10.3.2'
|
27
|
+
spec.add_development_dependency 'minitest', '~> 5.4.1'
|
28
|
+
spec.add_development_dependency 'webmock', '~> 1.18.0'
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,206 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: theme_bandit
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Luke Fender
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-09-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: httparty
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.11.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.11.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: nokogiri
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.6.3.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.6.3.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: html2slim
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.1.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.1.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: html2haml
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.0.1
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.0.1
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bundler
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.6'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.6'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 10.3.2
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 10.3.2
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: minitest
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ~>
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 5.4.1
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 5.4.1
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: webmock
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 1.18.0
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ~>
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 1.18.0
|
125
|
+
description: Convert any site to a simple rack app
|
126
|
+
email:
|
127
|
+
- lfender6445@gmail.com
|
128
|
+
executables:
|
129
|
+
- bandit
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- .gitignore
|
134
|
+
- Gemfile
|
135
|
+
- LICENSE.txt
|
136
|
+
- README.md
|
137
|
+
- Rakefile
|
138
|
+
- bin/bandit
|
139
|
+
- lib/theme_bandit.rb
|
140
|
+
- lib/theme_bandit/document_writer.rb
|
141
|
+
- lib/theme_bandit/downloader.rb
|
142
|
+
- lib/theme_bandit/init.rb
|
143
|
+
- lib/theme_bandit/parser/css.rb
|
144
|
+
- lib/theme_bandit/parser/html.rb
|
145
|
+
- lib/theme_bandit/parser/js.rb
|
146
|
+
- lib/theme_bandit/rack_generator.rb
|
147
|
+
- lib/theme_bandit/recipes/sinatra/erb/Gemfile
|
148
|
+
- lib/theme_bandit/recipes/sinatra/erb/app/application.rb
|
149
|
+
- lib/theme_bandit/recipes/sinatra/erb/app/views/.keep
|
150
|
+
- lib/theme_bandit/recipes/sinatra/erb/app/views/templates/.keep
|
151
|
+
- lib/theme_bandit/recipes/sinatra/erb/config.ru
|
152
|
+
- lib/theme_bandit/recipes/sinatra/haml/Gemfile
|
153
|
+
- lib/theme_bandit/recipes/sinatra/haml/app/application.rb
|
154
|
+
- lib/theme_bandit/recipes/sinatra/haml/config.ru
|
155
|
+
- lib/theme_bandit/recipes/sinatra/slim/Gemfile
|
156
|
+
- lib/theme_bandit/recipes/sinatra/slim/app/application.rb
|
157
|
+
- lib/theme_bandit/recipes/sinatra/slim/config.ru
|
158
|
+
- lib/theme_bandit/url_formatter.rb
|
159
|
+
- lib/theme_bandit/util/configure.rb
|
160
|
+
- lib/theme_bandit/util/version.rb
|
161
|
+
- test/fixtures/css/style.css
|
162
|
+
- test/fixtures/index.html
|
163
|
+
- test/fixtures/js/script.js
|
164
|
+
- test/fixtures/js/script_2.js
|
165
|
+
- test/helper.rb
|
166
|
+
- test/test_configure.rb
|
167
|
+
- test/test_document_writer.rb
|
168
|
+
- test/test_downloader.rb
|
169
|
+
- test/test_rack_generator.rb
|
170
|
+
- test/test_url_formatter.rb
|
171
|
+
- theme_bandit.gemspec
|
172
|
+
homepage: ''
|
173
|
+
licenses:
|
174
|
+
- MIT
|
175
|
+
metadata: {}
|
176
|
+
post_install_message:
|
177
|
+
rdoc_options: []
|
178
|
+
require_paths:
|
179
|
+
- lib
|
180
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
181
|
+
requirements:
|
182
|
+
- - ! '>='
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: '0'
|
185
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
requirements: []
|
191
|
+
rubyforge_project:
|
192
|
+
rubygems_version: 2.2.2
|
193
|
+
signing_key:
|
194
|
+
specification_version: 4
|
195
|
+
summary: Convert any site to a simple rack app
|
196
|
+
test_files:
|
197
|
+
- test/fixtures/css/style.css
|
198
|
+
- test/fixtures/index.html
|
199
|
+
- test/fixtures/js/script.js
|
200
|
+
- test/fixtures/js/script_2.js
|
201
|
+
- test/helper.rb
|
202
|
+
- test/test_configure.rb
|
203
|
+
- test/test_document_writer.rb
|
204
|
+
- test/test_downloader.rb
|
205
|
+
- test/test_rack_generator.rb
|
206
|
+
- test/test_url_formatter.rb
|