yamg 0.3.8 → 0.5.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 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