yamg 0.3.8 → 0.5.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: 864543f8189e6c7e461436d69138a2d9e9758e8f
4
- data.tar.gz: 1f3ffd77761612a7b8e71e021af86422711e9884
3
+ metadata.gz: c6743270b3eaa2c9f6478a9ffa7381bdccca5e14
4
+ data.tar.gz: 9c27945f52c829257bc94bbd9e99a61f0accdc29
5
5
  SHA512:
6
- metadata.gz: 2409b550c86a27aaf5283f96d539c74b96c2a078b866c11da2b97d043743fa22e66221404a7297797a45a52e335bb573a3d7ccfcc2b298ae3808169cc3e17b37
7
- data.tar.gz: 1571dda9d3420af019e8d962c580f8e19bf7854d5458078e622108c4cd2f445b42465d802b220788a6d871f5f449a0d505a4c5ea5cbe8acd2e9db80953bc5e58
6
+ metadata.gz: 0cd6a739d428e7df15103b25bcca73a82bb26dfb1a5488f19ba38ff931d8997d8f386bc85f6d649e940fc5d925618cb5daf010cd237eb0115629bbcc0cab6dfa
7
+ data.tar.gz: ad674a6bc6c39cad82150234b4555a3aee31d97f1a9d792c287a86be23f634ca01527b49cfefd02b55998522b65ef5a91cf289fe5f15397a79a42c4c7027b0df
data/.gitignore CHANGED
@@ -5,4 +5,5 @@ pkg
5
5
  .bundle
6
6
  Gemfile.lock
7
7
  *.gem
