ase 1.0.3 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d8b9a4fe8dffacb1b54b6c831206538f9eb5fb49
4
- data.tar.gz: 315aff5c962cc1e7f3f066a8cd9368f1658703b3
3
+ metadata.gz: 203efd29143fde0efedd8fe1b9eb3f0434393842
4
+ data.tar.gz: da48c549c3ee08b188d2df5ebb3085d8767780c6
5
5
  SHA512:
6
- metadata.gz: 4a95e73f705febe274a3e5b959ab953bb2ecb39066d2006944d3b5326d34b6b13853986228fa8ef21b97cde828389947a272b26738ecf3bd78a9b7afbbc9fb63
7
- data.tar.gz: 269bc26cefac68b1cb7c8218cb2412e6729c138d8579777673680102dfa784257bab57a8eac2d68c9530d0dd3aae8e36bae740460bf4a79080800c4dc308fe4f
6
+ metadata.gz: 5fc9481aac21f3cbaeec567f27083b4629965a19ada5320c80d13f6f819831294c32b805ba18932ea7dc6f65b62d6890dfa0c951e05eb3e4eb804b557dedfd3b
7
+ data.tar.gz: dff49640e93873d3f06c2115942008d4491d79ed1fe713ff40d1ebbe1f5e3ca8190db8f846709fc913099d6daf1043c38e7e3296c22fd6fcf3829fb9102f1f70
data/README.md CHANGED
@@ -24,8 +24,10 @@ Or install it yourself as:
24
24
  doc = ASE.new
25
25
 
26
26
  palette = ASE::Palette.new('My Colors')
27
- palette.add 'Black', ASE::Color.new(0, 0, 0)
28
- palette.add 'Red', ASE::Color.from_hex('#ff0000')
27
+ palette.add 'Black', ASE::Color::RGB.new(0, 0, 0)
28
+ palette.add 'Red', ASE::Color::RGB.from_hex('#ff0000')
29
+ palette.add 'Blue', ASE::Color::CMYK.new(0.92, 0.68, 0.2, 0)
30
+ palette.add 'Light Gray', ASE::Color::Gray.new(0.75)
29
31
 
30
32
  doc << palette
31
33
  doc.to_file('path/to/file.ase')
@@ -36,13 +38,20 @@ doc.to_file('path/to/file.ase')
36
38
  ``` ruby
37
39
  doc = ASE.from_file('path/to/file.ase')
38
40
 
39
- puts doc['My Colors']['Red'].to_rgb
41
+ puts doc['My Colors']['Red'].to_a
40
42
  #=> [255, 0, 0]
41
43
 
42
44
  puts doc['My Colors'].size
43
45
  #=> 2
44
46
  ```
45
47
 
48
+ ## Notes
49
+
50
+ * If the ASE file does not define a palette, and instead simply lists colors, ASE.rb will use `:default` as the palette name.
51
+ * ASE.rb does not support LAB colors yet.
52
+ * Because reading & writing CMYK/LAB colors is dependent on your color profile, the output might be different than what is shown in an Adobe application. Color profile support might be added in the future.
53
+ * Gray and Grey are interchangeable in ASE.rb
54
+
46
55
  ## Contributing
47
56
 
48
57
  1. Fork it
@@ -0,0 +1,7 @@
1
+ require 'pp'
2
+ require './lib/ase'
3
+
4
+ puts "Must specify a file" and exit if ARGV.length == 0
5
+
6
+ doc = ASE.from_file(ARGV[0])
7
+ pp doc
data/lib/ase.rb CHANGED
@@ -1,13 +1,16 @@
1
1
  dir_root = File.dirname(File.absolute_path(__FILE__))
2
2
 
3
3
  require dir_root + "/ase/version"
4
- require dir_root + "/ase/color"
4
+
5
+ require dir_root + "/ase/color_modes/cmyk"
6
+ require dir_root + "/ase/color_modes/gray"
7
+ require dir_root + "/ase/color_modes/rgb"
8
+
5
9
  require dir_root + "/ase/file"
6
10
  require dir_root + "/ase/palette"
7
11
  require dir_root + "/ase/reader"
8
12
  require dir_root + "/ase/writer"
9
13
 
10
-
11
14
  class ASE
12
15
  include Reader
13
16
  include Writer
@@ -2,60 +2,8 @@
2
2
  # given color.
3
3
  class ASE
4
4
  class Color
