smallvictories 0.0.2 → 0.0.3
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 +4 -4
- data/README.md +31 -3
- data/bin/sv +5 -7
- data/lib/smallvictories.rb +8 -184
- data/lib/smallvictories/compiler.rb +31 -0
- data/lib/smallvictories/configuration.rb +96 -0
- data/lib/smallvictories/constants.rb +9 -0
- data/lib/smallvictories/logger.rb +11 -0
- data/lib/smallvictories/version.rb +1 -1
- data/lib/smallvictories/watcher.rb +53 -0
- data/spec/compiler_spec.rb +27 -0
- data/spec/configuration_spec.rb +61 -0
- data/spec/fixtures/_config.yml +3 -1
- data/spec/fixtures/_stylesheets/_sv_custom.css +5 -0
- data/spec/fixtures/_stylesheets/bootstrap.scss +3 -0
- data/spec/fixtures/{_sass/_extra.scss → _stylesheets/extra.scss} +0 -0
- data/spec/fixtures/{_sass → _stylesheets}/stylesheet.scss +0 -2
- data/src/javascript.js +14 -0
- data/src/stylesheet.css +8 -2
- metadata +19 -13
- data/spec/fixtures/_css/.gitkeep +0 -0
- data/spec/fixtures/_css/_sv_custom.css +0 -3
- data/spec/fixtures/_css/bootstrap.css +0 -1
- data/spec/smallvictories_spec.rb +0 -100
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 305cf251d788e9e1d865ed14affc8df4eba8dba7
|
4
|
+
data.tar.gz: 3f5aa5da6a816bcfd06d7de06e405e3cf162b98d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07899a9f1e18d45b4d513e569d9956d9de9e27d9d4dda5a98a98347e606a4cd242c4aee1941a3631f4c3780e5b02d75704cad5b220c02eda978fb5a517cea1ac
|
7
|
+
data.tar.gz: ceb4600d91812a6b4ec7fbf2b61b8614b343cc7994466d95d3a738dd17128870520f2252b0813aa162992a5bf42a352f5dc6c931decdc3c69ab861de5b23bd48
|
data/README.md
CHANGED
@@ -2,19 +2,47 @@
|
|
2
2
|
|
3
3
|
A command line utility for building websites.
|
4
4
|
|
5
|
+
## What does it do?
|
6
|
+
|
7
|
+
The Small Victories gem packages Sass/CSS and JS/CoffeeScript files into a single Stylesheet and
|
8
|
+
Javascript file using [Sprockets](https://github.com/rails/sprockets).
|
9
|
+
|
5
10
|
## Installation
|
6
11
|
|
7
12
|
```
|
8
13
|
gem install smallvictories
|
9
14
|
```
|
10
15
|
|
16
|
+
## Config
|
17
|
+
|
18
|
+
Small Victories looks for a `_config.yml` file in the directory where `sv` is
|
19
|
+
run from.
|
20
|
+
|
21
|
+
+ `source`: Relative path to find and watch files for compiling and packaging.
|
22
|
+
+ `destination`: Relative path for where to save final files.
|
23
|
+
+ `stylesheets_dir`: Folder within source to compiles Sass and Css from.
|
24
|
+
+ `javascripts_dir`: Folder within source to package JS and CoffeeScript from.
|
25
|
+
+ `stylesheet`: Filename for packaged CSS file that is saved in destination.
|
26
|
+
+ `javascript`: Filename for packaged JS file that is saved in destination.
|
27
|
+
|
28
|
+
### Default Configuration
|
29
|
+
|
30
|
+
```
|
31
|
+
source: ''
|
32
|
+
destination: '_site'
|
33
|
+
stylesheets_dir: '_stylesheets'
|
34
|
+
javascripts_dir: '_javascripts'
|
35
|
+
stylesheet: '_sv_custom.css'
|
36
|
+
javascript: '_sv_custom.js'
|
37
|
+
```
|
38
|
+
|
11
39
|
## Commands
|
12
40
|
|
13
|
-
###
|
41
|
+
### Watch
|
14
42
|
|
15
|
-
|
43
|
+
Watch for changes and compile and package files.
|
16
44
|
|
17
|
-
Command: `sv
|
45
|
+
Command: `sv watch`
|
18
46
|
|
19
47
|
## Building Locally
|
20
48
|
|
data/bin/sv
CHANGED
@@ -7,7 +7,6 @@ def help
|
|
7
7
|
Usage: sv [COMMAND] [OPTIONS]
|
8
8
|
Commands:
|
9
9
|
watch Watch for changes and compile files
|
10
|
-
hello Puts Hello World!
|
11
10
|
help Prints this help document
|
12
11
|
version Prints the small victories gem version
|
13
12
|
Options:
|
@@ -17,13 +16,12 @@ def help
|
|
17
16
|
)
|
18
17
|
end
|
19
18
|
|
20
|
-
def hello
|
21
|
-
puts SmallVictories.hello
|
22
|
-
end
|
23
|
-
|
24
19
|
def watch
|
25
|
-
SmallVictories.
|
26
|
-
|
20
|
+
config = SmallVictories::Configuration.new
|
21
|
+
config.setup
|
22
|
+
compiler = SmallVictories::Compiler.new(config: config)
|
23
|
+
watcher = SmallVictories::Watcher.new(compiler: compiler)
|
24
|
+
watcher.watch
|
27
25
|
end
|
28
26
|
|
29
27
|
case ARGV[0]
|
data/lib/smallvictories.rb
CHANGED
@@ -1,189 +1,13 @@
|
|
1
|
+
libdir = File.dirname(__FILE__)
|
2
|
+
$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
|
3
|
+
|
1
4
|
require "smallvictories/version"
|
5
|
+
require "smallvictories/constants"
|
6
|
+
require "smallvictories/logger"
|
7
|
+
require "smallvictories/configuration"
|
8
|
+
require "smallvictories/compiler"
|
9
|
+
require "smallvictories/watcher"
|
2
10
|
require 'yaml'
|
3
11
|
require 'sassc'
|
4
12
|
require 'sprockets'
|
5
13
|
require 'listen'
|
6
|
-
|
7
|
-
module SmallVictories
|
8
|
-
extend self
|
9
|
-
DEFAULT_SASS_DIR = '_sass'
|
10
|
-
DEFAULT_STYLESHEET = '_sv_custom.css'
|
11
|
-
DEFAULT_CSS_DIR = '_css'
|
12
|
-
DEFAULT_SOURCE = ''
|
13
|
-
DEFAULT_DESTINATION = '_site'
|
14
|
-
ROOT = Dir.pwd
|
15
|
-
|
16
|
-
def hello
|
17
|
-
"Hello World!"
|
18
|
-
end
|
19
|
-
|
20
|
-
def config
|
21
|
-
if File.exists?('_config.yml')
|
22
|
-
YAML.load(File.read('_config.yml')) || {}
|
23
|
-
else
|
24
|
-
{}
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def config_folder key
|
29
|
-
config[key.to_s].chomp("/").reverse.chomp("/").reverse if config.has_key?(key.to_s)
|
30
|
-
end
|
31
|
-
|
32
|
-
def source
|
33
|
-
config_folder(:source) || DEFAULT_SOURCE
|
34
|
-
end
|
35
|
-
|
36
|
-
def full_source_path
|
37
|
-
"#{ROOT}/#{source}"
|
38
|
-
end
|
39
|
-
|
40
|
-
def destination
|
41
|
-
config_folder(:destination) || DEFAULT_DESTINATION
|
42
|
-
end
|
43
|
-
|
44
|
-
def full_destination_path
|
45
|
-
"#{ROOT}/#{destination}/"
|
46
|
-
end
|
47
|
-
|
48
|
-
def css_dir
|
49
|
-
config_folder(:css_dir) || DEFAULT_CSS_DIR
|
50
|
-
end
|
51
|
-
|
52
|
-
def full_css_path
|
53
|
-
"#{full_source_path}/#{css_dir}/"
|
54
|
-
end
|
55
|
-
|
56
|
-
def stylesheet
|
57
|
-
config_folder(:stylesheet) || DEFAULT_STYLESHEET
|
58
|
-
end
|
59
|
-
|
60
|
-
def full_stylesheet_path
|
61
|
-
"#{full_css_path}/#{stylesheet}"
|
62
|
-
end
|
63
|
-
|
64
|
-
def sass_dir
|
65
|
-
config_folder(:sass_dir) || DEFAULT_SASS_DIR
|
66
|
-
end
|
67
|
-
|
68
|
-
def full_sass_path
|
69
|
-
"#{full_source_path}/#{sass_dir}/"
|
70
|
-
end
|
71
|
-
|
72
|
-
def full_sass_path
|
73
|
-
"#{full_source_path}/#{sass_dir}/"
|
74
|
-
end
|
75
|
-
|
76
|
-
def build_listener
|
77
|
-
Listen.to(
|
78
|
-
full_source_path,
|
79
|
-
force_polling: true,
|
80
|
-
&(listen_handler)
|
81
|
-
)
|
82
|
-
end
|
83
|
-
|
84
|
-
def listen_handler
|
85
|
-
proc do |modified, added, removed|
|
86
|
-
paths = modified + added + removed
|
87
|
-
extensions = paths.map{ |path| File.extname(path) }
|
88
|
-
extensions.each do |ext|
|
89
|
-
case ext
|
90
|
-
when '.scss'
|
91
|
-
puts sass
|
92
|
-
puts compile
|
93
|
-
when '.sass'
|
94
|
-
puts sass
|
95
|
-
puts compile
|
96
|
-
else
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
def setup
|
103
|
-
setup_stylesheet
|
104
|
-
end
|
105
|
-
|
106
|
-
def watch
|
107
|
-
listener = build_listener
|
108
|
-
listener.start
|
109
|
-
puts "👀"
|
110
|
-
|
111
|
-
trap("INT") do
|
112
|
-
listener.stop
|
113
|
-
puts "🔥 🔥 🔥 Halting auto-regeneration."
|
114
|
-
exit 0
|
115
|
-
end
|
116
|
-
|
117
|
-
sleep_forever
|
118
|
-
rescue ThreadError
|
119
|
-
# Ctrl-C
|
120
|
-
end
|
121
|
-
|
122
|
-
def sass
|
123
|
-
errors, rendered = [], []
|
124
|
-
Dir.glob([full_sass_path.concat('*.scss'), full_sass_path.concat('*.sass')]) do |path|
|
125
|
-
begin
|
126
|
-
file_name = Pathname.new(path).basename.to_s.split('.').first
|
127
|
-
next if file_name =~ /^_/ # do not render partials
|
128
|
-
file = File.open(path).read
|
129
|
-
engine = SassC::Engine.new(file, { style: :compressed, load_paths: [full_sass_path] })
|
130
|
-
css = engine.render
|
131
|
-
output_file_name = file_name.concat('.css')
|
132
|
-
output_path = full_css_path.concat(output_file_name)
|
133
|
-
File.open(output_path, 'w') { |file| file.write(css) }
|
134
|
-
rendered << "👍 rendered #{destination.concat('/').concat(css_dir).concat('/').concat(output_file_name)}\n"
|
135
|
-
rescue => e
|
136
|
-
errors << "🔥 Sass 🔥 #{e}\n"
|
137
|
-
end
|
138
|
-
end
|
139
|
-
rendered.join(', ') + errors.join(', ')
|
140
|
-
end
|
141
|
-
|
142
|
-
def compile
|
143
|
-
sprockets = Sprockets::Environment.new(ROOT) do |environment|
|
144
|
-
environment.js_compressor = :uglify
|
145
|
-
environment.css_compressor = :scss
|
146
|
-
end
|
147
|
-
|
148
|
-
sprockets.append_path(full_css_path)
|
149
|
-
|
150
|
-
errors, compiled = [], []
|
151
|
-
begin
|
152
|
-
[stylesheet].each do |bundle|
|
153
|
-
assets = sprockets.find_asset(bundle)
|
154
|
-
prefix, basename = assets.pathname.to_s.split('/')[-2..-1]
|
155
|
-
FileUtils.mkpath full_destination_path.concat(prefix)
|
156
|
-
|
157
|
-
assets.write_to(full_destination_path.concat(basename))
|
158
|
-
compiled << "👍 compiled #{destination.concat('/').concat(basename)}\n"
|
159
|
-
end
|
160
|
-
rescue => e
|
161
|
-
puts e.class
|
162
|
-
errors << "🔥 Compile 🔥 #{e}\n"
|
163
|
-
end
|
164
|
-
compiled.join(', ') + errors.join(', ')
|
165
|
-
end
|
166
|
-
|
167
|
-
def sleep_forever
|
168
|
-
loop { sleep 1000 }
|
169
|
-
end
|
170
|
-
|
171
|
-
private
|
172
|
-
|
173
|
-
def create_src_file source, destination
|
174
|
-
spec = Gem::Specification.find_by_name("smallvictories")
|
175
|
-
contents = File.open(spec.gem_dir.concat('/src/').concat(source)).read
|
176
|
-
File.open(destination, 'w') { |file| file.write(contents) }
|
177
|
-
end
|
178
|
-
|
179
|
-
def setup_stylesheet
|
180
|
-
setup_directory(full_css_path)
|
181
|
-
unless File.exists?(full_stylesheet_path)
|
182
|
-
create_src_file('stylesheet.css', full_stylesheet_path)
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
def setup_directory path
|
187
|
-
Dir.mkdir(path) unless File.exists?(path)
|
188
|
-
end
|
189
|
-
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module SmallVictories
|
2
|
+
class Compiler
|
3
|
+
attr_accessor :config
|
4
|
+
|
5
|
+
def initialize attributes={}
|
6
|
+
self.config = attributes[:config]
|
7
|
+
end
|
8
|
+
|
9
|
+
def package
|
10
|
+
sprockets = Sprockets::Environment.new(ROOT) do |environment|
|
11
|
+
environment.js_compressor = :uglify
|
12
|
+
environment.css_compressor = :scss
|
13
|
+
end
|
14
|
+
|
15
|
+
sprockets.append_path(config.full_stylesheets_path)
|
16
|
+
sprockets.append_path(config.full_javascripts_path)
|
17
|
+
|
18
|
+
[config.stylesheet, config.javascript].each do |bundle|
|
19
|
+
begin
|
20
|
+
assets = sprockets.find_asset(bundle)
|
21
|
+
prefix, basename = assets.pathname.to_s.split('/')[-2..-1]
|
22
|
+
FileUtils.mkpath config.full_destination_path
|
23
|
+
assets.write_to "#{config.full_destination_path}#{basename}"
|
24
|
+
SmallVictories.logger.info "👍 packaged #{config.destination}/#{basename}"
|
25
|
+
rescue => e
|
26
|
+
SmallVictories.logger.error "🔥 🔥 🔥 \n#{e}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
module SmallVictories
|
2
|
+
class Configuration
|
3
|
+
attr_accessor :config
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
self.config = if File.exists?('_config.yml')
|
7
|
+
YAML.load(File.read('_config.yml')) || {}
|
8
|
+
else
|
9
|
+
{}
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def config_folder key
|
14
|
+
config[key.to_s].chomp("/").reverse.chomp("/").reverse if config.has_key?(key.to_s)
|
15
|
+
end
|
16
|
+
|
17
|
+
def source
|
18
|
+
config_folder(:source) || DEFAULT_SOURCE
|
19
|
+
end
|
20
|
+
|
21
|
+
def full_source_path
|
22
|
+
"#{ROOT}/#{source}"
|
23
|
+
end
|
24
|
+
|
25
|
+
def destination
|
26
|
+
config_folder(:destination) || DEFAULT_DESTINATION
|
27
|
+
end
|
28
|
+
|
29
|
+
def full_destination_path
|
30
|
+
"#{ROOT}/#{destination}/"
|
31
|
+
end
|
32
|
+
|
33
|
+
def stylesheets_dir
|
34
|
+
config_folder(:stylesheets_dir) || DEFAULT_STYLESHEET_DIR
|
35
|
+
end
|
36
|
+
|
37
|
+
def full_stylesheets_path
|
38
|
+
"#{full_source_path}/#{stylesheets_dir}/"
|
39
|
+
end
|
40
|
+
|
41
|
+
def javascripts_dir
|
42
|
+
config_folder(:javascripts_dir) || DEFAULT_JAVASCRIPT_DIR
|
43
|
+
end
|
44
|
+
|
45
|
+
def full_javascripts_path
|
46
|
+
"#{full_source_path}/#{javascripts_dir}/"
|
47
|
+
end
|
48
|
+
|
49
|
+
def javascript
|
50
|
+
config_folder(:javascript) || DEFAULT_JAVASCRIPT
|
51
|
+
end
|
52
|
+
|
53
|
+
def full_javascript_path
|
54
|
+
"#{full_javascripts_path}/#{javascript}"
|
55
|
+
end
|
56
|
+
|
57
|
+
def stylesheet
|
58
|
+
config_folder(:stylesheet) || DEFAULT_STYLESHEET
|
59
|
+
end
|
60
|
+
|
61
|
+
def full_stylesheet_path
|
62
|
+
"#{full_stylesheets_path}/#{stylesheet}"
|
63
|
+
end
|
64
|
+
|
65
|
+
def setup
|
66
|
+
setup_stylesheet
|
67
|
+
setup_javascript
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def create_src_file source, destination
|
73
|
+
spec = Gem::Specification.find_by_name("smallvictories")
|
74
|
+
contents = File.open("#{spec.gem_dir}/src/#{source}").read
|
75
|
+
File.open(destination, 'w') { |file| file.write(contents) }
|
76
|
+
end
|
77
|
+
|
78
|
+
def setup_directory path
|
79
|
+
Dir.mkdir(path) unless File.exists?(path)
|
80
|
+
end
|
81
|
+
|
82
|
+
def setup_stylesheet
|
83
|
+
setup_directory(full_stylesheets_path)
|
84
|
+
unless File.exists?(full_stylesheet_path)
|
85
|
+
create_src_file('stylesheet.css', full_stylesheet_path)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def setup_javascript
|
90
|
+
setup_directory(full_javascripts_path)
|
91
|
+
unless File.exists?(full_javascript_path)
|
92
|
+
create_src_file('javascript.js', full_javascript_path)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module SmallVictories
|
2
|
+
class Watcher
|
3
|
+
attr_accessor :compiler
|
4
|
+
|
5
|
+
def initialize attributes={}
|
6
|
+
self.compiler = attributes[:compiler]
|
7
|
+
end
|
8
|
+
|
9
|
+
def build_listener
|
10
|
+
Listen.to(
|
11
|
+
compiler.config.full_source_path,
|
12
|
+
force_polling: true,
|
13
|
+
ignore: [/#{compiler.config.destination}/],
|
14
|
+
&(listen_handler)
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
def listen_handler
|
19
|
+
proc do |modified, added, removed|
|
20
|
+
paths = modified + added + removed
|
21
|
+
extensions = paths.map{ |path| File.extname(path) }
|
22
|
+
extensions.uniq.each do |ext|
|
23
|
+
case ext
|
24
|
+
when '.scss', '.sass', '.css', '.coffee', '.js'
|
25
|
+
compiler.package
|
26
|
+
else
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def watch
|
33
|
+
listener = build_listener
|
34
|
+
listener.start
|
35
|
+
SmallVictories.logger.info "👋"
|
36
|
+
SmallVictories.logger.info "👀"
|
37
|
+
|
38
|
+
trap("INT") do
|
39
|
+
listener.stop
|
40
|
+
SmallVictories.logger.info "✋ Halting auto-regeneration."
|
41
|
+
exit 0
|
42
|
+
end
|
43
|
+
|
44
|
+
sleep_forever
|
45
|
+
rescue ThreadError
|
46
|
+
# Ctrl-C
|
47
|
+
end
|
48
|
+
|
49
|
+
def sleep_forever
|
50
|
+
loop { sleep 1000 }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SmallVictories do
|
4
|
+
let(:compiler) { SmallVictories::Compiler.new(config: SmallVictories::Configuration.new) }
|
5
|
+
|
6
|
+
before do
|
7
|
+
allow_any_instance_of(SmallVictories::Configuration).to receive(:source).and_return('./spec/fixtures')
|
8
|
+
allow_any_instance_of(SmallVictories::Configuration).to receive(:destination).and_return('./spec/fixtures')
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#package' do
|
12
|
+
context 'with valid css' do
|
13
|
+
it 'packages the css file' do
|
14
|
+
compiler.package
|
15
|
+
expect(File.open('./fixtures/_sv_custom.css').read).to include 'html{background:white}.bootstrap{color:black}body div{background:red}'
|
16
|
+
FileUtils.rm('./fixtures/_sv_custom.css')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'invalid sass does not generate a file' do
|
21
|
+
allow_any_instance_of(SmallVictories::Configuration).to receive(:source).and_return('./spec/fixtures/invalid')
|
22
|
+
|
23
|
+
compiler.package
|
24
|
+
expect(File.exists?('./fixtures/_sv_custom.css')).to eq false
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SmallVictories do
|
4
|
+
let(:configuration) { SmallVictories::Configuration.new }
|
5
|
+
|
6
|
+
context 'with no config file' do
|
7
|
+
it 'defaults to source directory' do
|
8
|
+
expect(configuration.source).to eq ''
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'defaults to destination directory' do
|
12
|
+
expect(configuration.destination).to eq '_site'
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'defaults stylesheet file' do
|
16
|
+
expect(configuration.stylesheet).to eq '_sv_custom.css'
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'defaults to _stylesheets directory' do
|
20
|
+
expect(configuration.stylesheets_dir).to eq '_stylesheets'
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'defaults to _javascripts directory' do
|
24
|
+
expect(configuration.javascripts_dir).to eq '_javascripts'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'with config file' do
|
29
|
+
before do
|
30
|
+
FileUtils.cp('fixtures/_config.yml', './')
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'reads the source folder' do
|
34
|
+
expect(configuration.source).to eq 'my-source-folder'
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'reads the destination folder' do
|
38
|
+
expect(configuration.destination).to eq 'my-site-folder'
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'reads the _stylesheets directory' do
|
42
|
+
expect(configuration.stylesheets_dir).to eq 'my-sass-folder'
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'reads the output css file' do
|
46
|
+
expect(configuration.stylesheet).to eq 'my-stylesheet.css'
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'reads the _javascripts directory' do
|
50
|
+
expect(configuration.javascripts_dir).to eq 'my-js-folder'
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'reads the output js file' do
|
54
|
+
expect(configuration.javascript).to eq 'my-javascript.js'
|
55
|
+
end
|
56
|
+
|
57
|
+
after do
|
58
|
+
FileUtils.rm('./_config.yml')
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/spec/fixtures/_config.yml
CHANGED
File without changes
|
data/src/javascript.js
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
// Small Victories Sprockets File
|
2
|
+
//
|
3
|
+
// For more details see
|
4
|
+
// https://github.com/rails/sprockets#the-directive-processor
|
5
|
+
// Any JavaScript/Coffee file within this directory
|
6
|
+
// can be referenced here using a relative path.
|
7
|
+
//
|
8
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
9
|
+
// compiled file.
|
10
|
+
//
|
11
|
+
// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
|
12
|
+
// about supported directives.
|
13
|
+
//
|
14
|
+
//= require_tree .
|
data/src/stylesheet.css
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
/* Small Victories Sprockets File
|
2
2
|
*
|
3
|
-
*
|
4
|
-
*
|
3
|
+
* Any CSS and SCSS file within this directory and your sass directory
|
4
|
+
* can be referenced here using a relative path.
|
5
5
|
*
|
6
|
+
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
7
|
+
* compiled file so the styles you add here take precedence over styles defined in any styles
|
8
|
+
* defined in the other CSS/SCSS files in this directory. It is generally better to create a new
|
9
|
+
* file per style scope.
|
10
|
+
*
|
11
|
+
*= require_self
|
6
12
|
*= require_tree .
|
7
13
|
*/
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smallvictories
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Dijkstra
|
@@ -121,17 +121,23 @@ files:
|
|
121
121
|
- Rakefile
|
122
122
|
- bin/sv
|
123
123
|
- lib/smallvictories.rb
|
124
|
+
- lib/smallvictories/compiler.rb
|
125
|
+
- lib/smallvictories/configuration.rb
|
126
|
+
- lib/smallvictories/constants.rb
|
127
|
+
- lib/smallvictories/logger.rb
|
124
128
|
- lib/smallvictories/version.rb
|
129
|
+
- lib/smallvictories/watcher.rb
|
125
130
|
- smallvictories.gemspec
|
131
|
+
- spec/compiler_spec.rb
|
132
|
+
- spec/configuration_spec.rb
|
126
133
|
- spec/fixtures/_config.yml
|
127
|
-
- spec/fixtures/
|
128
|
-
- spec/fixtures/
|
129
|
-
- spec/fixtures/
|
130
|
-
- spec/fixtures/
|
131
|
-
- spec/fixtures/_sass/stylesheet.scss
|
134
|
+
- spec/fixtures/_stylesheets/_sv_custom.css
|
135
|
+
- spec/fixtures/_stylesheets/bootstrap.scss
|
136
|
+
- spec/fixtures/_stylesheets/extra.scss
|
137
|
+
- spec/fixtures/_stylesheets/stylesheet.scss
|
132
138
|
- spec/fixtures/invalid/_sass/stylesheet.scss
|
133
|
-
- spec/smallvictories_spec.rb
|
134
139
|
- spec/spec_helper.rb
|
140
|
+
- src/javascript.js
|
135
141
|
- src/stylesheet.css
|
136
142
|
homepage: https://github.com/xxix/smallvictories-gem
|
137
143
|
licenses:
|
@@ -158,12 +164,12 @@ signing_key:
|
|
158
164
|
specification_version: 4
|
159
165
|
summary: A command line utility for building websites.
|
160
166
|
test_files:
|
167
|
+
- spec/compiler_spec.rb
|
168
|
+
- spec/configuration_spec.rb
|
161
169
|
- spec/fixtures/_config.yml
|
162
|
-
- spec/fixtures/
|
163
|
-
- spec/fixtures/
|
164
|
-
- spec/fixtures/
|
165
|
-
- spec/fixtures/
|
166
|
-
- spec/fixtures/_sass/stylesheet.scss
|
170
|
+
- spec/fixtures/_stylesheets/_sv_custom.css
|
171
|
+
- spec/fixtures/_stylesheets/bootstrap.scss
|
172
|
+
- spec/fixtures/_stylesheets/extra.scss
|
173
|
+
- spec/fixtures/_stylesheets/stylesheet.scss
|
167
174
|
- spec/fixtures/invalid/_sass/stylesheet.scss
|
168
|
-
- spec/smallvictories_spec.rb
|
169
175
|
- spec/spec_helper.rb
|
data/spec/fixtures/_css/.gitkeep
DELETED
File without changes
|
@@ -1 +0,0 @@
|
|
1
|
-
.bootstrap{color: black}
|
data/spec/smallvictories_spec.rb
DELETED
@@ -1,100 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
describe SmallVictories do
|
3
|
-
describe '#hello' do
|
4
|
-
it 'puts hello' do
|
5
|
-
expect(SmallVictories.hello).to eq "Hello World!"
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
describe '#config' do
|
10
|
-
context 'with no config file' do
|
11
|
-
it 'defaults to source directory' do
|
12
|
-
expect(SmallVictories.source).to eq ''
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'defaults to destination directory' do
|
16
|
-
expect(SmallVictories.destination).to eq '_site'
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'defaults stylesheet file' do
|
20
|
-
expect(SmallVictories.stylesheet).to eq '_sv_custom.css'
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'defaults to _sass directory' do
|
24
|
-
expect(SmallVictories.sass_dir).to eq '_sass'
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
context 'with config file' do
|
29
|
-
before do
|
30
|
-
FileUtils.cp('fixtures/_config.yml', './')
|
31
|
-
end
|
32
|
-
|
33
|
-
after do
|
34
|
-
FileUtils.rm('./_config.yml')
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'reads the source folder' do
|
38
|
-
expect(SmallVictories.source).to eq 'my-source-folder'
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'reads the destination folder' do
|
42
|
-
expect(SmallVictories.destination).to eq 'my-site-folder'
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'reads the _sass directory' do
|
46
|
-
expect(SmallVictories.sass_dir).to eq 'my-sass-folder'
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'reads the output css file' do
|
50
|
-
expect(SmallVictories.stylesheet).to eq 'my-stylesheet.css'
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe '#sass' do
|
56
|
-
before do
|
57
|
-
allow(SmallVictories).to receive(:source).and_return('./spec/fixtures')
|
58
|
-
allow(SmallVictories).to receive(:destination).and_return('./spec/fixtures')
|
59
|
-
end
|
60
|
-
|
61
|
-
context 'with valid sass' do
|
62
|
-
it 'renders the css from a scss file' do
|
63
|
-
expect(SmallVictories.sass).to include "rendered ./spec/fixtures/_css/stylesheet.css"
|
64
|
-
expect(File.open('./fixtures/_css/stylesheet.css').read).to include 'html{background:white}body div{background:red}'
|
65
|
-
end
|
66
|
-
|
67
|
-
after do
|
68
|
-
FileUtils.rm('./fixtures/_css/stylesheet.css')
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
context 'with invalid sass' do
|
73
|
-
before do
|
74
|
-
allow(SmallVictories).to receive(:source).and_return('./spec/fixtures/invalid')
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'returns the error' do
|
78
|
-
expect(SmallVictories.sass).to include "Error"
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
describe '#compile' do
|
84
|
-
before do
|
85
|
-
allow(SmallVictories).to receive(:source).and_return('./spec/fixtures')
|
86
|
-
allow(SmallVictories).to receive(:destination).and_return('./spec/fixtures')
|
87
|
-
end
|
88
|
-
|
89
|
-
context 'with valid css' do
|
90
|
-
it 'compiles the css file' do
|
91
|
-
expect(SmallVictories.compile).to include "compiled ./spec/fixtures/_sv_custom.css"
|
92
|
-
expect(File.open('fixtures/_sv_custom.css').read).to include '.bootstrap{color:black}'
|
93
|
-
end
|
94
|
-
|
95
|
-
after do
|
96
|
-
FileUtils.rm('fixtures/_sv_custom.css')
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|