[LRUG] Serialising a struct

Stephen Nelson-Smith sanelson at gmail.com
Mon Apr 14 09:37:31 PDT 2014


Hi,

On Mon, Apr 14, 2014 at 3:50 PM, Stephen Nelson-Smith <sanelson at gmail.com>wrote:


> I'm currently thinking something like (untested, caffeinated):
>
> images = ec2.describe_images(owners: ['self']).images.map(&:to_h)
> serialised_images = images.to_json
> MyEc2Struct = Struct.new(images.keys)
> canned_images = serialised_images.reduce(MyEc2Struct.new) {|s, kv|
> s[kv[0]] = kv[1]; s}
>

OK so:


images = ec2.describe_images(owners: ['self']).images.[1..3]
[10] pry(main)> images[0].image_id
=> "ami-00ccc374"
[11] pry(main)> images[0].name
=> "64-bit Debian 6.0 EBS (1.8) 2013-01-11"
File.write('serialised_images.json', images.map(&:to_h).to_json)

--- New Session ---

require 'json'
images = JSON.parse(serialised_images)
Images = Struct.new(*images[0].keys.map(&:to_sym))
Images.members
=> [:image_id,
 :image_location,
 :state,
 :owner_id,
 :public,
 :product_codes,
 :architecture,
 :image_type,
 :kernel_id,
 :ramdisk_id,
 :platform,
 :sriov_net_support,
 :state_reason,
 :image_owner_alias,
 :name,
 :description,
 :root_device_type,
 :root_device_name,
 :block_device_mappings,
 :virtualization_type,
 :tags,
 :hypervisor]

original = images.map { |img| img.reduce(Images.new) { |s, kv| s[kv[0]] =
kv[1]; s } }
[21] pry(main)> original[0].name
=> "64-bit Debian 6.0 EBS (1.8) 2013-01-11"
[22] pry(main)> original[0].image_id
=> "ami-00ccc374"

Not perfect, as there are some nested structs (eg tags) but it's a start!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lrug.org/pipermail/chat-lrug.org/attachments/20140414/0ffd0063/attachment.html>


More information about the Chat mailing list