Skip to content

Commit

Permalink
Wriiten the controller Specs ref #3
Browse files Browse the repository at this point in the history
Also set the basic Layout
Please enter the commit message for your changes. Lines starting
  • Loading branch information
kanhaiyasharma007 committed Jun 30, 2014
1 parent 9acebf3 commit 774a8c6
Show file tree
Hide file tree
Showing 11 changed files with 312 additions and 21 deletions.
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,4 @@ group :development, :test do
gem 'simplecov'
end

# Use to count the successful operations in mongodb
gem 'simple_form'
4 changes: 4 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,9 @@ GEM
json
redis (>= 3.0.6)
redis-namespace (>= 1.3.1)
simple_form (3.0.2)
actionpack (~> 4.0)
activemodel (~> 4.0)
simplecov (0.8.2)
docile (~> 1.1.0)
multi_json
Expand Down Expand Up @@ -247,6 +250,7 @@ DEPENDENCIES
sdoc (~> 0.4.0)
sendgrid
sidekiq
simple_form
simplecov
spring
therubyracer
Expand Down
10 changes: 7 additions & 3 deletions app/views/layouts/application.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,18 @@

%ul.nav.navbar-nav
%li.active
%a{href: "#"}
%a{href: "#{home_index_path}"}
%h4 Home
%li
%a{href: "#"}
%h4 Newsletters
%li
%a{href: "#"}
%h4 Create New
%a{href: "#{new_user_path}"}
%h4 Add New User
%li
%a{href: "#{users_path}"}
%h4 All Users


%ul.nav.navbar-nav.navbar-right
%li.active
Expand Down
13 changes: 8 additions & 5 deletions app/views/users/_form.html.haml
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
= form_for @user do |f|
Email: #{f.text_field :email_id}
Subcription: #{f.text_field :is_subscribed}
Joined: #{f.text_field :joined_on}
Source: #{f.text_field :source}#{f.submit "Add User Id"}
= simple_form_for (@user) do |f|
.inputs
= f.input :email_id
= f.input :is_subscribed
= f.input :joined_on
= f.input :source
= f.button :submit

13 changes: 1 addition & 12 deletions app/views/users/index.html.haml
Original file line number Diff line number Diff line change
@@ -1,14 +1,4 @@










%table
%table.table.table-striped
- @users.each do |user|
%tr
%td
Expand All @@ -18,4 +8,3 @@
%td
= link_to "Delete", user_path(user), method: :delete
%tr
= link_to "Add User Id", new_user_path
145 changes: 145 additions & 0 deletions config/initializers/simple_form.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
# Use this setup block to configure all options available in SimpleForm.
SimpleForm.setup do |config|
# Wrappers are used by the form builder to generate a
# complete input. You can remove any component from the
# wrapper, change the order or even add your own to the
# stack. The options given below are used to wrap the
# whole input.
config.wrappers :default, class: :input,
hint_class: :field_with_hint, error_class: :field_with_errors do |b|
## Extensions enabled by default
# Any of these extensions can be disabled for a
# given input by passing: `f.input EXTENSION_NAME => false`.
# You can make any of these extensions optional by
# renaming `b.use` to `b.optional`.

# Determines whether to use HTML5 (:email, :url, ...)
# and required attributes
b.use :html5

# Calculates placeholders automatically from I18n
# You can also pass a string as f.input placeholder: "Placeholder"
b.use :placeholder

## Optional extensions
# They are disabled unless you pass `f.input EXTENSION_NAME => :lookup`
# to the input. If so, they will retrieve the values from the model
# if any exists. If you want to enable the lookup for any of those
# extensions by default, you can change `b.optional` to `b.use`.

# Calculates maxlength from length validations for string inputs
b.optional :maxlength

# Calculates pattern from format validations for string inputs
b.optional :pattern

# Calculates min and max from length validations for numeric inputs
b.optional :min_max

# Calculates readonly automatically from readonly attributes
b.optional :readonly

