ronen barzel
2013-Mar-11 23:54 UTC
Any interest in various features from "schema_plus" gem?
Hello (I''m new to this group so please pardon any inappropriateness), I''m a primary maintainer of the schema_plus gem<https://github.com/lomba/schema_plus/>, which adds some capabilities to rails'' schema definitions. The gem has been around for several years and is pretty reliable. I''ve been wondering whether there''d be interest in folding some of its features into rails core. (This is spurred by 3.2.13.rc2 breaking some of the monkey patches that make the gem work. Instead of monkeying around some more to fix them, why not merge them into rails?) I''ll give a quick overview of the features it provides. Full details at schema_plus <https://github.com/lomba/schema_plus/> of course. (All migration features get dumped properly.) Each feature could be worth discussing in its own thread, but I didn''t want to spam this list with 6 different posts my first time out. So I figured I''d test the waters first to see if there''s any interest, and if so can spin off separate threads. Index definitions: t.index :column # has already been added in 3.2.13.rc2 t.string :column, index: true # shorthand to define index on the column. t.string :column, index: :unique # shorthand to define a unique index t.string :column, index: { name: "myname", unique: true } # hash for detailed options t.string :column, index: { with: [:other1, :other2] } # supports multi-column indexes t.string :column, index: { conditions: ''deleted_at IS NULL'' } # support for Postgresql conditions, expression, index methods, case-insensitive Foreign-key constraints: t.integer :post_id, foreign_key: true # creates a foreign key constraint to table posts t.belongs_to :post, foreign_key: { on_delete: :cascade } # has various options connection.foreign_keys(table) #=> array of ForeignKeyDefinition objects # and add_foreign_key, remove_foreign_key, connection.reverse_foreign_keys # schema_plus actually has ''foreign_key: true'' as the default behavior, for rails i''d probably make the default be false (configurable) Views: create_view :posts_commented_by_staff, Post.joins(comment: user).where(users: {role: ''staff''}).uniq create_view :uncommented_posts, "SELECT * FROM posts LEFT OUTER JOIN comments ON comments.post_id = posts.id WHERE comments.id IS NULL" And a few other smaller things: drop_table :table_name, if_exists: true, cascade: true # :if_exists and :cascade options to drop_table t.datetime :seen_at, default: { expr: ''NOW()'' } # default expressions post.update_attributes(category: ActiveRecord::DB_DEFAULT) # instruct rails to use the Cheers, -ronen -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-core+unsubscribe@googlegroups.com. To post to this group, send email to rubyonrails-core@googlegroups.com. Visit this group at http://groups.google.com/group/rubyonrails-core?hl=en. For more options, visit https://groups.google.com/groups/opt_out.