5
- class << self
6
- def from_rgba(*args)
7
- args = args.first if args.length == 1
8
- self.new *args
9
- end
10
- alias :from_rgb :from_rgba
11
-
12
- def from_hex(hex)
13
- self.new *hex.gsub('#', '').scan(/../).map { |c| c.to_i(16) }
14
- end
5
+ def self.factory(mode, *args)
6
+ const_get(mode.strip).new(*args)
15
7
  end
16
-
17
- attr_accessor :r, :g, :b, :a
18
-
19
- # We always internally store the color as RGBA.
20
- def initialize(r, g, b, a = 255)
21
- @r = r
22
- @g = g
23
- @b = b
24
- @a = a
25
- end
26
-
27
- def to_rgba
28
- [@r, @g, @b, @a]
29
- end
30
-
31
- def to_rgb
32
- [@r, @g, @b]
33
- end
34
-
35
- def to_css
36
- "rgba(#{r}, #{g}, #{b}, #{a})"
37
- end
38
-
39
- def [](i)
40
- [@r, @g, @b, @a][i]
41
- end
42
-
43
- def to_hex(incl_hash=true, incl_alpha=false)
44
- hex = incl_hash ? '#' : ''
45
- colors = [@r, @g, @b]
46
- colors << @a if incl_alpha
47
-
48
- colors.each do |c|
49
- color = c.to_s(16)
50
- if c < 16
51
- hex << "0#{color}"
52
- else
53
- hex << color
54
- end
55
- end
56
-
57
- return hex
58
- end
59
- alias :to_s :to_hex
60
8
  end
61
9
  end
@@ -0,0 +1,44 @@
1
+ require_relative '../color'
2
+
3
+ class ASE
4
+ class Color
5
+ class CMYK
6
+ attr_accessor :c, :m, :y, :k
7
+
8
+ def initialize(c=0, m=0, y=0, k=0)
9
+ @c = c
10
+ @m = m
11
+ @y = y
12
+ @k = k
13
+ end
14
+
15
+ def read!(file)
16
+ @c, @m, @y, @k = 4.times.map do
17
+ file.read(4).unpack('g')[0].round(4)
18
+ end
19
+ end
20
+
21
+ def write!(file)
22
+ file.write 'CMYK'
23
+ to_a.each { |c| file.write [c].pack('g') }
24
+ end
25
+
26
+ def to_rgb
27
+ r = (1 - (@c * (1 - @k) + @k)) * 255
28
+ g = (1 - (@m * (1 - @k) + @k)) * 255
29
+ b = (1 - (@y * (1 - @k) + @k)) * 255
30
+
31
+ # Clamp
32
+ r = [0, r, 255].sort[1].to_i
33
+ g = [0, g, 255].sort[1].to_i
34
+ b = [0, b, 255].sort[1].to_i
35
+
36
+ RGB.new(r, g, b)
37
+ end
38
+
39
+ def to_a
40
+ [@c, @m, @y, @k]
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,38 @@
1
+ require_relative '../color'
2
+
3
+ class ASE
4
+ class Color
5
+ class Gray
6
+ attr_accessor :value
7
+
8
+ def initialize(value=0)
9
+ @value = value
10
+ end
11
+
12
+ def read!(file)
13
+ @value = file.read(4).unpack('g')[0].round(4)
14
+ end
15
+
16
+ def write!(file)
17
+ file.write('Gray')
18
+ to_a.each { |c| file.write [c].pack('g') }
19
+ end
20
+
21
+ def to_rgb
22
+ RGB.new(*([rgb_value] * 3))
23
+ end
24
+
25
+ def to_a
26
+ [@value]
27
+ end
28
+
29
+ private
30
+
31
+ def rgb_value
32
+ (@value * 255).to_i
33
+ end
34
+ end
35
+
36
+ class Grey < Gray; end
37
+ end
38
+ end
@@ -0,0 +1,74 @@
1
+ require_relative '../color'
2
+
3
+ class ASE
4
+ class Color
5
+ class RGB
6
+ attr_accessor :r, :g, :b
7
+
8
+ class << self
9
+ def from_rgba(*args)
10
+ args = args.first if args.length == 1
11
+ self.new *args
12
+ end
13
+ alias :from_rgb :from_rgba
14
+
15
+ def from_hex(hex)
16
+ self.new *hex
17
+ .gsub('#', '')[0...6]
18
+ .scan(/../)
19
+ .map { |c| c.to_i(16) }
20
+ end
21
+ end
22
+
23
+ def initialize(r=0, g=0, b=0)
24
+ @r = r
25
+ @g = g
26
+ @b = b
27
+ end
28
+
29
+ def read!(file)
30
+ @r, @g, @b = 3.times.map do |c|
31
+ (file.read(4).unpack('g')[0] * 255).to_i
32
+ end
33
+ end
34
+
35
+ def write!(file)
36
+ file.write 'RGB '
37
+ to_a.each { |c| file.write [c.to_f / 255].pack('g') }
38
+ end
39
+
40
+ def to_rgb
41
+ self
42
+ end
43
+
44
+ def to_a
45
+ [@r, @g, @b]
46
+ end
47
+
48
+ def to_css
49
+ "rgba(#{r}, #{g}, #{b}, #{255})"
50
+ end
51
+
52
+ def [](i)
53
+ [@r, @g, @b, 255][i]
54
+ end
55
+
56
+ def to_hex(incl_hash=true)
57
+ hex = incl_hash ? '#' : ''
58
+ colors = [@r, @g, @b]
59
+
60
+ colors.each do |c|
61
+ color = c.to_s(16)
62
+ if c < 16
63
+ hex << "0#{color}"
64
+ else
65
+ hex << color
66
+ end
67
+ end
68
+
69
+ return hex
70
+ end
71
+ alias :to_s :to_hex
72
+ end
73
+ end
74
+ end
@@ -1,5 +1,7 @@
1
1
  class ASE
