Skip to content

Commit

Permalink
Refactored syntax, switched to Poltergeist for testing.
Browse files Browse the repository at this point in the history
* Now Refinery::Inquiries::Setting is inheriting Refinery::Setting
  • Loading branch information
parndt committed Sep 1, 2013
1 parent adc21d1 commit b630148
Show file tree
Hide file tree
Showing 9 changed files with 79 additions and 69 deletions.
3 changes: 3 additions & 0 deletions Gemfile
Expand Up @@ -9,6 +9,9 @@ gem 'refinerycms-acts-as-indexed', '~> 1.0.0'
group :test do group :test do
gem 'refinerycms-testing', '~> 2.1.0' gem 'refinerycms-testing', '~> 2.1.0'
gem 'capybara-email', '~> 2.1.2' gem 'capybara-email', '~> 2.1.2'
gem 'poltergeist'
gem 'pry'
gem 'pry-nav'
end end


# Database Configuration # Database Configuration
Expand Down
30 changes: 18 additions & 12 deletions app/controllers/refinery/inquiries/inquiries_controller.rb
Expand Up @@ -2,32 +2,34 @@ module Refinery
module Inquiries module Inquiries
class InquiriesController < ::ApplicationController class InquiriesController < ::ApplicationController


before_filter :find_page, :only => [:create, :new] before_filter :find_page, only: [:create, :new]
before_filter :find_thank_you_page, only: :thank_you


def thank_you def thank_you
@page = ::Refinery::Page.find_by_link_url("/contact/thank_you")
end end


def new def new
@inquiry = ::Refinery::Inquiries::Inquiry.new @inquiry = Inquiry.new
end end


def create def create
@inquiry = ::Refinery::Inquiries::Inquiry.new(params[:inquiry]) @inquiry = Inquiry.new(params[:inquiry])


if @inquiry.save if @inquiry.save
if @inquiry.ham? || Refinery::Inquiries.send_notifications_for_inquiries_marked_as_spam if @inquiry.ham? || Inquiries.send_notifications_for_inquiries_marked_as_spam
begin begin
::Refinery::Inquiries::InquiryMailer.notification(@inquiry, request).deliver InquiryMailer.notification(@inquiry, request).deliver
rescue rescue
logger.warn "There was an error delivering an inquiry notification.\n#{$!}\n" logger.warn "There was an error delivering an inquiry notification.\n#{$!}\n"
end end


begin if Setting.send_confirmation?
::Refinery::Inquiries::InquiryMailer.confirmation(@inquiry, request).deliver begin
rescue InquiryMailer.confirmation(@inquiry, request).deliver
logger.warn "There was an error delivering an inquiry confirmation:\n#{$!}\n" rescue
end if ::Refinery::Inquiries::Setting.send_confirmation? logger.warn "There was an error delivering an inquiry confirmation:\n#{$!}\n"
end
end
end end


redirect_to refinery.thank_you_inquiries_inquiries_path redirect_to refinery.thank_you_inquiries_inquiries_path
Expand All @@ -39,7 +41,11 @@ def create
protected protected


def find_page def find_page
@page = ::Refinery::Page.find_by_link_url("/contact") @page = Page.where(link_url: '/contact').first
end

def find_thank_you_page
@page = Page.where(link_url: '/contact/thank_you').first
end end


end end
Expand Down
20 changes: 11 additions & 9 deletions app/models/refinery/inquiries/inquiry.rb
Expand Up @@ -5,17 +5,19 @@ module Refinery
module Inquiries module Inquiries
class Inquiry < Refinery::Core::BaseModel class Inquiry < Refinery::Core::BaseModel


filters_spam :message_field => :message, filters_spam message_field: :message,
:email_field => :email, email_field: :email,
:author_field => :name, author_field: :name,
:other_fields => [:phone], other_fields: [:phone],
:extra_spam_words => %w() extra_spam_words: %w()


validates :name, :presence => true validates :name, presence: true
validates :email, :format=> { :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i } validates :email, format: {
validates :message, :presence => true with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
}
validates :message, presence: true


default_scope :order => 'created_at DESC' default_scope { order('created_at DESC') }


attr_accessible :name, :phone, :message, :email attr_accessible :name, :phone, :message, :email


Expand Down
49 changes: 22 additions & 27 deletions app/models/refinery/inquiries/setting.rb
@@ -1,61 +1,56 @@
require 'refinery/setting'

module Refinery module Refinery
module Inquiries module Inquiries
class Setting class Setting < ::Refinery::Setting


