开发者

refactoring rails3 models with use with an external model API

开发者 https://www.devze.com 2023-03-06 17:37 出处:网络
How could I optimize (refactor) this non activerecord based model in rails3 that i have created.? application.rb contains this:

How could I optimize (refactor) this non activerecord based model in rails3 that i have created.?

application.rb contains this:

CS = CloudServers::Connection.new(:username => '<hidden>', :api_key => '<hidden>')

cloudserver.rb (model) contains this:

class Clou开发者_运维知识库dserver
  # extend ActiveModel::Naming


  attr_reader :id
  attr_reader :name
  attr_reader :image_id
  attr_reader :flavor_id
  attr_reader :status
  attr_reader :progress
  attr_reader :host_id

  def initialize(id,name,image_id,flavor_id,status,progress,host_id)
    @id = id
    @name = name
    @image_id = image_id
    @flavor_id = flavor_id
    @status = status
    @progres = progress
    @host_id = host_id
  end

  def self.all
    server = CS.servers.map { |i|
      new(i[:id],i[:name],i[:imageId],i[:flavorId],i[:status],i[:progress],i[:hostId])
      # new(i)
    }
  end

  def self.find(param)
    all.detect { |l| l.id == param.to_i } || raise(ActiveRecord::RecordNotFound)
  end

  # def self.new
  #     server = CS.create_server(:name => "BOOYA", :imageId => 49, :flavorId => 2, :metadata => {'Luke' => 'Awesome'})
  #   end

end

FYI i am trying to build rails models for this api: https://github.com/rackspace/ruby-cloudservers

should I bother or just have the controllers access the CS Object directly


Just for the sake of refactoring, here's a shorter way of writing the same class

class Cloudserver < Struct.new(:id, :name, :image_id, :flavor_id, :status, :progress, :host_id)

  class << self
    def all
      server = CS.servers.map { |i|
        new(i[:id],i[:name],i[:imageId],i[:flavorId],i[:status],i[:progress],i[:hostId])
      }
    end

    def find
      all.detect { |l| l.id == param.to_i } || raise(ActiveRecord::RecordNotFound)
    end
  end

end
0

精彩评论

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