acbaker 0.1.2 → 1.0.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +192 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +66 -0
- data/Rakefile +1 -1
- data/acbaker.gemspec +12 -9
- data/bin/acbaker +1 -1
- data/lib/acbaker.rb +1 -2
- data/lib/acbaker/asset_pack.rb +22 -28
- data/lib/acbaker/commands.rb +2 -2
- data/lib/acbaker/commands/pack.rb +33 -45
- data/lib/acbaker/processors.rb +1 -1
- data/lib/acbaker/processors/base.rb +5 -6
- data/lib/acbaker/processors/center.rb +9 -12
- data/lib/acbaker/processors/constraint.rb +2 -4
- data/lib/acbaker/processors/contain.rb +6 -8
- data/lib/acbaker/processors/cover.rb +6 -8
- data/lib/acbaker/version.rb +1 -1
- data/test/test_acbaker.rb +5 -7
- metadata +74 -16
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 97a5d5b5fbe81e5ef885249ef880f328cba55338
|
|
4
|
+
data.tar.gz: 816f604d4a787d92a70590417e514ff98e3042b3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 10009156cb23b208ab566b1bcb55d685e98565c924c3ac97c95ae04670a08b9e607b663c54e1d3870122241c69abff60def0526cac4ef9dc731719a816cf4940
|
|
7
|
+
data.tar.gz: 37a99fe9623f576e947eeb3167970a3d8ece3be150da2a5de0a67d7385f747e892fbb14752bcd69208a3255f195da5e11d0b1cd1ba416843e425ccd94e0a10bc
|
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
Style/SymbolArray:
|
|
2
|
+
Enabled: true
|
|
3
|
+
EnforcedStyle: brackets
|
|
4
|
+
|
|
5
|
+
# kind_of? is a good way to check a type
|
|
6
|
+
Style/ClassCheck:
|
|
7
|
+
EnforcedStyle: kind_of?
|
|
8
|
+
|
|
9
|
+
# It's better to be more explicit about the type
|
|
10
|
+
Style/BracesAroundHashParameters:
|
|
11
|
+
Enabled: false
|
|
12
|
+
|
|
13
|
+
Style/TernaryParentheses:
|
|
14
|
+
Enabled: true
|
|
15
|
+
EnforcedStyle: require_parentheses_when_complex
|
|
16
|
+
|
|
17
|
+
# specs sometimes have useless assignments, which is fine
|
|
18
|
+
Lint/UselessAssignment:
|
|
19
|
+
Exclude:
|
|
20
|
+
- '**/spec/**/*'
|
|
21
|
+
|
|
22
|
+
# We could potentially enable the 2 below:
|
|
23
|
+
Layout/IndentFirstHashElement:
|
|
24
|
+
Enabled: false
|
|
25
|
+
|
|
26
|
+
Layout/AlignHash:
|
|
27
|
+
Enabled: false
|
|
28
|
+
|
|
29
|
+
# HoundCI doesn't like this rule
|
|
30
|
+
Layout/DotPosition:
|
|
31
|
+
Enabled: false
|
|
32
|
+
|
|
33
|
+
# We allow !! as it's an easy way to convert ot boolean
|
|
34
|
+
Style/DoubleNegation:
|
|
35
|
+
Enabled: false
|
|
36
|
+
|
|
37
|
+
Style/NumericPredicate:
|
|
38
|
+
Enabled: false
|
|
39
|
+
|
|
40
|
+
# Sometimes we allow a rescue block that doesn't contain code
|
|
41
|
+
Lint/HandleExceptions:
|
|
42
|
+
Enabled: false
|
|
43
|
+
|
|
44
|
+
Style/RescueStandardError:
|
|
45
|
+
Enabled: false
|
|
46
|
+
|
|
47
|
+
# Cop supports --auto-correct.
|
|
48
|
+
Lint/UnusedBlockArgument:
|
|
49
|
+
Enabled: false
|
|
50
|
+
|
|
51
|
+
# Needed for $verbose
|
|
52
|
+
Style/GlobalVars:
|
|
53
|
+
Enabled: false
|
|
54
|
+
|
|
55
|
+
# We want to allow class Fastlane::Class
|
|
56
|
+
Style/ClassAndModuleChildren:
|
|
57
|
+
Enabled: false
|
|
58
|
+
|
|
59
|
+
# $? Exit
|
|
60
|
+
Style/SpecialGlobalVars:
|
|
61
|
+
Enabled: false
|
|
62
|
+
|
|
63
|
+
Metrics/AbcSize:
|
|
64
|
+
Enabled: false
|
|
65
|
+
|
|
66
|
+
Metrics/MethodLength:
|
|
67
|
+
Enabled: false
|
|
68
|
+
|
|
69
|
+
Metrics/ModuleLength:
|
|
70
|
+
Enabled: true
|
|
71
|
+
Max: 110
|
|
72
|
+
|
|
73
|
+
Metrics/CyclomaticComplexity:
|
|
74
|
+
Enabled: false
|
|
75
|
+
|
|
76
|
+
Metrics/BlockNesting:
|
|
77
|
+
Max: 5
|
|
78
|
+
|
|
79
|
+
Metrics/BlockLength:
|
|
80
|
+
Enabled: false
|
|
81
|
+
|
|
82
|
+
# The %w might be confusing for new users
|
|
83
|
+
Style/WordArray:
|
|
84
|
+
MinSize: 19
|
|
85
|
+
|
|
86
|
+
# raise and fail are both okay
|
|
87
|
+
Style/SignalException:
|
|
88
|
+
Enabled: false
|
|
89
|
+
|
|
90
|
+
# Better too much 'return' than one missing
|
|
91
|
+
Style/RedundantReturn:
|
|
92
|
+
Enabled: false
|
|
93
|
+
|
|
94
|
+
# Having if in the same line might not always be good
|
|
95
|
+
Style/IfUnlessModifier:
|
|
96
|
+
Enabled: false
|
|
97
|
+
|
|
98
|
+
# and and or is okay
|
|
99
|
+
Style/AndOr:
|
|
100
|
+
Enabled: false
|
|
101
|
+
|
|
102
|
+
# Configuration parameters: CountComments.
|
|
103
|
+
Metrics/ClassLength:
|
|
104
|
+
Max: 400
|
|
105
|
+
|
|
106
|
+
# Configuration parameters: AllowURI, URISchemes.
|
|
107
|
+
Metrics/LineLength:
|
|
108
|
+
Enabled: false
|
|
109
|
+
Max: 370
|
|
110
|
+
|
|
111
|
+
# Configuration parameters: CountKeywordArgs.
|
|
112
|
+
Metrics/ParameterLists:
|
|
113
|
+
Max: 17
|
|
114
|
+
|
|
115
|
+
Metrics/PerceivedComplexity:
|
|
116
|
+
Max: 25
|
|
117
|
+
|
|
118
|
+
# Sometimes it's easier to read without guards
|
|
119
|
+
Style/GuardClause:
|
|
120
|
+
Enabled: false
|
|
121
|
+
|
|
122
|
+
# We allow both " and '
|
|
123
|
+
Style/StringLiterals:
|
|
124
|
+
Enabled: false
|
|
125
|
+
|
|
126
|
+
# something = if something_else
|
|
127
|
+
# that's confusing
|
|
128
|
+
Style/ConditionalAssignment:
|
|
129
|
+
Enabled: false
|
|
130
|
+
|
|
131
|
+
# Better to have too much self than missing a self
|
|
132
|
+
Style/RedundantSelf:
|
|
133
|
+
Enabled: false
|
|
134
|
+
|
|
135
|
+
# e.g.
|
|
136
|
+
# def self.is_supported?(platform)
|
|
137
|
+
# we may never use `platform`
|
|
138
|
+
Lint/UnusedMethodArgument:
|
|
139
|
+
Enabled: false
|
|
140
|
+
|
|
141
|
+
# the let(:key) { ... }
|
|
142
|
+
Lint/ParenthesesAsGroupedExpression:
|
|
143
|
+
Exclude:
|
|
144
|
+
- '**/spec/**/*'
|
|
145
|
+
|
|
146
|
+
# This would reject is_ in front of methods
|
|
147
|
+
# We use `is_supported?` everywhere already
|
|
148
|
+
Naming/PredicateName:
|
|
149
|
+
Enabled: false
|
|
150
|
+
|
|
151
|
+
# We allow the $
|
|
152
|
+
Style/PerlBackrefs:
|
|
153
|
+
Enabled: false
|
|
154
|
+
|
|
155
|
+
# Disable '+ should be surrounded with a single space' for xcodebuild_spec.rb
|
|
156
|
+
Layout/SpaceAroundOperators:
|
|
157
|
+
Exclude:
|
|
158
|
+
- '**/spec/actions_specs/xcodebuild_spec.rb'
|
|
159
|
+
|
|
160
|
+
# We're not there yet
|
|
161
|
+
Style/Documentation:
|
|
162
|
+
Enabled: false
|
|
163
|
+
|
|
164
|
+
# Added after upgrade to 0.38.0
|
|
165
|
+
Style/MutableConstant:
|
|
166
|
+
Enabled: false
|
|
167
|
+
|
|
168
|
+
# length > 0 is good
|
|
169
|
+
Style/ZeroLengthPredicate:
|
|
170
|
+
Enabled: false
|
|
171
|
+
|
|
172
|
+
# Adds complexity
|
|
173
|
+
Style/IfInsideElse:
|
|
174
|
+
Enabled: false
|
|
175
|
+
|
|
176
|
+
Style/RescueModifier:
|
|
177
|
+
Enabled: false
|
|
178
|
+
|
|
179
|
+
Naming/VariableNumber:
|
|
180
|
+
Enabled: false
|
|
181
|
+
|
|
182
|
+
Style/ClassVars:
|
|
183
|
+
Enabled: false
|
|
184
|
+
|
|
185
|
+
Style/FrozenStringLiteralComment:
|
|
186
|
+
Enabled: false
|
|
187
|
+
|
|
188
|
+
AllCops:
|
|
189
|
+
TargetRubyVersion: "2.3.3"
|
|
190
|
+
Exclude:
|
|
191
|
+
- './tmp/**/*'
|
|
192
|
+
- './Gemfile'
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
acbaker (1.0.0)
|
|
5
|
+
commander (~> 4.4)
|
|
6
|
+
json (~> 2.2)
|
|
7
|
+
rmagick (~> 3.1, >= 3.1.0)
|
|
8
|
+
|
|
9
|
+
GEM
|
|
10
|
+
remote: http://rubygems.org/
|
|
11
|
+
specs:
|
|
12
|
+
ast (2.4.0)
|
|
13
|
+
coderay (1.1.2)
|
|
14
|
+
commander (4.4.7)
|
|
15
|
+
highline (~> 2.0.0)
|
|
16
|
+
diff-lcs (1.3)
|
|
17
|
+
highline (2.0.2)
|
|
18
|
+
jaro_winkler (1.5.2)
|
|
19
|
+
json (2.2.0)
|
|
20
|
+
method_source (0.9.2)
|
|
21
|
+
minitest (5.11.3)
|
|
22
|
+
parallel (1.17.0)
|
|
23
|
+
parser (2.6.3.0)
|
|
24
|
+
ast (~> 2.4.0)
|
|
25
|
+
pry (0.12.2)
|
|
26
|
+
coderay (~> 1.1.0)
|
|
27
|
+
method_source (~> 0.9.0)
|
|
28
|
+
rainbow (3.0.0)
|
|
29
|
+
rake (12.3.2)
|
|
30
|
+
rmagick (3.1.0)
|
|
31
|
+
rspec (3.8.0)
|
|
32
|
+
rspec-core (~> 3.8.0)
|
|
33
|
+
rspec-expectations (~> 3.8.0)
|
|
34
|
+
rspec-mocks (~> 3.8.0)
|
|
35
|
+
rspec-core (3.8.0)
|
|
36
|
+
rspec-support (~> 3.8.0)
|
|
37
|
+
rspec-expectations (3.8.3)
|
|
38
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
39
|
+
rspec-support (~> 3.8.0)
|
|
40
|
+
rspec-mocks (3.8.0)
|
|
41
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
42
|
+
rspec-support (~> 3.8.0)
|
|
43
|
+
rspec-support (3.8.0)
|
|
44
|
+
rubocop (0.69.0)
|
|
45
|
+
jaro_winkler (~> 1.5.1)
|
|
46
|
+
parallel (~> 1.10)
|
|
47
|
+
parser (>= 2.6)
|
|
48
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
49
|
+
ruby-progressbar (~> 1.7)
|
|
50
|
+
unicode-display_width (>= 1.4.0, < 1.7)
|
|
51
|
+
ruby-progressbar (1.10.0)
|
|
52
|
+
unicode-display_width (1.6.0)
|
|
53
|
+
|
|
54
|
+
PLATFORMS
|
|
55
|
+
ruby
|
|
56
|
+
|
|
57
|
+
DEPENDENCIES
|
|
58
|
+
acbaker!
|
|
59
|
+
minitest (~> 5.11)
|
|
60
|
+
pry (~> 0.12)
|
|
61
|
+
rake (~> 12.0)
|
|
62
|
+
rspec (~> 3.8)
|
|
63
|
+
rubocop (~> 0.69)
|
|
64
|
+
|
|
65
|
+
BUNDLED WITH
|
|
66
|
+
1.16.3
|
data/Rakefile
CHANGED
data/acbaker.gemspec
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
|
1
|
+
lib = File.expand_path("lib", __dir__)
|
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
-
require
|
|
3
|
+
require "acbaker/version"
|
|
5
4
|
|
|
6
5
|
Gem::Specification.new do |s|
|
|
7
6
|
s.name = "acbaker"
|
|
@@ -13,12 +12,16 @@ Gem::Specification.new do |s|
|
|
|
13
12
|
s.homepage = "http://www.magloft.com"
|
|
14
13
|
s.summary = "Convert any source images into xcode asset catalogs."
|
|
15
14
|
s.description = "This gem allows easy conversion and management of xcode asset catalogs."
|
|
16
|
-
s.required_rubygems_version =
|
|
17
|
-
s.add_dependency "commander",
|
|
18
|
-
s.add_dependency
|
|
19
|
-
s.add_dependency
|
|
20
|
-
s.add_development_dependency "
|
|
15
|
+
s.required_rubygems_version = "~> 2.4"
|
|
16
|
+
s.add_dependency "commander", "~> 4.4"
|
|
17
|
+
s.add_dependency "json", "~> 2.2"
|
|
18
|
+
s.add_dependency "rmagick", "~> 3.1", ">= 3.1.0"
|
|
19
|
+
s.add_development_dependency "minitest", "~> 5.11"
|
|
20
|
+
s.add_development_dependency "pry", "~> 0.12"
|
|
21
|
+
s.add_development_dependency "rake", "~> 12.0"
|
|
22
|
+
s.add_development_dependency "rspec", "~> 3.8"
|
|
23
|
+
s.add_development_dependency "rubocop", "~> 0.69"
|
|
21
24
|
s.files = `git ls-files`.split("\n")
|
|
22
25
|
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
|
23
|
-
s.require_path =
|
|
26
|
+
s.require_path = "lib"
|
|
24
27
|
end
|
data/bin/acbaker
CHANGED
data/lib/acbaker.rb
CHANGED
data/lib/acbaker/asset_pack.rb
CHANGED
|
@@ -4,44 +4,42 @@ require 'rmagick'
|
|
|
4
4
|
module Acbaker
|
|
5
5
|
class AssetPack
|
|
6
6
|
attr_reader :type, :images, :processors
|
|
7
|
-
|
|
8
|
-
def initialize(type, options={})
|
|
7
|
+
|
|
8
|
+
def initialize(type, options = {})
|
|
9
9
|
@type = type
|
|
10
10
|
@processors = []
|
|
11
11
|
if options[:json]
|
|
12
12
|
@json_data = options[:json]
|
|
13
13
|
else
|
|
14
|
-
@json_file = File.join(File.dirname(File.expand_path(__FILE__)), "config", "#{type
|
|
14
|
+
@json_file = File.join(File.dirname(File.expand_path(__FILE__)), "config", "#{type}.json")
|
|
15
15
|
@json_data = JSON.parse(File.open(@json_file).read)
|
|
16
16
|
end
|
|
17
17
|
@images = @json_data['images']
|
|
18
|
-
@options = self.defaults
|
|
18
|
+
@options = self.defaults.merge(options)
|
|
19
19
|
end
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
def defaults
|
|
22
|
-
{json: false, gravity: 'Center', strategy: 'Cover'}
|
|
22
|
+
{ json: false, gravity: 'Center', strategy: 'Cover' }
|
|
23
23
|
end
|
|
24
|
-
|
|
24
|
+
|
|
25
25
|
def process(source_image_file, target_directory, &block)
|
|
26
|
-
|
|
27
26
|
# Define variables
|
|
28
27
|
json_output_file = File.join(target_directory, "Contents.json")
|
|
29
|
-
|
|
28
|
+
|
|
30
29
|
# Get processors
|
|
31
|
-
if @json_data['processors']
|
|
30
|
+
if @json_data['processors']&.length
|
|
32
31
|
@json_data['processors'].each do |processor_spec|
|
|
33
32
|
@processors.push(Object.const_get(processor_spec['type']).new(self, processor_spec['config']))
|
|
34
33
|
end
|
|
35
34
|
else
|
|
36
35
|
@processors = [Object.const_get("Acbaker::Processors::#{@options[:strategy]}").new(self)]
|
|
37
36
|
end
|
|
38
|
-
|
|
37
|
+
|
|
39
38
|
# Loop through images
|
|
40
39
|
@json_data['images'].each_with_index.map do |image_spec, index|
|
|
41
|
-
|
|
42
40
|
image_size_present = image_spec['size']
|
|
43
41
|
image = Magick::ImageList.new(source_image_file)
|
|
44
|
-
image_spec['size'] = "#{image.columns
|
|
42
|
+
image_spec['size'] = "#{image.columns}x#{image.rows}" unless image_size_present
|
|
45
43
|
|
|
46
44
|
# Get size
|
|
47
45
|
scale = image_spec['scale'].gsub('x', '').to_i
|
|
@@ -53,9 +51,6 @@ module Acbaker
|
|
|
53
51
|
width = image.columns
|
|
54
52
|
height = image.rows
|
|
55
53
|
end
|
|
56
|
-
size_max = [width, height].max
|
|
57
|
-
base_width = width / scale
|
|
58
|
-
base_height = height / scale
|
|
59
54
|
|
|
60
55
|
# Get version
|
|
61
56
|
if image_spec['minimum-system-version'].nil?
|
|
@@ -67,12 +62,12 @@ module Acbaker
|
|
|
67
62
|
else
|
|
68
63
|
version = 'ios56'
|
|
69
64
|
end
|
|
70
|
-
|
|
65
|
+
|
|
71
66
|
# process image
|
|
72
67
|
@processors.each do |processor|
|
|
73
68
|
image = processor.run(image, image_spec, width, height)
|
|
74
69
|
end
|
|
75
|
-
|
|
70
|
+
|
|
76
71
|
# Generate filename
|
|
77
72
|
if image_spec["filename"]
|
|
78
73
|
filename = image_spec["filename"]
|
|
@@ -82,7 +77,7 @@ module Acbaker
|
|
|
82
77
|
filename_array.push(image_spec['idiom']) if image_spec['idiom']
|
|
83
78
|
filename_array.push(image_spec['orientation']) if image_spec['orientation']
|
|
84
79
|
filename_array.push(version)
|
|
85
|
-
|
|
80
|
+
|
|
86
81
|
# Add subtype
|
|
87
82
|
if image_spec['subtype']
|
|
88
83
|
if image_spec['subtype'] == '736h'
|
|
@@ -93,13 +88,13 @@ module Acbaker
|
|
|
93
88
|
filename_array.push(image_spec['subtype'])
|
|
94
89
|
end
|
|
95
90
|
end
|
|
96
|
-
|
|
91
|
+
|
|
97
92
|
# Add extent
|
|
98
93
|
filename_array.push(image_spec['extent']) if image_spec['extent']
|
|
99
|
-
|
|
94
|
+
|
|
100
95
|
# Add size
|
|
101
96
|
filename_array.push(image_spec['size'])
|
|
102
|
-
|
|
97
|
+
|
|
103
98
|
if scale > 1
|
|
104
99
|
filename = "#{filename_array.join('-')}@#{scale}x.png"
|
|
105
100
|
else
|
|
@@ -109,22 +104,21 @@ module Acbaker
|
|
|
109
104
|
|
|
110
105
|
# save image
|
|
111
106
|
image.write("#{target_directory}/#{filename}")
|
|
112
|
-
|
|
107
|
+
|
|
113
108
|
# Trigger Callback proc
|
|
114
|
-
block
|
|
115
|
-
|
|
109
|
+
block&.call("#{target_directory}/#{filename}", index + 1)
|
|
110
|
+
|
|
116
111
|
# Update json data
|
|
117
112
|
image_spec['filename'] = filename
|
|
118
113
|
end
|
|
119
114
|
|
|
120
115
|
# Save Contents.json
|
|
121
116
|
@json_data.delete('processors')
|
|
122
|
-
File.open(json_output_file,"w") do |f|
|
|
117
|
+
File.open(json_output_file, "w") do |f|
|
|
123
118
|
f.write(JSON.pretty_generate(@json_data))
|
|
124
119
|
end
|
|
125
|
-
|
|
120
|
+
|
|
126
121
|
true
|
|
127
122
|
end
|
|
128
|
-
|
|
129
123
|
end
|
|
130
124
|
end
|
data/lib/acbaker/commands.rb
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
$:.push File.expand_path(
|
|
2
|
-
require 'commands/pack'
|
|
1
|
+
$:.push File.expand_path(__dir__)
|
|
2
|
+
require 'commands/pack'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
command :
|
|
1
|
+
command :pack do |c|
|
|
2
2
|
c.syntax = "acbaker pack [image] [output directory]"
|
|
3
3
|
c.summary = "Convert an image into a xcode asset catalogs"
|
|
4
4
|
c.description = "The type will be autodetected by filename, and can be overwritten using the --type option"
|
|
@@ -10,7 +10,6 @@ command :'pack' do |c|
|
|
|
10
10
|
global_option '--force'
|
|
11
11
|
|
|
12
12
|
c.action do |args, options|
|
|
13
|
-
|
|
14
13
|
# Prepare arguments
|
|
15
14
|
@image = args[0]
|
|
16
15
|
@output_directory = args[1]
|
|
@@ -19,7 +18,7 @@ command :'pack' do |c|
|
|
|
19
18
|
@gravity = options.gravity
|
|
20
19
|
@strategy = options.strategy
|
|
21
20
|
@force = options.force
|
|
22
|
-
|
|
21
|
+
|
|
23
22
|
# Validate
|
|
24
23
|
validate_image_magick!
|
|
25
24
|
validate_image!
|
|
@@ -27,7 +26,7 @@ command :'pack' do |c|
|
|
|
27
26
|
validate_type!
|
|
28
27
|
validate_gravity!
|
|
29
28
|
validate_strategy!
|
|
30
|
-
|
|
29
|
+
|
|
31
30
|
validate_output_directory!
|
|
32
31
|
|
|
33
32
|
# Initialize packer
|
|
@@ -36,8 +35,8 @@ command :'pack' do |c|
|
|
|
36
35
|
gravity: @gravity,
|
|
37
36
|
strategy: @strategy
|
|
38
37
|
})
|
|
39
|
-
|
|
40
|
-
# Pack assets
|
|
38
|
+
|
|
39
|
+
# Pack assets
|
|
41
40
|
bar = ProgressBar.new(asset_pack.images.size)
|
|
42
41
|
bar.show
|
|
43
42
|
asset_pack.process(@image, @output_directory) do |path, progress|
|
|
@@ -45,7 +44,6 @@ command :'pack' do |c|
|
|
|
45
44
|
end
|
|
46
45
|
|
|
47
46
|
say_ok 'Your assets were successfully packed!'
|
|
48
|
-
|
|
49
47
|
end
|
|
50
48
|
|
|
51
49
|
private
|
|
@@ -55,17 +53,15 @@ command :'pack' do |c|
|
|
|
55
53
|
end
|
|
56
54
|
|
|
57
55
|
def validate_image!
|
|
58
|
-
|
|
59
56
|
# validate image is set
|
|
60
57
|
abort("Error: no image specified.") if @image.nil?
|
|
61
|
-
|
|
58
|
+
|
|
62
59
|
# validate image exists
|
|
63
|
-
abort("Error: can't find the image you specified. #{@image}") unless File.exist?(@image) and File.file?(@image)
|
|
64
|
-
|
|
60
|
+
abort("Error: can't find the image you specified. #{@image}") unless File.exist?(@image) and File.file?(@image)
|
|
65
61
|
end
|
|
66
|
-
|
|
62
|
+
|
|
67
63
|
def validate_type!
|
|
68
|
-
|
|
64
|
+
unless @type
|
|
69
65
|
# Detect from image
|
|
70
66
|
token = @image.split('/')[-1].split('.')[0].downcase.to_sym
|
|
71
67
|
@type = {
|
|
@@ -75,8 +71,8 @@ command :'pack' do |c|
|
|
|
75
71
|
launch: :LaunchImage
|
|
76
72
|
}[token]
|
|
77
73
|
end
|
|
78
|
-
|
|
79
|
-
if
|
|
74
|
+
|
|
75
|
+
if !@type and @output_directory
|
|
80
76
|
# Detect from directory
|
|
81
77
|
token = @output_directory.gsub('.', '').downcase.to_sym
|
|
82
78
|
@type = {
|
|
@@ -86,71 +82,63 @@ command :'pack' do |c|
|
|
|
86
82
|
launchimage: :LaunchImage
|
|
87
83
|
}[token]
|
|
88
84
|
end
|
|
89
|
-
|
|
85
|
+
|
|
90
86
|
# Fill json
|
|
91
|
-
if @type and
|
|
87
|
+
if @type and !@json
|
|
92
88
|
if File.file?("lib/acbaker/config/#{@type}.json")
|
|
93
89
|
@json = "lib/acbaker/config/#{@type}.json"
|
|
94
90
|
end
|
|
95
91
|
end
|
|
96
|
-
|
|
97
|
-
abort "error: no JSON configuration found"
|
|
98
|
-
abort("error: Could not detect asset type.")
|
|
92
|
+
|
|
93
|
+
abort "error: no JSON configuration found" unless @json
|
|
94
|
+
abort("error: Could not detect asset type.") unless @type
|
|
99
95
|
end
|
|
100
|
-
|
|
96
|
+
|
|
101
97
|
def validate_gravity!
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
end
|
|
105
|
-
abort("error: Invalid gravity specified.") if not ["NorthWest", "North", "NorthEast", "West", "Center", "East", "SouthWest", "South", "SouthEast"].include?(@gravity)
|
|
98
|
+
@gravity ||= "Center"
|
|
99
|
+
abort("error: Invalid gravity specified.") unless ["NorthWest", "North", "NorthEast", "West", "Center", "East", "SouthWest", "South", "SouthEast"].include?(@gravity)
|
|
106
100
|
end
|
|
107
101
|
|
|
108
102
|
def validate_strategy!
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
end
|
|
112
|
-
|
|
103
|
+
@strategy ||= "Cover"
|
|
104
|
+
|
|
113
105
|
# try to instantiate strategy class
|
|
114
106
|
begin
|
|
115
107
|
Object.const_get("Acbaker::Processors::#{@strategy}")
|
|
116
|
-
rescue
|
|
108
|
+
rescue StandardError
|
|
117
109
|
abort("error: Invalid strategy specified.")
|
|
118
110
|
end
|
|
119
111
|
end
|
|
120
112
|
|
|
121
|
-
|
|
122
113
|
def validate_json!
|
|
123
114
|
if @json
|
|
124
|
-
abort("error: JSON file not found.") if
|
|
115
|
+
abort("error: JSON file not found.") if !File.exist?(@json) or !File.file?(@json)
|
|
125
116
|
begin
|
|
126
117
|
JSON.parse(File.open(@json).read)
|
|
127
|
-
rescue
|
|
118
|
+
rescue StandardError
|
|
128
119
|
abort("error: invalid JSON file: #{@json}")
|
|
129
120
|
end
|
|
130
|
-
@type
|
|
121
|
+
@type ||= :Custom
|
|
131
122
|
end
|
|
132
123
|
end
|
|
133
124
|
|
|
134
125
|
def validate_output_directory!
|
|
135
|
-
|
|
136
|
-
@output_directory = {
|
|
126
|
+
@output_directory ||= {
|
|
137
127
|
AppIcon: "AppIcon.appiconset",
|
|
138
128
|
LaunchImage: "LaunchImage.launchimage"
|
|
139
129
|
}[@type]
|
|
140
|
-
end
|
|
141
130
|
|
|
142
131
|
# Create custom output directory if type is set
|
|
143
|
-
@output_directory = "#{@type}.imageset"
|
|
144
|
-
|
|
132
|
+
@output_directory = "#{@type}.imageset" if !@output_directory and @type
|
|
133
|
+
|
|
145
134
|
abort("Error: No output directory specified or detected.") if @output_directory.nil?
|
|
146
|
-
parent_directory = File.expand_path(@output_directory).split("/")[0..-2].join("/")
|
|
147
|
-
abort("Error: Parent directory '#{parent_directory}' does not exist.") unless File.exist?(parent_directory) and File.directory?(parent_directory)
|
|
148
|
-
|
|
135
|
+
parent_directory = File.expand_path(@output_directory).split("/")[0..-2].join("/")
|
|
136
|
+
abort("Error: Parent directory '#{parent_directory}' does not exist.") unless File.exist?(parent_directory) and File.directory?(parent_directory)
|
|
137
|
+
|
|
149
138
|
# Prepare output directory
|
|
150
139
|
if @force
|
|
151
140
|
FileUtils.rm_rf(@output_directory) if File.directory?(@output_directory)
|
|
152
141
|
end
|
|
153
|
-
FileUtils.mkdir(@output_directory)
|
|
142
|
+
FileUtils.mkdir(@output_directory) unless File.directory?(@output_directory)
|
|
154
143
|
end
|
|
155
|
-
|
|
156
|
-
end
|
|
144
|
+
end
|
data/lib/acbaker/processors.rb
CHANGED
|
@@ -2,20 +2,19 @@ module Acbaker
|
|
|
2
2
|
module Processors
|
|
3
3
|
class Base
|
|
4
4
|
attr_accessor :asset_pack, :options
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
def defaults
|
|
7
7
|
{}
|
|
8
8
|
end
|
|
9
|
-
|
|
10
|
-
def initialize(asset_pack, options={})
|
|
9
|
+
|
|
10
|
+
def initialize(asset_pack, options = {})
|
|
11
11
|
@asset_pack = asset_pack
|
|
12
12
|
@options = options ? defaults.merge(options) : defaults
|
|
13
13
|
end
|
|
14
|
-
|
|
15
|
-
def run(image, image_spec, width=nil, height=nil)
|
|
14
|
+
|
|
15
|
+
def run(image, image_spec, width = nil, height = nil)
|
|
16
16
|
throw "Acbaker::Processors::Base should be extended"
|
|
17
17
|
end
|
|
18
|
-
|
|
19
18
|
end
|
|
20
19
|
end
|
|
21
20
|
end
|
|
@@ -3,31 +3,29 @@ require 'pry'
|
|
|
3
3
|
module Acbaker
|
|
4
4
|
module Processors
|
|
5
5
|
class Center < Base
|
|
6
|
-
|
|
7
6
|
def defaults
|
|
8
|
-
{"max-width" => "50%", "background-color" => "#FFFFFF", "gravity" => "Center"}
|
|
7
|
+
{ "max-width" => "50%", "background-color" => "#FFFFFF", "gravity" => "Center" }
|
|
9
8
|
end
|
|
10
|
-
|
|
11
|
-
def run(image, image_spec, width=nil, height=nil)
|
|
9
|
+
|
|
10
|
+
def run(image, image_spec, width = nil, height = nil)
|
|
12
11
|
transform_width = width.to_f
|
|
13
12
|
transform_height = height.to_f
|
|
14
|
-
target_ratio = transform_width / transform_height
|
|
15
13
|
image_ratio = image.rows.to_f / image.columns.to_f
|
|
16
|
-
|
|
14
|
+
|
|
17
15
|
# calculate dimensions
|
|
18
16
|
if @options['max-width']
|
|
19
17
|
if @options['max-width'][-1] == "%"
|
|
20
18
|
rel_width = (@options['max-width'][0..-2].to_f / 100)
|
|
21
|
-
transform_width
|
|
19
|
+
transform_width *= rel_width
|
|
22
20
|
else
|
|
23
21
|
transform_width = @options['max-width'].to_f
|
|
24
22
|
end
|
|
25
23
|
transform_height = transform_width * image_ratio
|
|
26
24
|
end
|
|
27
|
-
|
|
25
|
+
|
|
28
26
|
# resize image
|
|
29
27
|
image.resize!(transform_width.to_i, transform_height.to_i)
|
|
30
|
-
|
|
28
|
+
|
|
31
29
|
# create canvas
|
|
32
30
|
canvas = Magick::Image.new(width, height)
|
|
33
31
|
if @options['background-color'] == :transparent
|
|
@@ -35,13 +33,12 @@ module Acbaker
|
|
|
35
33
|
else
|
|
36
34
|
canvas = canvas.color_floodfill(1, 1, Magick::Pixel.from_color(@options['background-color']))
|
|
37
35
|
end
|
|
38
|
-
|
|
36
|
+
|
|
39
37
|
# place image
|
|
40
38
|
image = canvas.composite(image, Magick::CenterGravity, Magick::OverCompositeOp)
|
|
41
|
-
|
|
39
|
+
|
|
42
40
|
image
|
|
43
41
|
end
|
|
44
|
-
|
|
45
42
|
end
|
|
46
43
|
end
|
|
47
44
|
end
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
module Acbaker
|
|
2
2
|
module Processors
|
|
3
3
|
class Constraint < Base
|
|
4
|
-
|
|
5
|
-
def run(image, image_spec, width=nil, height=nil)
|
|
4
|
+
def run(image, image_spec, width = nil, height = nil)
|
|
6
5
|
# resize image
|
|
7
6
|
image.change_geometry("#{width}x#{height}") do |px, py, i|
|
|
8
7
|
image.resize!(px, py)
|
|
9
8
|
image_spec['size'] = "#{px}x#{py}"
|
|
10
9
|
end
|
|
11
|
-
|
|
10
|
+
|
|
12
11
|
image
|
|
13
12
|
end
|
|
14
|
-
|
|
15
13
|
end
|
|
16
14
|
end
|
|
17
15
|
end
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
module Acbaker
|
|
2
2
|
module Processors
|
|
3
3
|
class Contain < Base
|
|
4
|
-
|
|
5
4
|
def defaults
|
|
6
|
-
{"background-color" => "#FFFFFF", "gravity" => "Center"}
|
|
5
|
+
{ "background-color" => "#FFFFFF", "gravity" => "Center" }
|
|
7
6
|
end
|
|
8
|
-
|
|
9
|
-
def run(image, image_spec, width=nil, height=nil)
|
|
7
|
+
|
|
8
|
+
def run(image, image_spec, width = nil, height = nil)
|
|
10
9
|
# resize image
|
|
11
10
|
image.change_geometry("#{width}x#{height}") do |px, py, i|
|
|
12
11
|
image.resize!(px, py)
|
|
13
12
|
end
|
|
14
|
-
|
|
13
|
+
|
|
15
14
|
# crop image
|
|
16
15
|
canvas = Magick::Image.new(width, height)
|
|
17
16
|
if @options['background-color'] == :transparent
|
|
@@ -19,15 +18,14 @@ module Acbaker
|
|
|
19
18
|
else
|
|
20
19
|
canvas = canvas.color_floodfill(1, 1, Magick::Pixel.from_color(@options['background-color']))
|
|
21
20
|
end
|
|
22
|
-
|
|
21
|
+
|
|
23
22
|
# place image
|
|
24
23
|
gravity_string = "Magick::#{@options['gravity']}Gravity"
|
|
25
24
|
gravity = Object.const_get(gravity_string)
|
|
26
25
|
image = canvas.composite(image, gravity, Magick::OverCompositeOp)
|
|
27
|
-
|
|
26
|
+
|
|
28
27
|
image
|
|
29
28
|
end
|
|
30
|
-
|
|
31
29
|
end
|
|
32
30
|
end
|
|
33
31
|
end
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
module Acbaker
|
|
2
2
|
module Processors
|
|
3
3
|
class Cover < Base
|
|
4
|
-
|
|
5
4
|
def defaults
|
|
6
|
-
{"background-color" => "#FFFFFF", "gravity" => "Center"}
|
|
5
|
+
{ "background-color" => "#FFFFFF", "gravity" => "Center" }
|
|
7
6
|
end
|
|
8
|
-
|
|
9
|
-
def run(image, image_spec, width=nil, height=nil)
|
|
7
|
+
|
|
8
|
+
def run(image, image_spec, width = nil, height = nil)
|
|
10
9
|
# resize image
|
|
11
10
|
image.change_geometry("#{width}x#{height}^") do |px, py, i|
|
|
12
11
|
image.resize!(px, py)
|
|
13
12
|
end
|
|
14
|
-
|
|
13
|
+
|
|
15
14
|
# crop image
|
|
16
15
|
canvas = Magick::Image.new(width, height)
|
|
17
16
|
if @options['background-color'] == :transparent
|
|
@@ -19,15 +18,14 @@ module Acbaker
|
|
|
19
18
|
else
|
|
20
19
|
canvas = canvas.color_floodfill(1, 1, Magick::Pixel.from_color(@options['background-color']))
|
|
21
20
|
end
|
|
22
|
-
|
|
21
|
+
|
|
23
22
|
# place image
|
|
24
23
|
gravity_string = "Magick::#{@options['gravity']}Gravity"
|
|
25
24
|
gravity = Object.const_get(gravity_string)
|
|
26
25
|
image = canvas.composite(image, gravity, Magick::OverCompositeOp)
|
|
27
|
-
|
|
26
|
+
|
|
28
27
|
image
|
|
29
28
|
end
|
|
30
|
-
|
|
31
29
|
end
|
|
32
30
|
end
|
|
33
31
|
end
|
data/lib/acbaker/version.rb
CHANGED
data/test/test_acbaker.rb
CHANGED
|
@@ -2,23 +2,21 @@ require 'minitest/autorun'
|
|
|
2
2
|
require 'acbaker'
|
|
3
3
|
|
|
4
4
|
class AcbakerTest < Minitest::Test
|
|
5
|
-
|
|
6
5
|
def test_initialize
|
|
7
|
-
FileUtils.mkdir("tmp")
|
|
6
|
+
FileUtils.mkdir("tmp") unless File.directory?("tmp")
|
|
8
7
|
asset_pack = Acbaker::AssetPack.new(:AppIcon)
|
|
9
8
|
assert_equal :AppIcon, asset_pack.type
|
|
10
9
|
end
|
|
11
|
-
|
|
10
|
+
|
|
12
11
|
def test_appicon
|
|
13
|
-
FileUtils.mkdir_p("tmp/AppIcon.appiconset")
|
|
12
|
+
FileUtils.mkdir_p("tmp/AppIcon.appiconset") unless File.directory?("tmp/AppIcon.appiconset")
|
|
14
13
|
asset_pack = Acbaker::AssetPack.new(:AppIcon)
|
|
15
14
|
asset_pack.process("test/assets/AppIcon.png", "tmp/AppIcon.appiconset")
|
|
16
15
|
end
|
|
17
16
|
|
|
18
17
|
def test_launchimage
|
|
19
|
-
FileUtils.mkdir_p("tmp/LaunchImage.launchimage")
|
|
18
|
+
FileUtils.mkdir_p("tmp/LaunchImage.launchimage") unless File.directory?("tmp/LaunchImage.launchimage")
|
|
20
19
|
asset_pack = Acbaker::AssetPack.new(:LaunchImage)
|
|
21
20
|
asset_pack.process("test/assets/LaunchImage.png", "tmp/LaunchImage.launchimage")
|
|
22
21
|
end
|
|
23
|
-
|
|
24
|
-
end
|
|
22
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: acbaker
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tobias Strebitzer
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2019-05-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: commander
|
|
@@ -16,62 +16,118 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '4.
|
|
19
|
+
version: '4.4'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '4.
|
|
26
|
+
version: '4.4'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: json
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
33
|
+
version: '2.2'
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
40
|
+
version: '2.2'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: rmagick
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
47
|
+
version: '3.1'
|
|
48
48
|
- - ">="
|
|
49
49
|
- !ruby/object:Gem::Version
|
|
50
|
-
version:
|
|
50
|
+
version: 3.1.0
|
|
51
51
|
type: :runtime
|
|
52
52
|
prerelease: false
|
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
|
54
54
|
requirements:
|
|
55
55
|
- - "~>"
|
|
56
56
|
- !ruby/object:Gem::Version
|
|
57
|
-
version: '
|
|
57
|
+
version: '3.1'
|
|
58
58
|
- - ">="
|
|
59
59
|
- !ruby/object:Gem::Version
|
|
60
|
-
version:
|
|
60
|
+
version: 3.1.0
|
|
61
|
+
- !ruby/object:Gem::Dependency
|
|
62
|
+
name: minitest
|
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '5.11'
|
|
68
|
+
type: :development
|
|
69
|
+
prerelease: false
|
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - "~>"
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '5.11'
|
|
75
|
+
- !ruby/object:Gem::Dependency
|
|
76
|
+
name: pry
|
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - "~>"
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0.12'
|
|
82
|
+
type: :development
|
|
83
|
+
prerelease: false
|
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - "~>"
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '0.12'
|
|
61
89
|
- !ruby/object:Gem::Dependency
|
|
62
90
|
name: rake
|
|
63
91
|
requirement: !ruby/object:Gem::Requirement
|
|
64
92
|
requirements:
|
|
65
93
|
- - "~>"
|
|
66
94
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: '
|
|
95
|
+
version: '12.0'
|
|
68
96
|
type: :development
|
|
69
97
|
prerelease: false
|
|
70
98
|
version_requirements: !ruby/object:Gem::Requirement
|
|
71
99
|
requirements:
|
|
72
100
|
- - "~>"
|
|
73
101
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: '
|
|
102
|
+
version: '12.0'
|
|
103
|
+
- !ruby/object:Gem::Dependency
|
|
104
|
+
name: rspec
|
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
|
106
|
+
requirements:
|
|
107
|
+
- - "~>"
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '3.8'
|
|
110
|
+
type: :development
|
|
111
|
+
prerelease: false
|
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
113
|
+
requirements:
|
|
114
|
+
- - "~>"
|
|
115
|
+
- !ruby/object:Gem::Version
|
|
116
|
+
version: '3.8'
|
|
117
|
+
- !ruby/object:Gem::Dependency
|
|
118
|
+
name: rubocop
|
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
|
120
|
+
requirements:
|
|
121
|
+
- - "~>"
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: '0.69'
|
|
124
|
+
type: :development
|
|
125
|
+
prerelease: false
|
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
127
|
+
requirements:
|
|
128
|
+
- - "~>"
|
|
129
|
+
- !ruby/object:Gem::Version
|
|
130
|
+
version: '0.69'
|
|
75
131
|
description: This gem allows easy conversion and management of xcode asset catalogs.
|
|
76
132
|
email:
|
|
77
133
|
- tobias.strebitzer@magloft.com
|
|
@@ -81,6 +137,9 @@ extensions: []
|
|
|
81
137
|
extra_rdoc_files: []
|
|
82
138
|
files:
|
|
83
139
|
- ".gitignore"
|
|
140
|
+
- ".rubocop.yml"
|
|
141
|
+
- Gemfile
|
|
142
|
+
- Gemfile.lock
|
|
84
143
|
- README.md
|
|
85
144
|
- Rakefile
|
|
86
145
|
- acbaker.gemspec
|
|
@@ -116,14 +175,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
116
175
|
version: '0'
|
|
117
176
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
177
|
requirements:
|
|
119
|
-
- - "
|
|
178
|
+
- - "~>"
|
|
120
179
|
- !ruby/object:Gem::Version
|
|
121
|
-
version:
|
|
180
|
+
version: '2.4'
|
|
122
181
|
requirements: []
|
|
123
182
|
rubyforge_project:
|
|
124
|
-
rubygems_version: 2.
|
|
183
|
+
rubygems_version: 2.5.2
|
|
125
184
|
signing_key:
|
|
126
185
|
specification_version: 4
|
|
127
186
|
summary: Convert any source images into xcode asset catalogs.
|
|
128
187
|
test_files: []
|
|
129
|
-
has_rdoc:
|