style_palette 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
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
+ .rvmrc
data/.rvmrc.example ADDED
@@ -0,0 +1 @@
1
+ rvm use --create ruby-1.9.3-p374@style_palette
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in style_palette.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Fernando Guillen
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,147 @@
1
+ ![style_palette](https://raw.github.com/fguillen/StylePalette/master/etc/style_palette.png)
2
+
3
+ # StylePalette
4
+
5
+ When you have a bunch of _tags_ and you want to render them in a colorize way you can implement your own colorize system or you can use **ColorPallete**.
6
+
7
+ StylePalette offers a json based configured color collections that can be associate with words.
8
+
9
+ StylePalette offers also helpers to render already styled `.label` elements.
10
+
11
+
12
+ ## Installation
13
+
14
+ gem "style_palette"
15
+
16
+ ## Usage
17
+
18
+ StylePalette.brush(<word>, <palette_name>)
19
+
20
+ StylePalette.brush("cat", :tags).background # => #f5abd5
21
+ StylePalette.brush("cat", :tags).foreground # => #000
22
+ StylePalette::Helper.style("cat", :tags) # => background-color: #f5abd5; color: #000;
23
+ StylePalette::Helper.label("cat", :tags) # => <span class="label" style="background-color: #f5abd5; color: #000;">cat</span>
24
+
25
+ ## Configuration & Initialization
26
+
27
+ Create a _json_ file with the name of the **palettes** and with an array of _colorized_ styles for each palette, like this:
28
+
29
+ {
30
+ "states": [
31
+ { "style": "background-color: #cd8745; color: #000;" },
32
+ { "style": "background-color: #82d37c; color: #000;" },
33
+ { "style": "background-color: #81dbde; color: #000;" }
34
+ ],
35
+
36
+ "tags": [
37
+ { "style": "background-color: #f5acb0; color: #000;" },
38
+ { "style": "background-color: #f5abd5; color: #000;" },
39
+ { "style": "background-color: #e7abf5; color: #000;" },
40
+ { "style": "background-color: #b2a6f5; color: #000;" }
41
+ ]
42
+ }
43
+
44
+ Check a [configuration example file](https://github.com/fguillen/StylePalette/blob/master/etc/style_palettes.example.json).
45
+
46
+ Then initialize StylePalette this way:
47
+
48
+ StylePalette.palettes_config = <palettes_file_path.json>
49
+
50
+ ## Rails integration
51
+
52
+ Configuration:
53
+
54
+ # config/style_palettes.json
55
+ {
56
+ "states": [
57
+ { "style": "background-color: #cd8745; color: #000;" },
58
+ { "style": "background-color: #82d37c; color: #000;" },
59
+ { "style": "background-color: #81dbde; color: #000;" }
60
+ ]
61
+ }
62
+
63
+ Initialization:
64
+
65
+ # config/initializers/style_palette.rb
66
+ StylePalette.palettes_config = "#{Rails.root}/config/style_palettes.json"
67
+
68
+ Helper:
69
+
70
+ # app/helpers/application_helper.rb
71
+ def render_label(word, palette_name)
72
+ StylePalette::Helper.label(word, palette_name).html_safe
73
+ end
74
+
75
+ Use:
76
+
77
+ # in any template
78
+ <%= render_label(current_user.state, :states) %>
79
+
80
+
81
+ ## Word/Color assignment
82
+
83
+ In the basic configuration ColorPallete takes a random _color_ for each _word_ (**always the same color for each word**), this is very helpful when you don't really care about the associated color for each word, for example if you have docens of _tags_ you are not gonna assign one specific color to each _tag_ just create a big enough palette and let StylePalette to choose.
84
+
85
+ But if you want to _force_ a color for an specific word you can do it using the special _regex_ attribute for a color in this way:
86
+
87
+ "states": [
88
+ { "style": "background-color: #cd8745; color: #000;" },
89
+ { "style": "background-color: #82d37c; color: #000;" },
90
+ { "style": "background-color: #81dbde; color: #000;", "regex": "blocked" }
91
+ ],
92
+
93
+ Now if the _word_ is **blocked** then the last color is gonna be choosen.
94
+
95
+ As you can guess, any valid _regex_ can be used in this field.
96
+
97
+ Check the [examples in the tests](https://github.com/fguillen/StylePalette/blob/master/test/style_palette_test.rb)
98
+
99
+ Also check the next examples:
100
+
101
+ ### Number assignment
102
+
103
+ "number": [
104
+ { "style": "background-color: #CCCCCC; color: #000;", "regex": "^0$" },
105
+ { "style": "background-color: #91E391; color: #000;", "regex": "^[^-]" },
106
+ { "style": "background-color: #E68585; color: #000;", "regex": "^-" }
107
+ ],
108
+
109
+ StylePalette::Helper.label(0, :number) # => <span class="label" style="background-color: #CCCCCC; color: #000;">0</span>
110
+ StylePalette::Helper.label(123, :number) # => <span class="label" style="background-color: #91E391; color: #000;">123</span>
111
+ StylePalette::Helper.label(-99, :number) # => <span class="label" style="background-color: #E68585; color: #000;">-99</span>
112
+
113
+ * For _zero_ the first color will be choosen
114
+ * For _positive numbers_ the second color will be choosen
115
+ * For _negative numbers_ the last color while be choosen
116
+
117
+ ### Range assignment
118
+
119
+ "ranges": [
120
+ { "style": "background-color: #fff385; color: #000;", "range": "..0" },
121
+ { "style": "background-color: #85ffd0; color: #000;", "range": "0..20" },
122
+ { "style": "background-color: #85c2ff; color: #000;", "range": "20..80" },
123
+ { "style": "background-color: #ff85f3; color: #000;", "range": "80.." }
124
+ ]
125
+
126
+ StylePalette::Helper.label(0, :ranges) # => <span class="label" style="background-color: #fff385; color: #000;">0</span>
127
+ StylePalette::Helper.label(45, :ranges) # => <span class="label" style="background-color: #85c2ff; color: #000;">45</span>
128
+
129
+ ### Boolean assignment
130
+
131
+ "boolean": [
132
+ { "style": "background-color: #91E391; color: #000;", "regex": "^(yes|1|true)$" },
133
+ { "style": "background-color: #E68585; color: #000;", "regex": "^(no|0|false)$" }
134
+ ],
135
+
136
+ StylePalette::Helper.label(0, :boolean) # => <span class="label" style="background-color: #91E391; color: #000;">0</span>
137
+ StylePalette::Helper.label("no", :boolean) # => <span class="label" style="background-color: #91E391; color: #000;">no</span>
138
+ StylePalette::Helper.label("yes", :boolean) # => <span class="label" style="background-color: #E68585; color: #000;">yes</span>
139
+ StylePalette::Helper.label(true, :boolean) # => <span class="label" style="background-color: #E68585; color: #000;">true</span>
140
+
141
+
142
+ ## The Gallery playground
143
+
144
+ You can check your _style palettes_ in the [StylePaletteGallery](http://spg.fernandoguillen.info) or [fork the app](https://raw.github.com/fguillen/StylePaletteGallery) and create your own playground.
145
+
146
+
147
+
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require "rake/testtask"
4
+
5
+ task :default => :test
6
+
7
+ Rake::TestTask.new do |t|
8
+ t.libs << "."
9
+ t.test_files = FileList["test/**/*_test.rb"]
10
+ t.verbose = true
11
+ end
Binary file
@@ -0,0 +1,52 @@
1
+ {
2
+ "states": [
3
+ { "style": "background-color: #cd8745; color: #000;" },
4
+ { "style": "background-color: #82d37c; color: #000;" },
5
+ { "style": "background-color: #81dbde; color: #000;" },
6
+ { "style": "background-color: #90a26b; color: #000;" },
7
+ { "style": "background-color: #c2b19d; color: #000;" },
8
+ { "style": "background-color: #c1e0a3; color: #000;" },
9
+ { "style": "background-color: #afaa78; color: #000;" },
10
+ { "style": "background-color: #C2BB68; color: #000;" },
11
+ { "style": "background-color: #63E17C; color: #000;" },
12
+ { "style": "background-color: #34B4C8; color: #000;" }
13
+ ],
14
+
15
+ "number": [
16
+ { "style": "background-color: #CCCCCC; color: #000;", "regex": "^0$" },
17
+ { "style": "background-color: #91E391; color: #000;", "regex": "^[^-]" },
18
+ { "style": "background-color: #E68585; color: #000;", "regex": "^-" }
19
+ ],
20
+
21
+ "boolean": [
22
+ { "style": "background-color: #91E391; color: #000;", "regex": "^(yes|1|true)$" },
23
+ { "style": "background-color: #E68585; color: #000;", "regex": "^(no|0|false)$" }
24
+ ],
25
+
26
+ "tags": [
27
+ { "style": "background-color: #f5acb0; color: #000;" },
28
+ { "style": "background-color: #f5abd5; color: #000;" },
29
+ { "style": "background-color: #e7abf5; color: #000;" },
30
+ { "style": "background-color: #b2a6f5; color: #000;" },
31
+ { "style": "background-color: #abc9f6; color: #000;" },
32
+ { "style": "background-color: #acf5ea; color: #000;" },
33
+ { "style": "background-color: #acf5c5; color: #000;" },
34
+ { "style": "background-color: #adf6ac; color: #000;" },
35
+ { "style": "background-color: #caf5ac; color: #000;" },
36
+ { "style": "background-color: #f5f1a7; color: #000;" },
37
+ { "style": "background-color: #f5caab; color: #000;" },
38
+ { "style": "background-color: #ff85a8; color: #000;" },
39
+ { "style": "background-color: #ffd685; color: #000;" },
40
+ { "style": "background-color: #fff385; color: #000;" },
41
+ { "style": "background-color: #85ffd0; color: #000;" },
42
+ { "style": "background-color: #85c2ff; color: #000;" },
43
+ { "style": "background-color: #ff85f3; color: #000;" }
44
+ ],
45
+
46
+ "ranges": [
47
+ { "style": "background-color: #fff385; color: #000;", "range": "..0" },
48
+ { "style": "background-color: #85ffd0; color: #000;", "range": "0..20" },
49
+ { "style": "background-color: #85c2ff; color: #000;", "range": "20..80" },
50
+ { "style": "background-color: #ff85f3; color: #000;", "range": "80.." }
51
+ ]
52
+ }
@@ -0,0 +1,6 @@
1
+ module StylePalette::Helper
2
+ def self.label(word, palette_name)
3
+ style = StylePalette.brush(word, palette_name).style
4
+ "<span class=\"label\" style=\"#{style}\">#{word}</span>"
5
+ end
6
+ end
@@ -0,0 +1,3 @@
1
+ module StylePalette
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,52 @@
1
+ require "json"
2
+ require "ostruct"
3
+
4
+ require_relative "style_palette/version"
5
+ require_relative "style_palette/helper"
6
+
7
+ module StylePalette
8
+ def self.brush(word, palette_name)
9
+ word = word.to_s
10
+ palette_name = palette_name.to_sym
11
+
12
+ raise ArgumentError, "Palette not found '#{palette_name}'" unless palettes[palette_name]
13
+ brush_by_regex(word, palette_name) || brush_by_range(word, palette_name) || brush_by_index(word, palette_name)
14
+ end
15
+
16
+ def self.brush_by_regex(word, palette_name)
17
+ palettes[palette_name].select{ |e| e.regex && word =~ /#{e.regex}/ }.first
18
+ end
19
+
20
+ def self.brush_by_range(word, palette_name)
21
+ palettes[palette_name].select do |e|
22
+ result = false
23
+
24
+ if e.range
25
+ from = e.range.split("..")[0].length > 0 ? e.range.split("..")[0].to_i : -Float::INFINITY
26
+ to = e.range.split("..")[1] ? e.range.split("..")[1].to_i : Float::INFINITY
27
+ result = (from..to).include?(word.to_i)
28
+ end
29
+
30
+ result
31
+ end.to_a.first
32
+ end
33
+
34
+ def self.brush_by_index(word, palette_name)
35
+ index = word.each_byte.inject( &:+ )
36
+ palettes[palette_name][ index % palettes[palette_name].length ]
37
+ end
38
+
39
+ def self.palettes_config=(style_palettes_file_path)
40
+ palettes = {}
41
+
42
+ JSON.parse(File.read(style_palettes_file_path)).each do |palette_name, palette|
43
+ palettes[palette_name.to_sym] = palette.map { |e| OpenStruct.new(e) }
44
+ end
45
+
46
+ @palettes = palettes
47
+ end
48
+
49
+ def self.palettes
50
+ @palettes || raise(Exception, "Palettes not initialized, try `StylePalette.palettes_config = <file_path>`")
51
+ end
52
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'style_palette/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "style_palette"
8
+ spec.version = StylePalette::VERSION
9
+ spec.authors = ["Fernando Guillen"]
10
+ spec.email = ["fguillen.mail@gmail.com"]
11
+ spec.description = "Create collections of stylized labels without effort"
12
+ spec.summary = "Create collections of stylized labels without effort"
13
+ spec.homepage = "https://raw.github.com/fguillen/StylePalette"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "mocha"
24
+ end
@@ -0,0 +1,33 @@
1
+ {
2
+ "states": [
3
+ { "style": "style 1" },
4
+ { "style": "style 2" },
5
+ { "style": "style 3" },
6
+ { "style": "style 4", "regex": "blocked" }
7
+ ],
8
+
9
+ "number": [
10
+ { "style": "style 4", "regex": "^0$" },
11
+ { "style": "style 5", "regex": "^[^-]" },
12
+ { "style": "style 6", "regex": "^-" }
13
+ ],
14
+
15
+ "boolean": [
16
+ { "style": "style 7", "regex": "^(yes|1|true)$" },
17
+ { "style": "style 8", "regex": "^(no|0|false)$" }
18
+ ],
19
+
20
+ "tags": [
21
+ { "style": "style 9" },
22
+ { "style": "style 10" },
23
+ { "style": "style 11" },
24
+ { "style": "style 12" }
25
+ ],
26
+
27
+ "ranges": [
28
+ { "style": "style 13", "range": "..0" },
29
+ { "style": "style 14", "range": "0..20" },
30
+ { "style": "style 15", "range": "20..80" },
31
+ { "style": "style 16", "range": "80.." }
32
+ ]
33
+ }
@@ -0,0 +1,11 @@
1
+ require_relative "test_helper"
2
+
3
+ class HelperTest < MiniTest::Unit::TestCase
4
+ def setup
5
+ StylePalette.palettes_config = "#{FIXTURES}/style_palettes.json"
6
+ end
7
+
8
+ def test_label
9
+ assert_equal("<span class=\"label\" style=\"style 10\">a</span>", StylePalette::Helper.label("a", :tags))
10
+ end
11
+ end
@@ -0,0 +1,68 @@
1
+ require_relative "test_helper"
2
+
3
+ class StylePaletteTest < MiniTest::Unit::TestCase
4
+ def setup
5
+ StylePalette.palettes_config = "#{FIXTURES}/style_palettes.json"
6
+ end
7
+
8
+ def test_style
9
+ assert_equal("style 10" , StylePalette.brush("a", :tags).style )
10
+ assert_equal("style 11" , StylePalette.brush("b", :tags).style )
11
+ assert_equal("style 12" , StylePalette.brush("c", :tags).style )
12
+ assert_equal("style 9" , StylePalette.brush("d", :tags).style )
13
+ assert_equal("style 10" , StylePalette.brush("e", :tags).style )
14
+ end
15
+
16
+ def test_style_by_regex
17
+ assert_equal("style 1" , StylePalette.brush("active", :states).style )
18
+ assert_equal("style 2" , StylePalette.brush("deactive", :states).style )
19
+ assert_equal("style 4" , StylePalette.brush("blocked", :states).style )
20
+ end
21
+
22
+ def test_style_by_range
23
+ assert_equal("style 13" , StylePalette.brush("-10", :ranges).style )
24
+ # assert_equal("style 14" , StylePalette.brush("0", :ranges).style )
25
+ # assert_equal("style 14" , StylePalette.brush("20", :ranges).style )
26
+ # assert_equal("style 15" , StylePalette.brush("40", :ranges).style )
27
+ # assert_equal("style 16" , StylePalette.brush("85", :ranges).style )
28
+ # assert_equal("style 16" , StylePalette.brush("99999", :ranges).style )
29
+ end
30
+
31
+ def test_style_by_regex_numbers
32
+ assert_equal("style 4" , StylePalette.brush(0, :number).style )
33
+ assert_equal("style 6" , StylePalette.brush(-10, :number).style )
34
+ assert_equal("style 5" , StylePalette.brush(10, :number).style )
35
+ end
36
+
37
+ def test_style_by_regex_boolean
38
+ assert_equal("style 7" , StylePalette.brush(true, :boolean).style )
39
+ assert_equal("style 7" , StylePalette.brush(1, :boolean).style )
40
+ assert_equal("style 7" , StylePalette.brush("yes", :boolean).style )
41
+
42
+ assert_equal("style 8" , StylePalette.brush(false, :boolean).style )
43
+ assert_equal("style 8" , StylePalette.brush(0, :boolean).style )
44
+ assert_equal("style 8" , StylePalette.brush("no", :boolean).style )
45
+
46
+ assert_equal("style 7" , StylePalette.brush("other", :boolean).style )
47
+ end
48
+
49
+ def test_raise_error_if_palette_name_not_found
50
+ exception =
51
+ assert_raises(ArgumentError) do
52
+ StylePalette.brush("a", :not_found)
53
+ end
54
+
55
+ assert_match(/Palette not found/, exception.message)
56
+ end
57
+
58
+ def test_raise_error_if_palettes_not_initialized
59
+ StylePalette.instance_variable_set(:@palettes, nil)
60
+
61
+ exception =
62
+ assert_raises(Exception) do
63
+ StylePalette.brush("a", :tags)
64
+ end
65
+
66
+ assert_match(/Palettes not initialized/, exception.message)
67
+ end
68
+ end
@@ -0,0 +1,10 @@
1
+ require "minitest/unit"
2
+ require "minitest/autorun"
3
+ require "mocha/setup"
4
+
5
+ require_relative "../lib/style_palette"
6
+
7
+ class MiniTest::Unit::TestCase
8
+ FIXTURES = File.expand_path("#{File.dirname(__FILE__)}/fixtures")
9
+ end
10
+
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: style_palette
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Fernando Guillen
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-23 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: &70292865623820 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70292865623820
25
+ - !ruby/object:Gem::Dependency
26
+ name: rake
27
+ requirement: &70292865623380 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70292865623380
36
+ - !ruby/object:Gem::Dependency
37
+ name: mocha
38
+ requirement: &70292865622920 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70292865622920
47
+ description: Create collections of stylized labels without effort
48
+ email:
49
+ - fguillen.mail@gmail.com
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - .gitignore
55
+ - .rvmrc.example
56
+ - Gemfile
57
+ - LICENSE.txt
58
+ - README.md
59
+ - Rakefile
60
+ - etc/style_palette.png
61
+ - etc/style_palettes.example.json
62
+ - lib/style_palette.rb
63
+ - lib/style_palette/helper.rb
64
+ - lib/style_palette/version.rb
65
+ - style_palette.gemspec
66
+ - test/fixtures/style_palettes.json
67
+ - test/helper_test.rb
68
+ - test/style_palette_test.rb
69
+ - test/test_helper.rb
70
+ homepage: https://raw.github.com/fguillen/StylePalette
71
+ licenses:
72
+ - MIT
73
+ post_install_message:
74
+ rdoc_options: []
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ requirements: []
90
+ rubyforge_project:
91
+ rubygems_version: 1.8.15
92
+ signing_key:
93
+ specification_version: 3
94
+ summary: Create collections of stylized labels without effort
95
+ test_files:
96
+ - test/fixtures/style_palettes.json
97
+ - test/helper_test.rb
98
+ - test/style_palette_test.rb
99
+ - test/test_helper.rb