## Inputs
b.use :label_input
b.use :hint, wrap_with: { tag: :span, class: :hint }
b.use :error, wrap_with: { tag: :span, class: :error }
end

# The default wrapper to be used by the FormBuilder.
config.default_wrapper = :default

# Define the way to render check boxes / radio buttons with labels.
# Defaults to :nested for bootstrap config.
# inline: input + label
# nested: label > input
config.boolean_style = :nested

# Default class for buttons
config.button_class = 'btn'

# Method used to tidy up errors. Specify any Rails Array method.
# :first lists the first message for each field.
# Use :to_sentence to list all errors for each field.
# config.error_method = :first

# Default tag used for error notification helper.
config.error_notification_tag = :div

# CSS class to add for error notification helper.
config.error_notification_class = 'alert alert-error'

# ID to add for error notification helper.
# config.error_notification_id = nil

# Series of attempts to detect a default label method for collection.
# config.collection_label_methods = [ :to_label, :name, :title, :to_s ]

# Series of attempts to detect a default value method for collection.
# config.collection_value_methods = [ :id, :to_s ]

# You can wrap a collection of radio/check boxes in a pre-defined tag, defaulting to none.
# config.collection_wrapper_tag = nil

# You can define the class to use on all collection wrappers. Defaulting to none.
# config.collection_wrapper_class = nil

# You can wrap each item in a collection of radio/check boxes with a tag,
# defaulting to :span. Please note that when using :boolean_style = :nested,
# SimpleForm will force this option to be a label.
# config.item_wrapper_tag = :span

# You can define a class to use in all item wrappers. Defaulting to none.
# config.item_wrapper_class = nil

# How the label text should be generated altogether with the required text.
# config.label_text = lambda { |label, required| "#{required} #{label}" }

# You can define the class to use on all labels. Default is nil.
config.label_class = 'control-label'

# You can define the class to use on all forms. Default is simple_form.
# config.form_class = :simple_form

# You can define which elements should obtain additional classes
# config.generate_additional_classes_for = [:wrapper, :label, :input]

# Whether attributes are required by default (or not). Default is true.
# config.required_by_default = true

# Tell browsers whether to use the native HTML5 validations (novalidate form option).
# These validations are enabled in SimpleForm's internal config but disabled by default
# in this configuration, which is recommended due to some quirks from different browsers.
# To stop SimpleForm from generating the novalidate option, enabling the HTML5 validations,
# change this configuration to true.
config.browser_validations = false

# Collection of methods to detect if a file type was given.
# config.file_methods = [ :mounted_as, :file?, :public_filename ]

# Custom mappings for input types. This should be a hash containing a regexp
# to match as key, and the input type that will be used when the field name
# matches the regexp as value.
# config.input_mappings = { /count/ => :integer }

# Custom wrappers for input types. This should be a hash containing an input
# type as key and the wrapper that will be used for all inputs with specified type.
# config.wrapper_mappings = { string: :prepend }

# Default priority for time_zone inputs.
# config.time_zone_priority = nil

# Default priority for country inputs.
# config.country_priority = nil

# When false, do not use translations for labels.
# config.translate_labels = true

# Automatically discover new inputs in Rails' autoload path.
# config.inputs_discovery = true

# Cache SimpleForm inputs discovery
# config.cache_discovery = !Rails.env.development?

# Default class for inputs
# config.input_class = nil
end
45 changes: 45 additions & 0 deletions config/initializers/simple_form_bootstrap.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Use this setup block to configure all options available in SimpleForm.
SimpleForm.setup do |config|
config.wrappers :bootstrap, tag: 'div', class: 'control-group', error_class: 'error' do |b|
b.use :html5
b.use :placeholder
b.use :label
b.wrapper tag: 'div', class: 'controls' do |ba|
ba.use :input
ba.use :error, wrap_with: { tag: 'span', class: 'help-inline' }
ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
end
end

