Compare commits
8
Commits
1-2-stable
...
2.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
efb07409e9 | ||
|
|
868fddd7bc | ||
|
|
f3c13a7175 | ||
|
|
7dabf1a520 | ||
|
|
52e7009c17 | ||
|
|
8d44a25199 | ||
|
|
e6f8d6b4cc | ||
|
|
1d9fab3942 |
+4
-4
@@ -4,11 +4,11 @@
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
.idea
|
.idea
|
||||||
.project
|
.project
|
||||||
|
.sass-cache
|
||||||
|
coverage
|
||||||
|
Gemfile.lock
|
||||||
tmp
|
tmp
|
||||||
nbproject
|
nbproject
|
||||||
|
pkg
|
||||||
*.swp
|
*.swp
|
||||||
spec/dummy
|
spec/dummy
|
||||||
*.tmproj
|
|
||||||
Gemfile.lock
|
|
||||||
Guardfile
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
1.9.3@digital2
|
||||||
@@ -1,12 +1,17 @@
|
|||||||
source 'http://rubygems.org'
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
|
# Provides basic authentication functionality for testing parts of your engine
|
||||||
|
gem 'spree_auth_devise', :github => "spree/spree_auth_devise", :branch => '2-0-stable'
|
||||||
|
|
||||||
gemspec
|
gemspec
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
if RUBY_PLATFORM.downcase.include? "darwin"
|
gem "shoulda-matchers"
|
||||||
gem 'guard-rspec'
|
|
||||||
gem 'rb-fsevent'
|
|
||||||
gem 'growl'
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
gem 'spree', '~> 1.2'
|
# `rspec-rails` needs to be in the development group so that Rails generators work.
|
||||||
|
group :development, :test do
|
||||||
|
gem "rspec-rails", "~> 2.12"
|
||||||
|
end
|
||||||
|
|
||||||
|
gem 'therubyracer'
|
||||||
|
|||||||
@@ -1,21 +1,26 @@
|
|||||||
The MIT License
|
Copyright (c) 2013 [name of plugin creator]
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
Copyright (c) 2011 funkensturm.
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
this list of conditions and the following disclaimer.
|
||||||
in the Software without restriction, including without limitation the rights
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
this list of conditions and the following disclaimer in the documentation
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
and/or other materials provided with the distribution.
|
||||||
furnished to do so, subject to the following conditions:
|
* Neither the name Spree nor the names of its contributors may be used to
|
||||||
|
endorse or promote products derived from this software without specific
|
||||||
|
prior written permission.
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
all copies or substantial portions of the Software.
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
THE SOFTWARE.
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
SpreeDigital
|
||||||
|
============
|
||||||
|
|
||||||
|
Introduction goes here.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
Add spree_digital to your Gemfile:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
gem 'spree_digital'
|
||||||
|
```
|
||||||
|
|
||||||
|
Bundle your dependencies and run the installation generator:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
bundle
|
||||||
|
bundle exec rails g spree_digital:install
|
||||||
|
```
|
||||||
|
|
||||||
|
Testing
|
||||||
|
-------
|
||||||
|
|
||||||
|
Be sure to bundle your dependencies and then create a dummy test app for the specs to run against.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
bundle
|
||||||
|
bundle exec rake test_app
|
||||||
|
bundle exec rspec spec
|
||||||
|
```
|
||||||
|
|
||||||
|
When testing your applications integration with this extension you may use it's factories.
|
||||||
|
Simply add this require statement to your spec_helper:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
require 'spree_digital/factories'
|
||||||
|
```
|
||||||
|
|
||||||
|
Copyright (c) 2013 [name of extension creator], released under the New BSD License
|
||||||
@@ -1,31 +1,17 @@
|
|||||||
require 'rake'
|
require 'bundler'
|
||||||
require 'rake/testtask'
|
Bundler::GemHelper.install_tasks
|
||||||
require 'rake/packagetask'
|
|
||||||
require 'rubygems/package_task'
|
|
||||||
require 'rspec/core/rake_task'
|
require 'rspec/core/rake_task'
|
||||||
require 'spree/core/testing_support/common_rake'
|
require 'spree/testing_support/extension_rake'
|
||||||
|
|
||||||
RSpec::Core::RakeTask.new
|
RSpec::Core::RakeTask.new
|
||||||
|
|
||||||
task :default => [:spec]
|
task :default => [:spec]
|
||||||
|
|
||||||
spec = eval(File.read('spree_digital.gemspec'))
|
desc 'Generates a dummy app for testing'
|
||||||
|
|
||||||
Gem::PackageTask.new(spec) do |p|
|
|
||||||
p.gem_spec = spec
|
|
||||||
end
|
|
||||||
|
|
||||||
desc "Release to gemcutter"
|
|
||||||
task :release => :package do
|
|
||||||
require 'rake/gemcutter'
|
|
||||||
Rake::Gemcutter::Tasks.new(spec).define
|
|
||||||
Rake::Task['gem:push'].invoke
|
|
||||||
end
|
|
||||||
|
|
||||||
desc "Regenerates a rails 3 app for testing"
|
|
||||||
task :test_app do
|
task :test_app do
|
||||||
ENV['LIB_NAME'] = 'spree_digital'
|
ENV['LIB_NAME'] = 'spree_digital'
|
||||||
|
|
||||||
require File.join `bundle show spree_core`.chomp, 'lib/generators/spree/dummy/dummy_generator.rb'
|
require File.join `bundle show spree_core`.chomp, 'lib/generators/spree/dummy/dummy_generator.rb'
|
||||||
Spree::DummyGenerator.class_eval do
|
Spree::DummyGenerator.class_eval do
|
||||||
def test_dummy_add_digital
|
def test_dummy_add_digital
|
||||||
@@ -35,5 +21,5 @@ task :test_app do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Rake::Task['common:test_app'].invoke
|
Rake::Task['extension:test_app'].invoke
|
||||||
end
|
end
|
||||||
|
|||||||
+11
-4
@@ -1,4 +1,11 @@
|
|||||||
"0.7.x" => { :ref => "eddaea63959586d123007cbca3be5bf9c5edb1a7" }
|
# This file is used to designate compatibilty with different versions of Spree
|
||||||
"1.0.x" => { :ref => "a8c27750ef1cf9d0ad1a2a6ebe33307da900a5c1" }
|
# Please see http://spreecommerce.com/documentation/extensions.html#versionfile for details
|
||||||
"1.1.x" => { :branch => "1-1-stable" }
|
|
||||||
"1.2.x" => { :branch => "master" }
|
# Examples
|
||||||
|
#
|
||||||
|
# '1.2.x' => { :branch => 'master' }
|
||||||
|
# '1.1.x' => { :branch => '1-1-stable' }
|
||||||
|
# '1.0.x' => { :branch => '1-0-stable' }
|
||||||
|
# '0.70.x' => { :branch => '0-70-stable' }
|
||||||
|
# '0.40.x' => { :tag => 'v1.0.0', :version => '1.0.0' }
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
//= require admin/spree_backend
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
//= require store/spree_frontend
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
/*
|
||||||
|
*= require admin/spree_backend
|
||||||
|
*/
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
/*
|
||||||
|
*= require store/spree_frontend
|
||||||
|
*/
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
module Spree
|
module Spree
|
||||||
class DigitalsController < Spree::BaseController
|
class DigitalsController < Spree::StoreController
|
||||||
ssl_required :show
|
ssl_required :show
|
||||||
|
|
||||||
def show
|
def show
|
||||||
link = DigitalLink.find_by_secret(params[:secret])
|
link = DigitalLink.find_by_secret(params[:secret])
|
||||||
|
|
||||||
@@ -19,9 +19,9 @@ module Spree
|
|||||||
Rails.logger.error "Missing Digital Item: #{attachment.path}"
|
Rails.logger.error "Missing Digital Item: #{attachment.path}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
render :unauthorized
|
render :unauthorized
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ require_dependency 'spree/calculator'
|
|||||||
module Spree
|
module Spree
|
||||||
class Calculator::DigitalDelivery < Calculator::FlatRate
|
class Calculator::DigitalDelivery < Calculator::FlatRate
|
||||||
def self.description
|
def self.description
|
||||||
I18n.t(:digital_delivery)
|
Spree.t(:digital_delivery)
|
||||||
end
|
end
|
||||||
|
|
||||||
def compute(object=nil)
|
def compute(object=nil)
|
||||||
|
|||||||
@@ -2,12 +2,12 @@ module Spree
|
|||||||
class Digital < ActiveRecord::Base
|
class Digital < ActiveRecord::Base
|
||||||
belongs_to :variant
|
belongs_to :variant
|
||||||
has_many :digital_links, :dependent => :destroy
|
has_many :digital_links, :dependent => :destroy
|
||||||
|
|
||||||
has_attached_file :attachment, :path => ":rails_root/private/digitals/:id/:basename.:extension"
|
has_attached_file :attachment, :path => ":rails_root/private/digitals/:id/:basename.:extension"
|
||||||
|
|
||||||
# TODO: Limit the attachment to one single file. Paperclip supports many by default :/
|
# TODO: Limit the attachment to one single file. Paperclip supports many by default :/
|
||||||
|
|
||||||
attr_accessible :variant_id, :attachment
|
attr_accessible :variant_id, :attachment
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -9,7 +9,7 @@ Spree::LineItem.class_eval do
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
# Create the download link for this item if it is digital.
|
# TODO there is no reason to create the digital links until the order is complete
|
||||||
def create_digital_links
|
def create_digital_links
|
||||||
digital_links.delete_all
|
digital_links.delete_all
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,11 @@ Deface::Override.new(:virtual_path => "spree/shared/_order_details",
|
|||||||
:name => "add_digital_downloads_to_invoice",
|
:name => "add_digital_downloads_to_invoice",
|
||||||
:insert_bottom => "td[data-hook='order_item_description']",
|
:insert_bottom => "td[data-hook='order_item_description']",
|
||||||
:text => %q{
|
:text => %q{
|
||||||
<% if order.state == 'complete' and item.variant.digital? %>
|
<% if order.payment_state == 'paid' and item.variant.digital? %>
|
||||||
<%= content_tag(:p, :class => 'download_links') do %>
|
<%= content_tag(:p, :class => 'download_links') do %>
|
||||||
<% item.digital_links.each do |digital_link| %>
|
<% item.digital_links.each do |digital_link| %>
|
||||||
<% format = File.extname(digital_link.digital.attachment.path).downcase %>
|
<% format = File.extname(digital_link.digital.attachment.path).downcase %>
|
||||||
<%= link_to t(:digital_download, :type => t("digital_format#{format}")), digital_url(:host => Spree::Config.get(:site_url), :secret => digital_link.secret), :class => "btn #{format}" %>
|
<%= link_to Spree.t(:digital_download, :type => Spree.t("digital_format#{format}")), digital_url(:host => Spree::Config.get(:site_url), :secret => digital_link.secret), :class => "btn #{format}" %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Deface::Override.new(:virtual_path => "spree/admin/shared/_product_tabs",
|
|||||||
:name => "add_digital_versions_to_admin_product_tabs",
|
:name => "add_digital_versions_to_admin_product_tabs",
|
||||||
:insert_bottom => "[data-hook='admin_product_tabs'], #admin_product_tabs[data-hook]",
|
:insert_bottom => "[data-hook='admin_product_tabs'], #admin_product_tabs[data-hook]",
|
||||||
:text => " <li<%== ' class=\"active\"' if current == \"Digital Versions\" %>>
|
:text => " <li<%== ' class=\"active\"' if current == \"Digital Versions\" %>>
|
||||||
<%= link_to t(\"digital_versions\"), admin_product_digitals_path(@product) %>
|
<%= link_to_with_icon 'icon-tasks', Spree.t(:digital_versions), admin_product_digitals_path(@product) %>
|
||||||
</li>
|
</li>
|
||||||
",
|
",
|
||||||
:disabled => false)
|
:disabled => false)
|
||||||
|
|||||||
@@ -2,6 +2,6 @@ Deface::Override.new(:virtual_path => "spree/admin/shared/_order_tabs",
|
|||||||
:name => "add_reset_digitals_to_admin_orders",
|
:name => "add_reset_digitals_to_admin_orders",
|
||||||
:insert_after => ".sidebar",
|
:insert_after => ".sidebar",
|
||||||
:text => %q{
|
:text => %q{
|
||||||
<%= content_tag(:p, button_link_to(t(:reset_downloads), reset_digitals_admin_order_url(@order)), class: 'clear') if @order.digital? or true %>
|
<%= content_tag(:p, button_link_to(Spree.t(:reset_downloads), reset_digitals_admin_order_url(@order)), class: 'clear') if @order.digital? or true %>
|
||||||
},
|
},
|
||||||
:disabled => false)
|
:disabled => false)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<% if digital.attachment_file_name.present? %>
|
<% if digital.attachment_file_name.present? %>
|
||||||
<%= digital.attachment_file_name %> (<%= number_to_human_size(digital.attachment_file_size) %>)
|
<%= digital.attachment_file_name %> (<%= number_to_human_size(digital.attachment_file_size) %>)
|
||||||
<% else %>
|
<% else %>
|
||||||
<%=t 'broken_file' %>
|
<%=Spree.t 'broken_file' %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -1,34 +1,33 @@
|
|||||||
<div>
|
<div>
|
||||||
<div>
|
|
||||||
<%= form_for(:digital, :url => admin_product_digitals_path(@product), :method => :create, :multipart => true ) do |f| %>
|
<%= form_for(:digital, :url => admin_product_digitals_path(@product), :method => :create, :multipart => true ) do |f| %>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><%= Spree::Variant.model_name.human %> "<%= variant.options_text %>"</legend>
|
<legend><%= Spree::Variant.model_name.human %> "<%= variant.options_text %>"</legend>
|
||||||
|
|
||||||
<%= f.field_container :current_file do %>
|
<%= f.field_container :current_file do %>
|
||||||
<strong><%=t 'files' %>:</strong>
|
<strong><%=Spree.t 'files' %>:</strong>
|
||||||
<% if variant.digital? %>
|
<% if variant.digital? %>
|
||||||
<ul>
|
<ul>
|
||||||
<% variant.digitals.each do |digital| %>
|
<% variant.digitals.each do |digital| %>
|
||||||
<li>
|
<li>
|
||||||
<%= render digital %>
|
<%= render digital %>
|
||||||
<%= link_to t("delete_file"), admin_product_digital_url(@product, digital), :confirm => t('delete_file_cofirmation', :filename => digital.attachment_file_name), :method => :delete %>
|
<%= link_to Spree.t(:delete_file), admin_product_digital_url(@product, digital), :confirm => Spree.t(:delete_file_cofirmation, :filename => digital.attachment_file_name), :method => :delete %>
|
||||||
</li>
|
</li>
|
||||||
<% end %>
|
<% end %>
|
||||||
</ul>
|
</ul>
|
||||||
<% else %>
|
<% else %>
|
||||||
<%=t 'none' %>
|
<%=Spree.t 'none' %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<p class="form-buttons">
|
<p class="form-buttons">
|
||||||
<%= f.field_container :file do %>
|
<%= f.field_container :file do %>
|
||||||
<%= f.label :file, t("new_file") %> <span class="required">*</span><br/>
|
<%= f.label :file, Spree.t("new_file") %> <span class="required">*</span><br/>
|
||||||
<%= f.file_field :attachment %>
|
<%= f.file_field :attachment %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= hidden_field_tag 'digital[variant_id]', variant.id %>
|
<%= hidden_field_tag 'digital[variant_id]', variant.id %>
|
||||||
|
|
||||||
<%= button t('spree_digital.upload') %>
|
<%= button Spree.t('spree_digital.upload') %>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% else %>
|
<% else %>
|
||||||
This product has no variants.
|
<%= Spree.t :product_without_variants %>
|
||||||
|
|
||||||
<% if @product.master.digital? %>
|
<% if @product.master.digital? %>
|
||||||
A digital version of this product currently exists:
|
<%= Spree.t :digital_exists %>
|
||||||
<%= render @product.master.digitals %>
|
<%= render @product.master.digitals %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<% if digital.attachment_file_name.present? %>
|
<% if digital.attachment_file_name.present? %>
|
||||||
<%= digital.attachment_file_name %> (<%= number_to_human_size(digital.attachment_file_size) %>)
|
<%= digital.attachment_file_name %> (<%= number_to_human_size(digital.attachment_file_size) %>)
|
||||||
<% else %>
|
<% else %>
|
||||||
<%=t 'broken_file' %>
|
<%=Spree.t 'broken_file' %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<% if defined?(SpreeFancy) %>
|
||||||
|
<% content_for :subheader do %>
|
||||||
|
<h1><%= t('.unauthorized') %></h1>
|
||||||
|
<% end %>
|
||||||
|
<% else %>
|
||||||
|
<h1><%= t('.unauthorized') %></h1>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<%= t('.explained') %>
|
||||||
+27
-18
@@ -1,19 +1,28 @@
|
|||||||
en:
|
en:
|
||||||
digital_versions: Digital Versions
|
spree:
|
||||||
reset_downloads: Reset Digital Downloads
|
broken_file: Warning! this file is broken
|
||||||
downloads_reset: Digital Downloads Reset
|
current_file: Current File
|
||||||
current_file: Current File
|
delete_file: Delete this file
|
||||||
new_file: New File
|
delete_file_cofirmation: Are you sure you want to delete the file %{filename}?
|
||||||
delete_file: Delete this file
|
digital_delivery: Digital Delivery
|
||||||
broken_file: Warning! this file is broken
|
digital_download: Download %{type} ↓
|
||||||
delete_file_cofirmation: Are you sure you want to delete the file %{filename}?
|
digital_download_links: Digital Download Links
|
||||||
digital_delivery: Digital Delivery
|
digital_format:
|
||||||
digital_download: Download %{type} ↓
|
mp3: Audio MP3
|
||||||
digital_download_links: Digital Download Links
|
mobi: Kindle eBook
|
||||||
digital_format:
|
epub: ePub eBook
|
||||||
mp3: Audio MP3
|
pdf: pdf eBook
|
||||||
mobi: Kindle eBook
|
gz: Archive
|
||||||
epub: ePub eBook
|
digital_versions: Digital Versions
|
||||||
pdf: pdf eBook
|
downloads_reset: Digital Downloads Reset
|
||||||
spree_digital:
|
new_file: New File
|
||||||
upload: Upload
|
reset_downloads: Reset Digital Downloads
|
||||||
|
spree:
|
||||||
|
digitals:
|
||||||
|
unauthorized:
|
||||||
|
explained: This download link has expired.
|
||||||
|
unauthorized: Unauthorized
|
||||||
|
spree_digital:
|
||||||
|
upload: Upload
|
||||||
|
product_without_variants: This product has no variants.
|
||||||
|
digital_exists: 'A digital version of this product currently exists:'
|
||||||
|
|||||||
+22
-17
@@ -1,18 +1,23 @@
|
|||||||
it:
|
it:
|
||||||
digital_versions: Versioni Digitali
|
spree:
|
||||||
current_file: File Corrente
|
broken_file: Attenzione! questo file sembra essere rotto
|
||||||
new_file: Nuovo File
|
current_file: File Corrente
|
||||||
delete_file: Elimina questo file
|
delete_file: Elimina questo file
|
||||||
broken_file: Attenzione! questo file sembra essere rotto
|
delete_file_cofirmation: Sei sicuro di voler eliminare il file %{filename}?
|
||||||
delete_file_cofirmation: Sei sicuro di voler eliminare il file %{filename}?
|
digital_delivery: Consegna Digitale
|
||||||
digital_delivery: Consegna Digitale
|
digital_download: Download %{type} ↓
|
||||||
digital_download: Download %{type} ↓
|
digital_download_links: Link al Download Digitale
|
||||||
digital_download_links: Link al Download Digitale
|
digital_format:
|
||||||
digital_format:
|
mp3: Audio MP3
|
||||||
mp3: Audio MP3
|
mobi: Kindle eBook
|
||||||
mobi: Kindle eBook
|
epub: ePub eBook
|
||||||
epub: ePub eBook
|
pdf: pdf eBook
|
||||||
pdf: pdf eBook
|
digital_versions: Versioni Digitali
|
||||||
spree_digital:
|
new_file: Nuovo File
|
||||||
upload: Upload
|
spree:
|
||||||
|
digitals:
|
||||||
|
unauthorized:
|
||||||
|
explained: This download link has expired.
|
||||||
|
unauthorized: Unauthorized
|
||||||
|
spree_digital:
|
||||||
|
upload: Upload
|
||||||
+14
-11
@@ -1,12 +1,15 @@
|
|||||||
ja:
|
ja:
|
||||||
digital_versions: デジタル版
|
spree:
|
||||||
|
broken_file: 注意! このファイルが壊れている!
|
||||||
current_file: 現在のバージョン
|
current_file: 現在のバージョン
|
||||||
new_file: 新しいファイル
|
delete_file: このファイルを削除
|
||||||
upload: アップロード
|
delete_file_cofirmation: 本当に「%{filename}」を削除しても宜しいですか?
|
||||||
delete_file: このファイルを削除
|
digital_shipping: ダウンロードリンクを<strong>%{email}</strong>に送ります
|
||||||
broken_file: 注意! このファイルが壊れている!
|
digital_versions: デジタル版
|
||||||
delete_file_cofirmation: 本当に「%{filename}」を削除しても宜しいですか?
|
new_file: 新しいファイル
|
||||||
|
spree:
|
||||||
digital_shipping: ダウンロードリンクを<strong>%{email}</strong>に送ります
|
digitals:
|
||||||
|
unauthorized:
|
||||||
|
explained: This download link has expired.
|
||||||
|
unauthorized: Unauthorized
|
||||||
|
upload: アップロード
|
||||||
|
|||||||
+2
-2
@@ -6,10 +6,10 @@ Spree::Core::Engine.routes.draw do
|
|||||||
|
|
||||||
resources :orders do
|
resources :orders do
|
||||||
member do
|
member do
|
||||||
get :reset_digitals
|
get :reset_digitals
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
get '/digital/:secret', :to => 'digitals#show', :via => :get, :as => 'digital', :constraints => { :secret => /[a-zA-Z0-9]{30}/ }
|
get '/digital/:secret', :to => 'digitals#show', :via => :get, :as => 'digital', :constraints => { :secret => /[a-zA-Z0-9]{30}/ }
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,31 +1,31 @@
|
|||||||
module SpreeDigital
|
module SpreeDigital
|
||||||
module Generators
|
module Generators
|
||||||
class InstallGenerator < Rails::Generators::Base
|
class InstallGenerator < Rails::Generators::Base
|
||||||
|
|
||||||
# def add_javascripts
|
class_option :auto_run_migrations, :type => :boolean, :default => false
|
||||||
# append_file "app/assets/javascripts/store/all.js", "//= require store/spree_digital\n"
|
|
||||||
# append_file "app/assets/javascripts/admin/all.js", "//= require admin/spree_digital\n"
|
def add_javascripts
|
||||||
# end
|
append_file 'app/assets/javascripts/store/all.js', "//= require store/spree_digital\n"
|
||||||
|
append_file 'app/assets/javascripts/admin/all.js', "//= require admin/spree_digital\n"
|
||||||
# def add_stylesheets
|
end
|
||||||
# inject_into_file "app/assets/stylesheets/store/all.css", " *= require store/spree_digital\n",
|
|
||||||
# :before => /\*\//, :verbose => true
|
def add_stylesheets
|
||||||
# inject_into_file "app/assets/stylesheets/admin/all.css", " *= require admin/spree_digital\n",
|
inject_into_file 'app/assets/stylesheets/store/all.css', " *= require store/spree_digital\n", :before => /\*\//, :verbose => true
|
||||||
# :before => /\*\//, :verbose => true
|
inject_into_file 'app/assets/stylesheets/admin/all.css', " *= require admin/spree_digital\n", :before => /\*\//, :verbose => true
|
||||||
# end
|
end
|
||||||
|
|
||||||
def add_migrations
|
def add_migrations
|
||||||
run 'bundle exec rake railties:install:migrations FROM=spree_digital'
|
run 'bundle exec rake railties:install:migrations FROM=spree_digital'
|
||||||
end
|
end
|
||||||
|
|
||||||
def run_migrations
|
def run_migrations
|
||||||
res = ask "Would you like to run the migrations now? [Y/n]"
|
run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask 'Would you like to run the migrations now? [Y/n]')
|
||||||
if res == "" || res.downcase == "y"
|
if run_migrations
|
||||||
run 'bundle exec rake db:migrate'
|
run 'bundle exec rake db:migrate'
|
||||||
else
|
else
|
||||||
puts "Skipping rake db:migrate, don't forget to run it!"
|
puts 'Skipping rake db:migrate, don\'t forget to run it!'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,9 +1,16 @@
|
|||||||
module SpreeDigital
|
module SpreeDigital
|
||||||
class Engine < Rails::Engine
|
class Engine < Rails::Engine
|
||||||
|
require 'spree/core'
|
||||||
|
isolate_namespace Spree
|
||||||
engine_name 'spree_digital'
|
engine_name 'spree_digital'
|
||||||
|
|
||||||
config.autoload_paths += %W(#{config.root}/lib)
|
config.autoload_paths += %W(#{config.root}/lib)
|
||||||
|
|
||||||
|
# use rspec for tests
|
||||||
|
config.generators do |g|
|
||||||
|
g.test_framework :rspec
|
||||||
|
end
|
||||||
|
|
||||||
initializer "spree.spree_digital.preferences", :after => "spree.environment" do |app|
|
initializer "spree.spree_digital.preferences", :after => "spree.environment" do |app|
|
||||||
Spree::DigitalConfiguration = Spree::SpreeDigitalConfiguration.new
|
Spree::DigitalConfiguration = Spree::SpreeDigitalConfiguration.new
|
||||||
end
|
end
|
||||||
@@ -11,10 +18,10 @@ module SpreeDigital
|
|||||||
initializer "spree.register.digital_shipping", :after => 'spree.register.calculators' do |app|
|
initializer "spree.register.digital_shipping", :after => 'spree.register.calculators' do |app|
|
||||||
app.config.spree.calculators.shipping_methods << Spree::Calculator::DigitalDelivery
|
app.config.spree.calculators.shipping_methods << Spree::Calculator::DigitalDelivery
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.activate
|
def self.activate
|
||||||
Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_decorator*.rb")) do |c|
|
Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
|
||||||
Rails.application.config.cache_classes ? require(c) : load(c)
|
Rails.configuration.cache_classes ? require(c) : load(c)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
FactoryGirl.define do
|
||||||
|
# Define your Spree extensions Factories within this file to enable applications, and other extensions to use and override them.
|
||||||
|
#
|
||||||
|
# Example adding this to your spec_helper will load these Factories for use:
|
||||||
|
# require 'spree_digital/factories'
|
||||||
|
|
||||||
|
factory :digital, :class => Spree::Digital do |f|
|
||||||
|
# TODO good to assign variant association if no association is manually defined
|
||||||
|
# f.variant { |p| p.association(:variant) }
|
||||||
|
|
||||||
|
attachment_content_type 'application/octet-stream'
|
||||||
|
attachment_file_name 'a_great_book.epub'
|
||||||
|
end
|
||||||
|
|
||||||
|
factory :digital_link, :class => Spree::DigitalLink do |f|
|
||||||
|
f.digital { |p| p.association(:digital) }
|
||||||
|
f.line_item { |p| p.association(:line_item) }
|
||||||
|
end
|
||||||
|
|
||||||
|
factory :digital_shipping_calculator, class: Spree::Calculator::DigitalDelivery do |c|
|
||||||
|
after(:create) { |c| c.set_preference(:amount, 0) }
|
||||||
|
end
|
||||||
|
|
||||||
|
factory :digital_shipping_method, parent: :shipping_method do |f|
|
||||||
|
name "Digital Delivery"
|
||||||
|
calculator { FactoryGirl.build :digital_shipping_calculator }
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -17,7 +17,7 @@ The idea is simple. You attach a file to a Product (or a Variant of this Product
|
|||||||
* The file `views/order_mailer/confirm_email.text.erb` is the only thing that should need customization. If you are looking for HTML emails, [this branch of spree-html-email](http://github.com/iloveitaly/spree-html-email) supports spree_digital
|
* The file `views/order_mailer/confirm_email.text.erb` is the only thing that should need customization. If you are looking for HTML emails, [this branch of spree-html-email](http://github.com/iloveitaly/spree-html-email) supports spree_digital
|
||||||
* A purchased product can be downloaded even if you disable the product immediately. You would have to remove the attached file in your admin section to prevent people from downloading purchased products.
|
* A purchased product can be downloaded even if you disable the product immediately. You would have to remove the attached file in your admin section to prevent people from downloading purchased products.
|
||||||
* File are uploaded to `rails_root/private`. Make sure it's symlinked in case you're using Capistrano. If you want to change the upload path, [check out this gist](https://gist.github.com/3187793#file_spree_digital_path_change_decorator.rb)
|
* File are uploaded to `rails_root/private`. Make sure it's symlinked in case you're using Capistrano. If you want to change the upload path, [check out this gist](https://gist.github.com/3187793#file_spree_digital_path_change_decorator.rb)
|
||||||
* You must add a `views/spree/digitals/unauthorized.html.erb` file to present an error message to the user if they exceed the download / days limit
|
* You must add a `views/spree/digitals/unauthorized.html.erb` file to customize an error message to the user if they exceed the download / days limit
|
||||||
* We use send_file to send the files on download. See below for instructions on how to push file downloading off to nginx.
|
* We use send_file to send the files on download. See below for instructions on how to push file downloading off to nginx.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
@@ -25,7 +25,7 @@ The idea is simple. You attach a file to a Product (or a Variant of this Product
|
|||||||
Add this line to your gemfile:
|
Add this line to your gemfile:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
gem 'spree_digital', :git => 'git://github.com/halo/spree_digital.git', :branch => 'master'
|
gem 'spree_digital', :git => 'git://github.com/dlage/spree_digital.git', :branch => 'master'
|
||||||
```
|
```
|
||||||
|
|
||||||
The following terminal commands will copy the migration files to the corresponding directory in your Rails application and apply the migrations to your database.
|
The following terminal commands will copy the migration files to the corresponding directory in your Rails application and apply the migrations to your database.
|
||||||
@@ -106,7 +106,7 @@ Get the spree framework and spree_digital extension for it:
|
|||||||
|
|
||||||
```shell
|
```shell
|
||||||
git clone git://github.com/spree/spree.git
|
git clone git://github.com/spree/spree.git
|
||||||
git clone git://github.com/halo/spree_digital.git
|
git clone git://github.com/dlage/spree_digital.git
|
||||||
```
|
```
|
||||||
|
|
||||||
Go into the spree directory and run the bundle command:
|
Go into the spree directory and run the bundle command:
|
||||||
@@ -138,6 +138,7 @@ This link may be very helpful to you: [http://github.com/spree/spree](http://git
|
|||||||
|
|
||||||
* [iloveitaly](http://github.com/iloveitaly/)
|
* [iloveitaly](http://github.com/iloveitaly/)
|
||||||
* [halo](http://github.com/halo)
|
* [halo](http://github.com/halo)
|
||||||
|
* [dlage](http://github.com/dlage)
|
||||||
|
|
||||||
### License
|
### License
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
||||||
|
|
||||||
|
ENGINE_ROOT = File.expand_path('../..', __FILE__)
|
||||||
|
ENGINE_PATH = File.expand_path('../../lib/spree_digital/engine', __FILE__)
|
||||||
|
|
||||||
|
require 'rails/all'
|
||||||
|
require 'rails/engine/commands'
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
FactoryGirl.define do
|
|
||||||
factory :digital, :class => Spree::Digital do |f|
|
|
||||||
# TODO good to assign variant association if no association is manually defined
|
|
||||||
# f.variant { |p| p.association(:variant) }
|
|
||||||
|
|
||||||
attachment_content_type 'application/octet-stream'
|
|
||||||
attachment_file_name 'a_great_book.epub'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
FactoryGirl.define do
|
|
||||||
factory :digital_link, :class => Spree::DigitalLink do |f|
|
|
||||||
f.digital { |p| p.association(:digital) }
|
|
||||||
f.line_item { |p| p.association(:line_item) }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
FactoryGirl.define do
|
|
||||||
# https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#modifying-factories
|
|
||||||
|
|
||||||
factory :digital_shipping_calculator, class: Spree::Calculator::DigitalDelivery do |c|
|
|
||||||
after_create { |c| c.set_preference(:amount, 0) }
|
|
||||||
end
|
|
||||||
|
|
||||||
factory :digital_shipping_method, parent: :shipping_method do |f|
|
|
||||||
name "Digital Delivery"
|
|
||||||
calculator { FactoryGirl.build :digital_shipping_calculator }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
+16
-15
@@ -4,9 +4,9 @@ describe Spree::Order do
|
|||||||
context "#add_variant" do
|
context "#add_variant" do
|
||||||
it "should add digital Variants of quantity 1 to an order" do
|
it "should add digital Variants of quantity 1 to an order" do
|
||||||
order = FactoryGirl.create(:order)
|
order = FactoryGirl.create(:order)
|
||||||
order.add_variant variant1 = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
order.contents.add variant1 = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)]), 1
|
||||||
order.add_variant variant2 = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
order.contents.add variant2 = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)]), 1
|
||||||
order.add_variant variant3 = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
order.contents.add variant3 = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)]), 1
|
||||||
order.line_items.first.variant.should == variant1
|
order.line_items.first.variant.should == variant1
|
||||||
order.line_items.second.variant.should == variant2
|
order.line_items.second.variant.should == variant2
|
||||||
order.line_items.third.variant.should == variant3
|
order.line_items.third.variant.should == variant3
|
||||||
@@ -15,9 +15,9 @@ describe Spree::Order do
|
|||||||
it "should handle quantity higher than 1 when adding one specific digital Variant" do
|
it "should handle quantity higher than 1 when adding one specific digital Variant" do
|
||||||
order = FactoryGirl.create(:order)
|
order = FactoryGirl.create(:order)
|
||||||
digital_variant = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
digital_variant = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
||||||
order.add_variant digital_variant, 3
|
order.contents.add digital_variant, 3
|
||||||
order.line_items.first.quantity.should == 3
|
order.line_items.first.quantity.should == 3
|
||||||
order.add_variant digital_variant, 2
|
order.contents.add digital_variant, 2
|
||||||
order.line_items.first.quantity.should == 5
|
order.line_items.first.quantity.should == 5
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -26,21 +26,21 @@ describe Spree::Order do
|
|||||||
it "should understand that all products are digital" do
|
it "should understand that all products are digital" do
|
||||||
order = FactoryGirl.create(:order)
|
order = FactoryGirl.create(:order)
|
||||||
3.times do
|
3.times do
|
||||||
order.add_variant FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
order.contents.add FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)]), 1
|
||||||
end
|
end
|
||||||
order.digital?.should be_true
|
order.digital?.should be_true
|
||||||
order.add_variant FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)]), 4
|
order.contents.add FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)]), 4
|
||||||
order.digital?.should be_true
|
order.digital?.should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should understand that not all products are digital" do
|
it "should understand that not all products are digital" do
|
||||||
order = FactoryGirl.create(:order)
|
order = FactoryGirl.create(:order)
|
||||||
3.times do
|
3.times do
|
||||||
order.add_variant FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
order.contents.add FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)]), 1
|
||||||
end
|
end
|
||||||
order.add_variant FactoryGirl.create(:variant) # this is the analog product
|
order.contents.add FactoryGirl.create(:variant), 1 # this is the analog product
|
||||||
order.digital?.should be_false
|
order.digital?.should be_false
|
||||||
order.add_variant FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)]), 4
|
order.contents.add FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)]), 4
|
||||||
order.digital?.should be_false
|
order.digital?.should be_false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -53,7 +53,7 @@ describe Spree::Order do
|
|||||||
@order.bill_address = FactoryGirl.create :address
|
@order.bill_address = FactoryGirl.create :address
|
||||||
@order.save!
|
@order.save!
|
||||||
|
|
||||||
3.times { @order.add_variant FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)]) }
|
3.times { @order.contents.add FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)]), 1 }
|
||||||
|
|
||||||
FactoryGirl.create :digital_shipping_method
|
FactoryGirl.create :digital_shipping_method
|
||||||
s = FactoryGirl.create :shipping_method
|
s = FactoryGirl.create :shipping_method
|
||||||
@@ -64,14 +64,15 @@ describe Spree::Order do
|
|||||||
|
|
||||||
it "should only offer digital shipping if all items are digital" do
|
it "should only offer digital shipping if all items are digital" do
|
||||||
order.digital?.should be_true
|
order.digital?.should be_true
|
||||||
order.rate_hash.count.should == 1
|
shipments = order.create_proposed_shipments
|
||||||
order.rate_hash.first.shipping_method.calculator.class.should == Spree::Calculator::DigitalDelivery
|
shipments.count.should == 1
|
||||||
order.rate_hash.first.cost.should == 0.0
|
shipments.first.shipping_method.calculator.class.should == Spree::Calculator::DigitalDelivery
|
||||||
|
shipments.first.cost.should == 0.0
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not offer digital shipping if only some items are digital" do
|
it "should not offer digital shipping if only some items are digital" do
|
||||||
order.digital?.should be_true
|
order.digital?.should be_true
|
||||||
order.add_variant FactoryGirl.create(:variant) # this is the analog product
|
order.contents.add FactoryGirl.create(:variant), 1 # this is the analog product
|
||||||
order.digital?.should be_false
|
order.digital?.should be_false
|
||||||
|
|
||||||
order.rate_hash.count.should == 1
|
order.rate_hash.count.should == 1
|
||||||
|
|||||||
+64
-21
@@ -1,5 +1,19 @@
|
|||||||
ENV["RAILS_ENV"] = "test"
|
# Run Coverage report
|
||||||
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
require 'simplecov'
|
||||||
|
SimpleCov.start do
|
||||||
|
add_group 'Controllers', 'app/controllers'
|
||||||
|
add_group 'Helpers', 'app/helpers'
|
||||||
|
add_group 'Mailers', 'app/mailers'
|
||||||
|
add_group 'Models', 'app/models'
|
||||||
|
add_group 'Views', 'app/views'
|
||||||
|
add_group 'Libraries', 'lib'
|
||||||
|
end
|
||||||
|
|
||||||
|
# Configure Rails Environment
|
||||||
|
ENV['RAILS_ENV'] = 'test'
|
||||||
|
|
||||||
|
require File.expand_path('../dummy/config/environment.rb', __FILE__)
|
||||||
|
|
||||||
require 'rspec/rails'
|
require 'rspec/rails'
|
||||||
require 'database_cleaner'
|
require 'database_cleaner'
|
||||||
require 'ffaker'
|
require 'ffaker'
|
||||||
@@ -7,36 +21,65 @@ require 'shoulda-matchers'
|
|||||||
|
|
||||||
# Requires supporting ruby files with custom matchers and macros, etc,
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
||||||
# in spec/support/ and its subdirectories.
|
# in spec/support/ and its subdirectories.
|
||||||
Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")].each {|f| require f }
|
Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
|
||||||
|
|
||||||
require 'spree/core/testing_support/factories'
|
# Requires factories defined in spree_core
|
||||||
require 'spree/core/testing_support/env'
|
require 'spree/testing_support/factories'
|
||||||
require 'spree/core/testing_support/controller_requests'
|
require 'spree/testing_support/controller_requests'
|
||||||
require 'spree/core/url_helpers'
|
require 'spree/testing_support/authorization_helpers'
|
||||||
|
require 'spree/testing_support/url_helpers'
|
||||||
|
|
||||||
Dir[File.join(File.dirname(__FILE__), "factories/*.rb")].each {|f| require f }
|
# Requires factories defined in lib/spree_digital/factories.rb
|
||||||
|
require 'spree_digital/factories'
|
||||||
|
|
||||||
RSpec.configure do |config|
|
RSpec.configure do |config|
|
||||||
config.mock_with :rspec
|
|
||||||
config.include FactoryGirl::Syntax::Methods
|
config.include FactoryGirl::Syntax::Methods
|
||||||
config.include Spree::Core::UrlHelpers
|
|
||||||
config.include Spree::Core::TestingSupport::ControllerRequests
|
# == URL Helpers
|
||||||
|
#
|
||||||
|
# Allows access to Spree's routes in specs:
|
||||||
|
#
|
||||||
|
# visit spree.admin_path
|
||||||
|
# current_path.should eql(spree.products_path)
|
||||||
|
config.include Spree::TestingSupport::UrlHelpers
|
||||||
|
|
||||||
|
config.include Spree::TestingSupport::ControllerRequests, :type => :controller
|
||||||
|
config.include Spree::TestingSupport::AuthorizationHelpers
|
||||||
|
config.include Devise::TestHelpers, :type => :controller
|
||||||
|
# == Mock Framework
|
||||||
|
#
|
||||||
|
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
||||||
|
#
|
||||||
|
# config.mock_with :mocha
|
||||||
|
# config.mock_with :flexmock
|
||||||
|
# config.mock_with :rr
|
||||||
|
config.mock_with :rspec
|
||||||
|
config.color = true
|
||||||
|
|
||||||
|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
|
||||||
|
config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
||||||
|
|
||||||
|
# Capybara javascript drivers require transactional fixtures set to false, and we use DatabaseCleaner
|
||||||
|
# to cleanup after each test instead. Without transactional fixtures set to false the records created
|
||||||
|
# to setup a test will be unavailable to the browser, which runs under a seperate server instance.
|
||||||
config.use_transactional_fixtures = false
|
config.use_transactional_fixtures = false
|
||||||
|
|
||||||
config.before(:each) do
|
# Ensure Suite is set to use transactions for speed.
|
||||||
if example.metadata[:js]
|
config.before :suite do
|
||||||
DatabaseCleaner.strategy = :truncation, { :except => ['spree_countries', 'spree_zones', 'spree_zone_members', 'spree_states', 'spree_roles'] }
|
DatabaseCleaner.strategy = :transaction
|
||||||
else
|
DatabaseCleaner.clean_with :truncation
|
||||||
DatabaseCleaner.strategy = :transaction
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
config.before(:each) do
|
# Before each spec check if it is a Javascript test and switch between using database transactions or not where necessary.
|
||||||
|
config.before :each do
|
||||||
|
DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction
|
||||||
DatabaseCleaner.start
|
DatabaseCleaner.start
|
||||||
# reset_spree_preferences
|
|
||||||
end
|
end
|
||||||
|
|
||||||
config.after(:each) do
|
# After each spec clean the database.
|
||||||
|
config.after :each do
|
||||||
DatabaseCleaner.clean
|
DatabaseCleaner.clean
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
config.fail_fast = ENV['FAIL_FAST'] || false
|
||||||
|
end
|
||||||
|
|||||||
+26
-20
@@ -1,25 +1,31 @@
|
|||||||
|
# encoding: UTF-8
|
||||||
Gem::Specification.new do |s|
|
Gem::Specification.new do |s|
|
||||||
s.platform = Gem::Platform::RUBY
|
s.platform = Gem::Platform::RUBY
|
||||||
s.name = 'spree_digital'
|
s.name = 'spree_digital'
|
||||||
s.version = '1.1.1'
|
s.version = '2.0.0'
|
||||||
s.summary = ''
|
s.summary = 'Digital download functionality for spree'
|
||||||
s.description = 'Add digital download functionality to spree'
|
s.description = 'Digital download functionality for spree'
|
||||||
s.authors = ['funkensturm', 'Michael Bianco']
|
s.required_ruby_version = '>= 1.9.3'
|
||||||
s.email = ['info@cliffsidedev.com']
|
|
||||||
s.homepage = 'http://www.funkensturm.com'
|
s.author = 'Dinis Lage'
|
||||||
s.files = `git ls-files`.split("\n")
|
s.email = 'dinis@senolage.com'
|
||||||
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
s.homepage = 'http://senolage.com'
|
||||||
|
|
||||||
|
#s.files = `git ls-files`.split("\n")
|
||||||
|
#s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
||||||
s.require_path = 'lib'
|
s.require_path = 'lib'
|
||||||
s.requirements << 'none'
|
s.requirements << 'none'
|
||||||
s.required_ruby_version = '>= 1.8.7'
|
|
||||||
s.add_dependency 'spree_core', '>= 1.1.0'
|
|
||||||
|
|
||||||
# test suite
|
s.add_dependency 'spree_core', '~> 2.0.0'
|
||||||
s.add_development_dependency 'shoulda-matchers'
|
|
||||||
s.add_development_dependency 'capybara'
|
s.add_development_dependency 'capybara', '~> 2.1'
|
||||||
s.add_development_dependency 'factory_girl_rails', '~> 1.7.0'
|
s.add_development_dependency 'coffee-rails'
|
||||||
s.add_development_dependency 'rspec-rails', '~> 2.8'
|
|
||||||
s.add_development_dependency 'sqlite3'
|
|
||||||
s.add_development_dependency 'ffaker'
|
|
||||||
s.add_development_dependency 'database_cleaner'
|
s.add_development_dependency 'database_cleaner'
|
||||||
end
|
s.add_development_dependency 'factory_girl', '~> 4.2'
|
||||||
|
s.add_development_dependency 'ffaker'
|
||||||
|
s.add_development_dependency 'rspec-rails', '~> 2.13'
|
||||||
|
s.add_development_dependency 'sass-rails'
|
||||||
|
s.add_development_dependency 'selenium-webdriver'
|
||||||
|
s.add_development_dependency 'simplecov'
|
||||||
|
s.add_development_dependency 'sqlite3'
|
||||||
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user