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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: afe68ea3a35b1adb6a885d2e98991685fa18f7ec
4
- data.tar.gz: 847e787c01942e2018a4a5e72540e866eba5bb17
3
+ metadata.gz: 305cf251d788e9e1d865ed14affc8df4eba8dba7
4
+ data.tar.gz: 3f5aa5da6a816bcfd06d7de06e405e3cf162b98d
5
5
  SHA512:
6
- metadata.gz: 3a3fedb31949829a83834b14ca8fc026314c3a549d31b9492e731f56221df0732c46e0157bdfcbd059b39e49799a279387808033724e6c79ce9bd64d61846193
7
- data.tar.gz: 222a8cea5277277d3410c6f3198c50cbfc8891fd2e1ae7c4eb352f4ebd099e925a922a569641092c20365415ef41a8b4da857d962581c58dbc1a4e78cc82257e
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
- ### Hello
41
+ ### Watch
14
42
 
15
- Puts `Hello World!`
43
+ Watch for changes and compile and package files.
16
44
 
17
- Command: `sv hello`
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.setup
26
- SmallVictories.watch
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]
@@ -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,9 @@
1
+ module SmallVictories
2
+ DEFAULT_SOURCE = ''
3
+ DEFAULT_DESTINATION = '_site'
4
+ DEFAULT_STYLESHEET = '_sv_custom.css'
5
+ DEFAULT_STYLESHEET_DIR = '_stylesheets'
6
+ DEFAULT_JAVASCRIPT = '_sv_custom.js'
7
+ DEFAULT_JAVASCRIPT_DIR = '_javascripts'
8
+ ROOT = Dir.pwd
9
+ end
@@ -0,0 +1,11 @@
1
+ module SmallVictories
2
+ class << self
3
+ attr_writer :logger
4
+
5
+ def logger
6
+ @logger ||= Logger.new($stdout).tap do |log|
7
+ log.progname = self.name
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module SmallVictories
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  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
@@ -1,4 +1,6 @@
1
1
  source: '/my-source-folder/'
2
2
  destination: 'my-site-folder/'
3
- sass_dir: 'my-sass-folder/'
3
+ stylesheets_dir: 'my-sass-folder/'
4
+ javascripts_dir: 'my-js-folder/'
4
5
  stylesheet: 'my-stylesheet.css'
6
+ javascript: 'my-javascript.js'
@@ -0,0 +1,5 @@
1
+ /* Small Victories Sprockets File
2
+ *
3
+ *= require extra
4
+ *= require_tree .
5
+ */
@@ -0,0 +1,3 @@
1
+ .bootstrap {
2
+ color: black;
3
+ }
@@ -1,5 +1,3 @@
1
- @import 'extra';
2
-
3
1
  body {
4
2
  div {
5
3
  background: red;
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
- * For more details see
4
- * https://github.com/rails/sprockets#the-directive-processor
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.2
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/_css/.gitkeep
128
- - spec/fixtures/_css/_sv_custom.css
129
- - spec/fixtures/_css/bootstrap.css
130
- - spec/fixtures/_sass/_extra.scss
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/_css/.gitkeep
163
- - spec/fixtures/_css/_sv_custom.css
164
- - spec/fixtures/_css/bootstrap.css
165
- - spec/fixtures/_sass/_extra.scss
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
File without changes
@@ -1,3 +0,0 @@
1
- /* Sprockets
2
- *= require_tree .
3
- */
@@ -1 +0,0 @@
1
- .bootstrap{color: black}
@@ -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