2
2
  class Palette
3
+ include Enumerable
4
+
3
5
  attr_accessor :name, :colors
4
6
 
5
7
  def initialize(name)
@@ -26,6 +28,10 @@ class ASE
26
28
  end
27
29
  alias :size :length
28
30
 
31
+ def each(&block)
32
+ @colors.each(&block)
33
+ end
34
+
29
35
  def method_missing(method, *args, &block)
30
36
  if @colors.has_key?(method.to_s)
31
37
  return @colors[method.to_s]
@@ -30,45 +30,54 @@ class ASE
30
30
 
31
31
  block_count = @file.read_ulong
32
32
 
33
- read_palette until @file.eof?
33
+ @palette = Palette.new(:default)
34
+ read_section until @file.eof?
35
+
36
+ add_palette @palette if @palettes.length == 0
37
+ @palette = nil
34
38
 
35
39
  @file.close
36
40
  end
37
41
 
38
42
  private
39
43
 
40
- def read_palette
44
+ def read_section
41
45
  block_start = @file.read_ushort
42
46
 
47
+ case block_start
48
+ when 0xC001 then start_palette
49
+ when 1 then read_color
50
+ when 0xC002 then end_palette
51
+ end
52
+ end
53
+
54
+ def start_palette
43
55
  title_block_size = @file.read_ulong
44
56
  title = @file.read_string
45
57
 
46
- palette = Palette.new(title)
47
-
48
- # Read the colors
49
- while true
50
- color_start = @file.read_ushort
51
- break if color_start == 0xC002
58
+ @palette = Palette.new(title)
59
+ end
60
+
61
+ def end_palette
62
+ # Group end block
63
+ @file.seek 4, IO::SEEK_CUR
64
+ add_palette @palette
52
65
 
53
- color_size = @file.read_ulong
54
- color_name = @file.read_string
55
- color_mode = @file.read(4)
66
+ @palette = Palette.new(:default)
67
+ end
56
68
 
57
- r, g, b = @file.read(12).scan(/.{1,4}/).map do |c|
58
- (c.reverse.unpack('F')[0] * 255).to_i
59
- end
69
+ def read_color
70
+ color_size = @file.read_ulong
71
+ color_name = @file.read_string
72
+ color_mode = @file.read(4)
60
73
 
61
- palette.add color_name, Color.new(r, g, b)
74
+ color = Color.factory(color_mode)
75
+ color.read!(@file)
62
76
 
63
- # Null byte
64
- @file.seek 2, IO::SEEK_CUR
65
- end
77
+ @palette.add color_name, color
66
78
 
67
- # Group end block
68
- @file.seek 4, IO::SEEK_CUR
69
-
70
- add_palette palette
71
- return true
79
+ # Null byte
80
+ @file.seek 2, IO::SEEK_CUR
72
81
  end
73
82
  end
74
83
  end
@@ -1,3 +1,3 @@
1
1
  class ASE
2
- VERSION = "1.0.3"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -22,41 +22,47 @@ class ASE
22
22
  @file.write_ulong(color_count + (palette_count * 2))
