Rails Generator Examples

Cheatsheet for common rails generator examples

  • Create a new model:
    • rails g model Invoice name:string order:integer
  • Create a join table between 2 existing models:
    • rails generate migration CreateJoinTableCustomerInvoice customer invoice


Using {{link-to}} with Bootstrap requires some extra work for expected Bootstrap Navigation Styling. (ember-cli-active-link-wrapper Addon solves issue)

Using {{link-to}} with Bootstrap requires some extra work.

Bootstrap expects 
 <li> <a> </a> <li>

Additionally bootstrap expects a class="active" attribute on the <li>
Ember.js will mark the class="active" on the <a> when you use {{link-to}}

This will break the boostrap styling.

You can use the below ember add-on to make this easier, essentially it introduce a new component {{active-link}}
You use {{active-link}} instead of <li>

https://github.com/alexspeller/ember-cli-active-link-wrapper


<ul class="nav nav-tabs" role="tablist">
{{#active-link}}
  {{#link-to "foo" }}Foo{{/link-to}}
{{/active-link}}
{{#active-link}}
  {{#link-to "bar" }}Bar{{/link-to}}
{{/active-link}}
</ul>

Building RHEL Box for Vagrant

Libvirt:

Virtual Box

  • Example of building a RHEL 7 box for VirtualBox and Vagrant
    • Referenced Blog Post:
    • Assumunptions:
      • we are building this on OSX
      • we have already downloaded an ISO for RHEL 7.2
    • Versions tested with:
      • VirtualBox 5.0.16
      • Packer 0.9.0
    • Steps:
      • brew install packer
      • git clone https://github.com/chef/bento.git
      • cd bento
      • mkdir -p iso/rhel
      • Modify rhel-7.2-x86_64.json
        • Update 'iso_name' so it points to the correct ISO
      • Copy your downloaded ISO to ./iso/rhel
      • $ time packer build -only=virtualbox-iso -var 'mirror=file:///git/vagrant/bento/iso' rhel-7.2-x86_64.json
        • update the mirror variable to point to the correct directory, for me I'm running out of /git/vagrant/bento
        • took ~10 minutes to finish on my Macbook Pro
      • vagrant box add rhel72_test builds/rhel-7.2.virtualbox.box


Converting an existing qcow2 image to VirtualBox format:

  • qemu-img convert -O vdi vda.img vda.vdi
    • Note:  For Vagrant usage, we wouldn't want to just convert an existing libvirt image to virtualbox format, we will want to also install virtualbox guest additions to shared folders will function in vagrant<->virtualbox

Sed example: update a value in a block of a config file

Sed example for updating a value in a block in a config file

Thanks to Jason Montleon for the example

[jmontleo@jmontleo ~]$ cat alpha.txt 
[lazy]
#enabled: false

[foo]
#enabled: false
[jmontleo@jmontleo ~]$ sed -i '/^\[lazy\]$/{$!{N;s/^\[lazy\]\n#enabled: false$/[lazy]\n#enabled: true/;ty;P;D;:y}}' alpha.txt
[jmontleo@jmontleo ~]$ cat alpha.txt 
[lazy]
#enabled: true

[foo]
#enabled: false


Reference: http://unix.stackexchange.com/questions/26284/how-can-i-use-sed-to-replace-a-multi-line-string

Building 'pg' gem on OSX when using Postgres.app

Error seen during "gem install pg"

Installing pg 0.18.3 with native extensions

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /Users/jmatthews/.rvm/rubies/ruby-2.2.2/bin/ruby -r ./siteconf20160219-13102-1ygzen8.rb extconf.rb
checking for pg_config... no
No pg_config... trying anyway. If building fails, please try again with
 --with-pg-config=/path/to/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
	--with-opt-dir
	--without-opt-dir
	--with-opt-include
	--without-opt-include=${opt-dir}/include
	--with-opt-lib
	--without-opt-lib=${opt-dir}/lib
	--with-make-prog
	--without-make-prog
	--srcdir=.
	--curdir
	--ruby=/Users/jmatthews/.rvm/rubies/ruby-2.2.2/bin/$(RUBY_BASE_NAME)
	--with-pg
	--without-pg
	--enable-windows-cross
	--disable-windows-cross
	--with-pg-config
	--without-pg-config
	--with-pg_config
	--without-pg_config
	--with-pg-dir
	--without-pg-dir
	--with-pg-include
	--without-pg-include=${pg-dir}/include
	--with-pg-lib
	--without-pg-lib=${pg-dir}/lib

extconf failed, exit code 1

Gem files will remain installed in /Users/jmatthews/.rvm/gems/ruby-2.2.2/gems/pg-0.18.3 for inspection.
Results logged to /Users/jmatthews/.rvm/gems/ruby-2.2.2/extensions/x86_64-darwin-14/2.2.0-static/pg-0.18.3/gem_make.out

Solution

$ gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.4/bin/pg_config
Building native extensions with: '--with-pg-config=/Applications/Postgres.app/Contents/Versions/9.4/bin/pg_config'
This could take a while...
Successfully installed pg-0.18.4
Parsing documentation for pg-0.18.4
Installing ri documentation for pg-0.18.4
Done installing documentation for pg after 3 seconds
1 gem installed

With Bundler

bundle config build.pg --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.4/bin/pg_config
bundle install

ember-cli examples

ember g model my-model name:string

ember generate route my-route-name

ember generate controller name-of-my-route

ember g http-mock room_attributes

ember g route admin/room_attributes/room_attribute --path=':id'

ember g route admin/room_attributes/index

ember g controller "admin/items/item"

ember g controller "admin/room-elements/room-element"


ember g route admin/styles

ember g route admin/styles/style --path=':style_id'


ember g http-mock style

ember g model style




Ruby + Ember.js: ActiveModelSerializers

Notes on configuring Ruby on Rails to use ActiveModelSerializers with Ember.js


Ruby Notes:

Configure ActiveModelSerializers to use 'embed = :ids, embed_in_root = true'


Ember will expect the response to be in a format like this:
{
  "famous_person": {
    "id": 1,
    "first_name": "Barack",
    "last_name": "Obama",
    "occupation": "President"
  }
}

Controller needs to reflect that the JSON parameters will be included in a hash of the object's name
Example:
        desc 'Create a widget.'
        params do
          requires :widget, type: Hash do
            requires :name, type: String, desc: 'Widget name'
          end
        end
        post do
          widget_params = params["widget"]
          Widget.create!({
            name: widget_params[:name],
          })
        end


Logging:


To enable logging of API requests add the gem  'grape-middleware-logger' to your Gemfile
    gem 'grape', '>= 0.14.0'
    gem 'grape-middleware-logger'




Ember Notes:

  1. ember install active-model-adapter
  2. Follow the instructions at -> https://github.com/ember-data/active-model-adapter#usage

 



Ruby Testing

RSpec


Examples