motion-assets 0.1.0 → 0.1.1

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: fe5eb2bdbee7006a2f514026703af1379f68f9e7
4
- data.tar.gz: dfd66401c31488c6a468ef8f866f0e38d225ac97
3
+ metadata.gz: 42a198c9ee75c5cb11f3ff165059ded24c3df0de
4
+ data.tar.gz: 8b78ee302a50bb9649193d010d92c02aef00f471
5
5
  SHA512:
6
- metadata.gz: 53add8dd45ee8a0d402f60aa305be6d4aef156d91b815ed78650e45cde07fbd7fffd7a0ac235c06f9f18a0346cf88aa3a75fb94bb26e52f1debf326652d0b567
7
- data.tar.gz: 06414c87f84ee31e5f9dbd8ea56f5a92266259ee23a579b6a4b181df976ec3f62ae557858f0cca96a15c8b39e20e26c266d25802491df68501a2076a6ed40296
6
+ metadata.gz: a765cadb43e1d4684a7028a5b48a8a03907866452b18ecaee5db0e7c884bf739345b7559720e516e9780c46a4ddfa120615bfb0ccfb1b95579525828b4ef6775
7
+ data.tar.gz: 19e8f674d082a9ddb50c6782f6d060a131ee6f0eae435879a84d402d82e5706493295da031ce896defd787b3ac5ed0a02c560bc1a524e6b68f30c4e1b5bb0e0b
data/README.md CHANGED
@@ -38,6 +38,9 @@ Motion::Project::App.setup do |app|
38
38
  # ...
39
39
  app.assets.source_icon = "./src_images/icon-1024x1024.png"
40
40
  app.assets.source_splash = "./src_images/splash-1024x1024.png"
41
+
42
+ # optional
43
+ app.assets.output_dir = "./some/directory"
41
44
  end
42
45
  ```
43
46
 
@@ -53,6 +56,8 @@ Motion::Project::App.setup do |app|
53
56
  end
54
57
  ```
55
58
 
59
+ Note : motion-assets will autopopulate your `app.icons` array with the list of created icons.
60
+
56
61
  ## Tasks
57
62
 
58
63
  To tell motion-assets to generate the assets :
