obf 0.7.6 → 0.7.7

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: d7bc4108de1735c572aa335fd826174d0d10aa7d
4
- data.tar.gz: ac27300e004ff579c4c98d2203584cd903a0a313
3
+ metadata.gz: abd25c02539cdc01e06d0621a266aff2ffcaccb9
4
+ data.tar.gz: fd5b2cdbe77059ff5059a04832a29b6b2ac8a56f
5
5
  SHA512:
6
- metadata.gz: d13ab85d3dbbdd78d6677d1b0b530aeafb2b376c951eda2e40511e5f6e75a1d6b8553e6338410d28d3c2bf6f80867c58cca52c501d68de246195478d073c824d
7
- data.tar.gz: ea87f701639ade7b7aea96915d27933f071cbafd006a06677edbf57df3474ec1dc514256e9823a29142e6b72e6f90ee42abec919610269537820057d19c22331
6
+ metadata.gz: 1f4f0079d4cabbebbf5c83c0c2f9d1cc37fc85080c23ff3793dcc7cf2d007fa46764604fd4d864571036028e654611881b7d8905f16cd16d3ff09162bb75f1f2
7
+ data.tar.gz: 72bb40d9f7930309e79c3e2628f2dd2e446b1b8a93c9f75dd065696c5a7e9ecd1dd82005466085f7720872c940ccfe76d75b06f5d3b7bc39a15401359f1c94ce
@@ -192,11 +192,12 @@ module OBF::External
192
192
  end
193
193
 
194
194
  def self.from_obf(obf_json_or_path, opts)
195
+ opts ||= {}
195
196
  obj = obf_json_or_path
196
197
  if obj.is_a?(String)
197
- obj = OBF::Utils.parse_obf(File.read(obf_json_or_path))
198
+ obj = OBF::Utils.parse_obf(File.read(obf_json_or_path), opts)
198
199
  else
199
- obj = OBF::Utils.parse_obf(obf_json_or_path)
200
+ obj = OBF::Utils.parse_obf(obf_json_or_path, opts)
200
201
  end
201
202
 
202
203
  ['images', 'sounds'].each do |type|
@@ -272,8 +273,9 @@ module OBF::External
272
273
  OBF::Utils.load_zip(obz_path) do |zipper|
273
274
  obf_opts = {'zipper' => zipper, 'images' => {}, 'sounds' => {}, 'boards' => {}}
274
275
  manifest = JSON.parse(zipper.read('manifest.json'))
276
+ obf_opts['manifest'] = manifest
275
277
  root = manifest['root']
276
- board = OBF::Utils.parse_obf(zipper.read(root))
278
+ board = OBF::Utils.parse_obf(zipper.read(root), obf_opts)
277
279
  board['path'] = root
278
280
  unvisited_boards = [board]
279
281
  visited_boards = []
@@ -286,9 +288,9 @@ module OBF::External
286
288
  if button['load_board']
287
289
  all_boards = visited_boards + unvisited_boards
288
290
  if all_boards.none?{|b| b['id'] == button['load_board']['id'] || b['path'] == button['load_board']['path'] }
289
- path = button['load_board']['path'] || manifest[button['load_board']['id']]
291
+ path = button['load_board']['path'] || (manifest['paths'] && manifest['paths']['boards'] && manifest['paths']['boards'][button['load_board']['id']])
290
292
  if path
291
- b = OBF::Utils.parse_obf(zipper.read(path))
293
+ b = OBF::Utils.parse_obf(zipper.read(path), obf_opts)
292
294
  b['path'] = path
293
295
  button['load_board']['id'] = b['id']
294
296
  unvisited_boards << b
@@ -310,11 +312,12 @@ module OBF::External
310
312
  raise "sound ids must be present and unique" unless sounds.map{|i| i['id'] }.uniq.length == sounds.length
311
313
  # TODO: try to fix the problem where multiple images or sounds have the same id --
312
314
  # this involves reaching in and updating image and sound references on generated boards..
313
- return {
315
+ res = {
314
316
  'boards' => boards,
315
317
  'images' => images,
316
318
  'sounds' => sounds
317
319
  }
320
+ res
318
321
  end
319
322
 
320
323
  def self.to_pdf(board, dest_path, opts)
@@ -193,7 +193,7 @@ module OBF::PDF
193
193
  children << button['load_board']
194
194
  all_boards = visited_boards + unvisited_boards
195
195
  if all_boards.none?{|b| b['id'] == button['load_board']['id'] || b['path'] == button['load_board']['path'] }
196
- path = button['load_board']['path'] || manifest[button['load_board']['id']]
196
+ path = button['load_board']['path'] || (manifest['paths'] && manifest['paths']['boards'] && manifest['paths']['boards'][button['load_board']['id']])
197
197
  if path
198
198
  b = OBF::Utils.parse_obf(zipper.read(path))
199
199
  b['path'] = path
@@ -215,11 +215,30 @@ module OBF::Utils
215
215
  color
216
216
  end
217
217
 
218
- def self.parse_obf(obj)
218
+ def self.parse_obf(obj, opts=nil)
219
+ opts ||= {}
219
220
  json = obj
220
221
  if obj.is_a?(String)
221
222
  json = JSON.parse(obj)
222
223
  end
224
+ if opts['manifest']
225
+ (json['buttons'] || []).each do |button|
226
+ if button['image_id']
227
+ # find image in list, if it has an id but no path, use the path from the manifest
228
+ image = (json['images'] || []).detect{|i| i['id'] == button['image_id'] }
229
+ if image && !image['path'] && !image['data'] && opts['manifest'] && opts['manifest']['images'] && opts['manifest']['images'][button['image_id']]
230
+ image['path'] = opts['manifest']['images'][button['image_id']]
231
+ end
232
+ end
233
+ if button['sound_id']
234
+ # find sound in list, if it has an id but no path, use the path from the manifest
235
+ sound = (json['sounds'] || []).detect{|s| s['id'] == button['sound_id'] }
236
+ if sound && !sound['path'] && !sound['data'] && opts['manifest'] && opts['manifest']['sounds'] && opts['manifest']['sounds'][button['sound_id']]
237
+ sound['path'] = opts['manifest']['sounds'][button['sound_id']]
238
+ end
239
+ end
240
+ end
241
+ end
223
242
  ['images', 'sounds', 'buttons'].each do |key|
224
243
  json["#{key}_hash"] = json[key]
225
244
  if json[key].is_a?(Array)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: obf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.6
4
+ version: 0.7.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Whitmer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-24 00:00:00.000000000 Z
11
+ date: 2017-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json