yamg 0.0.5

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 07b978bbab7904b6f351c73369b99c0ebe73aba4
4
+ data.tar.gz: d61104395d6d0b0a4183a2f59cea154fe914a9e1
5
+ SHA512:
6
+ metadata.gz: 0b0fb6c6605da534052839b5c190f795f698024c6e4a584be5a80be4314ade72bbafc991fde4e024191b262006380af03391feb3755eb5cd7e6addb48396bf08
7
+ data.tar.gz: 754417d1dcd6e6b23f2626638a6708502f4d33e80066b0290a15bac718140cade9401125ce09cb8f714ed1d045c77b9be77ba04c78042708f093a298a7e6232e
data/.coveralls.yml ADDED
@@ -0,0 +1 @@
1
+ service_name: travis-ci
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ .DS_Store
2
+ coverage
3
+ rdoc
4
+ pkg
5
+ .bundle
6
+ Gemfile.lock
7
+ *.gem
8
+ *.log
data/.hound.yml ADDED
@@ -0,0 +1,2 @@
1
+ ruby:
2
+ enabled: true
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ env: CI="travis"
3
+ rvm:
4
+ - 1.9.3
5
+ - 2.0
6
+ - 2.1
7
+ - 2.2
8
+ - ruby-head
9
+ - jruby-19mode
10
+ - rbx-2
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in phonie-codes.gemspec
4
+ gemspec
5
+
6
+ group :test do
7
+ gem 'rake'
8
+ gem 'psych'
9
+ gem 'rubocop'
10
+ gem 'guard'
11
+ gem 'guard-rubocop'
12
+ gem 'minitest'
13
+ gem 'guard-minitest'
14
+ gem 'coveralls', require: false
15
+ end
data/Guardfile ADDED
@@ -0,0 +1,26 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ ## Uncomment and set this to only include directories you want to watch
5
+ # directories %w(app lib config test spec feature)
6
+
7
+ ## Uncomment to clear the screen before every task
8
+ # clearing :on
9
+
10
+ guard :minitest do
11
+ # with Minitest::Unit
12
+ # watch(%r{^test/(.*)\/?test_(.*)\.rb$})
13
+ # watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
14
+ # watch(%r{^test/test_helper\.rb$}) { 'test' }
15
+
16
+ # with Minitest::Spec
17
+ watch(%r{^spec/(.*)_spec\.rb$})
18
+ watch(%r{^lib/(.+)\.rb$}) { 'spec' }
19
+ # watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
20
+ watch(%r{^spec/spec_helper\.rb$}) { 'spec' }
21
+ end
22
+
23
+ guard :rubocop do
24
+ watch(/.+\.rb$/)
25
+ watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
26
+ end
data/MIT-LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2014-2015 Yamg Authors
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a
4
+ copy of this software and associated documentation files (the "Software"),
5
+ to deal in the Software without restriction, including without limitation
6
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
7
+ and/or sell copies of the Software, and to permit persons to whom the
8
+ Software is furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be
11
+ included in all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
14
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
15
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
16
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
17
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
18
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
19
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # YAMG
2
+
3
+
4
+ _____ _____ _____ ______ _______ _____
5
+ |\ \ / /| ___|\ \ | \/ \ ___|\ \
6
+ | \ \ / / | / /\ \ / /\ \ / /\ \
7
+ | \____\/ / /| | | | / /\ / /\ || | |____|
8
+ \ | / / / | |__| | / /\ \_/ / / /|| | ____
9
+ \|___/ / / | .--. || | \|_|/ / / || | | |
10
+ / / / | | | || | | | || | |_, |
11
+ /____/ / |____| |____||\____\ |____| /|\ ___\___/ /|
12
+ |` | / | | | || | | | | / | | /____ / |
13
+ |_____|/ |____| |____| \|____| |____|/ \|___| | /
14
+ \|____|/
15
+
16
+
17
+ [![Gem Version](https://badge.fury.io/rb/yamg.png)](http://badge.fury.io/rb/yamg)
18
+ [![Dependency Status](https://gemnasium.com/nofxx/yamg.svg)](https://gemnasium.com/nofxx/yamg)
19
+ [![Build Status](https://travis-ci.org/nofxx/yamg.png?branch=master)](https://travis-ci.org/nofxx/yamg)
20
+
21
+ YAMG
22
+
23
+ ## Install
24
+
25
+ gem 'yamg'
26
+
27
+
28
+ ## Use
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.libs << 'spec'
7
+ t.test_files = FileList['spec/**/*_spec.rb']
8
+ t.verbose = true
9
+ end
10
+
11
+ task default: [:test]
data/bin/yamg ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+
4
+ require 'yamg'
5
+ puts Rainbow('Starting YAMG!').red
6
+
7
+ y = YAMG.new
8
+ y.compile
9
+ y.screenshot
@@ -0,0 +1,4 @@
1
+ # :nodoc:
2
+ module YAMG
3
+ VERSION = '0.0.5'
4
+ end
data/lib/yamg.rb ADDED
@@ -0,0 +1,419 @@
1
+ require 'yaml'
2
+ require 'rainbow'
3
+ require 'mini_magick'
4
+
5
+ MiniMagick.processor = :gm if ENV['gm']
6
+
7
+ #
8
+ # Yet Another Media Generator
9
+ #
10
+ class YAMG
11
+ attr_accessor :config
12
+
13
+ TEMPLATES = {
14
+
15
+ #
16
+ # Android Cordova/Phonegap
17
+ #
18
+ android: {
19
+ # TODO: check if we really need this duplication on android
20
+ icons: {
21
+ 'res/drawable/icon.png' => 96,
22
+ 'res/drawable-ldpi/icon.png' => 36,
23
+ 'res/drawable-mdpi/icon.png' => 48,
24
+ 'res/drawable-hdpi/icon.png' => 72,
25
+ 'res/drawable-xhdpi/icon.png' => 96,
26
+ 'res/drawable-xxhdpi/icon.png' => 256,
27
+ 'bin/res/drawable/icon.png' => 96,
28
+ 'bin/res/drawable-ldpi/icon.png' => 36,
29
+ 'bin/res/drawable-mdpi/icon.png' => 48,
30
+ 'bin/res/drawable-hdpi/icon.png' => 72,
31
+ 'bin/res/drawable-xhdpi/icon.png' => 96,
32
+ 'ant-build/res/drawable/icon.png' => 96,
33
+ 'ant-build/res/drawable-ldpi/icon.png' => 36,
34
+ 'ant-build/res/drawable-mdpi/icon.png' => 48,
35
+ 'ant-build/res/drawable-hdpi/icon.png' => 72,
36
+ 'ant-build/res/drawable-xhdpi/icon.png' => 96
37
+ },
38
+ splash: {
39
+ 'res/drawable-port-ldpi/screen.png' => [200, 320],
40
+ 'res/drawable-port-mdpi/screen.png' => [320, 480],
41
+ 'res/drawable-port-hdpi/screen.png' => [480, 800],
42
+ 'res/drawable-port-xhdpi/screen.png' => [720, 1280],
43
+ 'res/drawable-land-ldpi/screen.png' => [320, 200],
44
+ 'res/drawable-land-mdpi/screen.png' => [480, 320],
45
+ 'res/drawable-land-hdpi/screen.png' => [800, 480],
46
+ 'res/drawable-land-xhdpi/screen.png' => [1280, 720],
47
+ 'bin/res/drawable-port-ldpi/screen.png' => [200, 320],
48
+ 'bin/res/drawable-port-mdpi/screen.png' => [320, 480],
49
+ 'bin/res/drawable-port-hdpi/screen.png' => [480, 800],
50
+ 'bin/res/drawable-port-xhdpi/screen.png' => [720, 1280],
51
+ 'bin/res/drawable-land-ldpi/screen.png' => [320, 200],
52
+ 'bin/res/drawable-land-mdpi/screen.png' => [480, 320],
53
+ 'bin/res/drawable-land-hdpi/screen.png' => [800, 480],
54
+ 'bin/res/drawable-land-xhdpi/screen.png' => [1280, 720],
55
+ 'ant-build/res/drawable-port-ldpi/screen.png' => [200, 320],
56
+ 'ant-build/res/drawable-port-mdpi/screen.png' => [320, 480],
57
+ 'ant-build/res/drawable-port-hdpi/screen.png' => [480, 800],
58
+ 'ant-build/res/drawable-port-xhdpi/screen.png' => [720, 1280],
59
+ 'ant-build/res/drawable-land-ldpi/screen.png' => [320, 200],
60
+ 'ant-build/res/drawable-land-mdpi/screen.png' => [480, 320],
61
+ 'ant-build/res/drawable-land-hdpi/screen.png' => [800, 480],
62
+ 'ant-build/res/drawable-land-xhdpi/screen.png' => [1280, 720]
63
+ }
64
+ },
65
+
66
+ #
67
+ # iOS cordova/phonegap
68
+ #
69
+ ios: {
70
+ icons: {
71
+ 'Resources/icons/icon.png' => 57,
72
+ 'Resources/icons/icon@2x.png' => 114,
73
+ 'Resources/icons/icon-40.png' => 40,
74
+ 'Resources/icons/icon-40@2x.png' => 80,
75
+ 'Resources/icons/icon-40@3x.png' => 120,
76
+ 'Resources/icons/icon-50.png' => 50,
77
+ 'Resources/icons/icon-50@2x.png' => 100,
78
+ 'Resources/icons/icon-60.png' => 60,
79
+ 'Resources/icons/icon-60@2x.png' => 120,
80
+ 'Resources/icons/icon-60@3x.png' => 180,
81
+ 'Resources/icons/icon-72.png' => 72,
82
+ 'Resources/icons/icon-72@2x.png' => 144,
83
+ 'Resources/icons/icon-76.png' => 76,
84
+ 'Resources/icons/icon-76@2x.png' => 152,
85
+ 'Resources/icons/icon-120.png' => 120,
86
+ 'Resources/icons/icon-small.png' => 29,
87
+ 'Resources/icons/icon-small@2x.png' => 58,
88
+ 'Resources/icons/icon-small@3x.png' => 87
89
+ },
90
+ splash: {
91
+ 'Resources/splash/Default~iphone.png' => [320, 480],
92
+ 'Resources/splash/Default@2x~iphone.png' => [640, 960],
93
+ 'Resources/splash/Default-Landscape@2x~ipad.png' => [2048, 1536],
94
+ 'Resources/splash/Default-Landscape~ipad.png' => [1024, 768],
95
+ 'Resources/splash/Default-Portrait@2x~ipad.png' => [1536, 2048],
96
+ 'Resources/splash/Default-Portrait~ipad.png' => [768, 1024],
97
+ 'Resources/splash/Default-568h@2x~iphone.png' => [640, 1136],
98
+ 'Resources/splash/Default-667h.png' => [750, 1344],
99
+ 'Resources/splash/Default-736h.png' => [1242, 2208],
100
+ 'Resources/splash/Default-Landscape-736h.png' => [2208, 1242]
101
+ }
102
+ },
103
+
104
+ #
105
+ # Phonegap www/res/
106
+ #
107
+ phonegap: {
108
+ icon: {
109
+ 'icon/android/icon-36-ldpi.png' => 36,
110
+ 'icon/android/icon-48-mdpi.png' => 48,
111
+ 'icon/android/icon-72-hdpi.png' => 72,
112
+ 'icon/android/icon-96-xhdpi.png' => 96,
113
+ 'icon/blackberry/icon-80.png' => 80,
114
+ 'icon/ios/icon-57.png' => 57,
115
+ 'icon/ios/icon-57-2x.png' => 114,
116
+ 'icon/ios/icon-72.png' => 72,
117
+ 'icon/webos/icon-64.png' => 64,
118
+ 'icon/windows-phone/icon-173-tile.png' => 173,
119
+ 'icon/windows-phone/icon-62-tile.png' => 62,
120
+ 'icon/windows-phone/icon-48.png' => 48
121
+ },
122
+ splash: {
123
+ 'screen/android/screen-ldpi-landscape.png' => [200, 320],
124
+ 'screen/android/screen-mdpi-landscape.png' => [320, 480],
125
+ 'screen/android/screen-hdpi-landscape.png' => [480, 800],
126
+ 'screen/android/screen-xhdpi-landscape.png' => [720, 1280],
127
+ 'screen/android/screen-ldpi-portrait.png' => [320, 200],
128
+ 'screen/android/screen-mdpi-portrait.png' => [480, 320],
129
+ 'screen/android/screen-hdpi-portrait.png' => [800, 480],
130
+ 'screen/android/screen-xhdpi-portrait.png' => [1280, 720],
131
+ 'screen/blackberry/screen-225' => [225],
132
+ 'screen/ios/screen-ipad-landscape-2x.png' => [2048, 1536],
133
+ 'screen/ios/screen-ipad-landscape.png' => [1024, 768],
134
+ 'screen/ios/screen-ipad-portrait-2x.png' => [1536, 2048],
135
+ 'screen/ios/screen-ipad-portrait.png' => [768, 1024],
136
+ 'screen/ios/screen-iphone-landscape.png' => [480, 320],
137
+ 'screen/ios/screen-iphone-landscape-2x.png' => [960, 640],
138
+ 'screen/ios/screen-iphone-portrait-2x.png' => [640, 960],
139
+ 'screen/ios/screen-iphone-portrait-568h-2x.png' => [640, 1136],
140
+ 'screen/ios/screen-iphone-portrait.png' => [320, 480],
141
+ 'screen/ios/screen-iDefault~iphone.png' => [320, 480],
142
+ 'screen/ios/screen-iDefault-667h.png' => [750, 1344],
143
+ 'screen/ios/screen-iDefault-736h.png' => [1242, 2208],
144
+ 'screen/ios/screen-iDefault-Landscape-736h.png' => [2208, 1242],
145
+ 'screen/windows-phone/screen-portrait.jpg' => [720, 1280]
146
+ }
147
+ },
148
+
149
+ #
150
+ # WWW
151
+ #
152
+ web: {
153
+ icons: {
154
+ 'icon.png' => 256
155
+ },
156
+ media: {
157
+ 'media.png' => 256
158
+ }
159
+ },
160
+
161
+ rails: {
162
+ icons: {
163
+ 'public/favicon.png' => 16,
164
+ 'public/favicon.ico' => 16,
165
+ 'public/icon.png' => 512,
166
+ 'app/assets/images/icon.png' => 512,
167
+ 'app/assets/images/favicon.png' => 16
168
+ },
169
+ media: {
170
+ 'public/logo.png' => 512
171
+ }
172
+ },
173
+
174
+ twitter: {
175
+ icons: {
176
+ 'icon.png' => 256
177
+ }
178
+ },
179
+
180
+ #
181
+ # Play Store
182
+ #
183
+ google: {
184
+ icons: {
185
+ 'icon.png' => 512,
186
+ 'icon1024.png' => 1024, # [1024, 500]
187
+ '180.png' => 180, # 180, 120
188
+ },
189
+ splash: {
190
+ 'splash.png' => [1024, 768]
191
+ }
192
+ },
193
+
194
+ #
195
+ # App Store
196
+ #
197
+ apple: {
198
+ icons: {
199
+ 'icon.png' => 1024,
200
+ 'icon16.png' => 16
201
+ },
202
+ splash: {
203
+ 'splash.png' => [1024, 768]
204
+ }
205
+ },
206
+
207
+ facebook: {
208
+ icons: {
209
+ 'icon.png' => 1024,
210
+ 'icon16.png' => 16
211
+ },
212
+ splash: {
213
+ 'splash.png' => [1024, 768]
214
+ }
215
+ }
216
+ }
217
+
218
+ def initialize
219
+ load_config
220
+ end
221
+
222
+ def load_config
223
+ self.config = YAML.load_file('./.yamg.yml').freeze
224
+ rescue Errno::ENOENT
225
+ puts 'Create config!'
226
+ exit 1
227
+ end
228
+
229
+ def setup_for(opts)
230
+ case opts
231
+ when Hash then opts
232
+ when String then { 'path' => opts }
233
+ when TrueClass then { 'path' => './media' }
234
+ else fail
235
+ end
236
+ end
237
+
238
+ #
239
+ # Writes image to disk
240
+ #
241
+ def write_out(img, path)
242
+ img.format File.extname(path)
243
+ FileUtils.mkdir_p File.dirname(path)
244
+ img.write(path)
245
+ rescue Errno::ENOENT
246
+ puts
247
+ puts Rainbow("Path not found '#{path}'").red
248
+ exit 1
249
+ end
250
+
251
+ def compile_work(scope, opts)
252
+ puts Rainbow("Working on #{scope}'").blue
253
+ setup = setup_for(opts)
254
+
255
+ if (t = TEMPLATES[scope.to_sym])
256
+ Thread.new do # 200% speed up with 8 cores
257
+ icon_work(t[:icons], setup)
258
+ splash_work(t[:splash], setup) if t[:splash]
259
+ end
260
+ else
261
+ puts 'Custom job!'
262
+ end
263
+ end
264
+
265
+ def compile(scope = nil)
266
+ time = Time.now
267
+ works = config['compile']
268
+ works.select! { |w| w =~ scope } if scope
269
+ works.each { |out, opts| compile_work(out, opts) }
270
+ Thread.list.reject { |t| t == Thread.current }.each(&:join)
271
+ puts Rainbow("Done compile #{Time.now - time}").red
272
+ end
273
+
274
+ #
275
+ #
276
+ # ICONS
277
+ #
278
+ #
279
+ def load_icons(path)
280
+ return [path] unless File.extname(path).empty?
281
+ Dir["#{path}/*.png"].map { |f| File.basename(f) }
282
+ end
283
+
284
+ def find_closest_gte_icon(size, icons)
285
+ return icons.max_by(&:to_i) if icons.map(&:to_i).max < size
286
+ icons.min_by do |f|
287
+ # n = x.match(/\d+/).to_s.to_i
288
+ n = f.to_i
289
+ size > n ? Float::INFINITY : n
290
+ end
291
+ end
292
+
293
+ def icon_work(files, setup)
294
+ path = setup['icon'] || config['icon']['path']
295
+ rounded = setup['rounded'] || config['icon']['rounded']
296
+ icons = load_icons(path)
297
+ puts Rainbow("Starting in #{path} with #{icons} | #{setup}").blue
298
+ files.each do |file, size|
299
+ from = File.join(path, find_closest_gte_icon(size, icons))
300
+ to = File.join(setup['path'], file)
301
+ puts "#{File.basename from} -> #{to} (#{size}px)"
302
+ image = MiniMagick::Image.open(from)
303
+ image.resize size # "NxN"
304
+ image = round(image) if rounded
305
+ write_out(image, to)
306
+ end
307
+ end
308
+
309
+ # https://gist.github.com/artemave/c20e7450af866f5e7735
310
+ def round(img, r = 14)
311
+ size = img.dimensions.join(',')
312
+ r = img.dimensions.max / r
313
+ radius = [r, r].join(',')
314
+
315
+ mask = MiniMagick::Image.open(img.path)
316
+ mask.format 'png'
317
+
318
+ mask.combine_options do |m|
319
+ m.alpha 'transparent'
320
+ m.background 'none'
321
+ m.draw "roundrectangle 0,0,#{size},#{radius}"
322
+ end
323
+
324
+ overlay = ::MiniMagick::Image.open img.path
325
+ overlay.format 'png'
326
+
327
+ overlay.combine_options do |o|
328
+ o.alpha 'transparent'
329
+ o.background 'none'
330
+ o.draw "roundrectangle 0,0,#{size},#{radius}"
331
+ end
332
+
333
+ masked = img.composite(mask, 'png') do |i|
334
+ i.alpha 'set'
335
+ i.compose 'DstIn'
336
+ end
337
+
338
+ masked.composite(overlay, 'png') do |i|
339
+ i.compose 'Over'
340
+ end
341
+ masked
342
+
343
+ # convert
344
+ # -size 512x512 xc:none
345
+ # -draw "roundrectangle 0,0,512,512,55,55" mask.png
346
+ # convert icon.png
347
+ # -matte mask.png
348
+ # -compose DstIn
349
+ # -composite picture_with_rounded_corners.png
350
+ end
351
+
352
+ #
353
+ #
354
+ # SPLASH
355
+ #
356
+ #
357
+ def splash_center(path, size, bg = config['splash']['background'])
358
+ icon_size = size.max / 4
359
+ image = MiniMagick::Image.open(path)
360
+ image.resize icon_size if image.dimensions.max >= icon_size
361
+ image.background bg if bg
362
+ image.combine_options do |o|
363
+ o.gravity 'center'
364
+ o.extent size.join('x') # "WxH"
365
+ end
366
+ end
367
+
368
+ def splash_composite(base, icons)
369
+ max = base.dimensions.min / 9
370
+ icons.reduce(base) do |img, over|
371
+ oimg = MiniMagick::Image.open(File.join(config['splash']['path'], over))
372
+ oimg.resize(max) if oimg.dimensions.max >= max
373
+ img.composite(oimg) do |o|
374
+ o.compose 'Over'
375
+ o.gravity File.basename(over, '.*')
376
+ o.geometry '+40%+40%'
377
+ end
378
+ end
379
+ end
380
+
381
+ def splash_work(screens, setup)
382
+ path = config['splash']['path']
383
+ icons = load_icons(path)
384
+ center = icons.find { |i| i =~ /center/ }
385
+ icons.delete(center)
386
+
387
+ puts Rainbow("Starting splashes | #{setup}").blue
388
+ screens.each do |file, size|
389
+ to = File.join(setup['path'], file)
390
+ image = splash_center(File.join(path, center), size)
391
+ write_out(splash_composite(image, icons), to)
392
+ end
393
+ end
394
+
395
+ def screenshot
396
+ puts 'SS'
397
+ end
398
+ end
399
+
400
+ # },
401
+ # "customImages": [
402
+ # {
403
+ # "width": 120,
404
+ # "height": 120,
405
+ # "path": "../Media/custom",
406
+ # "filename": "outputFilename.png",
407
+ # "source": {
408
+ # "filename": "image.png",
409
+ # "background": "fff6d5"
410
+ # }
411
+ # }
412
+ # ],
413
+ # "screenshots": [
414
+ # {
415
+ # "url": "http://notabe.com",
416
+ # "name": "homepage"
417
+ # }
418
+ # ]
419
+ # }
data/yamg.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $LOAD_PATH.push File.expand_path('../lib', __FILE__)
3
+ require 'yamg/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'yamg'
7
+ s.version = YAMG::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ['Marcos Piccinini']
10
+ s.email = ['nofxx@github.com']
11
+ s.homepage = 'http://github.com/nofxx/yamg'
12
+ s.summary = 'Yet another media generator'
13
+ s.description = 'Provides all the media for your projects'
14
+ s.license = 'MIT'
15
+
16
+ s.executables = ['yamg']
17
+ s.default_executable = 'yamg'
18
+
19
+ s.files = `git ls-files`.split("\n")
20
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
+ s.require_paths = ['lib']
22
+
23
+ s.add_dependency 'mini_magick'
24
+ s.add_dependency 'rainbow'
25
+ end
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yamg
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - Marcos Piccinini
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-06-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mini_magick
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rainbow
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
+ description: Provides all the media for your projects
42
+ email:
43
+ - nofxx@github.com
44
+ executables:
45
+ - yamg
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - ".coveralls.yml"
50
+ - ".gitignore"
51
+ - ".hound.yml"
52
+ - ".travis.yml"
53
+ - Gemfile
54
+ - Guardfile
55
+ - MIT-LICENSE
56
+ - README.md
57
+ - Rakefile
58
+ - bin/yamg
59
+ - lib/yamg.rb
60
+ - lib/yamg/version.rb
61
+ - yamg.gemspec
62
+ homepage: http://github.com/nofxx/yamg
63
+ licenses:
64
+ - MIT
65
+ metadata: {}
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ requirements: []
81
+ rubyforge_project:
82
+ rubygems_version: 2.4.7
83
+ signing_key:
84
+ specification_version: 4
85
+ summary: Yet another media generator
86
+ test_files: []