contactus 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +36 -0
  4. data/Rakefile +30 -0
  5. data/app/controllers/contactus/application_controller.rb +5 -0
  6. data/app/controllers/contactus/contact_forms_controller.rb +31 -0
  7. data/app/models/contactus/contact_form.rb +43 -0
  8. data/app/views/contactus/contact_forms/create.html.haml +2 -0
  9. data/app/views/contactus/contact_forms/new.html.haml +11 -0
  10. data/config/locales/es.yml +31 -0
  11. data/config/routes.rb +9 -0
  12. data/lib/contactus.rb +21 -0
  13. data/lib/contactus/engine.rb +17 -0
  14. data/lib/contactus/tasks/install.rb +35 -0
  15. data/lib/contactus/version.rb +3 -0
  16. data/lib/tasks/hola_tasks.rake +10 -0
  17. data/lib/templates/contactus.rb +17 -0
  18. data/spec/acceptance/contactus/contact_forms_spec.rb +44 -0
  19. data/spec/dummy/README.rdoc +28 -0
  20. data/spec/dummy/Rakefile +6 -0
  21. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  22. data/spec/dummy/app/controllers/welcome_controller.rb +2 -0
  23. data/spec/dummy/app/views/layouts/application.html.erb +17 -0
  24. data/spec/dummy/app/views/welcome/index.html.haml +0 -0
  25. data/spec/dummy/bin/bundle +3 -0
  26. data/spec/dummy/bin/rails +4 -0
  27. data/spec/dummy/bin/rake +4 -0
  28. data/spec/dummy/config.ru +4 -0
  29. data/spec/dummy/config/application.rb +23 -0
  30. data/spec/dummy/config/boot.rb +5 -0
  31. data/spec/dummy/config/database.yml +25 -0
  32. data/spec/dummy/config/environment.rb +5 -0
  33. data/spec/dummy/config/environments/development.rb +32 -0
  34. data/spec/dummy/config/environments/production.rb +80 -0
  35. data/spec/dummy/config/environments/test.rb +36 -0
  36. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  37. data/spec/dummy/config/initializers/contactus.rb +14 -0
  38. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  39. data/spec/dummy/config/initializers/inflections.rb +16 -0
  40. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  41. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  42. data/spec/dummy/config/initializers/session_store.rb +3 -0
  43. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  44. data/spec/dummy/config/locales/en.yml +23 -0
  45. data/spec/dummy/config/routes.rb +3 -0
  46. data/spec/dummy/db/development.sqlite3 +0 -0
  47. data/spec/dummy/db/schema.rb +16 -0
  48. data/spec/dummy/db/test.sqlite3 +0 -0
  49. data/spec/dummy/log/development.log +33341 -0
  50. data/spec/dummy/log/test.log +7165 -0
  51. data/spec/dummy/public/404.html +58 -0
  52. data/spec/dummy/public/422.html +58 -0
  53. data/spec/dummy/public/500.html +57 -0
  54. data/spec/dummy/public/favicon.ico +0 -0
  55. data/spec/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  56. data/spec/dummy/tmp/cache/assets/development/sprockets/2dfab99b7c59e9348262d762b6812d5e +0 -0
  57. data/spec/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  58. data/spec/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  59. data/spec/dummy/tmp/cache/assets/development/sprockets/396416ac5502a70f4a605dbfa52bcf57 +0 -0
  60. data/spec/dummy/tmp/cache/assets/development/sprockets/4ea2fca734744bdca2af1f2681057f0e +0 -0
  61. data/spec/dummy/tmp/cache/assets/development/sprockets/6c76b57c176c88c8608b0c573d9e4d73 +0 -0
  62. data/spec/dummy/tmp/cache/assets/development/sprockets/7dbe77fde0bcb62545797187d586459a +0 -0
  63. data/spec/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  64. data/spec/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  65. data/spec/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  66. data/spec/dummy/tmp/cache/assets/development/sprockets/fb3c798521567a09f64a61244642805b +0 -0
  67. data/spec/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  68. data/spec/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  69. data/spec/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  70. data/spec/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  71. data/spec/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  72. data/spec/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  73. data/spec/factories/contact_form.rb +9 -0
  74. data/spec/models/contactus/contact_form_spec.rb +86 -0
  75. data/spec/spec_helper.rb +14 -0
  76. metadata +317 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3213c8e94234c29cb803843ccb8da865c6d3e39b
