procreate-swatches 0.1.0

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.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +7 -0
  3. data/.gitignore +16 -0
  4. data/.rspec +2 -0
  5. data/.rubocop.yml +8 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +19 -0
  8. data/.yardopts +5 -0
  9. data/CODE_OF_CONDUCT.md +74 -0
  10. data/Gemfile +6 -0
  11. data/Gemfile.lock +102 -0
  12. data/LICENSE.txt +21 -0
  13. data/README.md +230 -0
  14. data/Rakefile +8 -0
  15. data/bin/console +14 -0
  16. data/bin/setup +8 -0
  17. data/doc/Procreate/Swatches/ColorsHelper.html +693 -0
  18. data/doc/Procreate/Swatches/Errors/InvalidFormat.html +220 -0
  19. data/doc/Procreate/Swatches/Errors/InvalidPath.html +220 -0
  20. data/doc/Procreate/Swatches/Errors.html +128 -0
  21. data/doc/Procreate/Swatches/Exporter.html +754 -0
  22. data/doc/Procreate/Swatches/Parser.html +622 -0
  23. data/doc/Procreate/Swatches/Wrapper.html +1168 -0
  24. data/doc/Procreate/Swatches.html +497 -0
  25. data/doc/Procreate.html +128 -0
  26. data/doc/_index.html +209 -0
  27. data/doc/class_list.html +51 -0
  28. data/doc/css/common.css +1 -0
  29. data/doc/css/full_list.css +58 -0
  30. data/doc/css/style.css +496 -0
  31. data/doc/file.CODE_OF_CONDUCT.html +146 -0
  32. data/doc/file.LICENSE.html +70 -0
  33. data/doc/file.README.html +296 -0
  34. data/doc/file_list.html +66 -0
  35. data/doc/frames.html +17 -0
  36. data/doc/index.html +296 -0
  37. data/doc/js/app.js +292 -0
  38. data/doc/js/full_list.js +216 -0
  39. data/doc/js/jquery.js +4 -0
  40. data/doc/method_list.html +275 -0
  41. data/doc/top-level-namespace.html +110 -0
  42. data/lib/procreate/swatches/colors_helper.rb +83 -0
  43. data/lib/procreate/swatches/errors/invalid_format.rb +19 -0
  44. data/lib/procreate/swatches/errors/invalid_path.rb +16 -0
  45. data/lib/procreate/swatches/exporter.rb +131 -0
  46. data/lib/procreate/swatches/parser.rb +82 -0
  47. data/lib/procreate/swatches/version.rb +8 -0
  48. data/lib/procreate/swatches/wrapper.rb +155 -0
  49. data/lib/procreate/swatches.rb +60 -0
  50. data/procreate-swatches.gemspec +41 -0
  51. metadata +275 -0
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'zip'
4
+
5
+ module Procreate
6
+ module Swatches
7
+ #
8
+ # The class that handles the parsing of a +.swatches+ file to
9
+ # an instance of {Procreate::Swatches::Wrapper}.
10
+ #
11
+ class Parser
12
+ include CallableClass
13
+ include ColorsHelper
14
+
15
+ # @!method self.call
16
+ # Creates a new instance of {Procreate::Swatches::Parser} and calls {#call}
17
+ # Dynamically included by using {https://github.com/laurentzziu/callable_class CallableClass} gem.
18
+
19
+ # @!attribute [r] wrapper
20
+ # @return [Procreate::Swatches::Wrapper]
21
+ attr_reader :wrapper
22
+
23
+ # @!attribute [r] file_path
24
+ # @return [String] The path of the +.swatches+ file
25
+ attr_reader :file_path
26
+
27
+ #
28
+ # Initialize a new instance of {Procreate::Swatches::Parser}
29
+ #
30
+ # @param [String] file_path The path of the +.swatches+ file
31
+ #
32
+ # @raise [Procreate::Swatches::Errors::InvalidPath] Error raised when the provided path is invalid
33
+ # @raise [Procreate::Swatches::Errors::InvalidFormat] Error raised when the provided path contains a file with an invalid format (accepted format: +.swatches+)
34
+ #
35
+ def initialize(file_path)
36
+ @file_path = file_path
37
+
38
+ validate!
39
+ end
40
+
41
+ #
42
+ # Process the provided +.swatches+ file and wrap the content in
43
+ # a {Procreate::Swatches::Wrapper}
44
+ #
45
+ # @return [Procreate::Swatches::Wrapper] A wrapper instance for the +.swatches+ file
46
+ #
47
+ def call
48
+ unzip
49
+ wrap_colors
50
+ end
51
+
52
+ private
53
+
54
+ def unzip
55
+ zip_file = Zip::File.open(@file_path)
56
+ entry = zip_file.glob(SWATCHES_FILE_NAME).first
57
+ raw_content = entry.get_input_stream.read
58
+ @content = JSON.parse(raw_content).first
59
+ end
60
+
61
+ def wrap_colors
62
+ name = @content['name']
63
+ colors = @content['swatches']
64
+
65
+ colors = colors.compact.map do |color|
66
+ string = to_chroma_hsv(color)
67
+ Chroma::Color.new(string)
68
+ end
69
+
70
+ @wrapper = Wrapper.new(name, colors)
71
+ end
72
+
73
+ SWATCHES_FILE_REGEXP = /\.swatches\z/.freeze
74
+
75
+ def validate!
76
+ raise(Errors::InvalidPath) unless file_path.present? && File.exist?(file_path) && File.file?(file_path)
77
+
78
+ raise(Errors::InvalidFormat) unless file_path.match(SWATCHES_FILE_REGEXP).present?
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Procreate
4
+ module Swatches
5
+ # Current gem version
6
+ VERSION = '0.1.0'
7
+ end
8
+ end
@@ -0,0 +1,155 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Procreate
4
+ module Swatches
5
+ #
6
+ # Wrapper class for the name and colors of a +.swatches+ file.
7
+ #
8
+ class Wrapper
9
+ include ColorsHelper
10
+
11
+ # @!attribute name
12
+ # @return [String] Name of the swatches palette
13
+ attr_accessor :name
14
+ # @!attribute [w] colors
15
+ # @return [Array<Chroma::Color, String>] Colors array
16
+ attr_writer :colors
17
+
18
+ # The default name, used in case a custom name is not provided
19
+ DEFAULT_SWATCHES_NAME = 'My beautiful palette'
20
+
21
+ #
22
+ # Initialize a new instance of {Procreate::Swatches::Wrapper}
23
+ #
24
+ # @param [String] name Name of the swatches palette
25
+ # @param [Array<Chroma::Color, String>] colors Colors array. Each color will be converted to a {https://github.com/jfairbank/chroma Chroma::Color} instance.
26
+ #
27
+ def initialize(name, colors)
28
+ @name = name.present? ? name : DEFAULT_SWATCHES_NAME
29
+
30
+ @colors ||= []
31
+ Array(colors).each { |color| add_color(color) }
32
+ end
33
+
34
+ #
35
+ # Add a new color to the colors array.
36
+ # It will be converted to a {https://github.com/jfairbank/chroma Chroma::Color} instance.
37
+ #
38
+ # @param [Chroma::Color, String] color Color in a supported format.
39
+ #
40
+ # @return [Array<Chroma::Color>] The current colors available in the wrapper.
41
+ #
42
+ def <<(color)
43
+ add_color(color)
44
+ end
45
+
46
+ alias push <<
47
+
48
+ #
49
+ # Remove the last color from the colors array.
50
+ #
51
+ # @return [Array<Chroma::Color>] The current colors available in the wrapper.
52
+ #
53
+ def pop
54
+ @colors.pop
55
+ end
56
+
57
+ # Available formats to return the colors as. These types are supported by {https://github.com/jfairbank/chroma Chroma::Color}
58
+ AVAILABLE_COLOR_FORMATS = %i[hsv hsl hex hex8 rgb name].freeze
59
+
60
+ #
61
+ # Returns the list of available color formats a color
62
+ # can be retrieved into.
63
+ #
64
+ # @return [Array<Symbol>] The list of available formats a color can be retrived into.
65
+ #
66
+ def available_color_formats
67
+ AVAILABLE_COLOR_FORMATS
68
+ end
69
+
70
+ #
71
+ # Attribute reader for colors.
72
+ # It supports returning the colors in different formats.
73
+ # If not format is provided, an array of {https://github.com/jfairbank/chroma Chroma::Color}s is returned.
74
+ # If an invalid format is provided, it will fallback to the default format.
75
+ #
76
+ # @param [String, Symbol] format Format to return the colors array in.
77
+ #
78
+ # @return [Array<Chroma::Color>] Return an array of {https://github.com/jfairbank/chroma Chroma::Color} when no format is provided. This is the default option.
79
+ # @return [Array<String>] Return an array of +Strings+, in the specified format.
80
+ #
81
+ def colors(format: nil)
82
+ format = format.to_sym unless format.nil?
83
+ format = nil unless format.in?(AVAILABLE_COLOR_FORMATS)
84
+
85
+ return @colors if format.nil?
86
+
87
+ @colors.map do |color|
88
+ color.send("to_#{format}")
89
+ end
90
+ end
91
+
92
+ #
93
+ # Convert the wrapper to the JSON format needed to create a
94
+ # +.swatches+ file.
95
+ # A maximum of 30 ({Procreate::Swatches::ColorsHelper::SWATCHES_MAX_SIZE}) colors is returned.
96
+ # This is a limitation of Procreate.
97
+ #
98
+ # @return [String] Wrapper content, in JSON format.
99
+ #
100
+ def to_json(*_args)
101
+ [
102
+ {
103
+ name: @name,
104
+ swatches: colors_to_json
105
+ }
106
+ ].to_json
107
+ end
108
+
109
+ alias to_swatches to_json
110
+ alias to_procreate to_json
111
+
112
+ #
113
+ # Export the wrapper to a +.swatches+ file
114
+ #
115
+ # @param [<Type>] options All options suported by {Procreate::Swatches::Exporter#initialize}
116
+ #
117
+ # @return [String] swatches_path Path of the exported +.swatches+ file
118
+ #
119
+ def to_file(options = {})
120
+ Exporter.call(self, options)
121
+ end
122
+
123
+ alias export to_file
124
+
125
+ # @todo Check if the colors array is the same (regardless of order)
126
+ #
127
+ # Wrapper file comparison.
128
+ # It check for the same class, name and colors array
129
+ #
130
+ # @param [Procreate::Swatches::Wrapper] other Another wrapper instance
131
+ #
132
+ # @return [Boolean] The wrappers are equal
133
+ #
134
+ def ==(other)
135
+ other.is_a?(self.class) && name == other.name && colors == other.colors
136
+ end
137
+
138
+ private
139
+
140
+ def add_color(color)
141
+ color = prepare_color_for_push(color)
142
+
143
+ @colors << color unless color.nil?
144
+
145
+ @colors
146
+ end
147
+
148
+ def colors_to_json
149
+ @colors.first(SWATCHES_MAX_SIZE).map do |color|
150
+ to_swatches_json(color)
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'chroma'
4
+ require 'callable_class'
5
+ require 'json'
6
+ require 'active_support/all'
7
+
8
+ require 'procreate/swatches/version'
9
+
10
+ require 'procreate/swatches/errors/invalid_format'
11
+ require 'procreate/swatches/errors/invalid_path'
12
+
13
+ require 'procreate/swatches/colors_helper'
14
+ require 'procreate/swatches/wrapper'
15
+ require 'procreate/swatches/parser'
16
+ require 'procreate/swatches/exporter'
17
+
18
+ # All things {https://procreate.art Procreate} tools.
19
+ module Procreate
20
+ #
21
+ # Interact with +.swatches+ files ({https://procreate.art Procreate}) and manipulate them.
22
+ #
23
+ module Swatches
24
+ # Internal name of the +.swatches+ file.
25
+ # Used for both parsing and exporting +.swatches+ files.
26
+ SWATCHES_FILE_NAME = 'Swatches.json'
27
+ class << self
28
+ #
29
+ # Parse a +.swatches+ file from the provided file path
30
+ #
31
+ # @param [String] file_path A file path to the +.swatches+ file
32
+ #
33
+ # @return [Procreate::Swatches::Wrapper] wrapper A wrapper instance to be further manipulated
34
+ #
35
+ def parse(file_path)
36
+ Parser.call(file_path)
37
+ end
38
+
39
+ #
40
+ # Export an array of colors to a +.swatches+ file, with the possibility to provide a custom palette name.
41
+ #
42
+ # @param [String] name Preferred name for the exported +.swatches+ file palette. Visible instance the Procreate app.
43
+ # @param [Array<String, Chroma::Color>] colors An array of valid color strings or {https://github.com/jfairbank/chroma Chroma::Color} instances
44
+ # @param [Hash] options Options for exporting the wrapper
45
+ # @option options [String] :export_directory ('Dir.pwd') The export directory for the +.swatches+ file
46
+ # @option options [String] :file_name ('Wrapper#name') Custom file name for the exported +.swatches+ file. If none is provided, the +name+ of the +wrapper+ instance is used
47
+ #
48
+ # @return [String] swatches_path Path of the exported +.swatches+ file
49
+ #
50
+ def export(name, colors, options = {})
51
+ wrapper = Wrapper.new(name, colors)
52
+
53
+ Exporter.call(wrapper, options)
54
+ end
55
+
56
+ alias from_file parse
57
+ alias to_file export
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'procreate/swatches/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'procreate-swatches'
9
+ spec.version = Procreate::Swatches::VERSION
10
+ spec.authors = ['Florinel Gorgan']
11
+ spec.email = ['florin@floringorgan.com']
12
+
13
+ spec.summary = 'A gem to interact with Procreate .swatches files.'
14
+ spec.description = 'A gem to interact with Procreate .swatches files.'
15
+ spec.homepage = 'https://github.com/laurentzziu/procreate-swatches'
16
+ spec.license = 'MIT'
17
+
18
+ # Specify which files should be added to the gem when it is released.
19
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
20
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
21
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
22
+ end
23
+ spec.bindir = 'exe'
24
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
+ spec.require_paths = ['lib']
26
+
27
+ spec.add_dependency 'callable_class', '~> 0.1.1'
28
+ spec.add_dependency 'chroma'
29
+ spec.add_dependency 'rubyzip', '>= 1.0.0'
30
+
31
+ spec.add_development_dependency 'activesupport'
32
+ spec.add_development_dependency 'bundler', '~> 2.0'
33
+ spec.add_development_dependency 'pry'
34
+ spec.add_development_dependency 'rake', '~> 10.0'
35
+ spec.add_development_dependency 'rspec', '~> 3.0'
36
+ spec.add_development_dependency 'rubocop'
37
+ spec.add_development_dependency 'rubocop-performance'
38
+ spec.add_development_dependency 'rubocop-rspec'
39
+ spec.add_development_dependency 'simplecov'
40
+ spec.add_development_dependency 'simplecov-console'
41
+ end
metadata ADDED
@@ -0,0 +1,275 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: procreate-swatches
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Florinel Gorgan
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-04-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: callable_class
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.1.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.1.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: chroma
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubyzip
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: activesupport
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
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '10.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '10.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '3.0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '3.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop-performance
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop-rspec
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: simplecov
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: simplecov-console
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ description: A gem to interact with Procreate .swatches files.
196
+ email:
197
+ - florin@floringorgan.com
198
+ executables: []
199
+ extensions: []
200
+ extra_rdoc_files: []
201
+ files:
202
+ - ".codeclimate.yml"
203
+ - ".gitignore"
204
+ - ".rspec"
205
+ - ".rubocop.yml"
206
+ - ".ruby-version"
207
+ - ".travis.yml"
208
+ - ".yardopts"
209
+ - CODE_OF_CONDUCT.md
210
+ - Gemfile
211
+ - Gemfile.lock
212
+ - LICENSE.txt
213
+ - README.md
214
+ - Rakefile
215
+ - bin/console
216
+ - bin/setup
217
+ - doc/Procreate.html
218
+ - doc/Procreate/Swatches.html
219
+ - doc/Procreate/Swatches/ColorsHelper.html
220
+ - doc/Procreate/Swatches/Errors.html
221
+ - doc/Procreate/Swatches/Errors/InvalidFormat.html
222
+ - doc/Procreate/Swatches/Errors/InvalidPath.html
223
+ - doc/Procreate/Swatches/Exporter.html
224
+ - doc/Procreate/Swatches/Parser.html
225
+ - doc/Procreate/Swatches/Wrapper.html
226
+ - doc/_index.html
227
+ - doc/class_list.html
228
+ - doc/css/common.css
229
+ - doc/css/full_list.css
230
+ - doc/css/style.css
231
+ - doc/file.CODE_OF_CONDUCT.html
232
+ - doc/file.LICENSE.html
233
+ - doc/file.README.html
234
+ - doc/file_list.html
235
+ - doc/frames.html
236
+ - doc/index.html
237
+ - doc/js/app.js
238
+ - doc/js/full_list.js
239
+ - doc/js/jquery.js
240
+ - doc/method_list.html
241
+ - doc/top-level-namespace.html
242
+ - lib/procreate/swatches.rb
243
+ - lib/procreate/swatches/colors_helper.rb
244
+ - lib/procreate/swatches/errors/invalid_format.rb
245
+ - lib/procreate/swatches/errors/invalid_path.rb
246
+ - lib/procreate/swatches/exporter.rb
247
+ - lib/procreate/swatches/parser.rb
248
+ - lib/procreate/swatches/version.rb
249
+ - lib/procreate/swatches/wrapper.rb
250
+ - procreate-swatches.gemspec
251
+ homepage: https://github.com/laurentzziu/procreate-swatches
252
+ licenses:
253
+ - MIT
254
+ metadata: {}
255
+ post_install_message:
256
+ rdoc_options: []
257
+ require_paths:
258
+ - lib
259
+ required_ruby_version: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - ">="
262
+ - !ruby/object:Gem::Version
263
+ version: '0'
264
+ required_rubygems_version: !ruby/object:Gem::Requirement
265
+ requirements:
266
+ - - ">="
267
+ - !ruby/object:Gem::Version
268
+ version: '0'
269
+ requirements: []
270
+ rubyforge_project:
271
+ rubygems_version: 2.6.14
272
+ signing_key:
273
+ specification_version: 4
274
+ summary: A gem to interact with Procreate .swatches files.
275
+ test_files: []