diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..428eeb0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +\#* +*~ +.#* +.DS_Store +.idea +.project +tmp +nbproject +*.swp diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5800638 --- /dev/null +++ b/LICENSE @@ -0,0 +1,23 @@ +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the Rails Dog LLC nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..638bb5e --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +SpreeCartToggle +=============== + +Introduction goes here. + + +Example +======= + +Example goes here. + + +Copyright (c) 2011 [name of extension creator], released under the New BSD License diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..a816e4d --- /dev/null +++ b/Rakefile @@ -0,0 +1,75 @@ +require 'rubygems' +require 'rake' +require 'rake/testtask' +require 'rake/packagetask' +require 'rake/gempackagetask' + +gemfile = File.expand_path('../spec/test_app/Gemfile', __FILE__) +if File.exists?(gemfile) && (%w(spec cucumber).include?(ARGV.first.to_s) || ARGV.size == 0) + require 'bundler' + ENV['BUNDLE_GEMFILE'] = gemfile + Bundler.setup + + require 'rspec' + require 'rspec/core/rake_task' + RSpec::Core::RakeTask.new + + require 'cucumber/rake/task' + Cucumber::Rake::Task.new do |t| + t.cucumber_opts = %w{--format progress} + end +end + +desc "Default Task" +task :default => [:spec, :cucumber ] + +spec = eval(File.read('spree_cart_toggle.gemspec')) + +Rake::GemPackageTask.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 "Default Task" +task :default => [ :spec ] + +desc "Regenerates a rails 3 app for testing" +task :test_app do + require '../spree/lib/generators/spree/test_app_generator' + class SpreeCartToggleTestAppGenerator < Spree::Generators::TestAppGenerator + + def install_gems + inside "test_app" do + run 'rake spree_core:install' + run 'rake spree_cart_toggle:install' + end + end + + def migrate_db + run_migrations + end + + protected + def full_path_for_local_gems + <<-gems +gem 'spree_core', :path => \'#{File.join(File.dirname(__FILE__), "../spree/", "core")}\' +gem 'spree_cart_toggle', :path => \'#{File.dirname(__FILE__)}\' + gems + end + + end + SpreeCartToggleTestAppGenerator.start +end + +namespace :test_app do + desc 'Rebuild test and cucumber databases' + task :rebuild_dbs do + system("cd spec/test_app && rake db:drop db:migrate RAILS_ENV=test && rake db:drop db:migrate RAILS_ENV=cucumber") + end +end diff --git a/Versionfile b/Versionfile new file mode 100644 index 0000000..69ef138 --- /dev/null +++ b/Versionfile @@ -0,0 +1,9 @@ +# This file is used to designate compatibilty with different versions of Spree +# Please see http://spreecommerce.com/documentation/extensions.html#versionfile for details + +# Examples +# +# "0.50.x" => { :branch => "master" } +# "0.40.x" => { :tag => "v1.0.0", :version => "1.0.0" } + + diff --git a/app/views/admin/general_settings/edit.html.erb b/app/views/admin/general_settings/edit.html.erb new file mode 100644 index 0000000..0045187 --- /dev/null +++ b/app/views/admin/general_settings/edit.html.erb @@ -0,0 +1,46 @@ +<%= render :partial => 'admin/shared/configuration_menu' %> + +

<%= t('edit_general_settings') %>

+ +<%= form_tag(admin_general_settings_path, :method => :put) do %> +

+ + <%= text_field_tag('preferences[site_name]', Spree::Config[:site_name]) %> +

+

+ + <%= text_field_tag('preferences[default_seo_title]', Spree::Config[:default_seo_title]) %> +

+

+ + <%= text_field_tag('preferences[site_url]', Spree::Config[:site_url])%> +

+

+ +

+ +

+ +

+ +

+ +

+ +

+ <%= button t('update') %> + <%= t("or") %> <%= link_to t("cancel"), admin_general_settings_url %> +

+<% end %> diff --git a/app/views/admin/general_settings/show.html.erb b/app/views/admin/general_settings/show.html.erb new file mode 100644 index 0000000..72aec9b --- /dev/null +++ b/app/views/admin/general_settings/show.html.erb @@ -0,0 +1,37 @@ +<%= render :partial => 'admin/shared/configuration_menu' %> + +

<%= t("general_settings") %>

+ + + + + + + + + + + + + + + + + + + + + + + +
<%= t("site_name") %>:<%= Spree::Config[:site_name] %>
<%= t("default_seo_title") %>:<%= Spree::Config[:default_seo_title] %>
<%= t("site_url") %>:<%= Spree::Config[:site_url] %>
+ <%= (Spree::Config[:allow_ssl_in_production] ? t("ssl_will_be_used_in_production_mode") : t("ssl_will_not_be_used_in_production_mode")) %> +
+ <%= (Spree::Config[:allow_ssl_in_development_and_test] ? t("ssl_will_be_used_in_development_and_test_modes") : t("ssl_will_not_be_used_in_development_and_test_modes")) %> +
+ <%= (Spree::Config[:cart_enabled] == "1" ? t("cart_enabled") : t("cart_disabled")) %> +
+ +

<%= link_to_with_icon 'edit', t("edit"), edit_admin_general_settings_path, :id => 'admin_general_settings_link' %>

+ + diff --git a/app/views/products/_cart_form.html.erb b/app/views/products/_cart_form.html.erb new file mode 100644 index 0000000..0640a03 --- /dev/null +++ b/app/views/products/_cart_form.html.erb @@ -0,0 +1,56 @@ +<%= form_for :order, :url => populate_orders_url do |f| %> +<%= hook :inside_product_cart_form do %> + + <% if product_price(@product) %> + <%= hook :product_price do %> +

