Errors treatment in a non ActiveRecord class

4 views
Skip to first unread message

Cezinha Anjos

unread,
Dec 24, 2014, 6:38:06 AM12/24/14
to rubyonra...@googlegroups.com
Hi everyone! Are you ok? I hope yes...

I'm working on a class whose its responsibility is calculate Brazilian taxes.

Its use is so and so like this:

    invoice_product = InvoiceProduct.new(filtered_params)
    operationkind = Operationkind.find(params[:operationkind_id])
    recipient = Person.find(params[:recipient_id])

    finder = Taxes::Premisefinder.new

    finder.find(
      current_user.licenciated,
      recipient.city.uf,
      operationkind,
      invoice_product.product.taxgroup,
      invoice_product)

    render json: invoice_product, status: :created



It's used in a controller to respond as json in a rest API. It's not a ActiveRecord descendent class.

My doubt is: what is the best way to collect the possible errors generated from Taxes::Premisefinder?

Should I do Taxes::Premisefinder generates exceptions and catch them on the controller?

Should I use similar strategy of ActiveRecord using Errrors class?

In this case, what's the Rails way to work?

Thanks!

Vivek Sampara

unread,
Dec 24, 2014, 8:27:35 AM12/24/14
to rubyonra...@googlegroups.com
Hi Anjos, 

Which is the class that is not ActiveRecord descendent ? Im assuming Taxes::Premisefinder

define an errors class this way 

class Error
  attr_accessor :errors
  def initialize
    @errors = {}
  end
  def add(key, message)
    self.errors[key] = message
  end
end

class Car
  def errors
    @errors ||= Error.new
  end
end

@car = Car.new
@car.errors.add(:name, "Invalid")

And you can define valid? method and add errors accordingly. 

Its not perfect but can be a good starting point. 


--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/f5546b00-c752-476a-86cc-3e19621152ce%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Cezinha - ASSEINFO

unread,
Dec 24, 2014, 4:19:27 PM12/24/14
to rubyonra...@googlegroups.com
Thanks for your reply!

I did this and now it's perfect.

 Merry Xmas 


For more options, visit https://groups.google.com/d/optout.



--


César Luiz dos Anjos Júnior

Diretor

(48) 3263-7137
http://www.asseinfo.com.br



Descrição: Descrição: C:\assinatura_email\logo.jpg 

"A curiosidade é um dos maiores sinais de vitalidade de um profissional.”

Jim Collins

 

“Keep learning like a crazy...”

Uncle Bob

Reply all
Reply to author
Forward
0 new messages