8
- *.log
8
+ *.log
9
+ spec/out/*
data/Gemfile CHANGED
@@ -9,7 +9,7 @@ group :test do
9
9
  gem 'rubocop'
10
10
  gem 'guard'
11
11
  gem 'guard-rubocop'
12
- gem 'minitest'
13
- gem 'guard-minitest'
12
+ gem 'rspec'
13
+ gem 'guard-rspec'
14
14
  gem 'coveralls', require: false
15
15
  end
data/Guardfile CHANGED
@@ -7,20 +7,15 @@
7
7
  ## Uncomment to clear the screen before every task
8
8
  # clearing :on
9
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
10
  guard :rubocop do
24
11
  watch(/.+\.rb$/)
25
12
  watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
26
13
  end
14
+
15
+ guard :rspec, cmd: 'bundle exec rspec' do
16
+ watch(%r{^spec/.+_spec\.rb$})
17
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
18
+ watch(%r{^generators/(.+)\.rb$/}) { |_m| 'spec/schemaless/worker_spec' }
19
+
20
+ watch('spec/spec_helper.rb') { 'spec' }
21
+ end
data/README.md CHANGED
@@ -107,6 +107,12 @@ You may still use best size match: Just have you folder:
107
107
  '16-icon.svg', '256-icon.svg', and problably not many other sizes:
108
108
  The SVG will be rasterized in the correct size needed.
109
109
 
110
+ ### ICO
111
+
112
+ YAMG will automatically find the best version and combine:
113
+ 16px, 32px and 48px into a .ico for the web.
114
+ Also check out #HTML to meta tags for all this.
115
+
110
116
 
111
117
  ## Splash
112
118
 
@@ -192,15 +198,64 @@ compile:
192
198
  * Play Store
193
199
  * Facebook
194
200
  * Twitter
195
- * Rails
196
- * Web
201
+ * Web (Any framework: rails, sinatra, js...)
197
202
  * Write your own (really easy, fork and change yml)
198
203
 
199
- ## Notes
200
204
 
201
- RSVG
205
+ ## HTML
206
+
207
+ Meta tags in HTML:
208
+
209
+ ```html
210
+ <link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-57x57.png">
211
+ <link rel="apple-touch-icon" sizes="60x60" href="/apple-touch-icon-60x60.png">
212
+ <link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-72x72.png">
213
+ <link rel="apple-touch-icon" sizes="76x76" href="/apple-touch-icon-76x76.png">
214
+ <link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114x114.png">
215
+ <link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120x120.png">
216
+ <link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144x144.png">
217
+ <link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152x152.png">
218
+ <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-180x180.png">
219
+ <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
220
+ <link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
221
+ <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
222
+ <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
223
+ <link rel="manifest" href="/manifest.json">
224
+ <meta name="msapplication-TileColor" content="#da532c">
225
+ <meta name="msapplication-TileImage" content="/mstile-144x144.png">
226
+ <meta name="theme-color" content="#ffffff">
227
+ ```
228
+
229
+ Meta tags in HAML:
230
+
231
+ ```haml
232
+ %link{:href => "/apple-touch-icon-57x57.png", :rel => "apple-touch-icon", :sizes => "57x57"}/
233
+ %link{:href => "/apple-touch-icon-60x60.png", :rel => "apple-touch-icon", :sizes => "60x60"}/
234
+ %link{:href => "/apple-touch-icon-72x72.png", :rel => "apple-touch-icon", :sizes => "72x72"}/
235
+ %link{:href => "/apple-touch-icon-76x76.png", :rel => "apple-touch-icon", :sizes => "76x76"}/
236
+ %link{:href => "/apple-touch-icon-114x114.png", :rel => "apple-touch-icon", :sizes => "114x114"}/
237
+ %link{:href => "/apple-touch-icon-120x120.png", :rel => "apple-touch-icon", :sizes => "120x120"}/
238
+ %link{:href => "/apple-touch-icon-144x144.png", :rel => "apple-touch-icon", :sizes => "144x144"}/
239
+ %link{:href => "/apple-touch-icon-152x152.png", :rel => "apple-touch-icon", :sizes => "152x152"}/
240
+ %link{:href => "/apple-touch-icon-180x180.png", :rel => "apple-touch-icon", :sizes => "180x180"}/
241
+ %link{:href => "/favicon-32x32.png", :rel => "icon", :sizes => "32x32", :type => "image/png"}/
242
+ %link{:href => "/android-chrome-192x192.png", :rel => "icon", :sizes => "192x192", :type => "image/png"}/
243
+ %link{:href => "/favicon-96x96.png", :rel => "icon", :sizes => "96x96", :type => "image/png"}/
244
+ %link{:href => "/favicon-16x16.png", :rel => "icon", :sizes => "16x16", :type => "image/png"}/
245
+ %link{:href => "/manifest.json", :rel => "manifest"}/
246
+ %meta{:content => "#da532c", :name => "msapplication-TileColor"}/
247
+ %meta{:content => "/mstile-144x144.png", :name => "msapplication-TileImage"}/
248
+ %meta{:content => "#ffffff", :name => "theme-color"}/
249
+ ```
250
+
251
+ ## Notes & Thanks
252
+
253
+ RSVG - Impossible without
202
254
  https://github.com/svg/svgo
203
255
 
256
+ Real Favicon Generator - Perfect, but I wanted make it automated.
257
+ http://realfavicongenerator.net
258
+
204
259
 
205
260
  ### Media
206
261
 
data/lib/yamg.rb CHANGED
@@ -56,12 +56,11 @@ module YAMG
56
56
  run "rsvg-convert #{args} #{src} > #{out}"
57
57
  end
58
58
 
59
-
60
59
  def run_ffmpeg
61
60
  end
62
61
 
63
62
  def run_imagemagick(comm)
64
- shell = MiniMagick::Shell.new #(whiny)
63
+ shell = MiniMagick::Shell.new # (whiny)
65
64
  shell.run(comm).strip
66
65
  end
67
66
 
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <browserconfig>
3
+ <msapplication>
4
+ <tile>
5
+ <square70x70logo src="/mstile-70x70.png"/>
6
+ <square150x150logo src="/mstile-150x150.png"/>
7
+ <square310x310logo src="/mstile-310x310.png"/>
8
+ <wide310x150logo src="/mstile-310x150.png"/>
9
+ <TileColor>#da532c</TileColor>
10
+ </tile>
11
+ </msapplication>
12
+ </browserconfig>
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "My app",
3
+ "icons": [
4
+ {
5
+ "src": "\/android-chrome-36x36.png",
6
+ "sizes": "36x36",
7
+ "type": "image\/png",
8
+ "density": "0.75"
9
+ },
10
+ {
11
+ "src": "\/android-chrome-48x48.png",
12
+ "sizes": "48x48",
13
+ "type": "image\/png",
14
+ "density": "1.0"
15
+ },
16
+ {
17
+ "src": "\/android-chrome-72x72.png",
18
+ "sizes": "72x72",
19
+ "type": "image\/png",
20
+ "density": "1.5"
21
+ },
22
+ {
23
+ "src": "\/android-chrome-96x96.png",
24
+ "sizes": "96x96",
25
+ "type": "image\/png",
26
+ "density": "2.0"
27
+ },
28
+ {
29
+ "src": "\/android-chrome-144x144.png",
30
+ "sizes": "144x144",
31
+ "type": "image\/png",
32
+ "density": "3.0"
33
+ },
34
+ {
35
+ "src": "\/android-chrome-192x192.png",
36
+ "sizes": "192x192",
37
+ "type": "image\/png",
38
+ "density": "4.0"
39
+ }
40
+ ]
41
+ }
data/lib/yamg/cli.rb CHANGED
@@ -3,7 +3,7 @@ module YAMG
3
3
  class CLI
4
4
  attr_accessor :works, :scope
5
5
 
6
- def initialize(argv)
6
+ def initialize(argv = {})
7
7
  puts
8
8
  puts Rainbow(' Y A M G').red
9
9
  puts
@@ -35,8 +35,8 @@ module YAMG
35
35
 
36
36
  def compile_screenshots(ss, size, setup)
37
37
  return unless YAMG.config['screenshot'].respond_to?(:[])
38
- fail 'No url provided' unless url = YAMG.config['screenshot']['url']
39
- Screenshot.new(ss, { 'size' => size, 'url' => url } ).work(setup['path'])
38
+ fail 'No url provided' unless (url = YAMG.config['screenshot']['url'])
39
+ Screenshot.new(ss, 'size' => size, 'url' => url).work(setup['path'])
40
40
  puts Rainbow("[o]SS #{ss}").black
41
41
  end
42
42
 
@@ -46,9 +46,11 @@ module YAMG
46
46
  def compile_icon(i, size, setup)
47
47
  folder = setup['icon'] || YAMG.config['icon']['path']
48
48
  # Don' use || here, we are after false
49
+ bg = setup['bg'] || setup['background']
49
50
  round = setup['rounded']
50
51
  round = YAMG.config['icon']['rounded'] if round.nil?
51
- Icon.new(folder, size, round).image(home_for(i, setup))
52
+ radius = setup['radius']
53
+ Icon.new(folder, size, bg, round, radius).image(home_for(i, setup))
52
54
  print Rainbow(round ? '(i)' : '[i]').black
53
55
  YAMG.info("Icon #{size}px -> #{setup['path']}#{i} ", :black)
54
56
  end
@@ -61,6 +63,15 @@ module YAMG
61
63
  YAMG.info("Splash #{size.join('x')}px #{setup['path']}#{s}", :black)
62
64
  end
63
65
 
66
+ def compile_docs(opts)
67
+ out = opts['path']
68
+ %w( manifest.json browserconfig.xml ).each do |doc|
69
+ puts Rainbow("{DOCS} #{out}/#{doc} created. Please review.").red
70
+ src = File.expand_path("assets/#{doc}", File.dirname(__FILE__))
71
+ FileUtils.cp(src, out)
72
+ end
73
+ end
74
+
64
75
  def compile_work(job, opts)
65
76
  task = YAMG::TEMPLATES[job] || (works[job] && works[job]['export'])
66
77
  %w(icon logo splash media screenshots).each do |subtask|
@@ -72,10 +83,11 @@ module YAMG
72
83
  end
73
84
  end
74
85
  end
86
+ compile_docs(opts) if task['docs']
75
87
  end
76
88
 
77
89
  def compile
78
- works.select! { |k,_v| k =~ /#{scope}/ } if scope
90
+ works.select! { |k, _v| k =~ /#{scope}/ } if scope
79
91
  puts Rainbow("Tasks: #{works.keys.join(', ')}").yellow
80
92
  works.each { |out, opts| compile_work(out, opts) }
81
93
  end
data/lib/yamg/icon.rb CHANGED
@@ -14,24 +14,27 @@ module YAMG
14
14
  # Icon.new(src, size, rounded).image('.path.ext')
15
15
  # Export image
16
16
  #
17
- def initialize(src, size, rounded = false, radius = 9)
18
- fail if src.nil? || src.empty?
17
+ # ICO: 16/32/48
18
+ #
19
+ def initialize(src, size, bg = nil, rounded = false, radius = 9)
20
+ fail 'No source' if src.nil? || src.empty?
19
21
  @src = src
20
22
  @size = size
21
23
  @rounded = rounded
22
24
  @icons = YAMG.load_images(src)
23
25
  YAMG.puts_and_exit("No sources in '#{src}'") if icons.empty?
24
26
  @choosen = File.join(src, find_closest_gte_icon)
25
- @radius = radius
27
+ @radius = radius || 9
26
28
  @dpi = 90
29
+ @bg = bg
27
30
  end
28
31
  alias_method :rounded?, :rounded
29
32
 
30
33
  def find_closest_gte_icon
31
- return icons.max_by(&:to_i) if icons.map(&:to_i).max < size
34
+ proc = ->(x) { x.tr('^0-9', '').to_i }
35
+ return icons.max_by(&proc) if icons.map(&proc).max < size
32
36
  icons.min_by do |f|
33
- # n = x.match(/\d+/).to_s.to_i
34
- n = f.to_i
37
+ n = proc.call(f)
35
38
  size > n ? Float::INFINITY : n
36
39
  end
37
40
  end
@@ -84,19 +87,51 @@ module YAMG
84
87
  masked
85
88
  end
86
89
 
90
+ def apply_background
91
+ clone = ::MiniMagick::Image.open img.path
92
+ clone.combine_options do |o|
93
+ o.draw 'color 0,0 reset'
94
+ o.fill @bg
95
+ end
96
+ clone.composite(img) { |i| i.compose 'Over' }
97
+ end
98
+
99
+ # Just copy the svg, never resize
100
+ def svg!
101
+ fail unless @icons.find { |i| File.extname(i) == 'svg' }
102
+ end
103
+
104
+ # ICO!
105
+ def ico!(out)
106
+ temp = ->(s) { "/tmp/#{s}-#{Thread.current.object_id}.png" }
107
+ MiniMagick::Tool::Convert.new do |o|
108
+ o << Icon.new(@src, 16).image(temp.call(16))
109
+ o << Icon.new(@src, 32).image(temp.call(32))
110
+ o << Icon.new(@src, 48).image(temp.call(48))
111
+ o.colors 256
112
+ o << out
113
+ end
114
+ end
115
+
87
116
  def image(out = nil)
117
+ return svg! if out =~ /svg$/
118
+ return ico!(out) if out =~ /ico$/
88
119
  temp = out || "/tmp/#{@choosen.object_id}.png"
89
120
  if File.extname(@choosen) =~ /svg/
90
121
  pixels = dpi ? "-d #{dpi} -p #{dpi}" : nil
91
122
  args = "#{pixels} -w #{size} -h #{size} -f png"
92
123
  YAMG.run_rsvg(@choosen, temp, args)
93
124
  @img = MiniMagick::Image.open(temp)
125
+ @img.format File.extname(out) if out
126
+
94
127
  else
95
128
  @img = MiniMagick::Image.open(@choosen)
129
+ @img.format File.extname(out) if out
96
130
  @img.resize size # "NxN"
97
131
  end
132
+ @img = apply_background if @bg
98
133
  @img = round if rounded?
99
- write_out(out)
134
+ out ? write_out(out) : img
100
135
  end
101
136
 
102
137
  #
@@ -106,6 +141,7 @@ module YAMG
106
141
  return img unless path
107
142
  FileUtils.mkdir_p File.dirname(path)
108
143
  img.write(path)
144
+ path
109
145
  rescue Errno::ENOENT
110
146
  puts_and_exit("Path not found '#{path}'")
111
147
  end
@@ -175,25 +175,42 @@ phonegap:
175
175
  'screen/ios/screen-iDefault-Landscape-736h.png': [2208, 1242]
176
176
  'screen/windows-phone/screen-portrait.jpg': [720, 1280]
177
177
 
178
-
179
178
  web:
180
179
  icon:
181
- 'icon.png': 256
180
+ 'favicon.ico': 48
181
+ 'icon.png': 512
182
+ 'icon-xs.png': 64
183
+ 'icon-sm.png': 128
184
+ 'icon-md.png': 256
185
+ 'favicon-16x16.png': 16
186
+ 'favicon-32x32.png': 32
187
+ 'favicon-96x96.png': 96
188
+ 'android-chrome-36x36.png': 36
189
+ 'android-chrome-48x48.png': 48
190
+ 'android-chrome-72x72.png': 72
191
+ 'android-chrome-96x96.png': 96
192
+ 'android-chrome-144x144.png': 144
193
+ 'android-chrome-192x192.png': 192
194
+ 'apple-touch-icon.png': 180
195
+ 'apple-touch-icon-57x57.png': 57
196
+ 'apple-touch-icon-60x60.png': 60
197
+ 'apple-touch-icon-72x72.png': 72
198
+ 'apple-touch-icon-76x76.png': 76
199
+ 'apple-touch-icon-114x114.png': 114
200
+ 'apple-touch-icon-120x120.png': 120
201
+ 'apple-touch-icon-144x144.png': 144
202
+ 'apple-touch-icon-152x152.png': 152
203
+ 'apple-touch-icon-180x180.png': 180
204
+ 'apple-touch-icon-precomposed.png': 180 # non round?
205
+ 'mstile-70x70.png': 128
206
+ 'mstile-144x144.png': 144
207
+ 'mstile-150x150.png': 270
208
+ 'mstile-310x310.png': 558
209
+ splash:
210
+ 'mstile-310x150.png': [558, 270]
182
211
  media:
183
212
  'media.png': 256
184
-
185
-
186
- rails:
187
- icon:
188
- 'public/favicon.png': 16
189
- 'public/favicon.ico': 16
190
- 'public/icon.png': 512
191
- 'app/assets/images/icon.png': 512
192
- 'app/assets/images/favicon.png': 16
193
- media:
194
- 'app/assets/images/logo.png': 512
195
- 'public/logo.png': 512
196
-
213
+ docs: true
197
214
 
198
215
  #
199
216
  #
data/lib/yamg/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # :nodoc:
2
2
  module YAMG
3
- VERSION = '0.3.8'
3
+ VERSION = '0.5.0'
4
4
  end
data/lib/yamg/yamg.yml CHANGED
@@ -6,7 +6,7 @@
6
6
  icon:
7
7
  path: 'icons' # path to icons folder
8
8
  rounded: true # defaults to false
9
- background: false # nil or color RGBA
9
+ background: false # nil or color #RGB or rgba()
10
10
 
11
11
  # Splash screen
12
12
  splash:
@@ -33,11 +33,9 @@ compile:
33
33
 
34
34
  # Web projects
35
35
  #
36
- web: true
37
- # Ruby on rails
38
- # rails:
39
- # path: '/path/to/rails/proj'
40
- # icon: './alpha' # Using another icon src folder
36
+ # Any framework, included: Favicons,iOS/Android/MStiles platforms
37
+ web:
38
+ path: '../my/web/app'
41
39
 
42
40
  # Mobile
43
41
  #
Binary file
Binary file
@@ -0,0 +1,153 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ width="48.074291mm"
13
+ height="48.074287mm"
14
+ viewBox="0 0 170.34198 170.34196"
15
+ id="svg2"
16
+ version="1.1"
17
+ inkscape:version="0.91 r13725"
18
+ sodipodi:docname="icon512.svg">
19
+ <defs
20
+ id="defs4" />
21
+ <sodipodi:namedview
22
+ id="base"
23
+ pagecolor="#ffffff"
24
+ bordercolor="#666666"
25
+ borderopacity="1.0"
26
+ inkscape:pageopacity="0.0"
27
+ inkscape:pageshadow="2"
28
+ inkscape:zoom="2.9260476"
29
+ inkscape:cx="-178.80292"
30
+ inkscape:cy="-11.631311"
31
+ inkscape:document-units="px"
32
+ inkscape:current-layer="layer1"
33
+ showgrid="false"
34
+ inkscape:window-width="3840"
35
+ inkscape:window-height="2037"
36
+ inkscape:window-x="0"
37
+ inkscape:window-y="49"
38
+ inkscape:window-maximized="1"
39
+ fit-margin-top="0"
40
+ fit-margin-left="0"
41
+ fit-margin-right="0"
42
+ fit-margin-bottom="0" />
43
+ <metadata
44
+ id="metadata7">
45
+ <rdf:RDF>
46
+ <cc:Work
47
+ rdf:about="">
48
+ <dc:format>image/svg+xml</dc:format>
49
+ <dc:type
50
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
51
+ <dc:title></dc:title>
52
+ </cc:Work>
53
+ </rdf:RDF>
54
+ </metadata>
55
+ <g
56
+ inkscape:label="Layer 1"
57
+ inkscape:groupmode="layer"
58
+ id="layer1"
59
+ transform="translate(-297.47522,-430.40631)">
60
+ <g
61
+ id="g4145"
62
+ transform="translate(0.47540151,-0.4753817)">
63
+ <rect
64
+ inkscape:export-ydpi="8.4535837"
65
+ inkscape:export-xdpi="8.4535837"
66
+ y="446.05267"
67
+ x="312.17081"
68
+ height="140"
69
+ width="140"
70
+ id="rect4152"
71
+ style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
72
+ <text
73
+ inkscape:export-ydpi="8.4535837"
74
+ inkscape:export-xdpi="8.4535837"
75
+ sodipodi:linespacing="125%"
76
+ id="text4144"
77
+ y="566.58929"
78
+ x="325.96481"
79
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:42.55854416px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
80
+ xml:space="preserve"><tspan
81
+ y="566.58929"
82
+ x="325.96481"
83
+ id="tspan4146"
84
+ sodipodi:role="line">M</tspan></text>
85
+ <rect
86
+ inkscape:export-ydpi="8.4535837"
87
+ inkscape:export-xdpi="8.4535837"
88
+ style="fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
89
+ id="rect4154"
90
+ width="70"
91
+ height="70"
92
+ x="312.17081"
93
+ y="446.05267" />
94
+ <text
95
+ inkscape:export-ydpi="8.4535837"
96
+ inkscape:export-xdpi="8.4535837"
97
+ sodipodi:linespacing="125%"
98
+ id="text4136"
99
+ y="496.24783"
100
+ x="330.30042"
101
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:45.99017334px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
102
+ xml:space="preserve"><tspan
103
+ y="496.24783"
104
+ x="330.30042"
105
+ id="tspan4138"
106
+ sodipodi:role="line">Y</tspan></text>
107
+ <rect
108
+ inkscape:export-ydpi="8.4535837"
109
+ inkscape:export-xdpi="8.4535837"
110
+ y="446.05267"
111
+ x="382.17081"
112
+ height="70"
113
+ width="70"
114
+ id="rect4156"
115
+ style="fill:#338000;fill-opacity:1;stroke:none;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
116
+ <text
117
+ inkscape:export-ydpi="8.4535837"
118
+ inkscape:export-xdpi="8.4535837"
119
+ sodipodi:linespacing="125%"
120
+ id="text4140"
121
+ y="495.36066"
122
+ x="400.5531"
123
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:44.49308777px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
124
+ xml:space="preserve"><tspan
125
+ y="495.36066"
126
+ x="400.5531"
127
+ id="tspan4142"
128
+ sodipodi:role="line">A</tspan></text>
129
+ <rect
130
+ inkscape:export-ydpi="8.4535837"
131
+ inkscape:export-xdpi="8.4535837"
132
+ style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
133
+ id="rect4158"
134
+ width="70"
135
+ height="70"
136
+ x="382.17081"
137
+ y="515.71124" />
138
+ <text
139
+ inkscape:export-ydpi="8.4535837"
140
+ inkscape:export-xdpi="8.4535837"
141
+ sodipodi:linespacing="125%"
142
+ id="text4148"
143
+ y="566.70984"
144
+ x="401.24396"
145
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40.71053314px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
146
+ xml:space="preserve"><tspan
147
+ y="566.70984"
148
+ x="401.24396"
149
+ id="tspan4150"
150
+ sodipodi:role="line">G</tspan></text>
151
+ </g>
152
+ </g>
153
+ </svg>
@@ -0,0 +1,105 @@
1
+ require 'spec_helper'
2
+
3
+ describe YAMG::Icon do
4
+
5
+ ICONS_PATH = Dir.pwd + '/spec/icons/'
6
+ OUT_PATH = Dir.pwd + '/spec/out/'
7
+
8
+ before(:all) do
9
+ FileUtils.rm_rf '/spec/out/*'
10
+ end
11
+
12
+ describe 'PNG flow' do
13
+ it 'should outputs a png file 16px > i16.png' do
14
+ out = OUT_PATH + 'i16.png'
15
+ YAMG::Icon.new(ICONS_PATH, 16).image(out)
16
+ expect(File.exist?(out)).to be_truthy
17
+ expect(File.size(out)).to eq(524) # transparency channel
18
+ img = ::MiniMagick::Image.open out
19
+ expect(img.width).to eq(16)
20
+ expect(img.height).to eq(16)
21
+ expect(img.type).to eq('PNG')
22
+ end
23
+
24
+ it 'should outputs a png file > i256.png' do
25
+ out = OUT_PATH + 'i256.png'
26
+ YAMG::Icon.new(ICONS_PATH, 256).image(out)
27
+ expect(File.exist?(out)).to be_truthy
28
+ img = ::MiniMagick::Image.open out
29
+ expect(img.type).to eq('PNG')
30
+ expect(img.width).to eq(256)
31
+ expect(img.height).to eq(256)
32
+ expect(File.size(out)).to eq(5070) # transparency channel
33
+ # expect(File.size(out)).to eq(4952) # set format?
34
+ end
35
+
36
+ it 'should outputs a png file with bg > i256bg.png' do
37
+ out = OUT_PATH + 'i256bg.png'
38
+ YAMG::Icon.new(ICONS_PATH, 256, 'black').image(out)
39
+ expect(File.exist?(out)).to be_truthy
40
+ expect(File.size(out)).to eq(5141) # transparency channel
41
+ img = ::MiniMagick::Image.open out
42
+ expect(img.width).to eq(256)
43
+ expect(img.height).to eq(256)
44
+ end
45
+
46
+ it 'should outputs a png file round > i256r.png' do
47
+ out = OUT_PATH + 'i256r.png'
48
+ YAMG::Icon.new(ICONS_PATH, 256, nil, :round).image(out)
49
+ expect(File.exist?(out)).to be_truthy
50
+ expect(File.size(out)).to eq(5089) # transparency channel
51
+ img = ::MiniMagick::Image.open out
52
+ expect(img.width).to eq(256)
53
+ expect(img.height).to eq(256)
54
+ end
55
+
56
+ it 'should outputs a png file bg & round > i256bgr.png' do
57
+ out = OUT_PATH + 'i256bgr.png'
58
+ YAMG::Icon.new(ICONS_PATH, 256, '#FF0000', :round).image(out)
59
+ expect(File.exist?(out)).to be_truthy
60
+ expect(File.size(out)).to eq(5809) # transparency channel
61
+ img = ::MiniMagick::Image.open out
62
+ expect(img.width).to eq(256)
63
+ expect(img.height).to eq(256)
64
+ end
65
+ end
66
+
67
+ describe 'ICO flow' do
68
+ it 'should output a multiple size ico file' do
69
+ out = OUT_PATH + 'favicon.ico'
70
+ YAMG::Icon.new(ICONS_PATH, 48).image(out)
71
+ expect(File.exist?(out)).to be_truthy
72
+ expect(File.size(out)).to eq(7406) # transparency channel
73
+ img = ::MiniMagick::Image.open out
74
+ expect(img.type).to eq('ICO')
75
+ end
76
+ end
77
+
78
+ it 'should have a nice find icon 16' do
79
+ expect(YAMG).to receive(:load_images).with('foo')
80
+ .and_return(['16.png', '32.png', '64.png'])
81
+ icon = YAMG::Icon.new('foo', 16)
82
+ expect(icon.find_closest_gte_icon).to eq('16.png')
83
+ end
84
+
85
+ it 'should have a nice find icon 48' do
86
+ expect(YAMG).to receive(:load_images).with('foo')
87
+ .and_return(['16.png', '32.png', '64.png'])
88
+ icon = YAMG::Icon.new('foo', 48)
89
+ expect(icon.find_closest_gte_icon).to eq('64.png')
90
+ end
91
+
92
+ it 'should have a nice find icon 256' do
93
+ expect(YAMG).to receive(:load_images).with('foo')
94
+ .and_return(['16.png', '32.png', '64.png'])
95
+ icon = YAMG::Icon.new('foo', 256)
96
+ expect(icon.find_closest_gte_icon).to eq('64.png')
97
+ end
98
+
99
+ it 'should have a nice find icon mixed names' do
100
+ expect(YAMG).to receive(:load_images).with('foo')
101
+ .and_return(['xx16.png', '32oo.png', 'x64o.png'])
102
+ icon = YAMG::Icon.new('foo', 64)
103
+ expect(icon.find_closest_gte_icon).to eq('x64o.png')
104
+ end
105
+ end
@@ -5,24 +5,12 @@ describe YAMG do
5
5
  stub_const('YAML', y = class_double('YAML'))
6
6
  expect(y).to receive(:load_file).and_return({})
7
7
 
8
- expect { YAMG.new }.to_not raise_error
8
+ expect { YAMG::CLI.new([]) }.to_not raise_error
9
9
  end
10
10
 
11
11
  describe 'stubbed' do
12
12
  let :conf do
13
13
  stub_const('YAML', class_double('YAML'))
14
14
  end
15
-
16
- it 'should read conf icon' do
17
- expect(conf).to receive(:load_file).and_return(icon: {})
18
- expect(YAMG.new.config).to eq(icon: {})
19
- end
20
-
21
- describe 'simple setup' do
22
- it 'should map true to media' do
23
- expect(conf).to receive(:load_file).and_return({})
24
- expect(YAMG.new.setup_for(true)).to eq('path' => './media')
25
- end
26
- end
27
15
  end
28
16
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yamg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcos Piccinini
@@ -71,7 +71,9 @@ files:
71
71
  - Rakefile
72
72
  - bin/yamg
73
73
  - lib/yamg.rb
74
+ - lib/yamg/assets/browserconfig.xml
74
75
  - lib/yamg/assets/dot.png
76
+ - lib/yamg/assets/manifest.json
75
77
  - lib/yamg/cli.rb
76
78
  - lib/yamg/icon.rb
77
79
  - lib/yamg/screenshot.rb
@@ -79,7 +81,12 @@ files:
79
81
  - lib/yamg/templates.yaml
80
82
  - lib/yamg/version.rb
81
83
  - lib/yamg/yamg.yml
84
+ - spec/icons/icon16.png
85
+ - spec/icons/icon32.png
86
+ - spec/icons/icon512.svg
87
+ - spec/out/.gitkeep
82
88
  - spec/spec_helper.rb
89
+ - spec/yamg/icon_spec.rb
83
90
  - spec/yamg/yamg_spec.rb
84
91
  - yamg.gemspec
85
92
  homepage: http://github.com/nofxx/yamg
@@ -107,5 +114,10 @@ signing_key:
107
114
  specification_version: 4
108
115
  summary: Yet another media generator
109
116
  test_files:
117
+ - spec/icons/icon16.png
118
+ - spec/icons/icon32.png
119
+ - spec/icons/icon512.svg
120
+ - spec/out/.gitkeep
110
121
  - spec/spec_helper.rb
122
+ - spec/yamg/icon_spec.rb
111
123
  - spec/yamg/yamg_spec.rb