4
+ data.tar.gz: a53bfaf1530e4cbc21891206bd05ab8871fbc6f5
5
+ SHA512:
6
+ metadata.gz: 8d0a46381c07ace550f26f4036e06812034a1c2b3170180c16f3692087003a3bb9b35d836165fbd5df6ead8b74411f1104ac4668b23e9f757e57d336c374cd09
7
+ data.tar.gz: 5fff18731845e27020ebe2cf00fbbba615c2e853ed8cf3db440950721f31833ff7580920da555aca2b2ee5c7972924c11fe97363fb3292e0d302e3a04df49b34
@@ -0,0 +1,20 @@
1
+ Copyright 2013 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,36 @@
1
+ = Contactus
2
+
3
+ Contactus is a simple Ruby on Rails gem that generate a contact form for your site.
4
+
5
+ Note: This game is still in development, thanks your patience :P
6
+
7
+ == How to use this gem
8
+
9
+ Add the gem to your Gemfile
10
+
11
+ gem 'contactus'
12
+
13
+ Install the gem:
14
+
15
+ $ bundler
16
+ $ bundle exec rake contactus:install
17
+
18
+ Go to your site
19
+
20
+ $ http://0.0.0.0:3000/contact
21
+
22
+ == Customization
23
+
24
+ There will be a initializer file called contactus.rb, where you can configure the next config variables:
25
+
26
+ # Configure the e-mail address which should receive the email
27
+ config.mailer_to = "contact@example.com"
28
+
29
+ # Configure the e-mail address which should receive the cc email
30
+ #config.mailer_cc = "contact@example.com"
31
+
32
+ # Configure extra fields
33
+ #config.extra_fields = %w(city phone)
34
+
35
+ # Configure extra required fields
36
+ #config.required_extra_fields = %w(country address)
@@ -0,0 +1,30 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Contactus'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+
22
+ Bundler::GemHelper.install_tasks
23
+
24
+ require 'rspec/core'
25
+ require 'rspec/core/rake_task'
26
+
27
+ desc "Run all specs in spec directory (excluding plugin specs)"
28
+ RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare')
29
+
30
+ task :default => :spec
@@ -0,0 +1,5 @@
1
+ module Contactus
2
+ class ApplicationController < ActionController::Base
3
+ layout 'layouts/application'
4
+ end
5
+ end
@@ -0,0 +1,31 @@
1
+ module Contactus
2
+
3
+ class ContactFormsController < ApplicationController
4
+
5
+ def new
6
+ @contact_form = ContactForm.new
7
+ end
8
+
9
+ def create
10
+ begin
11
+ @contact_form = ContactForm.new(params[:contactus_contact_form])
12
+ @contact_form.request = request
13
+
14
+ if !@contact_form.deliver
15
+ if @contact_form.spam?
16
+ flash[:error] = I18n.t('.contactus.contact_forms.spam')
17
+ redirect_to root_path
18
+ else
19
+ render :new
20
+ end
21
+ end
22
+
23
+ rescue ScriptError
24
+ flash[:error] = I18n.t('.contactus.contact_forms.spam')
25
+ redirect_to root_path
26
+ end
27
+ end
28
+
29
+ end
30
+
31
+ end
@@ -0,0 +1,43 @@
1
+ module Contactus
2
+
3
+ class Contactus::ContactForm < MailForm::Base
4
+ attribute :name, :validate => true
5
+ attribute :email, :validate => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
6
+ attribute :message, :validate => true
7
+ attribute :nickname, :captcha => true
8
+
9
+ append :remote_ip, :user_agent, :session
10
+
11
+ if Contactus.extra_fields
12
+ Contactus.extra_fields.each do |field|
13
+ self.class_eval do; attribute field.to_sym; end
14
+ end
15
+ end
16
+
17
+ if Contactus.required_extra_fields
18
+ Contactus.required_extra_fields.each do |field|
19
+ self.class_eval do; attribute field.to_sym, :validate => true; end
20
+ end
21
+ end
22
+
23
+ def headers
24
+ default_header.merge(cc_header)
25
+ end
26
+
27
+ private
28
+
29
+ def default_header
30
+ {
31
+ :subject => I18n.t('.contactus.contact_forms.subject'),
32
+ :to => Contactus.mailer_to,
33
+ :from => %("#{name}" <#{email}>)
34
+ }
35
+ end
36
+
37
+ def cc_header
38
+ (Contactus.mailer_cc)? { :cc => Contactus.mailer_cc } : {}
39
+ end
40
+
41
+ end
42
+
43
+ end
@@ -0,0 +1,2 @@
1
+ = t('.thanks', default: 'Gracias por escribirnos, pronto nos pondremos en contacto contigo.')
2
+ = link_to t('.back', default: 'Regresar'), root_path
@@ -0,0 +1,11 @@
1
+ = simple_form_for @contact_form do |f|
2
+
3
+ = f.input :name, :autofocus => true, :required => true
4
+ = f.input :city
5
+ = f.input :email, :required => true
6
+ = f.input :message, :as => :text, :required => true
7
+
8
+ .hidden
9
+ = f.input :nickname, :hint => t('.captcha_field', default: 'Leave this field blank!')
10
+
11
+ = f.button :submit, t('.send', default: 'Send')
@@ -0,0 +1,31 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ es:
4
+ mail_form:
5
+ models:
6
+ contactus/contact_form:
7
+ one: "Contacto"
8
+ other: 'Contactos'
9
+
10
+ attributes:
11
+ contactus/contact_form:
12
+ name: "Nombres y Apellidos"
13
+ email: 'Correo electrónico'
14
+ message: "Comentarios"
15
+
16
+ request:
17
+ title: "Información técnica sobre el usuario"
18
+ remote_ip: "Dirección IP"
19
+ user_agent: "Navegador"
20
+
21
+
22
+ contactus:
23
+ contact_forms:
24
+ success: 'Gracias por escribirnos, pronto nos pondremos en contacto contigo.'
25
+ spam: 'Lo sentimos, este mensaje aparece como spam y no se entregó.'
26
+ subject: 'Alguien se a puesto en contacto.'
27
+
28
+ new:
29
+ send: 'Enviar'
30
+ captcha_field: 'Deje este campo en blanco'
31
+
@@ -0,0 +1,9 @@
1
+ Rails.application.routes.draw do
2
+
3
+ namespace :contactus do
4
+ resources :contact_forms, :only => [:new, :create]
5
+ end
6
+
7
+ get 'contact' => 'contactus/contact_forms#new', :as => :contact
8
+
9
+ end
@@ -0,0 +1,21 @@
1
+ require "contactus/engine"
2
+
3
+ module Contactus
4
+
5
+ # Address to send the email.
6
+ mattr_accessor :mailer_to
7
+
8
+ # Address to send the cc email.
9
+ mattr_accessor :mailer_cc
10
+
11
+ # Extra fields
12
+ mattr_accessor :extra_fields
13
+
14
+ # Required Extra fields
15
+ mattr_accessor :required_extra_fields
16
+
17
+ def self.setup
18
+ yield self
19
+ end
20
+
21
+ end
@@ -0,0 +1,17 @@
1
+ require 'mail_form'
2
+ require 'haml-rails'
3
+ require 'simple_form'
4
+ require 'rails-i18n'
5
+
6
+ module Contactus
7
+ class Engine < ::Rails::Engine
8
+
9
+ config.generators do |g|
10
+ g.test_framework :rspec, fixture: false
11
+ g.fixture_replacement :factory_girl, dir: 'spec/factories'
12
+ g.assets false
13
+ g.helper false
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,35 @@
1
+ require 'rails/generators'
2
+
3
+ module Contactus
4
+ module Tasks
5
+ class Install
6
+ class << self
7
+
8
+ def run
9
+ copy_initializer_file
10
+ puts "Done!"
11
+ end
12
+
13
+ def copy_initializer_file
14
+ print "Copying initializer file...\n"
15
+ app_path = Rails.root.join("config/initializers")
16
+ copier.copy_file File.join(gem_path, 'lib/templates/contactus.rb'), File.join(app_path, 'contactus.rb')
17
+ end
18
+
19
+ private
20
+
21
+ def gem_path
22
+ File.expand_path('../../..', File.dirname(__FILE__))
23
+ end
24
+
25
+ def copier
26
+ unless @copier
27
+ Rails::Generators::Base.source_root(gem_path)
28
+ @copier = Rails::Generators::Base.new
29
+ end
30
+ @copier
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,3 @@
1
+ module Contactus
2
+ VERSION = "0.0.4"
3
+ end
@@ -0,0 +1,10 @@
1
+ require File.expand_path('../../contactus/tasks/install', __FILE__)
2
+
3
+ namespace :contactus do
4
+
5
+ desc "Install contactus"
6
+ task :install do
7
+ Contactus::Tasks::Install.run
8
+ end
9
+
10
+ end
@@ -0,0 +1,17 @@
1
+ # Use this hook to configure contact mailer.
2
+
3
+ Contactus.setup do |config|
4
+
5
+ # Configure the e-mail address which should receive the email
6
+ config.mailer_to = "contact@example.com"
7
+
8
+ # Configure the e-mail address which should receive the cc email
9
+ #config.mailer_cc = "contact@example.com"
10
+
11
+ # Configure extra fields
12
+ #config.extra_fields = %w(city phone)
13
+
14
+ # Configure extra required fields
15
+ #config.required_extra_fields = %w(country address)
16
+
17
+ end
@@ -0,0 +1,44 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'spec_helper'
4
+
5
+ feature 'Contact Form', %q{
6
+ As a user
7
+ I can send a message using the contact form
8
+ } do
9
+
10
+ before do
11
+ Contactus.mailer_to = "webmaster@example.com"
12
+ visit "/contact"
13
+ end
14
+
15
+ scenario 'without mandatory fields' do
16
+ click_button 'Enviar'
17
+
18
+ page.should have_content "Nombres y Apellidosno puede estar en blanco"
19
+ page.should have_content "Correo electrónicono puede estar en blanco"
20
+ page.should have_content "Comentariosno puede estar en blanco"
21
+ end
22
+
23
+ scenario 'with mandatory fields' do
24
+ fill_in "Nombres y Apellidos", with: 'Bill Hicks'
25
+ fill_in "Correo electrónico", with: 'beelzebozo@example.com'
26
+ fill_in "Comentarios", with: "If you think you’re free, try going somewhere without fucking money, okay?"
27
+
28
+ click_button 'Enviar'
29
+
30
+ page.should have_content "Gracias por escribirnos, pronto nos pondremos en contacto contigo."
31
+ end
32
+
33
+ scenario 'spam email' do
34
+ fill_in "Nombres y Apellidos", with: 'Bill Hicks'
35
+ fill_in "Correo electrónico", with: 'beelzebozo@example.com'
36
+ fill_in "Comentarios", with: "If you think you’re free, try going somewhere without fucking money, okay?"
37
+ fill_in "Nickname", with: "Hey there"
38
+
39
+ click_button 'Enviar'
40
+
41
+ page.should have_content "Lo sentimos, este mensaje aparece como spam y no se entregó."
42
+ end
43
+
44
+ end
@@ -0,0 +1,28 @@
1
+ == README
2
+
3
+ This README would normally document whatever steps are necessary to get the
4
+ application up and running.
5
+
6
+ Things you may want to cover:
7
+
8
+ * Ruby version
9
+
10
+ * System dependencies
11
+
12
+ * Configuration
13
+
14
+ * Database creation
15
+
16
+ * Database initialization
17
+
18
+ * How to run the test suite
19
+
20
+ * Services (job queues, cache servers, search engines, etc.)
21
+
22
+ * Deployment instructions
23
+
24
+ * ...
25
+
26
+
27
+ Please feel free to use a different markup language if you do not plan to run
28
+ <tt>rake doc:app</tt>.
@@ -0,0 +1,6 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require File.expand_path('../config/application', __FILE__)
5
+
6
+ Dummy::Application.load_tasks
@@ -0,0 +1,5 @@
1
+ class ApplicationController < ActionController::Base
2
+ # Prevent CSRF attacks by raising an exception.
3
+ # For APIs, you may want to use :null_session instead.
4
+ protect_from_forgery with: :exception
5
+ end