Errors treatment in a non ActiveRecord class

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!

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.

On Wed, Dec 24, 2014 at 5:08 PM, Cezinha A. [email protected]

Thanks for your reply!

I did this and now it’s perfect.

[?] Merry Xmas

2014-12-24 11:27 GMT-02:00 Vivek S. [email protected]:

@errors = {}

end
wrote:

recipient = Person.find(params[:recipient_id])
render json: invoice_product, status: :created

the controller?
To unsubscribe from this group and stop receiving emails from it, send an
You received this message because you are subscribed to the Google G.
“Ruby on Rails: Talk” group.
To unsubscribe from this group and stop receiving emails from it, send an
email to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit

https://groups.google.com/d/msgid/rubyonrails-talk/CAFKVRj-f6v1ySsT_1v1okX07V_z7PvZBNQEq4cv5c7oe3JFCtw%40mail.gmail.com

https://groups.google.com/d/msgid/rubyonrails-talk/CAFKVRj-f6v1ySsT_1v1okX07V_z7PvZBNQEq4cv5c7oe3JFCtw%40mail.gmail.com?utm_medium=email&utm_source=footer

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

César Luiz dos Anjos Júnior

Diretor

(48) 3263-7137

[image: 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