23
23
 
24
24
  @palettes.each do |palette_name, palette|
25
- # Block start
26
- @file.write_ushort 0xC001
25
+ write_palette(palette_name, palette)
26
+ end
27
27
 
28
- # Block length (title is UTF-16 encoded)
29
- @file.write_ulong 4 + (palette_name.length * 2)
28
+ @file.write_ulong 0 # Group end block
29
+ @file.close
30
+ end
30
31
 
31
- # Palette name
32
- @file.write_string palette_name
32
+ private
33
33
 
34
- palette.colors.each do |name, color|
35
- # Color start
36
- @file.write_ushort 1
34
+ def write_palette(name, palette)
35
+ # Block start
36
+ @file.write_ushort 0xC001
37
37
 
38
- # Block length
39
- @file.write_ulong 22 + (name.length * 2)
38
+ # Block length (title is UTF-16 encoded)
39
+ @file.write_ulong 4 + (name.length * 2)
40
40
 
41
- # Color name
42
- @file.write_string name
41
+ # Palette name
42
+ @file.write_string name.to_s
43
43
 
44
- # Color mode
45
- @file.write 'RGB '
44
+ palette.colors.each do |name, color|
45
+ write_color(name, color)
46
+ end
46
47
 
47
- # Colors
48
- rgb = color.to_rgb.map { |c| c.to_f / 255 }
49
- rgb.each { |c| @file.write [c].pack('F').reverse }
50
-
51
- # End of colors
52
- @file.write_null_byte
53
- end
48
+ @file.write_ushort 0xC002 # Group end
49
+ end
54
50
 
55
- @file.write_ushort 0xC002 # Group end
56
- @file.write_ulong 0 # Group end block
57
- end
51
+ def write_color(name, color)
52
+ # Color start
53
+ @file.write_ushort 1
58
54
 
59
- @file.close
55
+ # Block length
56
+ @file.write_ulong 22 + (name.length * 2)
57
+
58
+ # Color name
59
+ @file.write_string name
60
+
61
+ # Color values
62
+ color.write!(@file)
63
+
64
+ # End of color
65
+ @file.write_null_byte
60
66
  end
61
67
  end
62
68
  end
@@ -31,7 +31,7 @@ describe ASE do
31
31
 
32
32
  it "can add and remove colors" do
33
33
  palette = ASE::Palette.new('Test')
34
- color = ASE::Color.new(255, 255, 255)
34
+ color = ASE::Color::RGB.new(255, 255, 255)
35
35
 
36
36
  palette.add 'White', color
