sassconf 0.1.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: fefedce326c30fe6076ff27683fb4fa91a05efda
4
+ data.tar.gz: 3d253f23d6bb31ce5c81718347645e0bcab4c3e8
5
+ SHA512:
6
+ metadata.gz: 24a52a90d53f90bf2a397329b57a4674b93e90871fbd2065b6b18d30f0825436b26e8ab37af9b30add98738930c2e37b3c9b11a6858f9f1fa8172a1352e0fc49
7
+ data.tar.gz: 18f491a65cd80cc072ad9a12555c33ba40126129f3f149690d6606252bc547b1ce689bc0e419c68de10c6d01b1e8b3d65e9ebfd1f942155eb1f7293c10f16000
data/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ # Jetbrains
2
+ .idea/
3
+ *.iml
4
+ *.iws
5
+
6
+ # Rubymine Gem
7
+ /.bundle/
8
+ /.yardoc
9
+ /Gemfile.lock
10
+ /_yardoc/
11
+ /coverage/
12
+ /doc/
13
+ /pkg/
14
+ /spec/reports/
15
+ /tmp/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in sassconf.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Marcel Schlegel
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
data/README.md ADDED
@@ -0,0 +1,192 @@
1
+ # Sassconf
2
+
3
+ With the Sassconf command tool you can use a config file for defining your [Sass](https://github.com/sass/sass) options.
4
+ If you liked the config file in any Compass environment then you'll like that one also because it's very similar :)
5
+
6
+ ## Requirements
7
+
8
+ - [Sass](https://github.com/sass/sass)
9
+
10
+ ## Installation
11
+
12
+ Install it directly from [RubyGems](https://rubygems.org):
13
+
14
+ ```bash
15
+ gem install sassconf
16
+ ```
17
+
18
+ ## Usage
19
+
20
+ General usage:
21
+
22
+ ```bash
23
+ sassconf [options] [INPUT] [OUTPUT]
24
+ ```
25
+
26
+ You can type:
27
+
28
+ ```bash
29
+ sassconf -h
30
+ ```
31
+
32
+ or only:
33
+
34
+ ```bash
35
+ sassconf
36
+ ```
37
+
38
+ in your console for show the help text.
39
+
40
+ ###Config File
41
+ For using options from Sass you have to use special variable prefixes "arg_NAME" and "varg_NAME".
42
+
43
+ - "arg_NAME" for any [Sass](http://sass-lang.com/documentation/file.SASS_REFERENCE.html) options without a "=" sign like:
44
+
45
+ ```bash
46
+ --style
47
+ --load-path
48
+ --no-cache
49
+ ...
50
+ ```
51
+ - "varg_NAME" for any [Sass](http://sass-lang.com/documentation/file.SASS_REFERENCE.html) options with a "=" sign like:
52
+
53
+ ```bash
54
+ --sourcemap
55
+ ```
56
+
57
+ If there is an option with a "-" sign, you have to replace it with a "_" sign in your variable like:
58
+
59
+ ```bash
60
+ "no-cache" changes to "arg_no_cache"
61
+ ```
62
+
63
+ If there is an option without a value, you have to define it with the symbol ":no_value" like:
64
+
65
+ ```ruby
66
+ arg_no_cache = :no_value
67
+ ```
68
+
69
+ Example config:
70
+
71
+ ```ruby
72
+ arg_style = 'compressed'
73
+ arg_load_path = '/your/path'
74
+ arg_no_cache = :no_value
75
+ varg_sourcemap = 'none'
76
+ arg_precision = 10
77
+ ```
78
+
79
+ You can also set a list of values on the command line which you can use in your config file:
80
+
81
+ ```bash
82
+ sassconf --config /path/config.rb --args value1,value2,value3
83
+ ```
84
+
85
+ In your config file you have to use the array "extern_args" like:
86
+
87
+ ```ruby
88
+ extern_args[0] #For "value1"
89
+ extern_args[1] #For "value2"
90
+ extern_args[2] #For "value3"
91
+ arg_style = 'compressed'
92
+ ...
93
+ ```
94
+
95
+ ##CommandLine Options
96
+
97
+ ###Required Options
98
+ - -c, --config CONFIG_FILE
99
+ - Specify a ruby config file e.g.: /PATH/config.rb
100
+
101
+ ###Optional Options
102
+ - -a, --args ARGS
103
+ - Comma separated list of values e.g.: val_a, val_b,...
104
+
105
+ - v, --verbose
106
+ - Print all log messages.
107
+
108
+ - -?, -h, --help
109
+ - Show help text.
110
+
111
+ ##Examples
112
+ ###Sample 1 - Input Output File
113
+
114
+ **config.rb**
115
+ ```ruby
116
+ production = false
117
+ arg_no_cache = :no_value
118
+ varg_style = production ? 'compressed' : 'expanded'
119
+ test_no_arg = 'no_arg'
120
+ varg_sourcemap = 'none'
121
+ ```
122
+
123
+ **input.scss**
124
+ ```sass
125
+ $color: #3BBECE;
126
+
127
+ .navigation {
128
+ border-color: $color;
129
+ color: darken($color, 9%);
130
+ }
131
+ ```
132
+
133
+ **In console type:**
134
+
135
+ ```bash
136
+ sassconf -c ./config.rb ./input.scss ./output.css
137
+ ```
138
+
139
+ **Result:**
140
+
141
+ **output.css**
142
+ ```css
143
+ .navigation {
144
+ border-color: #3BBFCE;
145
+ color: #2ca2af;
146
+ }
147
+ ```
148
+
149
+ ###Sample 2 - Use a "Filewatcher"
150
+
151
+ **config.rb**
152
+ ```ruby
153
+ production = false
154
+ arg_no_cache = :no_value
155
+ varg_style = production ? 'compressed' : 'expanded'
156
+ test_no_arg = 'no_arg'
157
+ varg_sourcemap = 'none'
158
+ arg_watch = "./:./out"
159
+ ```
160
+
161
+ **input.scss**
162
+ ```sass
163
+ $color: #3BBECE;
164
+
165
+ .navigation {
166
+ border-color: $color;
167
+ color: darken($color, 9%);
168
+ }
169
+ ```
170
+
171
+ **In console type:**
172
+
173
+ ```bash
174
+ sassconf -c ./config.rb
175
+ ```
176
+
177
+ **Console Output:**
178
+ ```bash
179
+ >>> Sass is watching for changes. Press Ctrl-C to stop.
180
+ directory ./out
181
+ write ./out/input.css
182
+ ```
183
+
184
+ **Result:**
185
+
186
+ **/out/input.css**
187
+ ```css
188
+ .navigation {
189
+ border-color: #3BBFCE;
190
+ color: #2ca2af;
191
+ }
192
+ ```
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
data/bin/sassconf ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'sassconf'
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require 'irb'
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,56 @@
1
+ require_relative 'util'
2
+ require_relative 'logger'
3
+ require_relative 'core_extensions'
4
+
5
+ module Sassconf
6
+ class ConfigReader
7
+ include Logging
8
+
9
+ VARIABLE_PREFIX = 'arg_'
10
+ VARIABLE_WITH_VALUE_PREFIX = 'varg_'
11
+ ARRAY_FROM_STRING_SEPARATOR = ','
12
+
13
+ def eval_rb_file(file_path, extern_string_array = String.empty)
14
+ Util.pre_check((file_path.is_string? and file_path.is_not_nil_or_empty? and File.exist?(file_path)), "\"rb\" file path is no string, nil, empty or doesn't exist.")
15
+ Util.pre_check((extern_string_array.is_string? and !extern_string_array.nil?), 'Extern string array is no string or nil.')
16
+
17
+ @bind_extern_string_array = extern_string_array
18
+ inject_array = 'extern_args = create_array_from_string(@bind_extern_string_array);'
19
+ source_file = File.read(file_path)
20
+ collect_variables = '@vh = create_variable_hash(local_variables, binding); @vwvh = create_variable_with_value_hash(local_variables, binding)'
21
+ eval("#{inject_array} \n #{source_file} \n #{collect_variables}", reader_binding)
22
+ nil
23
+ end
24
+
25
+ def variable_hash
26
+ @vh
27
+ end
28
+
29
+ def variable_with_value_hash
30
+ @vwvh
31
+ end
32
+
33
+ private
34
+ def create_variable_hash(variables, binding)
35
+ create_hash(VARIABLE_PREFIX, variables, binding)
36
+ end
37
+
38
+ def create_variable_with_value_hash(variables, binding)
39
+ create_hash(VARIABLE_WITH_VALUE_PREFIX, variables, binding)
40
+ end
41
+
42
+ def create_hash(prefix, variables, binding)
43
+ logger.info("Create Sass argument hash from config variables: #{variables}")
44
+ variables.reduce({}) { |hash, var| var_string = var.to_s; var_string.start_with?(prefix) ? hash.merge(var_string.sub(prefix, String.empty).gsub('_', '-') => eval(var_string, binding)) : hash }
45
+ end
46
+
47
+ def create_array_from_string(arg)
48
+ logger.info("Create \"extern_args\" array from string: #{arg}")
49
+ arg.split(ARRAY_FROM_STRING_SEPARATOR).collect { |elem| elem.strip }
50
+ end
51
+
52
+ def reader_binding
53
+ binding
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,60 @@
1
+ require_relative 'util'
2
+
3
+ module Sassconf
4
+ module CoreExtensions
5
+ module Object
6
+ def is_string?
7
+ false
8
+ end
9
+
10
+ def is_hash?
11
+ false
12
+ end
13
+ end
14
+
15
+ module String
16
+ def self.included(base)
17
+ base.extend(ClassMethods)
18
+ end
19
+
20
+ def is_string?
21
+ true
22
+ end
23
+
24
+ def is_not_nil_or_empty?
25
+ !(self.nil? || self.empty?)
26
+ end
27
+
28
+ def newline(count = 1, side = :right)
29
+ count.times { side == :left ? self.insert(0, "\n") : self << "\n" }
30
+ self << (block_given? ? yield : '')
31
+ end
32
+
33
+ def paragraph(count = 1, side = :right)
34
+ count.times { side == :left ? self.insert(0, "\n\n") : self << "\n\n" }
35
+ self << (block_given? ? yield : '')
36
+ end
37
+
38
+ def blank(count = 1, side = :right)
39
+ count.times { side == :left ? self.insert(0, ' ') : self << ' ' }
40
+ self << (block_given? ? yield : '')
41
+ end
42
+
43
+ module ClassMethods
44
+ def empty
45
+ ''
46
+ end
47
+ end
48
+ end
49
+
50
+ module Hash
51
+ def is_hash?
52
+ true
53
+ end
54
+ end
55
+ end
56
+
57
+ Object.include(Sassconf::CoreExtensions::Object)
58
+ String.include(Sassconf::CoreExtensions::String)
59
+ Hash.include(Sassconf::CoreExtensions::Hash)
60
+ end
@@ -0,0 +1,30 @@
1
+ require 'logger'
2
+
3
+ module Sassconf
4
+ module Logging
5
+ def logger
6
+ @logger ||= Logging.logger_for(self.class.name)
7
+ end
8
+
9
+ @loggers = {}
10
+
11
+ class << self
12
+ @@active = false
13
+
14
+ def activate()
15
+ @@active = true
16
+ end
17
+
18
+ def logger_for(classname)
19
+ @loggers[classname] ||= configure_logger_for(classname)
20
+ end
21
+
22
+ def configure_logger_for(classname)
23
+ logger = Logger.new(@@active ? STDOUT : nil)
24
+ logger.progname = classname
25
+ logger.level = Logger::INFO
26
+ logger
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,46 @@
1
+ require_relative 'util'
2
+ require_relative 'core_extensions'
3
+ require_relative 'logger'
4
+
5
+ module Sassconf
6
+ class SassExecutor
7
+ include Logging
8
+
9
+ SASS_PROCESS = 'sass %s %s %s'
10
+ SASS_VALUE_ARGUMENT = '--%s=%s '
11
+ SASS_ARGUMENT = '--%s %s '
12
+
13
+ def initialize(sass_input, sass_output)
14
+ @sass_input = sass_input
15
+ @sass_output = sass_output
16
+ end
17
+
18
+ def create_argument_with_value_string(argument_hash)
19
+ create_string(SASS_VALUE_ARGUMENT, argument_hash)
20
+ end
21
+
22
+ def create_argument_string(argument_hash)
23
+ create_string(SASS_ARGUMENT, argument_hash)
24
+ end
25
+
26
+ def create_all_argument_strings(argument_value_hash, argument_hash)
27
+ create_argument_with_value_string(argument_value_hash).concat(' ').concat(create_argument_string(argument_hash))
28
+ end
29
+
30
+ def execute(argument_string)
31
+ Util.pre_check((argument_string.is_string? and argument_string.is_not_nil_or_empty?), 'Argument string is no string, nil or empty.')
32
+
33
+ system(SASS_PROCESS % [argument_string, @sass_input, @sass_output])
34
+ end
35
+
36
+ private
37
+ def create_string(argument_type, argument_hash)
38
+ Util.pre_check(argument_type.is_string?, 'Argument type is no string.')
39
+ Util.pre_check((argument_hash.is_hash? and !argument_hash.nil?), 'Argument hash is no hash or nil.')
40
+
41
+ logger.info("Create argument string from hash: #{argument_hash}")
42
+ argument_hash.each { |key, value| argument_hash[key] = String.empty if value == :no_value }
43
+ argument_hash.reduce('') { |arg_string, (key, value)| arg_string.concat((argument_type % [key, value])) }.strip
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,8 @@
1
+ module Sassconf
2
+ class Util
3
+ def self.pre_check(term, message)
4
+ raise ArgumentError, message if !term
5
+ end
6
+ end
7
+ end
8
+
@@ -0,0 +1,3 @@
1
+ module Sassconf
2
+ VERSION = '0.1.1'
3
+ end
data/lib/sassconf.rb ADDED
@@ -0,0 +1,78 @@
1
+ require 'sassconf/version'
2
+ require 'sassconf/config_reader'
3
+ require 'sassconf/sass_executor'
4
+ require 'optparse'
5
+ require 'ostruct'
6
+
7
+ module Sassconf
8
+ extend Logging
9
+
10
+ class Parser
11
+
12
+ module HelpText
13
+ USAGE = 'Usage: sassconf [options] [INPUT] [OUTPUT]'.paragraph
14
+ DESCRIPTION = 'Description:'
15
+ .newline.blank(3) { 'Adds configuration file to Sass converter.' }
16
+ .newline.blank(3) { "Version #{Sassconf::VERSION}" }
17
+ .paragraph
18
+ REQUIRED = 'Required:'
19
+ OPTIONAL = 'Optional:'.newline(1, :left)
20
+ end
21
+
22
+
23
+ def self.parse(options)
24
+
25
+ option_args = OpenStruct.new
26
+ option_args.config_path = String.empty
27
+ option_args.extern_args = String.empty
28
+
29
+ opt_parser = OptionParser.new do |opts|
30
+ opts.banner = HelpText::USAGE
31
+ opts.separator(HelpText::DESCRIPTION)
32
+ opts.separator(HelpText::REQUIRED)
33
+
34
+ opts.on('-c', '--config CONFIG_FILE ', String, 'Specify a ruby config file e.g.: ', '/PATH/config.rb') do |elem|
35
+ option_args.config_path = elem
36
+ end
37
+
38
+ opts.separator(HelpText::OPTIONAL)
39
+ opts.on('-a', '--args ARGS', String, 'Comma separated list of values e.g.:', 'val_a, val_b,...'.paragraph) do |elem|
40
+ option_args.extern_args = elem
41
+ end
42
+
43
+ opts.on('-v', '--verbose', 'Print all log messages.') do
44
+ Sassconf::Logging.activate()
45
+ end
46
+
47
+ opts.on('-?', '-h', '--help', 'Show this help. "Wow you really need this help?! ... Me too. ;)"') do
48
+ puts opts
49
+ exit
50
+ end
51
+ end
52
+
53
+ opt_parser.parse!(options)
54
+
55
+ if option_args.config_path.empty?
56
+ puts opt_parser
57
+ exit
58
+ end
59
+ return option_args
60
+ end
61
+ end
62
+
63
+ begin
64
+ option_args = Parser.parse(ARGV)
65
+ config_reader = ConfigReader.new
66
+ executor = SassExecutor.new(ARGV[0], ARGV[1])
67
+
68
+ config_reader.eval_rb_file(option_args.config_path, option_args.extern_args)
69
+ argument_string = executor.create_all_argument_strings(config_reader.variable_with_value_hash, config_reader.variable_hash)
70
+ executor.execute(argument_string)
71
+
72
+ rescue OptionParser::MissingArgument, OptionParser::InvalidOption, SyntaxError, ArgumentError => e
73
+ puts e.message
74
+ logger.error(e)
75
+ ensure
76
+ exit
77
+ end
78
+ end
data/sassconf.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'sassconf/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'sassconf'
8
+ spec.version = Sassconf::VERSION
9
+ spec.platform = Gem::Platform::RUBY
10
+ spec.authors = ['Marcel Schlegel']
11
+ spec.homepage = ['http://sassconf.schlegel11.de']
12
+ spec.email = ['develop@schlegel11.de']
13
+ spec.licenses = ['MIT']
14
+
15
+ spec.summary = %q{Adds configuration file to Sass converter.}
16
+ spec.description = %q{With the Sassconf command tool you can use a config file for defining your Sass arguments.
17
+ If you liked the config file in any Compass environment then you'll like that one also because it's very similar.}
18
+ spec.homepage = "http://sassconf.schlegel11.de"
19
+
20
+ spec.files = `git ls-files`.split("\n")
21
+ spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
+ spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ spec.require_paths = ['lib']
24
+
25
+ spec.add_runtime_dependency 'sass', '>= 0'
26
+
27
+ spec.add_development_dependency 'bundler', '~> 1.9'
28
+ spec.add_development_dependency 'rake', '~> 10.0'
29
+ spec.add_development_dependency 'minitest', '>= 0'
30
+ end
@@ -0,0 +1,5 @@
1
+ production = true
2
+ arg_no_cache = :no_value
3
+ varg_style = production ? 'compressed' : 'no_production'
4
+ test_no_arg = 'no_arg'
5
+ varg_sourcemap = extern_args.empty? ? 'none' : extern_args[1]
@@ -0,0 +1,6 @@
1
+ $color: #3BBFCE;
2
+
3
+ .navigation {
4
+ border-color: $color;
5
+ color: darken($color, 9%);
6
+ }
@@ -0,0 +1,50 @@
1
+ require 'minitest/autorun'
2
+ require 'sassconf/config_reader'
3
+
4
+ class TestConfigReader < Minitest::Test
5
+ CONFIG_PATH = __dir__ + '/resources/Config.rb'
6
+
7
+ # Called before every test method runs. Can be used
8
+ # to set up fixture information.
9
+ def setup
10
+ @config_reader = Sassconf::ConfigReader.new
11
+ end
12
+
13
+ def test_positive_eval_rb_file
14
+ assert_equal(nil, @config_reader.variable_hash)
15
+ assert_equal(nil, @config_reader.variable_with_value_hash)
16
+
17
+ @config_reader.eval_rb_file(CONFIG_PATH)
18
+
19
+ assert_equal({'style' => 'compressed', 'sourcemap' => 'none'}, @config_reader.variable_with_value_hash)
20
+ assert_equal({'no-cache' => :no_value}, @config_reader.variable_hash)
21
+
22
+ @config_reader.eval_rb_file(CONFIG_PATH, 'dummy, inline ')
23
+
24
+ assert_equal({'style' => 'compressed', 'sourcemap' => 'inline'}, @config_reader.variable_with_value_hash)
25
+ assert_equal({'no-cache' => :no_value}, @config_reader.variable_hash)
26
+ end
27
+
28
+ def test_negative_eval_rb_file
29
+ exception = assert_raises(ArgumentError) { @config_reader.eval_rb_file('test/resources/Config_not_exist.rb') }
30
+ assert_equal("\"rb\" file path is no string, nil, empty or doesn't exist.", exception.message)
31
+
32
+ exception = assert_raises(ArgumentError) { @config_reader.eval_rb_file(String.empty) }
33
+ assert_equal("\"rb\" file path is no string, nil, empty or doesn't exist.", exception.message)
34
+
35
+ exception = assert_raises(ArgumentError) { @config_reader.eval_rb_file(nil) }
36
+ assert_equal("\"rb\" file path is no string, nil, empty or doesn't exist.", exception.message)
37
+
38
+ exception = assert_raises(ArgumentError) { @config_reader.eval_rb_file(0) }
39
+ assert_equal("\"rb\" file path is no string, nil, empty or doesn't exist.", exception.message)
40
+
41
+ exception = assert_raises(ArgumentError) { @config_reader.eval_rb_file(CONFIG_PATH, 0) }
42
+ assert_equal('Extern string array is no string or nil.', exception.message)
43
+
44
+ exception = assert_raises(ArgumentError) { @config_reader.eval_rb_file(CONFIG_PATH, nil) }
45
+ assert_equal('Extern string array is no string or nil.', exception.message)
46
+
47
+ assert_equal(nil, @config_reader.variable_with_value_hash)
48
+ assert_equal(nil, @config_reader.variable_hash)
49
+ end
50
+ end
@@ -0,0 +1,86 @@
1
+ require 'minitest/autorun'
2
+ require 'sassconf/sass_executor'
3
+ require 'sassconf/config_reader'
4
+
5
+ class TestSassExecuter < Minitest::Test
6
+
7
+ SCSS_PATH = __dir__ + '/resources/Input.scss'
8
+ CSS_PATH = __dir__ + '/resources/Output.css'
9
+ CONFIG_PATH = __dir__ + '/resources/Config.rb'
10
+ # Called before every test method runs. Can be used
11
+ # to set up fixture information.
12
+ def setup
13
+ @config_reader = Sassconf::ConfigReader.new
14
+ @sass_executor = Sassconf::SassExecutor.new(SCSS_PATH, CSS_PATH)
15
+ end
16
+
17
+ def test_positive_create_argument_with_value_string
18
+ @config_reader.eval_rb_file(CONFIG_PATH)
19
+
20
+ assert_equal('--style=compressed --sourcemap=none', @sass_executor.create_argument_with_value_string(@config_reader.variable_with_value_hash))
21
+ end
22
+
23
+ def test_negative_create_argument_with_value_string
24
+ exception = assert_raises(ArgumentError) { @sass_executor.create_argument_with_value_string(String.empty) }
25
+ assert_equal('Argument hash is no hash or nil.', exception.message)
26
+
27
+ exception = assert_raises(ArgumentError) { @sass_executor.create_argument_with_value_string(nil) }
28
+ assert_equal('Argument hash is no hash or nil.', exception.message)
29
+ end
30
+
31
+ def test_positive_create_argument_string
32
+ @config_reader.eval_rb_file(CONFIG_PATH)
33
+
34
+ assert_equal('--no-cache', @sass_executor.create_argument_string(@config_reader.variable_hash))
35
+ end
36
+
37
+ def test_negative_create_argument_string
38
+ exception = assert_raises(ArgumentError) { @sass_executor.create_argument_string(String.empty) }
39
+ assert_equal('Argument hash is no hash or nil.', exception.message)
40
+
41
+ exception = assert_raises(ArgumentError) { @sass_executor.create_argument_string(nil) }
42
+ assert_equal('Argument hash is no hash or nil.', exception.message)
43
+ end
44
+
45
+ def test_positive_create_all_argument_strings
46
+ @config_reader.eval_rb_file(CONFIG_PATH)
47
+
48
+ assert_equal('--style=compressed --sourcemap=none --no-cache', @sass_executor.create_all_argument_strings(@config_reader.variable_with_value_hash, @config_reader.variable_hash))
49
+ end
50
+
51
+ def test_negative_create_all_argument_strings
52
+ exception = assert_raises(ArgumentError) { @sass_executor.create_all_argument_strings(@config_reader.variable_with_value_hash, String.empty) }
53
+ assert_equal('Argument hash is no hash or nil.', exception.message)
54
+
55
+ exception = assert_raises(ArgumentError) { @sass_executor.create_all_argument_strings(@config_reader.variable_with_value_hash, nil) }
56
+ assert_equal('Argument hash is no hash or nil.', exception.message)
57
+
58
+ exception = assert_raises(ArgumentError) { @sass_executor.create_all_argument_strings(String.empty, @config_reader.variable_hash) }
59
+ assert_equal('Argument hash is no hash or nil.', exception.message)
60
+
61
+ exception = assert_raises(ArgumentError) { @sass_executor.create_all_argument_strings(nil, @config_reader.variable_hash) }
62
+ assert_equal('Argument hash is no hash or nil.', exception.message)
63
+ end
64
+
65
+ def test_positive_execute
66
+ @config_reader.eval_rb_file(CONFIG_PATH)
67
+ @sass_executor.execute(@sass_executor.create_all_argument_strings(@config_reader.variable_with_value_hash, @config_reader.variable_hash))
68
+
69
+ assert_equal(".navigation{border-color:#3BBFCE;color:#2ca2af}\n", File.read(CSS_PATH))
70
+
71
+ File.delete(CSS_PATH)
72
+ end
73
+
74
+ def test_negative_execute
75
+ @config_reader.eval_rb_file(CONFIG_PATH)
76
+
77
+ exception = assert_raises(ArgumentError) { @sass_executor.execute(0) }
78
+ assert_equal('Argument string is no string, nil or empty.', exception.message)
79
+
80
+ exception = assert_raises(ArgumentError) { @sass_executor.execute(String.empty) }
81
+ assert_equal('Argument string is no string, nil or empty.', exception.message)
82
+
83
+ exception = assert_raises(ArgumentError) { @sass_executor.execute(nil) }
84
+ assert_equal('Argument string is no string, nil or empty.', exception.message)
85
+ end
86
+ end
metadata ADDED
@@ -0,0 +1,123 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sassconf
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Marcel Schlegel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sass
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: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.9'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: |-
70
+ With the Sassconf command tool you can use a config file for defining your Sass arguments.
71
+ If you liked the config file in any Compass environment then you'll like that one also because it's very similar.
72
+ email:
73
+ - develop@schlegel11.de
74
+ executables:
75
+ - sassconf
76
+ - setup
77
+ extensions: []
78
+ extra_rdoc_files: []
79
+ files:
80
+ - ".gitignore"
81
+ - Gemfile
82
+ - LICENSE
83
+ - README.md
84
+ - Rakefile
85
+ - bin/sassconf
86
+ - bin/setup
87
+ - lib/sassconf.rb
88
+ - lib/sassconf/config_reader.rb
89
+ - lib/sassconf/core_extensions.rb
90
+ - lib/sassconf/logger.rb
91
+ - lib/sassconf/sass_executor.rb
92
+ - lib/sassconf/util.rb
93
+ - lib/sassconf/version.rb
94
+ - sassconf.gemspec
95
+ - test/resources/Config.rb
96
+ - test/resources/Input.scss
97
+ - test/test_config_reader.rb
98
+ - test/test_sass_executor.rb
99
+ homepage: http://sassconf.schlegel11.de
100
+ licenses:
101
+ - MIT
102
+ metadata: {}
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubyforge_project:
119
+ rubygems_version: 2.4.5
120
+ signing_key:
121
+ specification_version: 4
122
+ summary: Adds configuration file to Sass converter.
123
+ test_files: []