Skip to content

Through padrino-lazy, we can include some common properties shared between the model object used a base model object

License

Notifications You must be signed in to change notification settings

WaYdotNET/padrino-lazy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LAZY Agnostic Application Generators (padrino-lazy)

Overview

Through padrino-lazy, we can include some common properties shared between the model object used a base model object

Padrino is very good framework, and almost follows the DRY principle (Don’t Repeat Yourself) When we need to have some common properties shared between the model object of our ORM, using the generator padrino-gen, We can only include these properties in each model to generate.

I hope this idea will be included in Padrino Framework.

Principle / Step

  1. generate a model

  2. convert the model into base model ( move this model into lib/ folder)

  3. save config file with model base’s list

  4. generate a model from base model

  5. generate a migration file

Install

gem install padrino-lazy –pre

Usage

Step 1-2-3

$ padrino-lazy base --c config_file --b base_model_name --f field_to_create

Step 4-5

$ padrino-lazy model --c config_file --b base_model_name --f field_to_create --m model_name

Options

--f list field to generate
--c config file's name (saved into config/ folder)
--b base model name (es: BaseModel)
--m model name to create (es: User)

Example

$ padrino-lazy base --c config --b BaseModel --f
"create_at:datetime is_active:boolean"

now we have

  • lib/base_model.rb class BaseModel

include DataMapper::Resource

# property <name>, <type>
property :id, Serial
property :create_at, DateTime
property :is_active, Boolean

end

  • config/config.yml

    ---
    - base: BaseModel
      fields: create_at:datetime is_active:boolean

$ padrino-lazy model --c config --b BaseModel --f "name:string
 have_children:boolean born:date foo:integer"  --m User
  • app/models/user.rb

    class User < BaseModel
    
      # property <name>, <type>
      property :name, String
      property :have_children, Boolean
      property :born, Date
      property :foo, Integer
    end
    
  • db/migrate/001_create_users.rb

    migration 1, :create_users do
      up do
        create_table :users do
          column :id, Integer, :serial => true
          column :name, String
          column :have_children, Boolean
          column :born, Date
          column :foo, Integer
       end
      end
    
      down do
        drop_table :users
      end
    end
    
  • db/migrate/002_add_basic_model_to_user.rb

    migration 2, :add_basic_model_to_user do
      up do
        modify_table :users do
          add_column :name, String
         add_column :have_children, Boolean
         add_column :born, Date
         add_column :foo, Integer
        end
      end
    
      down do
        modify_table :users do
          drop_column :name
         drop_column :have_children
         drop_column :born
         drop_column :foo
       end
      end
    end
    

Known issue

  • VERY VERY alpha code !! (thanks to my pig/lazy side :D )

  • –f options need dobule quote around fields

  • –b write in CamelCase

  • TESTING only with datamapper and activerecord into linux machine

TODO:

  • Test all code !

  • Use Padrino::Generators instead of Commander

  • Default config file name (very lazy :P )

THANK

Team Padrino DaddYE Piedinodifata

About

Through padrino-lazy, we can include some common properties shared between the model object used a base model object

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages