FactoryBot.define do factory :colors, class: Hash do skip_create colors_map = { # black "#000000" => {rgb: [ 0, 0, 0], hsl: [ 0.000, 0.000, 0.000], cmyk: [ 0.000, 0.000, 0.000, 100.000], hsv: [ 0.000, 0.000, 0.000], hsi: [ 0.000, 0.000, 0.000]}, # white "#FFFFFF" => {rgb: [255, 255, 255], hsl: [ 0.000, 0.000, 100.000], cmyk: [ 0.000, 0.000, 0.000, 0.000], hsv: [ 0.000, 0.000, 100.000], hsi: [ 0.000, 0.000, 100.000]}, # red "#FF0000" => {rgb: [255, 0, 0], hsl: [ 0.000, 100.000, 50.000], cmyk: [ 0.000, 100.000, 100.000, 0.000], hsv: [ 0.000, 100.000, 100.000], hsi: [ 0.000, 100.000, 33.333]}, # lime "#00FF00" => {rgb: [ 0, 255, 0], hsl: [120.000, 100.000, 50.000], cmyk: [100.000, 0.000, 100.000, 0.000], hsv: [120.000, 100.000, 100.000], hsi: [120.000, 100.000, 33.333]}, # blue "#0000FF" => {rgb: [ 0, 0, 255], hsl: [240.000, 100.000, 50.000], cmyk: [100.000, 100.000, 0.000, 0.000], hsv: [240.000, 100.000, 100.000], hsi: [240.000, 100.000, 33.333]}, # yellow "#FFFF00" => {rgb: [255, 255, 0], hsl: [ 60.000, 100.000, 50.000], cmyk: [ 0.000, 0.000, 100.000, 0.000], hsv: [ 60.000, 100.000, 100.000], hsi: [ 60.000, 100.000, 66.667]}, # cyan / aqua "#00FFFF" => {rgb: [ 0, 255, 255], hsl: [180.000, 100.000, 50.000], cmyk: [100.000, 0.000, 0.000, 0.000], hsv: [180.000, 100.000, 100.000], hsi: [180.000, 100.000, 66.667]}, # magenta / fuchsia "#FF00FF" => {rgb: [255, 0, 255], hsl: [300.000, 100.000, 50.000], cmyk: [ 0.000, 100.000, 0.000, 0.000], hsv: [300.000, 100.000, 100.000], hsi: [300.000, 100.000, 66.667]}, # silver "#C0C0C0" => {rgb: [192, 192, 192], hsl: [ 0.000, 0.000, 75.294], cmyk: [ 0.000, 0.000, 0.000, 24.706], hsv: [ 0.000, 0.000, 75.294], hsi: [ 0.000, 0.000, 75.294]}, # gray "#808080" => {rgb: [128, 128, 128], hsl: [ 0.000, 0.000, 50.196], cmyk: [ 0.000, 0.000, 0.000, 49.804], hsv: [ 0.000, 0.000, 50.196], hsi: [ 0.000, 0.000, 50.196]}, # maroon "#800000" => {rgb: [128, 0, 0], hsl: [ 0.000, 100.000, 25.098], cmyk: [ 0.000, 100.000, 100.000, 49.804], hsv: [ 0.000, 100.000, 50.196], hsi: [ 0.000, 100.000, 16.732]}, # olive "#808000" => {rgb: [128, 128, 0], hsl: [ 60.000, 100.000, 25.098], cmyk: [ 0.000, 0.000, 100.000, 49.804], hsv: [ 60.000, 100.000, 50.196], hsi: [ 60.000, 100.000, 33.464]}, # green "#008000" => {rgb: [ 0, 128, 0], hsl: [120.000, 100.000, 25.098], cmyk: [100.000, 0.000, 100.000, 49.804], hsv: [120.000, 100.000, 50.196], hsi: [120.000, 100.000, 16.732]}, # purple "#800080" => {rgb: [128, 0, 128], hsl: [300.000, 100.000, 25.098], cmyk: [ 0.000, 100.000, 0.000, 49.804], hsv: [300.000, 100.000, 50.196], hsi: [300.000, 100.000, 33.464]}, # teal "#008080" => {rgb: [ 0, 128, 128], hsl: [180.000, 100.000, 25.098], cmyk: [100.000, 0.000, 0.000, 49.804], hsv: [180.000, 100.000, 50.196], hsi: [180.000, 100.000, 33.464]}, # navy "#000080" => {rgb: [ 0, 0, 128], hsl: [240.000, 100.000, 25.098], cmyk: [100.000, 100.000, 0.000, 49.804], hsv: [240.000, 100.000, 50.196], hsi: [240.000, 100.000, 16.732]}, # some random colors "#E01783" => {rgb: [224, 23, 131], hsl: [327.761, 81.377, 48.431], cmyk: [ 0.000, 89.732, 41.518, 12.157], hsv: [327.761, 89.732, 87.843], hsi: [327.761, 81.746, 49.412]}, "#1D8056" => {rgb: [ 29, 128, 86], hsl: [154.545, 63.057, 30.784], cmyk: [ 77.344, 0.000, 32.812, 49.804], hsv: [154.545, 77.344, 50.196], hsi: [154.545, 64.198, 31.765]}, "#229765" => {rgb: [ 34, 151, 101], hsl: [154.359, 63.243, 36.275], cmyk: [ 77.483, 0.000, 33.113, 40.784], hsv: [154.359, 77.483, 59.216], hsi: [154.359, 64.336, 37.386]}, "#239393" => {rgb: [ 35, 147, 147], hsl: [180.000, 61.538, 35.686], cmyk: [ 76.190, 0.000, 0.000, 42.353], hsv: [180.000, 76.190, 57.647], hsi: [180.000, 68.085, 43.007]}, } transient do round { 1 } end trait :one do initialize_with { colors_map.to_a.sample(1).to_h } end initialize_with { colors_map } after(:build) do |colors, evaluator| colors.transform_values! do |value| value.transform_values! { |arr| arr.map { |num| num.round(evaluator.round)} } end end end end