spree_email_to_friend 1.0.0
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.
- data/.gitignore +2 -0
- data/README.markdown +3 -0
- data/Rakefile +49 -0
- data/app/controllers/admin/captcha_settings_controller.rb +11 -0
- data/app/controllers/email_sender_controller.rb +53 -0
- data/app/mailers/to_friend_mailer.rb +21 -0
- data/app/models/captcha_configuration.rb +9 -0
- data/app/models/mail_to_friend.rb +46 -0
- data/app/views/admin/captcha_settings/edit.html.erb +22 -0
- data/app/views/admin/captcha_settings/show.html.erb +22 -0
- data/app/views/email_sender/send_mail.html.erb +33 -0
- data/app/views/products/_mail_to_friend.html.erb +16 -0
- data/app/views/to_friend_mailer/mail_to_friend.erb +3 -0
- data/config/locales/en.yml +22 -0
- data/config/locales/es.yml +20 -0
- data/config/routes.rb +9 -0
- data/lib/spree/captcha/config.rb +10 -0
- data/lib/spree_email_to_friend.rb +18 -0
- data/lib/spree_email_to_friend_hooks.rb +11 -0
- data/spec/controllers/email_sender_controller_spec.rb +10 -0
- data/spec/spec.opts +6 -0
- data/spec/spec_helper.rb +28 -0
- data/spree_email_to_friend.gemspec +20 -0
- metadata +140 -0
data/.gitignore
ADDED
data/README.markdown
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/testtask'
|
4
|
+
|
5
|
+
desc "Default Task"
|
6
|
+
task :default => [ :spec ]
|
7
|
+
|
8
|
+
require 'rspec/core/rake_task'
|
9
|
+
RSpec::Core::RakeTask.new
|
10
|
+
|
11
|
+
require 'cucumber/rake/task'
|
12
|
+
Cucumber::Rake::Task.new do |t|
|
13
|
+
t.cucumber_opts = %w{--format pretty}
|
14
|
+
end
|
15
|
+
|
16
|
+
desc "Regenerates a rails 3 app for testing"
|
17
|
+
task :test_app do
|
18
|
+
SPREE_PATH = ENV['SPREE_PATH']
|
19
|
+
raise "SPREE_PATH should be specified" unless SPREE_PATH
|
20
|
+
require File.join(SPREE_PATH, 'lib/generators/spree/test_app_generator')
|
21
|
+
class AuthTestAppGenerator < Spree::Generators::TestAppGenerator
|
22
|
+
def tweak_gemfile
|
23
|
+
append_file 'Gemfile' do
|
24
|
+
<<-gems
|
25
|
+
gem 'spree_core', :path => '#{File.join(SPREE_PATH, 'core')}'
|
26
|
+
gem 'spree_auth', :path => '#{File.join(SPREE_PATH, 'auth')}'
|
27
|
+
gem 'spree_email_to_friend', :path => '#{File.dirname(__FILE__)}'
|
28
|
+
gems
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def install_gems
|
33
|
+
system("cd spec/test_app && rake spree_core:install")
|
34
|
+
system("cd spec/test_app && rake spree_auth:install")
|
35
|
+
end
|
36
|
+
|
37
|
+
def migrate_db
|
38
|
+
run_migrations
|
39
|
+
end
|
40
|
+
end
|
41
|
+
AuthTestAppGenerator.start
|
42
|
+
end
|
43
|
+
|
44
|
+
namespace :test_app do
|
45
|
+
desc 'Rebuild test and cucumber databases'
|
46
|
+
task :rebuild_dbs do
|
47
|
+
system("cd spec/test_app && rake db:drop db:migrate RAILS_ENV=test && rake db:drop db:migrate RAILS_ENV=cucumber")
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
class EmailSenderController < Spree::BaseController
|
2
|
+
before_filter :find_object
|
3
|
+
|
4
|
+
def send_mail
|
5
|
+
if request.get?
|
6
|
+
@mail_to_friend = MailToFriend.new(:sender_email => current_user.try(:email))
|
7
|
+
else
|
8
|
+
mail_to_friend
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def mail_to_friend
|
15
|
+
@mail_to_friend = MailToFriend.new(params[:mail_to_friend])
|
16
|
+
respond_to do |format|
|
17
|
+
format.html do
|
18
|
+
captcha_passed = !Spree::Captcha::Config[:use_captcha] || verify_recaptcha(:private_key => Spree::Captcha::Config[:private_key])
|
19
|
+
if @mail_to_friend.valid? && captcha_passed
|
20
|
+
flash[:notice] = I18n.t('email_to_friend.mail_sent_to', :email => @mail_to_friend.recipient_email).html_safe
|
21
|
+
flash[:notice] << ActionController::Base.helpers.link_to(I18n.t('email_to_friend.send_to_other'), email_to_friend_path(@object.class.name.downcase, @object)).html_safe
|
22
|
+
|
23
|
+
send_message(@object, @mail_to_friend)
|
24
|
+
|
25
|
+
method_name = "after_delivering_#{@object.class.name.downcase}_mail"
|
26
|
+
send(method_name) if respond_to?(method_name, true)
|
27
|
+
|
28
|
+
redirect_to @object
|
29
|
+
else
|
30
|
+
render :action => :send_mail
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
#extract send message to make easier to override
|
37
|
+
def send_message(object, mail_to_friend)
|
38
|
+
ToFriendMailer.deliver_mail_to_friend(object,@mail_to_friend)
|
39
|
+
end
|
40
|
+
|
41
|
+
def find_object
|
42
|
+
class_name = params[:type].titleize.constantize
|
43
|
+
return false if params[:id].blank?
|
44
|
+
@object = class_name.find_by_id(params[:id])
|
45
|
+
if class_name.respond_to?('find_by_permalink')
|
46
|
+
@object ||= class_name.find_by_permalink(params[:id])
|
47
|
+
end
|
48
|
+
if class_name.respond_to?('get_by_param')
|
49
|
+
@object ||= class_name.get_by_param(params[:id])
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class ToFriendMailer < ActionMailer::Base
|
2
|
+
default_url_options[:host] = Spree::Config[:site_url]
|
3
|
+
default :from => Spree::Config[:mails_from]
|
4
|
+
|
5
|
+
def mail_to_friend(object, mail)
|
6
|
+
@object = object
|
7
|
+
@mail = mail
|
8
|
+
opts = {}
|
9
|
+
|
10
|
+
if mail.hide_recipients && Spree::Config[:hidden_recipients_to_address]
|
11
|
+
opts[:to] = Spree::Config[:hidden_recipients_to_address]
|
12
|
+
opts[:bcc] = mail.recipient_email
|
13
|
+
else
|
14
|
+
opts[:to] = mail.recipient_email
|
15
|
+
end
|
16
|
+
opts[:subject] = mail.subject
|
17
|
+
opts[:reply_to] = mail.sender_email
|
18
|
+
|
19
|
+
mail(opts)
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class CaptchaConfiguration < Configuration
|
2
|
+
THEMES = ['red', 'white', 'blackglass', 'clean', 'custom']
|
3
|
+
|
4
|
+
# this keys works for localhost
|
5
|
+
preference :private_key, :string, :default => '6LfIsgEAAAAAAGfB6Z0lEUtdL3GVuBkRa9cYlMZz'
|
6
|
+
preference :public_key, :string, :default => '6LfIsgEAAAAAALpT20eiC3RslZQmmCbiNS-AUvSe'
|
7
|
+
preference :theme, :string, :default => 'red'
|
8
|
+
preference :use_captcha, :boolean, :default => true
|
9
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
class MailToFriend
|
2
|
+
include ActiveModel::Validations
|
3
|
+
include ActiveModel::Conversion
|
4
|
+
attr_accessor :subject, :sender_name, :sender_email, :recipient_name, :recipient_email, :message, :recipients, :invalid_recipients, :hide_recipients
|
5
|
+
|
6
|
+
EMAILREGEX = /^[-a-z0-9_+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,8}$/i
|
7
|
+
|
8
|
+
validates :subject, :presence => true
|
9
|
+
validates :sender_name, :presence => true
|
10
|
+
validates :recipient_name, :presence => true, :unless => :is_multi
|
11
|
+
validates :sender_email, :format => { :with => EMAILREGEX }
|
12
|
+
validates :recipients, :length => {:minimum => 1, :message => "must contain at least one valid email address"}
|
13
|
+
validates :invalid_recipients, :length => {:maximum => 0, :message => "must be removed"}
|
14
|
+
|
15
|
+
def initialize(opts = {})
|
16
|
+
@subject = opts[:subject] || I18n.t('email_to_friend.you_would_like_this')
|
17
|
+
@sender_email = opts[:sender_email] || ' '
|
18
|
+
@sender_name = opts[:sender_name] || @sender_email.split('@', 2)[0].titleize
|
19
|
+
|
20
|
+
@recipients = []
|
21
|
+
@invalid_recipients = []
|
22
|
+
|
23
|
+
@recipient_email = (opts[:recipient_email] || '').gsub(';', ',').gsub(/\s/ , '')
|
24
|
+
@recipient_email.split(',').each do |address|
|
25
|
+
if address =~ EMAILREGEX
|
26
|
+
@recipients << address
|
27
|
+
else
|
28
|
+
@invalid_recipients << address
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
@recipient_name = opts[:recipient_name]
|
33
|
+
@recipient_name ||= @recipients[0].split('@', 2)[0].titleize unless @recipients.empty?
|
34
|
+
|
35
|
+
@hide_recipients = opts[:hide_recipients] || false
|
36
|
+
@message = opts[:message]
|
37
|
+
end
|
38
|
+
|
39
|
+
def persisted?
|
40
|
+
false
|
41
|
+
end
|
42
|
+
|
43
|
+
def is_multi
|
44
|
+
(@recipients.size + @invalid_recipients.size) > 1
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<%= render :partial => 'admin/shared/configuration_menu' %>
|
2
|
+
|
3
|
+
<h1><%= t("captcha.captcha_settings") %></h1>
|
4
|
+
|
5
|
+
<% form_tag(admin_captcha_settings_path, :method => :put) do -%>
|
6
|
+
<p>
|
7
|
+
<label><%= t("captcha.public_key") %>:</label>
|
8
|
+
<%= text_field_tag('preferences[public_key]', Spree::Captcha::Config[:public_key], :size => 40) %>
|
9
|
+
</p>
|
10
|
+
<p>
|
11
|
+
<label><%= t('captcha.private_key') %>:</label>
|
12
|
+
<%= text_field_tag('preferences[private_key]', Spree::Captcha::Config[:private_key], :size => 40)%>
|
13
|
+
</p>
|
14
|
+
<p>
|
15
|
+
<label><%= t('captcha.theme') %>:</label>
|
16
|
+
<%= select_tag('preferences[theme]', options_for_select(CaptchaConfiguration::THEMES, Spree::Captcha::Config[:theme])) %>
|
17
|
+
</p>
|
18
|
+
<p class="form-buttons">
|
19
|
+
<%= button t('update') %>
|
20
|
+
<%= t("or") %> <%= link_to t("cancel"), admin_captcha_settings_url %>
|
21
|
+
</p>
|
22
|
+
<% end -%>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<%= render :partial => 'admin/shared/configuration_menu' %>
|
2
|
+
|
3
|
+
<h1><%= t("captcha.captcha_settings") %></h1>
|
4
|
+
|
5
|
+
<table>
|
6
|
+
<tr>
|
7
|
+
<th scope="row"><%= t("captcha.public_key") %>:</th>
|
8
|
+
<td><%= Spree::Captcha::Config[:public_key] %></td>
|
9
|
+
</tr>
|
10
|
+
<tr>
|
11
|
+
<th scope="row"><%= t("captcha.private_key") %>:</th>
|
12
|
+
<td><%= Spree::Captcha::Config[:private_key] %></td>
|
13
|
+
</tr>
|
14
|
+
<tr>
|
15
|
+
<th scope="row"><%= t("captcha.theme") %>:</th>
|
16
|
+
<td><%= Spree::Captcha::Config[:theme] %></td>
|
17
|
+
</tr>
|
18
|
+
</table>
|
19
|
+
|
20
|
+
<p>
|
21
|
+
<%= link_to_with_icon('edit', t("edit"), edit_admin_captcha_settings_path) %>
|
22
|
+
</p>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<h1><%= t('email_to_friend.tell_about', :product => @object.name) %></h1>
|
2
|
+
|
3
|
+
<%= form_for(@mail_to_friend, :url => "") do |f| -%>
|
4
|
+
<%= render "shared/error_messages", :target => @mail_to_friend %>
|
5
|
+
<%= hook :send_mail_fields, {:f => f} do %>
|
6
|
+
<p>
|
7
|
+
<%= f.label(:sender_name, t('email_to_friend.sender_name')) %><br/>
|
8
|
+
<%= f.text_field(:sender_name) %>
|
9
|
+
</p>
|
10
|
+
<p>
|
11
|
+
<%= f.label(:sender_email, t('email_to_friend.sender_email')) %><br/>
|
12
|
+
<%= f.text_field(:sender_email) %>
|
13
|
+
</p>
|
14
|
+
<p>
|
15
|
+
<%= f.label(:recipient_name, t('email_to_friend.recipient_name')) %><br/>
|
16
|
+
<%= f.text_field(:recipient_name) %>
|
17
|
+
</p>
|
18
|
+
<p>
|
19
|
+
<%= f.label(:recipient_email, t('email_to_friend.recipient_email')) %><br/>
|
20
|
+
<%= f.text_field(:recipient_email) %>
|
21
|
+
</p>
|
22
|
+
<p>
|
23
|
+
<%= f.label(:message, t('email_to_friend.message')) %><br/>
|
24
|
+
<%= f.text_area(:message) %>
|
25
|
+
</p>
|
26
|
+
<% end %>
|
27
|
+
<% if Spree::Captcha::Config[:use_captcha] %>
|
28
|
+
<%= recaptcha_tags :public_key => Spree::Captcha::Config[:public_key], :display => {:theme => Spree::Captcha::Config[:theme]} %>
|
29
|
+
<% end %>
|
30
|
+
<p>
|
31
|
+
<%= f.submit(t('email_to_friend.send_message')) %>
|
32
|
+
</p>
|
33
|
+
<% end -%>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<%= mail.recipient_name %>,
|
2
|
+
|
3
|
+
I think you would like this item:
|
4
|
+
|
5
|
+
* <%= product.name %>
|
6
|
+
|
7
|
+
<% unless mail.message.blank? -%>
|
8
|
+
<%= mail.message %>
|
9
|
+
<% end -%>
|
10
|
+
|
11
|
+
<%= mail.sender_name %>
|
12
|
+
|
13
|
+
Click the link below to view the <%= product.name %> page.
|
14
|
+
<%= product_url(product) %>
|
15
|
+
|
16
|
+
For more online shopping, visit <%= products_url %>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
---
|
2
|
+
en:
|
3
|
+
email_to_friend:
|
4
|
+
send_to_friend: "Email a friend"
|
5
|
+
tell_about: "Tell a friend about: %{product}"
|
6
|
+
sender_name: "Your name"
|
7
|
+
sender_email: "Your email address"
|
8
|
+
recipient_name: "Your friend's name"
|
9
|
+
recipient_email: "Your friend's email address"
|
10
|
+
recipient_emails: "Email addresses (comma separated)"
|
11
|
+
message: "Message"
|
12
|
+
send_message: "Tell your friend!"
|
13
|
+
mail_sent_to: "Mail sent to %{email} "
|
14
|
+
send_to_other: "Send to other friend"
|
15
|
+
you_would_like_this: "I think you would like this item"
|
16
|
+
|
17
|
+
captcha:
|
18
|
+
captcha_settings: "Captcha Settings"
|
19
|
+
public_key: "Public key"
|
20
|
+
private_key: "Private key"
|
21
|
+
manage_keys: "Manage your (re)captcha keys"
|
22
|
+
theme: "Theme"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
---
|
2
|
+
es:
|
3
|
+
email_to_friend:
|
4
|
+
send_to_friend: "Enviar a un amigo"
|
5
|
+
tell_about: "Enviar {{product}} a un amigo"
|
6
|
+
sender_name: "Tu nombre"
|
7
|
+
sender_email: "Tu dirección de correo"
|
8
|
+
recipient_name: "Nombre de tu amigo"
|
9
|
+
recipient_email: "Dirección de correo de tu amigo"
|
10
|
+
message: "Mensaje"
|
11
|
+
send_message: "¡Enviar a un amigo!"
|
12
|
+
mail_sent_to: "Mensaje enviado a {{email}} "
|
13
|
+
send_to_other: "Enviar a otro amigo"
|
14
|
+
you_would_like_this: "Creo que este artículo te gustará"
|
15
|
+
captcha:
|
16
|
+
captcha_settings: "Configuracion de Captcha"
|
17
|
+
public_key: "Llave pública"
|
18
|
+
private_key: "Llave privada"
|
19
|
+
manage_keys: "Administrar tus llaves de recaptcha."
|
20
|
+
theme: "Tema"
|
data/config/routes.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
module Spree::Captcha
|
2
|
+
class Config < Spree::Config
|
3
|
+
class << self
|
4
|
+
def instance
|
5
|
+
return nil unless ActiveRecord::Base.connection.tables.include?('configurations')
|
6
|
+
CaptchaConfiguration.find_or_create_by_name("Captcha configuration")
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spree_core'
|
2
|
+
require 'spree_email_to_friend_hooks'
|
3
|
+
require 'recaptcha/rails'
|
4
|
+
|
5
|
+
module SpreeEmailToFriend
|
6
|
+
class Engine < Rails::Engine
|
7
|
+
|
8
|
+
config.autoload_paths += %W(#{config.root}/lib)
|
9
|
+
|
10
|
+
def self.activate
|
11
|
+
Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator*.rb")) do |c|
|
12
|
+
Rails.env == "production" ? require(c) : load(c)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
config.to_prepare &method(:activate).to_proc
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class SpreeEmailToFriendHooks < Spree::ThemeSupport::HookListener
|
2
|
+
insert_after :admin_configurations_menu do
|
3
|
+
"<%= configurations_menu_item(I18n.t('captcha.captcha_settings'), admin_captcha_settings_path, I18n.t('captcha.manage_keys')) %>"
|
4
|
+
end
|
5
|
+
|
6
|
+
insert_after :product_description do
|
7
|
+
%(<p class="email_to_friend">
|
8
|
+
<%= link_to(t('email_to_friend.send_to_friend'), email_to_friend_url('product', @product)) %>
|
9
|
+
</p>)
|
10
|
+
end
|
11
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# This file is copied to ~/spec when you run 'ruby script/generate rspec'
|
2
|
+
# from the project root directory.
|
3
|
+
ENV["RAILS_ENV"] ||= 'test'
|
4
|
+
require File.expand_path("../test_app/config/environment", __FILE__)
|
5
|
+
require 'rspec/rails'
|
6
|
+
|
7
|
+
# Requires supporting files with custom matchers and macros, etc,
|
8
|
+
# in ./support/ and its subdirectories.
|
9
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
10
|
+
|
11
|
+
RSpec.configure do |config|
|
12
|
+
# == Mock Framework
|
13
|
+
#
|
14
|
+
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
15
|
+
#
|
16
|
+
# config.mock_with :mocha
|
17
|
+
# config.mock_with :flexmock
|
18
|
+
# config.mock_with :rr
|
19
|
+
config.mock_with :rspec
|
20
|
+
|
21
|
+
config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
22
|
+
|
23
|
+
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
24
|
+
# examples within a transaction, comment the following line or assign false
|
25
|
+
# instead of true.
|
26
|
+
config.use_transactional_fixtures = true
|
27
|
+
end
|
28
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.platform = Gem::Platform::RUBY
|
3
|
+
s.name = 'spree_email_to_friend'
|
4
|
+
s.version = '1.0.0'
|
5
|
+
s.summary = 'Spree extension to send product recommendations to friends'
|
6
|
+
s.homepage = 'https://github.com/calas/spree-email-to-friend'
|
7
|
+
s.required_ruby_version = '>= 1.8.7'
|
8
|
+
|
9
|
+
s.author = 'Jorge Calás Lozano, Roman Smirnov'
|
10
|
+
|
11
|
+
s.files = `git ls-files`.split("\n")
|
12
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
13
|
+
s.require_paths = ["lib"]
|
14
|
+
|
15
|
+
s.has_rdoc = true
|
16
|
+
|
17
|
+
s.add_dependency('spree_core', '>= 0.30.1')
|
18
|
+
s.add_dependency('spree_auth', '>= 0.30.1')
|
19
|
+
s.add_dependency('recaptcha', '>= 0.3.1')
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: spree_email_to_friend
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
version: 1.0.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- "Jorge Cal\xC3\xA1s Lozano, Roman Smirnov"
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-12-23 00:00:00 +00:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: spree_core
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 101
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 30
|
33
|
+
- 1
|
34
|
+
version: 0.30.1
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: spree_auth
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 101
|
46
|
+
segments:
|
47
|
+
- 0
|
48
|
+
- 30
|
49
|
+
- 1
|
50
|
+
version: 0.30.1
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: recaptcha
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 17
|
62
|
+
segments:
|
63
|
+
- 0
|
64
|
+
- 3
|
65
|
+
- 1
|
66
|
+
version: 0.3.1
|
67
|
+
type: :runtime
|
68
|
+
version_requirements: *id003
|
69
|
+
description:
|
70
|
+
email:
|
71
|
+
executables: []
|
72
|
+
|
73
|
+
extensions: []
|
74
|
+
|
75
|
+
extra_rdoc_files: []
|
76
|
+
|
77
|
+
files:
|
78
|
+
- .gitignore
|
79
|
+
- README.markdown
|
80
|
+
- Rakefile
|
81
|
+
- app/controllers/admin/captcha_settings_controller.rb
|
82
|
+
- app/controllers/email_sender_controller.rb
|
83
|
+
- app/mailers/to_friend_mailer.rb
|
84
|
+
- app/models/captcha_configuration.rb
|
85
|
+
- app/models/mail_to_friend.rb
|
86
|
+
- app/views/admin/captcha_settings/edit.html.erb
|
87
|
+
- app/views/admin/captcha_settings/show.html.erb
|
88
|
+
- app/views/email_sender/send_mail.html.erb
|
89
|
+
- app/views/products/_mail_to_friend.html.erb
|
90
|
+
- app/views/to_friend_mailer/mail_to_friend.erb
|
91
|
+
- config/locales/en.yml
|
92
|
+
- config/locales/es.yml
|
93
|
+
- config/routes.rb
|
94
|
+
- lib/spree/captcha/config.rb
|
95
|
+
- lib/spree_email_to_friend.rb
|
96
|
+
- lib/spree_email_to_friend_hooks.rb
|
97
|
+
- spec/controllers/email_sender_controller_spec.rb
|
98
|
+
- spec/spec.opts
|
99
|
+
- spec/spec_helper.rb
|
100
|
+
- spree_email_to_friend.gemspec
|
101
|
+
has_rdoc: true
|
102
|
+
homepage: https://github.com/calas/spree-email-to-friend
|
103
|
+
licenses: []
|
104
|
+
|
105
|
+
post_install_message:
|
106
|
+
rdoc_options: []
|
107
|
+
|
108
|
+
require_paths:
|
109
|
+
- lib
|
110
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
111
|
+
none: false
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
hash: 57
|
116
|
+
segments:
|
117
|
+
- 1
|
118
|
+
- 8
|
119
|
+
- 7
|
120
|
+
version: 1.8.7
|
121
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
hash: 3
|
127
|
+
segments:
|
128
|
+
- 0
|
129
|
+
version: "0"
|
130
|
+
requirements: []
|
131
|
+
|
132
|
+
rubyforge_project:
|
133
|
+
rubygems_version: 1.3.7
|
134
|
+
signing_key:
|
135
|
+
specification_version: 3
|
136
|
+
summary: Spree extension to send product recommendations to friends
|
137
|
+
test_files:
|
138
|
+
- spec/controllers/email_sender_controller_spec.rb
|
139
|
+
- spec/spec.opts
|
140
|
+
- spec/spec_helper.rb
|