37
37
  expect(palette.colors).to eq({
@@ -44,8 +44,8 @@ describe ASE do
44
44
 
45
45
  it '#length returns the number of colors' do
46
46
  palette = ASE::Palette.new('Test')
47
- palette.add 'White', ASE::Color.new(255, 255, 255)
48
- palette.add 'Black', ASE::Color.new(0, 0, 0)
47
+ palette.add 'White', ASE::Color::RGB.new(255, 255, 255)
48
+ palette.add 'Black', ASE::Color::RGB.new(0, 0, 0)
49
49
 
50
50
  expect(palette.length).to be 2
51
51
  expect(palette.size).to be 2
@@ -53,42 +53,10 @@ describe ASE do
53
53
 
54
54
  it '#[] lets you access a specific color' do
55
55
  palette = ASE::Palette.new('Test')
56
- color = ASE::Color.new(255, 255, 255)
56
+ color = ASE::Color::RGB.new(255, 255, 255)
57
57
 
58
58
  palette.add 'White', color
59
59
  expect(palette['White']).to be color
60
60
  end
61
61
  end
62
-
63
- describe ASE::Color do
64
- it 'must be initialized with all RGB channels' do
65
- expect {
66
- ASE::Color.new
67
- }.to raise_error
68
- end
69
-
70
- it 'sets a proper default for the alpha channel' do
71
- color = ASE::Color.new(0, 0, 0)
72
- expect(color.a).to be 255
73
- end
74
-
75
- it 'can be created with an RGB array' do
76
- color1 = ASE::Color.from_rgba [0, 0, 0]
77
- color2 = ASE::Color.from_rgb [0, 0, 0]
78
-
79
- expect(color1.to_rgba).to eq([0, 0, 0, 255])
80
- expect(color2.to_rgba).to eq([0, 0, 0, 255])
81
- end
82
-
83
- it 'can be created from a hex value' do
84
- color1 = ASE::Color.from_hex('#000000')
85
- color2 = ASE::Color.from_hex('000000')
86
- color3 = ASE::Color.from_hex('#00000000')
87
-
88
- rgba = [0, 0, 0, 255]
89
- expect(color1.to_rgba).to eq(rgba)
90
- expect(color2.to_rgba).to eq(rgba)
91
- expect(color3.to_rgba).to eq([0, 0, 0, 0])
92
- end
93
- end
94
62
  end
@@ -0,0 +1,96 @@
1
+ require 'spec_helper'
2
+
3
+ describe ASE::Color do
4
+ it "has a working factory method" do
5
+ expect(ASE::Color).to respond_to(:factory)
6
+ end
7
+
8
+ describe ASE::Color::RGB do
9
+ it "works with the color factory" do
10
+ expect(ASE::Color.factory('RGB')).to be_an_instance_of(ASE::Color::RGB)
11
+ expect(ASE::Color.factory('RGB ')).to be_an_instance_of(ASE::Color::RGB)
12
+ end
13
+
14
+ it 'can be created with an RGB array' do
15
+ color1 = ASE::Color::RGB.from_rgba [0, 0, 0]
16
+ color2 = ASE::Color::RGB.from_rgb [0, 0, 0]
17
+
18
+ expect(color1.to_a).to eq([0, 0, 0])
19
+ expect(color2.to_a).to eq([0, 0, 0])
20
+ end
21
+
22
+ it 'can be created from a hex value' do
23
+ color1 = ASE::Color::RGB.from_hex('#000000')
24
+ color2 = ASE::Color::RGB.from_hex('000000')
25
+ color3 = ASE::Color::RGB.from_hex('#00000000')
26
+
27
+ rgb = [0, 0, 0]
28
+ expect(color1.to_a).to eq(rgb)
29
+ expect(color2.to_a).to eq(rgb)
30
+ expect(color3.to_a).to eq([0, 0, 0])
31
+ end
32
+
33
+ it "returns itself when calling to_rgb" do
34
+ color = ASE::Color::RGB.new(10, 10, 10)
35
+ expect(color.to_rgb).to be color
36
+ end
37
+
38
+ it "can be expressed as an array" do
39
+ color = ASE::Color::RGB.new(10, 10, 10)
40
+ expect(color.to_a).to eq([10, 10, 10])
41
+ end
42
+ end
43
+
44
+ describe ASE::Color::Gray do
45
+ it "works with the color factory" do
46
+ expect(ASE::Color.factory('Gray')).to be_an_instance_of(ASE::Color::Gray)
47
+ expect(ASE::Color.factory('Grey')).to be_an_instance_of(ASE::Color::Grey)
48
+ end
49
+
50
+ it "has a readable value" do
51
+ color = ASE::Color::Gray.new(0.75)
52
+ expect(color.value).to eq(0.75)
53
+ end
54
+
55
+ it "can be expressed as an array" do
56
+ color = ASE::Color::Gray.new(0.75)
57
+ expect(color.to_a).to eq([0.75])
58
+ end
59
+
60
+ it "can be converted to RGB" do
61
+ color = ASE::Color::Gray.new(0.75)
62
+ rgb = color.to_rgb
63
+
64
+ rgb_value = (255 * 0.75).to_i
65
+ expect(rgb).to be_an_instance_of(ASE::Color::RGB)
66
+ expect(rgb.to_a).to eq([rgb_value] * 3)
67
+ end
68
+ end
69
+
70
+ describe ASE::Color::CMYK do
71
+ it "works with the color factory" do
72
+ expect(ASE::Color.factory('CMYK')).to be_an_instance_of(ASE::Color::CMYK)
73
+ end
74
+
75
+ it "has readable values" do
76
+ color = ASE::Color::CMYK.new(0.1, 0.2, 0.3, 0.4)
77
+ expect(color.c).to eq(0.1)
78
+ expect(color.m).to eq(0.2)
79
+ expect(color.y).to eq(0.3)
80
+ expect(color.k).to eq(0.4)
81
+ end
82
+
83
+ it "can be expressed as an array" do
84
+ color = ASE::Color::CMYK.new(0.1, 0.2, 0.3, 0.4)
85
+ expect(color.to_a).to eq([0.1, 0.2, 0.3, 0.4])
86
+ end
87
+
88
+ it "can be converted to RGB" do
89
+ color = ASE::Color::CMYK.new(0.1, 0.2, 0.3, 0.4)
90
+ rgb = color.to_rgb
91
+
92
+ expect(rgb).to be_an_instance_of(ASE::Color::RGB)
93
+ expect(rgb.to_a).to eq([137, 122, 107])
94
+ end
95
+ end
96
+ end
@@ -39,8 +39,8 @@ describe 'Files' do
39
39
 
40
40
  it 'correctly reads the color values' do
41
41
  doc = ASE.from_file('spec/files/control.ase')
42
- expect(doc['Simple']['White'].to_rgb).to eq([255, 255, 255])
43
- expect(doc['Simple']['Black'].to_rgb).to eq([0, 0, 0])
42
+ expect(doc['Simple']['White'].to_a).to eq([255, 255, 255])
43
+ expect(doc['Simple']['Black'].to_a).to eq([0, 0, 0])
44
44
  end
45
45
  end
46
46
 
@@ -49,8 +49,9 @@ describe 'Files' do
49
49
  doc = ASE.new
50
50
 
51
51
  palette = ASE::Palette.new('Test')
52
- palette.add 'Red', ASE::Color.new(255, 0, 0)
53
- palette.add 'Blue', ASE::Color.new(0, 0, 255)
52
+ palette.add 'Red', ASE::Color::RGB.new(255, 0, 0)
53
+ palette.add 'Blue', ASE::Color::CMYK.new(0.91, 0.68, 0.2, 0)
54
+ palette.add 'Blah', ASE::Color::Gray.new(0.5)
54
55
 
55
56
  doc << palette
56
57
 
@@ -73,7 +74,7 @@ describe 'Files' do
73
74
 
74
75
  it 'writes the correct number of colors' do
75
76
  d = ASE.from_file(@output.path)
76
- expect(d['Test'].size).to be 2
77
+ expect(d['Test'].size).to be 3
77
78
  end
78
79
 
79
80
  it 'writes the correct color names' do
@@ -84,8 +85,16 @@ describe 'Files' do
84
85
 
85
86
  it 'writes the correct color values' do
86
87
  d = ASE.from_file(@output.path)
87
- expect(d['Test']['Red'].to_rgb).to eq([255, 0, 0])
88
- expect(d['Test']['Blue'].to_rgb).to eq([0, 0, 255])
88
+ expect(d['Test']['Red'].to_a).to eq([255, 0, 0])
89
+ expect(d['Test']['Blue'].to_a).to eq([0.91, 0.68, 0.2, 0])
90
+ expect(d['Test']['Blah'].to_a).to eq([0.5])
91
+ end
92
+
93
+ it 'writes the correct color types' do
94
+ d = ASE.from_file(@output.path)
95
+ expect(d['Test']['Red']).to be_an_instance_of(ASE::Color::RGB)
96
+ expect(d['Test']['Blue']).to be_an_instance_of(ASE::Color::CMYK)
97
+ expect(d['Test']['Blah']).to be_an_instance_of(ASE::Color::Gray)
89
98
  end
90
99
  end
91
100
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ase
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan LeFevre
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-24 00:00:00.000000000 Z
11
+ date: 2013-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -96,15 +96,20 @@ files:
96
96
  - Rakefile
97
97
  - ase.gemspec
98
98
  - examples/control.php
99
+ - examples/read.rb
99
100
  - examples/simple.rb
100
101
  - lib/ase.rb
101
102
  - lib/ase/color.rb
103
+ - lib/ase/color_modes/cmyk.rb
104
+ - lib/ase/color_modes/gray.rb
105
+ - lib/ase/color_modes/rgb.rb
102
106
  - lib/ase/file.rb
103
107
  - lib/ase/palette.rb
104
108
  - lib/ase/reader.rb
105
109
  - lib/ase/version.rb
106
110
  - lib/ase/writer.rb
107
111
  - spec/ase_spec.rb
112
+ - spec/color_spec.rb
108
113
  - spec/file_spec.rb
109
114
  - spec/files/control.ase
110
115
  - spec/spec_helper.rb
@@ -135,6 +140,7 @@ summary: Reader/writer for Adobe Swatch Exchange files. Can be used across the e
135
140
  Adobe Creative Suite.
136
141
  test_files:
137
142
  - spec/ase_spec.rb
143
+ - spec/color_spec.rb
138
144
  - spec/file_spec.rb
139
145
  - spec/files/control.ase
140
146
  - spec/spec_helper.rb