class << self class << self
def confirmation_body def confirmation_body
Refinery::Setting.find_or_set(:inquiry_confirmation_body, find_or_set(:inquiry_confirmation_body,
"Thank you for your inquiry %name%,\n\nThis email is a receipt to confirm we have received your inquiry and we'll be in touch shortly.\n\nThanks." "Thank you for your inquiry %name%,\n\nThis email is a receipt to confirm we have received your inquiry and we'll be in touch shortly.\n\nThanks."
) )
end end


def confirmation_subject(locale='en') def confirmation_subject(locale='en')
Refinery::Setting.find_or_set("inquiry_confirmation_subject_#{locale}".to_sym, find_or_set(:"inquiry_confirmation_subject_#{locale}",
"Thank you for your inquiry", "Thank you for your inquiry",
:scoping => "inquiries") scoping: "inquiries"
)
end end


def confirmation_subject=(value) def confirmation_subject=(value)
value.first.keys.each do |locale| value.first.keys.each do |locale|
Refinery::Setting.set("inquiry_confirmation_subject_#{locale}".to_sym, { set(:"inquiry_confirmation_subject_#{locale}", {
:value => value.first[locale.to_sym], value: value.first[locale.to_sym],
:scoping => "inquiries" scoping: "inquiries"
}) })
end end
end end


def confirmation_message(locale='en') def confirmation_message(locale='en')
Refinery::Setting.find_or_set("inquiry_confirmation_message_#{locale}".to_sym, find_or_set(:"inquiry_confirmation_message_#{locale}", confirmation_body, scoping: "inquiries")
Refinery::Setting[:inquiry_confirmation_body],
:scoping => "inquiries")
end end



def confirmation_message=(value) def confirmation_message=(value)
value.first.keys.each do |locale| value.first.keys.each do |locale|
Refinery::Setting.set("inquiry_confirmation_message_#{locale}".to_sym, { set(:"inquiry_confirmation_message_#{locale}", {
:value => value.first[locale.to_sym], value: value.first[locale.to_sym],
:scoping => "inquiries" scoping: "inquiries"
}) })
end end
end end


def notification_recipients def notification_recipients
Refinery::Setting.find_or_set(:inquiry_notification_recipients, recipients = ((Role[:refinery].users.first.email rescue nil) if defined?(Role)).to_s
((Refinery::Role[:refinery].users.first.email rescue nil) if defined?(Refinery::Role)).to_s, find_or_set(:inquiry_notification_recipients, recipients, scoping: "inquiries")
:scoping => "inquiries")
end end


def notification_subject def notification_subject
Refinery::Setting.find_or_set(:inquiry_notification_subject, find_or_set(:inquiry_notification_subject, "New inquiry from your website", scoping: "inquiries")
"New inquiry from your website",
:scoping => "inquiries")
end end

def send_confirmation? def send_confirmation?
Refinery::Setting.find_or_set(:inquiry_send_confirmation, find_or_set(:inquiry_send_confirmation, true, scoping: "inquiries")
true,
:scoping => "inquiries")
end end
end end
end end
Expand Down
4 changes: 2 additions & 2 deletions db/seeds.rb
Expand Up @@ -55,6 +55,6 @@
end end
end end


(Refinery::Inquiries::Setting.methods.sort - ActiveRecord::Base.methods).each do |setting| (Refinery::Inquiries::Setting.methods.sort - Refinery::Setting.methods).each do |setting|
Refinery::Inquiries::Setting.send(setting) unless setting.to_s =~ /=$/ Refinery::Inquiries::Setting.send(setting) if setting.to_s !~ /=\z/
end end
4 changes: 2 additions & 2 deletions spec/factories/inquiry.rb
@@ -1,7 +1,7 @@
FactoryGirl.define do FactoryGirl.define do
factory :inquiry, :class => Refinery::Inquiries::Inquiry do factory :inquiry, class: Refinery::Inquiries::Inquiry do
name "Refinery" name "Refinery"
email "refinery@cms.com" email "refinery@example.com"
message "Hello..." message "Hello..."
end end
end end
11 changes: 6 additions & 5 deletions spec/features/refinery/inquiries/mailer_spec.rb
Expand Up @@ -7,19 +7,20 @@ module Inquiries
before do before do
FactoryGirl.create(:page, :link_url => "/contact") FactoryGirl.create(:page, :link_url => "/contact")


Refinery::Inquiries::Setting.stub(:notification_recipients).and_return("rspec@refinerycms.com") Refinery::Inquiries::Setting.stub(:notification_recipients)
.and_return("rspec@refinerycms.com")


