开发者

Interacting With Class Objects in Ruby

开发者 https://www.devze.com 2022-12-28 04:17 出处:网络
How can I interact with objects I\'ve created based on their given attributes in Ruby? To give some context, I\'m parsing a text file that might have several hundred entries like the following:

How can I interact with objects I've created based on their given attributes in Ruby?

To give some context, I'm parsing a text file that might have several hundred entries like the following:

ASIN: B00137RNIQ

-------------------------Status Info-------------------------

Upload created: 2010-04-09 09:33:45

Upload state: Imported开发者_运维知识库

Upload state id: 3

I can parse the above with regular expressions and use the data to create new objects in a "Product" class:

class Product
  attr_reader :asin, :creation_date, :upload_state, :upload_state_id

  def initialize(asin, creation_date, upload_state, upload_state_id)
    @asin = asin 
    @creation_date = creation_date
    @upload_state = upload_state
    @upload_state_id = upload_state_id
  end
end

After parsing, the raw text from above will be stored in an object that look like this:

[#<Product:0x00000101006ef8 @asin="B00137RNIQ", @creation_date="2010-04-09 09:33:45  ", @upload_state="Imported  ", @upload_state_id="3">]

How can I then interact with the newly created class objects? For example, how might I pull all the creation dates for objects with an upload_state_id of 3? I get the feeling I'm going to have to write class methods, but I'm a bit stuck on where to start.


You would need to store the Product objects in a collection. I'll use an array

product_collection = []
# keep adding parse products into the collection as many as they are
product_collection << parsed_product_obj

#next select the subset where upload_state_ud = 3
state_3_products = product_collection.select{|product| product.upload_state_id == 3}

attr reader is a declarative way of defining properties/attributes on your product class. So you can access each value as obj.attribute like I have done for upload_state_id above.

select selects the elements in the target collection, which meet a specific criteria. Each element is assigned to product, and if the criteria evaluates to true is placed in the output collection.

0

精彩评论

暂无评论...
验证码 换一张
取 消