0.0
No release in over 3 years
Low commit activity in last 3 years
Gem to create Form records that handles multiple changes wrapped in a transaction
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

>= 4.2.0, < 6
>= 4.2.0, < 6
= 1.0.5
 Project Readme

TransForms

Gem Version Build Status Code Climate Test Coverage

TransForms is short for Transactional Forms. I created it mainly because I felt that the ActiveRecord Models all to often get cluttered with a lot of conditional validations and processing. As some of my models grew, I noticed that most of the mess was caused by complex validations and callbacks that were sometimes needed, and other times they were out of scope and had to be skipped, just to allow the record to be saved. I felt that there was another layer missing.

By placing some of the logic and validations, that only needs to be processed in certain scenarios, into dedicated Form Models, the ActiveRecord Models got a lot cleaner. And in the process I gained more control of the save transaction. And the greatest benefit of this setup is the ability to easily update multiple records without having to rely on messy callbacks and exceptions in association validations.

This is the first extract of what I have been using in one of my projects. So far it is still missing some of the functionality I have in the original (like confirmation handling when conflicts occur) but the core is there. And more will come as I manage to detach it from the more specific business logic.

Installation

Add this line to your application's Gemfile:

gem 'trans_forms'

And then execute:

$ bundle

Or install it yourself as:

$ gem install trans_forms

Writing Form Models

Form Models inherit from TransForms::FormBase and live in the app/trans_forms directory of your application.

# app/trans_forms/post_form.rb
class PostForm < TransForms::FormBase
  # ...
end

Generators

To manually generate a Form Model, you can run...

rails g trans_form PostForm

... to create a PostForm Form Model.

Shared Form Model Methods

You might want to add some default functionality to all your Form Models. The common practice to accomplish this is to have an application specific model that inherits from the FormBase. Then you have all of your FormModels inherit from this model instead.

You can generate a default model like this by running:

TODO: Add generator

This will add an ApplicationTransForm model...

# app/trans_forms/application_trans_form.rb
class ApplicationTransForm < TransForms::FormBase
  # ...
end

... that you can use in you Form Models:

class PostForm < ApplicationTransForm
  # ...
end

Note that by having a model with the exact name ApplicationTransForm, the generator for new Form Models will by default inherit from that model instead of the TransForm::FormBase

Contributing

  1. Fork it ( https://github.com/dannemanne/trans_forms/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request