clear_emails clear_emails


visit refinery.inquiries_new_inquiry_path visit refinery.inquiries_new_inquiry_path


fill_in "Name", :with => "Ugis Ozols" fill_in "Name", with: "Ugis Ozols"
fill_in "Email", :with => "ugis.ozols@refinerycms.com" fill_in "Email", with: "ugis.ozols@refinerycms.com"
fill_in "Message", :with => "Hey, I'm testing!" fill_in "Message", with: "Hey, I'm testing!"
click_button "Send message" click_button "Send message"
end end


it "sends confirmation email" do it "sends confirmation email", :focus do
open_email("ugis.ozols@refinerycms.com") open_email("ugis.ozols@refinerycms.com")


current_email.from.should eq("Ugis Ozols [#{Refinery::Core.site_name}] <#{Refinery::Inquiries.from_name}@example.com>") current_email.from.should eq("Ugis Ozols [#{Refinery::Core.site_name}] <#{Refinery::Inquiries.from_name}@example.com>")
Expand Down
25 changes: 13 additions & 12 deletions spec/models/refinery/inquiries/inquiry_spec.rb
Expand Up @@ -5,10 +5,11 @@ module Inquiries
describe Inquiry do describe Inquiry do
describe "validations" do describe "validations" do
subject do subject do
FactoryGirl.build(:inquiry, FactoryGirl.build(:inquiry, {
:name => "Ugis Ozols", name: "Ugis Ozols",
:email => "ugis.ozols@refinerycms.com", email: "ugis.ozols@refinerycms.com",
:message => "Hey, I'm testing!") message: "Hey, I'm testing!"
})
end end


it { should be_valid } it { should be_valid }
Expand All @@ -20,9 +21,9 @@ module Inquiries


describe "default scope" do describe "default scope" do
it "orders by created_at in desc" do it "orders by created_at in desc" do
inquiry1 = FactoryGirl.create(:inquiry, :created_at => 1.hour.ago) inquiry1 = FactoryGirl.create(:inquiry, created_at: 1.hour.ago)
inquiry2 = FactoryGirl.create(:inquiry, :created_at => 2.hours.ago) inquiry2 = FactoryGirl.create(:inquiry, created_at: 2.hours.ago)
inquiries = Refinery::Inquiries::Inquiry.all inquiries = Inquiry.all
inquiries.first.should == inquiry1 inquiries.first.should == inquiry1
inquiries.second.should == inquiry2 inquiries.second.should == inquiry2
end end
Expand All @@ -31,19 +32,19 @@ module Inquiries
describe ".latest" do describe ".latest" do
it "returns latest 7 non-spam inquiries by default" do it "returns latest 7 non-spam inquiries by default" do
8.times { FactoryGirl.create(:inquiry) } 8.times { FactoryGirl.create(:inquiry) }
Refinery::Inquiries::Inquiry.last.toggle!(:spam) Inquiry.last.toggle!(:spam)
Refinery::Inquiries::Inquiry.latest.length.should == 7 Inquiry.latest.length.should == 7
end end


it "returns latest 7 inquiries including spam ones" do it "returns latest 7 inquiries including spam ones" do
7.times { FactoryGirl.create(:inquiry) } 7.times { FactoryGirl.create(:inquiry) }
Refinery::Inquiries::Inquiry.all[0..2].each { |inquiry| inquiry.toggle!(:spam) } Inquiry.all[0..2].each { |inquiry| inquiry.toggle!(:spam) }
Refinery::Inquiries::Inquiry.latest(7, true).length.should == 7 Inquiry.latest(7, true).length.should == 7
end end


it "returns latest n inquiries" do it "returns latest n inquiries" do
4.times { FactoryGirl.create(:inquiry) } 4.times { FactoryGirl.create(:inquiry) }
Refinery::Inquiries::Inquiry.latest(3).length.should == 3 Inquiry.latest(3).length.should == 3
end end
end end
end end
Expand Down
2 changes: 2 additions & 0 deletions spec/spec_helper.rb
Expand Up @@ -8,6 +8,8 @@
require 'rspec/rails' require 'rspec/rails'
require 'capybara/rspec' require 'capybara/rspec'
require 'factory_girl_rails' require 'factory_girl_rails'
require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist


Rails.backtrace_cleaner.remove_silencers! Rails.backtrace_cleaner.remove_silencers!


Expand Down

0 comments on commit b630148

Please sign in to comment.