style_palette 0.0.1

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.
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