+ <%= t("price") %> +
+ <%= product_price(@product) %> +

+ <% end %> + <% end %> + + <% if @product.has_variants? %> +
+

<%= t('variants') %>

+ +
+ <% end%> + <% if @product.has_stock? || Spree::Config[:allow_backorders] %> + <% if Spree::Config[:allow_backorders] =="1" %> + <%= text_field_tag (@product.has_variants? ? :quantity : "variants[#{@product.master.id}]"), + 1, :class => "title", :size => 3 %> +   + + <% end %> + <% else %> + <%= content_tag('strong', t('out_of_stock')) %> + <% end %> + +<% end %> +<% end %> + +<% content_for :head do %> + <%= javascript_include_tag 'product' %> +<% end %> diff --git a/app/views/shared/_store_menu.html.erb b/app/views/shared/_store_menu.html.erb new file mode 100644 index 0000000..b070873 --- /dev/null +++ b/app/views/shared/_store_menu.html.erb @@ -0,0 +1,4 @@ +
  • <%= link_to t("home") , root_path %>
  • + <% if Spree::Config[:allow_backorders] =="1" %> +
  • <%= link_to_cart %>
  • + <% end %> diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 0000000..1c3c3b6 --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,3 @@ +Rails.application.routes.draw do + # Add your extension routes here +end diff --git a/lib/spree_cart_toggle.rb b/lib/spree_cart_toggle.rb new file mode 100644 index 0000000..fb1ce28 --- /dev/null +++ b/lib/spree_cart_toggle.rb @@ -0,0 +1,17 @@ +require 'spree_core' +require 'spree_cart_toggle_hooks' + +module SpreeCartToggle + class Engine < Rails::Engine + + config.autoload_paths += %W(#{config.root}/lib) + + def self.activate + Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator*.rb")) do |c| + Rails.env.production? ? require(c) : load(c) + end + end + + config.to_prepare &method(:activate).to_proc + end +end diff --git a/lib/spree_cart_toggle_hooks.rb b/lib/spree_cart_toggle_hooks.rb new file mode 100644 index 0000000..3e7b375 --- /dev/null +++ b/lib/spree_cart_toggle_hooks.rb @@ -0,0 +1,3 @@ +class SpreeCartToggleHooks < Spree::ThemeSupport::HookListener + # custom hooks go here +end \ No newline at end of file diff --git a/lib/tasks/install.rake b/lib/tasks/install.rake new file mode 100644 index 0000000..1cc43ba --- /dev/null +++ b/lib/tasks/install.rake @@ -0,0 +1,25 @@ +namespace :spree_cart_toggle do + desc "Copies all migrations and assets (NOTE: This will be obsolete with Rails 3.1)" + task :install do + Rake::Task['spree_cart_toggle:install:migrations'].invoke + Rake::Task['spree_cart_toggle:install:assets'].invoke + end + + namespace :install do + desc "Copies all migrations (NOTE: This will be obsolete with Rails 3.1)" + task :migrations do + source = File.join(File.dirname(__FILE__), '..', '..', 'db') + destination = File.join(Rails.root, 'db') + Spree::FileUtilz.mirror_files(source, destination) + end + + desc "Copies all assets (NOTE: This will be obsolete with Rails 3.1)" + task :assets do + source = File.join(File.dirname(__FILE__), '..', '..', 'public') + destination = File.join(Rails.root, 'public') + puts "INFO: Mirroring assets from #{source} to #{destination}" + Spree::FileUtilz.mirror_files(source, destination) + end + end + +end \ No newline at end of file diff --git a/lib/tasks/spree_cart_toggle.rake b/lib/tasks/spree_cart_toggle.rake new file mode 100644 index 0000000..2c5c4e2 --- /dev/null +++ b/lib/tasks/spree_cart_toggle.rake @@ -0,0 +1 @@ +# add custom rake tasks here \ No newline at end of file diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..032425a --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,30 @@ +# This file is copied to ~/spec when you run 'ruby script/generate rspec' +# from the project root directory. +ENV["RAILS_ENV"] ||= 'test' +require File.expand_path("../test_app/config/environment", __FILE__) +require 'rspec/rails' + +# Requires supporting files with custom matchers and macros, etc, +# in ./support/ and its subdirectories. +Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f} + +RSpec.configure do |config| + # == 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.fixture_path = "#{::Rails.root}/spec/fixtures" + + #config.include Devise::TestHelpers, :type => :controller + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, comment the following line or assign false + # instead of true. + config.use_transactional_fixtures = true +end + +@configuration ||= AppConfiguration.find_or_create_by_name("Default configuration") diff --git a/spree_cart_toggle.gemspec b/spree_cart_toggle.gemspec new file mode 100644 index 0000000..4f471f7 --- /dev/null +++ b/spree_cart_toggle.gemspec @@ -0,0 +1,20 @@ +Gem::Specification.new do |s| + s.platform = Gem::Platform::RUBY + s.name = 'spree_cart_toggle' + s.version = '0.60.0' + s.summary = 'Spree Cart On/Off' + s.description = 'Addition to Spree general settings to disable cart and add buttons' + s.required_ruby_version = '>= 1.8.7' + + s.author = 'Mark Linn' + s.email = 'marklinn@xwcsolutions.com' + # s.homepage = 'http://www.rubyonrails.org' + # s.rubyforge_project = 'actionmailer' + + s.files = `git ls-files`.split("\n") + s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") + s.require_path = 'lib' + s.requirements << 'none' + + s.add_dependency('spree_core', '>= 0.60.0') +end