potatochop-erector 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3dc2cb524e639de569102fbfca77d06ebb6bdc0d
4
+ data.tar.gz: 0e2bfef89b13d7260944d1c4567b2935ed24c9b3
5
+ SHA512:
6
+ metadata.gz: ac978dd81d505d9552fb5308a7cf6f84e95bad8d403a0773a9e111be8b098e3d45c860c332165e1475fcaf659a3ea77958cb453af18f0298bd2545d37b0b6248
7
+ data.tar.gz: 74af38596170c72589ba2656aa009d2af9e0aa75eae25aa5a272451e7a46c9880395f7963cb0d44989718ea0b938e37f3e1dc5f425103683996093adacffc678
data/.gitignore ADDED
@@ -0,0 +1,20 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .DS_Store
19
+ .ruby-version
20
+ .ruby-gemset
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --order random
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ script: script/cibuild
3
+ rvm:
4
+ - "2.1.1"
5
+ - "2.0.0"
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in potatochop.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Department of Better Technology, Inc
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,101 @@
1
+ # Potatochop
2
+ _A simple server for ~~HAML~~ [Erector](https://github.com/ajb/erector-rails4) & SASS mock ups_
3
+
4
+ [![Build Status](https://travis-ci.org/dobtco/potatochop-erector.svg?branch=master)](https://travis-ci.org/dobtco/potatochop-erector)
5
+ [![Gem Version](https://badge.fury.io/rb/potatochop-erector.svg)](http://badge.fury.io/rb/potatochop-erector)
6
+
7
+ [Forked from VersaHQ, thanks y'all!](https://github.com/VersaHQ/potatochop)
8
+
9
+ ## Installation
10
+
11
+ Install Potatochop as a gem in the usual way:
12
+
13
+ $ gem install potatochop-erector
14
+
15
+
16
+ ## Usage
17
+
18
+ To use Potatochop, you also need a folder where you keep your mock ups. Ideally this folder would be under version control, but it is not required.
19
+
20
+ Once the Potatochop gem is installed, cd into your comps directory and run `potatochop`.
21
+
22
+ ```
23
+ $ cd ~/mock_ups # or wherever you keep your mock_ups
24
+ $ potatochop
25
+ ```
26
+ or pass in the path to your mock ups folder with the `--mockups` flag
27
+
28
+ ```
29
+ $ potatochop --mockups ~/mock_ups
30
+ ```
31
+
32
+ This will start up the Potatochop server on port 4567. By default, Potatochop will serve files in the same hierarchy as the mock ups folder.
33
+
34
+ For example, if you start Potatochop in a folder with a file called `new_homepage.html.rb` you can see it in your browser at `http://localhost:4567/new_homepage.html`
35
+
36
+ ## Erector.inline & `eval`
37
+
38
+ Potatochop uses `eval` to interface with Erector, so **be sure to only serve files whose contents you trust.** Furthermore, you must use `Erector.inline`, instead of defining a class for each view. Your views should look like this:
39
+
40
+ ```ruby
41
+ # index.html.rb
42
+
43
+ Erector.inline {
44
+ rawtext '<!doctype html>'
45
+ html {
46
+ head {
47
+ title 'Fake batch of mock ups.'
48
+ }
49
+ body {
50
+ text 'Hi!'
51
+ }
52
+ }
53
+ }
54
+ ```
55
+
56
+ ## The Mock Ups folder
57
+
58
+ For lack of a better name, the folder where you store your erector views, sass, js, etc. files is called the mock ups folder.
59
+
60
+ Out of the box, Potatochop processes and serves any erector or sass file in this folder. Vanilla HTML & JavaScript files are served directly. For example, your mock ups folder could be organized like this:
61
+
62
+ ```
63
+ ~/mock_ups
64
+ about.html
65
+ faq.html.rb
66
+ index.html.rb
67
+ css/
68
+ about.css
69
+ faq.css.scss
70
+ index.css.scss
71
+ js/
72
+ interactions.js
73
+ ```
74
+
75
+ **ProTip:** There is an example mock ups folder in the [spec/fake_mockups](https://github.com/dobtco/potatochop-erector/tree/master/spec/fake_mockups) folder (it's used by our automated tests).
76
+
77
+ When you want to include stylesheets in your haml/html pages, refer to them only by their `.css` extension.
78
+
79
+ ## Serving files from a GitHub repo
80
+ Let's say you have a repository on GitHub where you keep your mockups (i.e [https://github.com/mertonium/potatochop_comps](https://github.com/mertonium/potatochop_comps)).
81
+
82
+ You can serve this repo by passing `potatochop` the `--interface` flag along with the repo path:
83
+
84
+ ```
85
+ # Serve files from a public repository on GitHub
86
+ $ potatochop --interface github --repo mertonium/potatochop_comps
87
+ ```
88
+ If your mock ups folder is in a private repo, you must also pass `potatochop` the `--token` flag, along with a [personal access token](https://github.com/settings/tokens/new):
89
+
90
+ ```
91
+ # Serve files from a private repository on GitHub
92
+ $ potatochop --interface github --repo mertonium/potatochop_comps_private --token=GITHUB_ACCESS_TOKEN
93
+ ```
94
+
95
+ ## Contributing
96
+
97
+ 1. Fork it
98
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
99
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
100
+ 4. Push to the branch (`git push origin my-new-feature`)
101
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/potatochop ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'potatochop'
4
+
5
+ Potatochop.start_up(ARGV)
data/lib/potatochop.rb ADDED
@@ -0,0 +1,16 @@
1
+ require 'potatochop/version'
2
+ require 'potatochop/spud'
3
+ require 'potatochop/file_system_interface'
4
+ require 'potatochop/github_interface'
5
+ require 'potatochop/cli_parser'
6
+ require 'potatochop/web'
7
+ require 'erector'
8
+ require 'sass'
9
+ require 'octokit'
10
+
11
+ module Potatochop
12
+ def self.start_up(args)
13
+ options = Potatochop::CliParser.parse(args)
14
+ Potatochop::Web.run!(:tater => Potatochop::Spud.new(options[:interface]))
15
+ end
16
+ end
@@ -0,0 +1,43 @@
1
+ require 'optparse'
2
+
3
+ module Potatochop
4
+ class CliParser
5
+ def self.parse(args)
6
+ options = {
7
+ :interface => nil,
8
+ :interface_class => Potatochop::FileSystemInterface,
9
+ :mockups_path => '.',
10
+ :gh_options => {}
11
+ }
12
+
13
+ opts = OptionParser.new do |opts|
14
+ opts.banner = "Usage: potatochop [options]"
15
+
16
+ opts.separator ""
17
+ opts.separator "Specific options:"
18
+
19
+ opts.on("-i", "--interface [INTERFACE]", "How to find the files to serve (possible options are 'local' and 'github')") do |interface|
20
+ if interface == 'github'
21
+ options[:interface_class] = Potatochop::GithubInterface
22
+ end
23
+ end
24
+
25
+ opts.on("-d", "--mockups [PATH]", "Path to the mockups folder you want to serve") do |wd|
26
+ options[:mockups_path] = wd
27
+ end
28
+
29
+ opts.on("--repo [GITHUB REPOSITORY]", "username/reponame on GitHub") do |repo|
30
+ options[:mockups_path] = repo
31
+ end
32
+
33
+ opts.on("--token [GITHUB ACCESS TOKEN]", "GitHub access token (needed to access private repositories)") do |token|
34
+ options[:gh_options][:access_token] = token
35
+ end
36
+ end
37
+
38
+ opts.parse!(args)
39
+ options[:interface] = options[:interface_class].send(:new, options[:mockups_path], options[:gh_options])
40
+ options
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,19 @@
1
+ module Potatochop
2
+ class FileSystemInterface
3
+ attr_reader :source
4
+
5
+ def initialize(source, options = {})
6
+ @source = source
7
+ end
8
+
9
+ def exists?(file_name)
10
+ file_path = File.join(@source, file_name)
11
+ File.exists? file_path
12
+ end
13
+
14
+ def read(file_name)
15
+ file_path = File.join(@source, file_name)
16
+ File.read(file_path)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ module Potatochop
2
+ class GithubInterface
3
+ attr_reader :source
4
+
5
+ def initialize(repo, gh_options = {})
6
+ @source = repo
7
+ @gh_client = Octokit::Client.new access_token: gh_options[:access_token]
8
+ end
9
+
10
+ def exists?(file_name)
11
+ begin
12
+ @gh_client.contents(@source, path: file_name, accept: 'application/vnd.github.raw')
13
+ true
14
+ rescue Octokit::NotFound
15
+ false
16
+ end
17
+ end
18
+
19
+ def read(file_name)
20
+ @gh_client.contents(@source, path: file_name, accept: 'application/vnd.github.raw')
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,27 @@
1
+ module Potatochop
2
+ class Spud
3
+ def initialize(interface)
4
+ @interface = interface
5
+ end
6
+
7
+ def get_file(file_name)
8
+ @interface.exists?(file_name) ? @interface.read(file_name) : nil
9
+ end
10
+
11
+ def get_html(file_name)
12
+ if @interface.exists?("#{file_name}.html") # Static html first
13
+ @interface.read("#{file_name}.html")
14
+ elsif @interface.exists?("#{file_name}.html.rb") # Erector next
15
+ eval(@interface.read("#{file_name}.html.rb")).to_html
16
+ end
17
+ end
18
+
19
+ def get_css(file_name)
20
+ if @interface.exists?("#{file_name}.css") # Static css
21
+ @interface.read("#{file_name}.css")
22
+ elsif @interface.exists?("#{file_name}.css.scss") # Sass css
23
+ Sass::Engine.new(@interface.read("#{file_name}.css.scss"), :syntax => :scss).render
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ module Potatochop
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,36 @@
1
+ require 'sinatra/base'
2
+
3
+ module Potatochop
4
+ class Web < Sinatra::Base
5
+ get '/*.html' do
6
+ return_str = settings.tater.get_html(params[:splat][0])
7
+ return_str.nil? ? 404 : return_str
8
+ end
9
+
10
+ get '/*.css' do
11
+ return_str = settings.tater.get_css(params[:splat][0])
12
+ content_type 'text/css', :charset => 'utf-8'
13
+ return_str.nil? ? 404 : return_str
14
+ end
15
+
16
+ get %r{/(.*).(png|jpg|jpeg|gif)} do
17
+ image_file = settings.tater.get_file("#{params[:captures][0]}.#{params[:captures][1]}")
18
+ if image_file.nil?
19
+ 404
20
+ else
21
+ content_type "image/#{params[:captures].last}"
22
+ image_file
23
+ end
24
+ end
25
+
26
+ get '/*.js' do
27
+ js_file = settings.tater.get_file("#{params[:splat][0]}.js")
28
+ if js_file.nil?
29
+ 404
30
+ else
31
+ content_type "application/javascript", :charset => 'utf-8'
32
+ js_file
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'potatochop/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "potatochop-erector"
8
+ gem.version = Potatochop::VERSION
9
+ gem.authors = ["Adam Becker"]
10
+ gem.email = ["adam@dobt.co"]
11
+ gem.description = %q{Potatochop - because F$%k Photoshop, that's why.}
12
+ gem.summary = %q{Potatochop is a simple server that compiles and serves up Erector views and SASS files. The goal is to reduce friction between designers and devs in a Rails project.}
13
+ gem.homepage = "https://github.com/VersaHQ/potatochop"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+ gem.add_runtime_dependency 'sinatra'
20
+ gem.add_runtime_dependency 'thin', '~> 1.6'
21
+ gem.add_runtime_dependency 'erector-rails4'
22
+ gem.add_runtime_dependency 'sass'
23
+ gem.add_runtime_dependency 'octokit'
24
+ gem.add_development_dependency 'rspec'
25
+ gem.add_development_dependency 'rake'
26
+ gem.add_development_dependency 'simplecov'
27
+ gem.add_development_dependency 'rack-test'
28
+ end
data/script/cibuild ADDED
@@ -0,0 +1,3 @@
1
+ #!/bin/sh
2
+
3
+ bundle exec rspec spec
data/script/console ADDED
@@ -0,0 +1,3 @@
1
+ #! /bin/sh
2
+
3
+ bundle exec irb -r ./lib/potatochop.rb
data/script/release ADDED
@@ -0,0 +1,38 @@
1
+ #!/bin/sh
2
+ # Tag and push a release.
3
+
4
+ set -e
5
+
6
+ # Make sure we're in the project root.
7
+
8
+ cd $(dirname "$0")/..
9
+
10
+ # Build a new gem archive.
11
+
12
+ rm -rf potatochop-erector-*.gem
13
+ gem build -q potatochop-erector.gemspec
14
+
15
+ # Make sure we're on the master branch.
16
+
17
+ (git branch | grep -q '* master') || {
18
+ echo "Only release from the master branch."
19
+ exit 1
20
+ }
21
+
22
+ # Figure out what version we're releasing.
23
+
24
+ tag=v`ls potatochop-erector-*.gem | sed 's/^potatochop-erector-\(.*\)\.gem$/\1/'`
25
+
26
+ # Make sure we haven't released this version before.
27
+
28
+ git fetch -t origin
29
+
30
+ (git tag -l | grep -q "$tag") && {
31
+ echo "Whoops, there's already a '${tag}' tag."
32
+ exit 1
33
+ }
34
+
35
+ # Tag it and bag it.
36
+
37
+ gem push potatochop-erector-*.gem && git tag "$tag" &&
38
+ git push origin master && git push origin "$tag"
@@ -0,0 +1,23 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>
5
+ Fake batch of mock ups.
6
+ </title>
7
+ <link href='css/bar.css' media='screen' rel='stylesheet' type='text/css' />
8
+ </head>
9
+ <body>
10
+ <h1>
11
+ This page is static HTML.
12
+ </h1>
13
+ <p>
14
+ This a paragraph.
15
+ </p>
16
+ <p>
17
+ And here is an image taken from the internet:
18
+ <br />
19
+ <img src='img/potatochop_cs4_box.png' />
20
+ </p>
21
+ <script src="js/bar.js" type="text/javascript"></script>
22
+ </body>
23
+ </html>
@@ -0,0 +1 @@
1
+ body h1 { color: blue; }
@@ -0,0 +1,5 @@
1
+ body {
2
+ h1 {
3
+ color: red;
4
+ }
5
+ }
@@ -0,0 +1,21 @@
1
+ Erector.inline {
2
+ rawtext '<!doctype html>'
3
+ html {
4
+ head {
5
+ title 'Fake batch of mock ups.'
6
+ link href: 'css/foo.css', media: 'screen', rel: 'stylesheet', type: 'text/css'
7
+ }
8
+ body {
9
+ h1 'This is an H1!'
10
+ p 'This a paragraph.'
11
+ p {
12
+ text 'And here is an image taken from '
13
+ a 'the internet', href: 'http://uncyclopedia.wikia.com/wiki/File:Adobe_potatochop_cs4_box.png'
14
+ text ':'
15
+ br
16
+ img src: 'img/potatochop_cs4_box.png'
17
+ text '✓'
18
+ }
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,3 @@
1
+ setTimeout(function() {
2
+ alert("JS is on!");
3
+ }, 1000);
@@ -0,0 +1,33 @@
1
+ require 'helper'
2
+
3
+ describe Potatochop::FileSystemInterface do
4
+ describe '#new' do
5
+ it 'creates a new FileSystemInterface object with the proper source' do
6
+ fs = Potatochop::FileSystemInterface.new('spec/fake_mockups')
7
+ fs.source.should == "spec/fake_mockups"
8
+ end
9
+ end
10
+ describe '#exists?' do
11
+ it 'returns true if the given file exists' do
12
+ fs = Potatochop::FileSystemInterface.new('spec/fake_mockups')
13
+ fs.exists?('foo.html.rb').should eq true
14
+ end
15
+
16
+ it 'returns false if the given file does not exist' do
17
+ fs = Potatochop::FileSystemInterface.new('spec/fake_mockups')
18
+ fs.exists?('not_real.html').should eq false
19
+ end
20
+ end
21
+
22
+ describe '#read' do
23
+ it 'returns the content of the given files' do
24
+ fs = Potatochop::FileSystemInterface.new('spec/fake_mockups')
25
+ fs.read('foo.html.rb').should == File.read('spec/fake_mockups/foo.html.rb')
26
+ end
27
+
28
+ it 'returns false if the given file does not exist' do
29
+ fs = Potatochop::FileSystemInterface.new('spec/fake_mockups')
30
+ expect { fs.read('not_real.html') }.to raise_error
31
+ end
32
+ end
33
+ end
data/spec/helper.rb ADDED
@@ -0,0 +1,9 @@
1
+ unless ENV['CI']
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_filter 'spec'
5
+ end
6
+ end
7
+ require 'potatochop'
8
+ require 'rspec'
9
+ require 'rack/test'
@@ -0,0 +1,63 @@
1
+ require 'helper'
2
+
3
+ def app
4
+ Potatochop::Web
5
+ end
6
+
7
+ describe 'Potatochop' do
8
+ describe 'Web' do
9
+ app.set(:tater => Potatochop::Spud.new(Potatochop::FileSystemInterface.new('spec/fake_mockups')))
10
+ include Rack::Test::Methods
11
+
12
+ it 'returns an error when an erector page does not exist' do
13
+ get 'no_exist.html'
14
+ last_response.should_not be_ok
15
+ end
16
+
17
+ it 'renders an erector page that exists' do
18
+ get '/foo.html'
19
+ last_response.body.should match('<h1>This is an H1!</h1>')
20
+ end
21
+
22
+ it 'renders an html page that exists' do
23
+ get '/bar.html'
24
+ last_response.body.should match('This page is static HTML')
25
+ end
26
+
27
+ it 'returns an error when a sass file does not exist' do
28
+ get 'no_exist.css'
29
+ last_response.should_not be_ok
30
+ end
31
+
32
+ it 'renders a sass stylesheet that exists' do
33
+ get '/css/foo.css'
34
+ last_response.body.should match('body h1 {\s+color: red; }')
35
+ end
36
+
37
+ it 'renders a static stylesheet that exists' do
38
+ get '/css/bar.css'
39
+ last_response.body.should match('body h1 { color: blue; }')
40
+ end
41
+
42
+ it 'returns an error when a requested image file does not exist' do
43
+ get 'no_exist.png'
44
+ last_response.should_not be_ok
45
+ end
46
+
47
+ it 'returns a requested image file when it exists' do
48
+ get '/img/potatochop_cs4_box.png'
49
+ last_response.should be_ok
50
+ end
51
+
52
+ it 'returns an error when a requested javascript file does not exist' do
53
+ get '/no_exist.js'
54
+ last_response.should_not be_ok
55
+ end
56
+
57
+ it 'returns the requested javascript file if it exists' do
58
+ get '/js/bar.js'
59
+ last_response.should be_ok
60
+ end
61
+
62
+ end
63
+ end
metadata ADDED
@@ -0,0 +1,209 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: potatochop-erector
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Adam Becker
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sinatra
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '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'
27
+ - !ruby/object:Gem::Dependency
28
+ name: thin
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.6'
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'
41
+ - !ruby/object:Gem::Dependency
42
+ name: erector-rails4
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: sass
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: octokit
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: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
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: simplecov
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: rack-test
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'
139
+ description: Potatochop - because F$%k Photoshop, that's why.
140
+ email:
141
+ - adam@dobt.co
142
+ executables:
143
+ - potatochop
144
+ extensions: []
145
+ extra_rdoc_files: []
146
+ files:
147
+ - ".gitignore"
148
+ - ".rspec"
149
+ - ".travis.yml"
150
+ - Gemfile
151
+ - LICENSE.txt
152
+ - README.md
153
+ - Rakefile
154
+ - bin/potatochop
155
+ - lib/potatochop.rb
156
+ - lib/potatochop/cli_parser.rb
157
+ - lib/potatochop/file_system_interface.rb
158
+ - lib/potatochop/github_interface.rb
159
+ - lib/potatochop/spud.rb
160
+ - lib/potatochop/version.rb
161
+ - lib/potatochop/web.rb
162
+ - potatochop-erector.gemspec
163
+ - script/cibuild
164
+ - script/console
165
+ - script/release
166
+ - spec/fake_mockups/bar.html
167
+ - spec/fake_mockups/css/bar.css
168
+ - spec/fake_mockups/css/foo.css.scss
169
+ - spec/fake_mockups/foo.html.rb
170
+ - spec/fake_mockups/img/potatochop_cs4_box.png
171
+ - spec/fake_mockups/js/bar.js
172
+ - spec/file_system_interface_spec.rb
173
+ - spec/helper.rb
174
+ - spec/potatochop_spec.rb
175
+ homepage: https://github.com/VersaHQ/potatochop
176
+ licenses: []
177
+ metadata: {}
178
+ post_install_message:
179
+ rdoc_options: []
180
+ require_paths:
181
+ - lib
182
+ required_ruby_version: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ required_rubygems_version: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
192
+ requirements: []
193
+ rubyforge_project:
194
+ rubygems_version: 2.2.2
195
+ signing_key:
196
+ specification_version: 4
197
+ summary: Potatochop is a simple server that compiles and serves up Erector views and
198
+ SASS files. The goal is to reduce friction between designers and devs in a Rails
199
+ project.
200
+ test_files:
201
+ - spec/fake_mockups/bar.html
202
+ - spec/fake_mockups/css/bar.css
203
+ - spec/fake_mockups/css/foo.css.scss
204
+ - spec/fake_mockups/foo.html.rb
205
+ - spec/fake_mockups/img/potatochop_cs4_box.png
206
+ - spec/fake_mockups/js/bar.js
207
+ - spec/file_system_interface_spec.rb
208
+ - spec/helper.rb
209
+ - spec/potatochop_spec.rb