config.wrappers :prepend, tag: 'div', class: "control-group", error_class: 'error' do |b|
b.use :html5
b.use :placeholder
b.use :label
b.wrapper tag: 'div', class: 'controls' do |input|
input.wrapper tag: 'div', class: 'input-prepend' do |prepend|
prepend.use :input
end
input.use :hint, wrap_with: { tag: 'span', class: 'help-block' }
input.use :error, wrap_with: { tag: 'span', class: 'help-inline' }
end
end

config.wrappers :append, tag: 'div', class: "control-group", error_class: 'error' do |b|
b.use :html5
b.use :placeholder
b.use :label
b.wrapper tag: 'div', class: 'controls' do |input|
input.wrapper tag: 'div', class: 'input-append' do |append|
append.use :input
end
input.use :hint, wrap_with: { tag: 'span', class: 'help-block' }
input.use :error, wrap_with: { tag: 'span', class: 'help-inline' }
end
end

# Wrappers for forms and inputs using the Twitter Bootstrap toolkit.
# Check the Bootstrap docs (http://twitter.github.com/bootstrap)
# to learn about the different styles for forms and inputs,
# buttons and other elements.
config.default_wrapper = :bootstrap
end
26 changes: 26 additions & 0 deletions config/locales/simple_form.en.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
en:
simple_form:
"yes": 'Yes'
"no": 'No'
required:
text: 'required'
mark: '*'
# You can uncomment the line below if you need to overwrite the whole required html.
# When using html, text and mark won't be used.
# html: '<abbr title="required">*</abbr>'
error_notification:
default_message: "Please review the problems below:"
# Labels and hints examples
# labels:
# defaults:
# password: 'Password'
# user:
# new:
# email: 'E-mail to sign in.'
# edit:
# email: 'E-mail.'
# hints:
# defaults:
# username: 'User name to sign in.'
# password: 'No special characters, please.'

1 change: 1 addition & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
Rails.application.routes.draw do
resources :users
resources :newsletters
resources :home
root :to => "home#index"

# The priority is based upon order of creation: first created -> highest priority.
Expand Down
10 changes: 10 additions & 0 deletions lib/templates/haml/scaffold/_form.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
= simple_form_for(@<%= singular_table_name %>) do |f|
= f.error_notification

.form-inputs
<%- attributes.each do |attribute| -%>
= f.<%= attribute.reference? ? :association : :input %> :<%= attribute.name %>
<%- end -%>

.form-actions
= f.button :submit
64 changes: 64 additions & 0 deletions spec/controllers/users_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,69 @@
require 'rails_helper'

RSpec.describe UsersController, :type => :controller do

context "Get index" do
it "list of user email" do
get :index
expect(response).to render_template("index")
end
end

context "GET show" do
let(:user) {FactoryGirl.create(:user)}
it "show the details of the users" do
get :show, {:id => user.id}
expect(response).to render_template("show")
end
end

context "GET new" do
let(:new_user) {FactoryGirl.attributes_for(:user)}
it "display new form for adding user" do
post :new, {user: new_user}
expect(response).to render_template("new")
end
end

context " POST create" do
let(:new_user) {FactoryGirl.attributes_for(:user)}
it "creates a new user" do
post :create, {user: new_user}
expect(response).to redirect_to(users_path)
end
it "not arise" do
post :create, {user: new_user}
expect(response).not_to render_template("new")
end
end

context "GET edit" do
let(:new_user) {FactoryGirl.create(:user)}
it "fetches the specific all the users" do
get :edit, {:id => new_user.id}
expect(response).to render_template("edit")
end
end


context "DELETE delete" do
let(:user) {FactoryGirl.create(:user)}
it "delete an user" do
delete :destroy, {:id => user.id}
expect(response).to redirect_to(users_path)
end
end


context "PUT update" do
let(:new_user) {FactoryGirl.create(:user)}
it "updates details of specified user" do
patch :update, {:id =>new_user.id, :user => { :email_id => new_user.email_id}}
expect(response).to redirect_to(users_path)
end
it " not arise" do
put :update, {:id =>new_user.id, :user => { :email => new_user.email_id}}
expect(response).not_to render_template("edit")
end
end
end

0 comments on commit 774a8c6

Please sign in to comment.