@@ -62,4 +67,4 @@ $ [bundle exec] rake assets:generate
62
67
  ```
63
68
 
64
69
 
65
- note : the sample icon comes from the greal Pixelmator tool, http://www.pixelmator.com/
70
+ note : the sample icon comes from the great Pixelmator tool, http://www.pixelmator.com/
@@ -14,6 +14,10 @@ module Motion::Project
14
14
  end
15
15
 
16
16
  class Assets
17
+ BASE_SPLASH_SIZE = [2028, 2028]
18
+ BASE_IOS_ICON_SIZE = [1024, 1024]
19
+ BASE_ANDROID_ICON_SIZE = [512, 512]
20
+
17
21
  IOS_ICONS = %w{
18
22
  Icon-Small.png|29x29
19
23
  Icon-Small@2x.png|58x58
@@ -57,28 +61,36 @@ module Motion::Project
57
61
  drawable-ldpi/splash-land.png|320x200
58
62
  drawable-mdpi/splash-land.png|480x320
59
63
  drawable-xhdpi/splash-land.png|1280x720
64
+ drawable-xxhdpi/splash-land.png|1600x960
65
+ drawable-xxxhdpi/splash-land.png|1920x1280
60
66
  drawable-hdpi/splash-port.png|480x800
61
67
  drawable-ldpi/splash-port.png|200x320
62
68
  drawable-mdpi/splash-port.png|320x480
63
- drawable-xhdpi/splash-port.png|720px1280
69
+ drawable-xhdpi/splash-port.png|720x1280
70
+ drawable-xxhdpi/splash-port.png|960x1600
71
+ drawable-xxxhdpi/splash-port.png|1280x1920
64
72
  }
65
73
 
66
74
  def initialize(config)
67
75
  @config = config
68
76
  @images = []
69
- @icons = Icons.new(config)
77
+ @icons = Icons.new(@config, platform)
70
78
  @image_optim = '/Applications/ImageOptim.app/Contents/MacOS/ImageOptim'
71
79
 
72
80
  if ios?
73
81
  @icons << IOS_ICONS
74
82
  @splashes = IOS_SPLASHES
75
83
  end
84
+
76
85
  if android?
86
+ @config.icon = 'icon.png'
77
87
  @icons << ANDROID_ICONS
78
88
  @splashes = ANDROID_SPLASHES
79
89
  end
90
+
80
91
  @source_icon = "./src_images/icon.png"
81
92
  @source_splash = "./src_images/splash.png"
93
+ @output_dir = @config.resources_dirs.first
82
94
  end
83
95
 
84
96
  def source_icon=(source_icon)
@@ -89,17 +101,30 @@ module Motion::Project
89
101
  @source_splash = source_splash
90
102
  end
91
103
 
104
+ def output_dir=(output_dir)
105
+ @output_dir = output_dir
106
+ end
107
+
92
108
  def icons
93
109
  @icons
94
110
  end
95
111
 
112
+ def icons=(icons)
113
+ @icons = Icons.new(@config, platform)
114
+ if ios?
115
+ @config.icons = []
116
+ end
117
+ @icons << icons
118
+ end
119
+
96
120
  def splashes
97
121
  @splashes
98
122
  end
99
123
 
100
124
  def generate!
101
- validate_source_icon!
102
- validate_source_splash!
125
+ validate_source_icon
126
+ validate_source_splash
127
+ validate_output_dir
103
128
  generate_icons
104
129
  generate_splashes
105
130
  optimize_images
@@ -107,11 +132,17 @@ module Motion::Project
107
132
 
108
133
  protected
109
134
 
135
+ def validate_output_dir
136
+ unless File.exist?(@output_dir)
137
+ App.fail "Output directory : #{@output_dir} doesn't exist, please create it."
138
+ end
139
+ end
140
+
110
141
  def generate_splashes
111
142
  App.info "[info]", "Generating splashes..."
112
143
  @splashes.each do |splash|
113
144
  parts = splash.split('|')
114
- path = File.join(@config.resources_dirs.first, parts[0])
145
+ path = File.join(@output_dir, parts[0])
115
146
  FileUtils.mkdir_p(File.dirname(path))
116
147
  generate_image(@source_splash, path, parts[1])
117
148
  @images << path
@@ -122,12 +153,11 @@ module Motion::Project
122
153
  def generate_icons
123
154
  App.info "[info]", "Generating icons..."
124
155
  @icons.each do |icon|
125
- parts = icon.split('|')
126
- path = File.join(@config.resources_dirs.first, parts[0])
156
+ path = File.join(@output_dir, icon.name)
127
157
  FileUtils.mkdir_p(File.dirname(path))
128
- generate_image(@source_icon, path, parts[1])
158
+ generate_image(@source_icon, path, icon.dimensions)
129
159
  @images << path
130
- App.info "-", parts[0]
160
+ App.info "-", icon.name
131
161
  end
132
162
  end
133
163
 
@@ -147,35 +177,39 @@ module Motion::Project
147
177
  image.write(path)
148
178
  end
149
179
 
150
- def validate_source_icon!
180
+ def validate_source_icon
151
181
  unless File.exist?(@source_icon)
152
182
  App.fail "You have to provide a valid base icon in your rakefile : app.assets.source_icon = './some/path/image.png"
153
183
  end
154
184
  image = MiniMagick::Image.open(@source_icon)
155
- if ios? && image.dimensions != [1024, 1024]
156
- App.info "[warning]", "Your source icon image dimensions #{image.dimensions} is different from recommended dimensions : [1024, 1024]"
185
+ if ios? && image.dimensions != BASE_IOS_ICON_SIZE
186
+ App.info "[warning]", "Your source icon image dimensions #{image.dimensions} is different from recommended dimensions : #{BASE_IOS_ICON_SIZE}"
157
187
  end
158
- if android? && image.dimensions != [512, 512]
159
- App.info "[warning]", "Your source icon image dimensions #{image.dimensions} is different from recommended dimensions : [512, 512]"
188
+ if android? && image.dimensions != BASE_ANDROID_ICON_SIZE
189
+ App.info "[warning]", "Your source icon image dimensions #{image.dimensions} is different from recommended dimensions : #{BASE_ANDROID_ICON_SIZE}"
160
190
  end
161
191
  end
162
192
 
163
- def validate_source_splash!
193
+ def validate_source_splash
164
194
  unless File.exist?(@source_splash)
165
195
  App.fail "You have to provide a valid base splash in your rakefile : app.assets.source_splash = './some/path/image.png"
166
196
  end
167
197
  image = MiniMagick::Image.open(@source_splash)
168
- if image.dimensions != [2028, 2028]
169
- App.info "[warning]", "Your source splash image dimensions #{image.dimensions} is different from recommended dimensions : [2028, 2028]"
198
+ if image.dimensions != BASE_SPLASH_SIZE
199
+ App.info "[warning]", "Your source splash image dimensions #{image.dimensions} is different from recommended dimensions : #{BASE_SPLASH_SIZE}"
170
200
  end
171
201
  end
172
202
 
173
203
  def android?
174
- Motion::Project::App.template == :android
204
+ platform == :android
175
205
  end
176
206
 
177
207
  def ios?
178
- Motion::Project::App.template == :ios
208
+ platform == :ios
209
+ end
210
+
211
+ def platform
212
+ Motion::Project::App.template
179
213
  end
180
214
  end
181
215
  end
@@ -1,9 +1,11 @@
1
1
  class Icons
2
2
  include Enumerable
3
+ Struct.new("Icon", :name, :dimensions)
3
4
 
4
- def initialize(config)
5
+ def initialize(config, platform)
5
6
  @list = []
6
7
  @config = config
8
+ @platform = platform
7
9
  end
8
10
 
9
11
  def list
@@ -11,20 +13,27 @@ class Icons
11
13
  end
12
14
 
13
15
  def <<(*icons)
14
- @list << icons
15
- @list.flatten!
16
- icons.flatten.each do |icon|
17
- @config.icons << icon.split('|').first
16
+ icons.flatten.each do |icon_string|
17
+ icon = create_icon(icon_string)
18
+ @list << icon
19
+
20
+ if @platform == :ios
21
+ @config.icons << icon.name
22
+ end
18
23
  end
19
24
  self
20
25
  end
21
26
  alias_method :push, :<<
22
27
 
23
28
  def delete(*icons)
24
- @list.delete(icons)
25
- @list.flatten!
26
- icons.flatten.each do |icon|
27
- @config.icons.delete icon.split('|').first
29
+ icons.flatten.each do |icon_string|
30
+ icon = @list.find {|icon| icon.name == icon_string}
31
+
32
+ if @platform == :ios
33
+ @config.icons.delete icon.name
34
+ end
35
+
36
+ @list.delete(icon)
28
37
  end
29
38
  self
30
39
  end
@@ -32,4 +41,11 @@ class Icons
32
41
  def each(&block)
33
42
  @list.each(&block)
34
43
  end
44
+
45
+ protected
46
+
47
+ def create_icon(icon_string)
48
+ parts = icon_string.split('|')
49
+ Struct::Icon.new(parts[0], parts[1])
50
+ end
35
51
  end
@@ -1,5 +1,5 @@
1
1
  module Motion::Project
2
2
  class Assets
3
- VERSION = '0.1.0'
3
+ VERSION = '0.1.1'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion-assets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joffrey Jaffeux