From 8691935111f641e2e1898cd7ac558b0ce3902896 Mon Sep 17 00:00:00 2001 From: bishma-stornelli Date: Fri, 9 May 2014 11:39:56 -0430 Subject: [PATCH 01/28] Updated paths of assets --- Gemfile.lock | 41 +++++++++---------- .../backend/backend}/spree_conekta.js | 0 .../{store => spree/frontend}/easyXDM.min.js | 0 .../{store => spree/frontend}/printThis.js | 0 .../frontend}/spree_conekta.js.coffee | 0 .../{store => spree/frontend}/utils.js.erb | 2 +- .../{admin => spree/backend}/print.css.sass | 0 .../backend}/spree_conekta.css | 0 .../frontend}/conekta.css.sass | 0 .../frontend}/spree_conekta.css | 0 .../install/install_generator.rb | 8 ++-- 11 files changed, 24 insertions(+), 27 deletions(-) rename app/assets/javascripts/{admin => spree/backend/backend}/spree_conekta.js (100%) rename app/assets/javascripts/{store => spree/frontend}/easyXDM.min.js (100%) rename app/assets/javascripts/{store => spree/frontend}/printThis.js (100%) rename app/assets/javascripts/{store => spree/frontend}/spree_conekta.js.coffee (100%) rename app/assets/javascripts/{store => spree/frontend}/utils.js.erb (89%) rename app/assets/stylesheets/{admin => spree/backend}/print.css.sass (100%) rename app/assets/stylesheets/{admin => spree/backend}/spree_conekta.css (100%) rename app/assets/stylesheets/{store => spree/frontend}/conekta.css.sass (100%) rename app/assets/stylesheets/{store => spree/frontend}/spree_conekta.css (100%) diff --git a/Gemfile.lock b/Gemfile.lock index c55fb77..df14d66 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - spree_conekta (0.5.9) + spree_conekta (0.6.0) activemerchant celluloid coffee-rails @@ -26,7 +26,7 @@ GEM active_utils (2.0.2) activesupport (>= 2.3.11) i18n - activemerchant (1.42.6) + activemerchant (1.42.9) active_utils (~> 2.0, >= 2.0.1) activesupport (>= 2.3.14, < 5.0.0) builder (>= 2.1.2, < 4.0.0) @@ -53,7 +53,7 @@ GEM activerecord (>= 3.0) arel (4.0.2) atomic (1.1.14) - awesome_nested_set (3.0.0.rc.3) + awesome_nested_set (3.0.0.rc.5) activerecord (>= 4.0.0, < 5) aws-sdk (1.27.0) json (~> 1.4) @@ -61,7 +61,7 @@ GEM uuidtools (~> 2.1) builder (3.1.4) cancan (1.6.10) - canonical-rails (0.0.3) + canonical-rails (0.0.7) rails (>= 3.1, < 5.0) capybara (2.2.0) mime-types (>= 1.16) @@ -78,7 +78,7 @@ GEM ffi (~> 1.0, >= 1.0.11) climate_control (0.0.3) activesupport (>= 3.0) - cocaine (0.5.3) + cocaine (0.5.4) climate_control (>= 0.0.3, < 1.0) coderay (1.1.0) coffee-rails (4.0.1) @@ -88,7 +88,7 @@ GEM coffee-script-source execjs coffee-script-source (1.7.0) - colorize (0.6.0) + colorize (0.7.2) database_cleaner (1.2.0) deface (1.0.0) colorize (>= 0.5.8) @@ -96,21 +96,20 @@ GEM rails (>= 3.1) diff-lcs (1.2.5) erubis (2.7.0) - ethon (0.6.3) + ethon (0.7.0) ffi (>= 1.3.0) - mime-types (~> 1.18) execjs (2.0.2) factory_girl (4.3.0) activesupport (>= 3.0.0) - faraday (0.8.9) - multipart-post (~> 1.2.0) - faraday_middleware (0.9.0) - faraday (>= 0.7.4, < 0.9) + faraday (0.9.0) + multipart-post (>= 1.2, < 3) + faraday_middleware (0.9.1) + faraday (>= 0.7.4, < 0.10) ffaker (1.22.1) ffi (1.9.3) highline (1.6.21) hike (1.2.3) - httparty (0.13.0) + httparty (0.13.1) json (~> 1.8) multi_xml (>= 0.5.2) i18n (0.6.5) @@ -130,16 +129,14 @@ GEM mime-types (1.25.1) mini_portile (0.5.2) minitest (4.7.5) - monetize (0.1.4) - money (6.0.1) + money (6.1.1) i18n (~> 0.6.4) - monetize (~> 0.1.3) multi_json (1.8.2) multi_xml (0.5.5) - multipart-post (1.2.0) + multipart-post (2.0.0) nokogiri (1.6.0) mini_portile (~> 0.5.0) - oj (2.5.4) + oj (2.9.0) paperclip (3.4.2) activemodel (>= 3.0.0) activerecord (>= 3.0.0) @@ -190,7 +187,7 @@ GEM rspec-expectations (~> 2.14.0) rspec-mocks (~> 2.14.0) rubyzip (1.0.0) - sass (3.2.14) + sass (3.3.7) sass-rails (4.0.1) railties (>= 4.0.0, < 5.0) sass (>= 3.1.10) @@ -251,7 +248,7 @@ GEM stringex (~> 1.5.1) spree_sample (2.1.5) spree_core (= 2.1.5) - sprockets (2.10.1) + sprockets (2.12.1) hike (~> 1.2) multi_json (~> 1.0) rack (~> 1.0) @@ -272,8 +269,8 @@ GEM polyglot polyglot (>= 0.3.1) truncate_html (0.9.2) - typhoeus (0.6.7) - ethon (~> 0.6.2) + typhoeus (0.6.8) + ethon (>= 0.7.0) tzinfo (0.3.38) uuidtools (2.1.4) vcr (2.8.0) diff --git a/app/assets/javascripts/admin/spree_conekta.js b/app/assets/javascripts/spree/backend/backend/spree_conekta.js similarity index 100% rename from app/assets/javascripts/admin/spree_conekta.js rename to app/assets/javascripts/spree/backend/backend/spree_conekta.js diff --git a/app/assets/javascripts/store/easyXDM.min.js b/app/assets/javascripts/spree/frontend/easyXDM.min.js similarity index 100% rename from app/assets/javascripts/store/easyXDM.min.js rename to app/assets/javascripts/spree/frontend/easyXDM.min.js diff --git a/app/assets/javascripts/store/printThis.js b/app/assets/javascripts/spree/frontend/printThis.js similarity index 100% rename from app/assets/javascripts/store/printThis.js rename to app/assets/javascripts/spree/frontend/printThis.js diff --git a/app/assets/javascripts/store/spree_conekta.js.coffee b/app/assets/javascripts/spree/frontend/spree_conekta.js.coffee similarity index 100% rename from app/assets/javascripts/store/spree_conekta.js.coffee rename to app/assets/javascripts/spree/frontend/spree_conekta.js.coffee diff --git a/app/assets/javascripts/store/utils.js.erb b/app/assets/javascripts/spree/frontend/utils.js.erb similarity index 89% rename from app/assets/javascripts/store/utils.js.erb rename to app/assets/javascripts/spree/frontend/utils.js.erb index d9ee243..65a4d7f 100644 --- a/app/assets/javascripts/store/utils.js.erb +++ b/app/assets/javascripts/spree/frontend/utils.js.erb @@ -29,7 +29,7 @@ spreeConekta.Utils = (function(){ function printDoc(printable) { printer = new spreeConekta.Utils({ printable: $(printable), - options: { loadCSS: "<%= asset_path('admin/print.css.sass') %>" } + options: { loadCSS: "<%= asset_path('spree/backend/print.css.sass') %>" } }); printer.print(); }; diff --git a/app/assets/stylesheets/admin/print.css.sass b/app/assets/stylesheets/spree/backend/print.css.sass similarity index 100% rename from app/assets/stylesheets/admin/print.css.sass rename to app/assets/stylesheets/spree/backend/print.css.sass diff --git a/app/assets/stylesheets/admin/spree_conekta.css b/app/assets/stylesheets/spree/backend/spree_conekta.css similarity index 100% rename from app/assets/stylesheets/admin/spree_conekta.css rename to app/assets/stylesheets/spree/backend/spree_conekta.css diff --git a/app/assets/stylesheets/store/conekta.css.sass b/app/assets/stylesheets/spree/frontend/conekta.css.sass similarity index 100% rename from app/assets/stylesheets/store/conekta.css.sass rename to app/assets/stylesheets/spree/frontend/conekta.css.sass diff --git a/app/assets/stylesheets/store/spree_conekta.css b/app/assets/stylesheets/spree/frontend/spree_conekta.css similarity index 100% rename from app/assets/stylesheets/store/spree_conekta.css rename to app/assets/stylesheets/spree/frontend/spree_conekta.css diff --git a/lib/generators/spree_conekta/install/install_generator.rb b/lib/generators/spree_conekta/install/install_generator.rb index 055dd3e..ceff243 100644 --- a/lib/generators/spree_conekta/install/install_generator.rb +++ b/lib/generators/spree_conekta/install/install_generator.rb @@ -5,13 +5,13 @@ class InstallGenerator < Rails::Generators::Base class_option :auto_run_migrations, type: :boolean, default: false def add_javascripts - append_file 'app/assets/javascripts/store/all.js', "\n//= require store/spree_conekta\n" - append_file 'app/assets/javascripts/admin/all.js', "\n//= require admin/spree_conekta\n" + append_file 'vendor/assets/javascripts/spree/frontend/all.js', "\n//= require spree/frontend/spree_conekta\n" + append_file 'vendor/assets/javascripts/spree/backend/all.js', "\n//= require spree/backend/spree_conekta\n" end def add_stylesheets - inject_into_file 'app/assets/stylesheets/store/all.css', "\n *= require store/spree_conekta\n", before: /\*\//, verbose: true - inject_into_file 'app/assets/stylesheets/admin/all.css', "\n *= require admin/spree_conekta\n", before: /\*\//, verbose: true + inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css', "\n *= require spree/frontend/spree_conekta\n", before: /\*\//, verbose: true + inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css', "\n *= require spree/backend/spree_conekta\n", before: /\*\//, verbose: true end def add_migrations From 7ae80500e1603ac4e82dde7e779b7fda9a94c5de Mon Sep 17 00:00:00 2001 From: bishma-stornelli Date: Fri, 9 May 2014 11:40:32 -0430 Subject: [PATCH 02/28] Added payment method and user to conekta payment --- app/models/spree/conekta_payment.rb | 1 + ...145837_add_payment_method_id_to_spree_conekta_payment.rb | 6 ++++++ .../20140509151116_add_user_id_to_spree_conekta_payment.rb | 6 ++++++ 3 files changed, 13 insertions(+) create mode 100644 db/migrate/20140509145837_add_payment_method_id_to_spree_conekta_payment.rb create mode 100644 db/migrate/20140509151116_add_user_id_to_spree_conekta_payment.rb diff --git a/app/models/spree/conekta_payment.rb b/app/models/spree/conekta_payment.rb index 2e7febf..023bda1 100644 --- a/app/models/spree/conekta_payment.rb +++ b/app/models/spree/conekta_payment.rb @@ -1,4 +1,5 @@ class Spree::ConektaPayment < ActiveRecord::Base + belongs_to :payment_method has_many :payments, as: :source unless Rails::VERSION::MAJOR == 4 diff --git a/db/migrate/20140509145837_add_payment_method_id_to_spree_conekta_payment.rb b/db/migrate/20140509145837_add_payment_method_id_to_spree_conekta_payment.rb new file mode 100644 index 0000000..0bc7c2a --- /dev/null +++ b/db/migrate/20140509145837_add_payment_method_id_to_spree_conekta_payment.rb @@ -0,0 +1,6 @@ +class AddPaymentMethodIdToSpreeConektaPayment < ActiveRecord::Migration + def change + add_column :spree_conekta_payments, :payment_method_id, :integer + add_index :spree_conekta_payments, :payment_method_id + end +end diff --git a/db/migrate/20140509151116_add_user_id_to_spree_conekta_payment.rb b/db/migrate/20140509151116_add_user_id_to_spree_conekta_payment.rb new file mode 100644 index 0000000..5f734e3 --- /dev/null +++ b/db/migrate/20140509151116_add_user_id_to_spree_conekta_payment.rb @@ -0,0 +1,6 @@ +class AddUserIdToSpreeConektaPayment < ActiveRecord::Migration + def change + add_column :spree_conekta_payments, :user_id, :integer + add_index :spree_conekta_payments, :user_id + end +end From d05102b56b39cb76da91e9b585cea7c288df3139 Mon Sep 17 00:00:00 2001 From: bishma-stornelli Date: Fri, 9 May 2014 11:40:46 -0430 Subject: [PATCH 03/28] Update version number --- lib/spree_conekta/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/spree_conekta/version.rb b/lib/spree_conekta/version.rb index a66099f..56362c7 100644 --- a/lib/spree_conekta/version.rb +++ b/lib/spree_conekta/version.rb @@ -1,3 +1,3 @@ module SpreeConekta - VERSION = "0.5.9" + VERSION = "0.6.0" end From ca985b2d31f4e748d4c535c861dce03b56c06071 Mon Sep 17 00:00:00 2001 From: bishma-stornelli Date: Sat, 10 May 2014 17:30:35 -0430 Subject: [PATCH 04/28] Fixed path of backend/spree_conekta.js --- .../javascripts/spree/backend/{backend => }/spree_conekta.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename app/assets/javascripts/spree/backend/{backend => }/spree_conekta.js (100%) diff --git a/app/assets/javascripts/spree/backend/backend/spree_conekta.js b/app/assets/javascripts/spree/backend/spree_conekta.js similarity index 100% rename from app/assets/javascripts/spree/backend/backend/spree_conekta.js rename to app/assets/javascripts/spree/backend/spree_conekta.js From 40796229c216aff2f2bd32e64d773c3f5523fe84 Mon Sep 17 00:00:00 2001 From: bishma-stornelli Date: Thu, 29 May 2014 20:57:20 -0430 Subject: [PATCH 05/28] =?UTF-8?q?Agregada=20respuesta=20para=20cancelar=20?= =?UTF-8?q?ordenes=20por=20tarjetas=20de=20cr=C3=A9dito?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/spree/conekta/fake_response.rb | 10 ++++++++++ lib/spree/conekta/provider.rb | 4 ++++ 2 files changed, 14 insertions(+) create mode 100644 lib/spree/conekta/fake_response.rb diff --git a/lib/spree/conekta/fake_response.rb b/lib/spree/conekta/fake_response.rb new file mode 100644 index 0000000..425ace7 --- /dev/null +++ b/lib/spree/conekta/fake_response.rb @@ -0,0 +1,10 @@ +module Spree::Conekta + class FakeResponse < ActiveMerchant::Billing::Response + + def initialize + @success = true + @message = "Orden devuelta" + @params = {} + end + end +end \ No newline at end of file diff --git a/lib/spree/conekta/provider.rb b/lib/spree/conekta/provider.rb index 6243510..1b56c1a 100644 --- a/lib/spree/conekta/provider.rb +++ b/lib/spree/conekta/provider.rb @@ -41,6 +41,10 @@ def supports?(brand) %w(visa master).include? brand end + def credit(credit_cents, response_code, gateway_options) + Spree::Conekta::FakeResponse.new + end + private def commit(common, method_params, gateway_options) From 0cd70ff138bd8677aa5e0c72e5a7d9b4f0c0a75d Mon Sep 17 00:00:00 2001 From: bishma-stornelli Date: Fri, 30 May 2014 00:41:46 -0430 Subject: [PATCH 06/28] Skipped verify_authenticity_token to avoid CSRF warning/error --- app/controllers/spree/conekta/payments_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/spree/conekta/payments_controller.rb b/app/controllers/spree/conekta/payments_controller.rb index 30ce2cd..789fbba 100644 --- a/app/controllers/spree/conekta/payments_controller.rb +++ b/app/controllers/spree/conekta/payments_controller.rb @@ -1,6 +1,7 @@ module Spree::Conekta class PaymentsController < Spree::StoreController ssl_required + skip_before_filter :verify_authenticity_token, only: :create def show @order = Spree::Order.find_by_number(params[:id]) From d003d76ca48e83adac399f628e5ac78dc3d4bd56 Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Tue, 17 Jun 2014 20:47:43 -0500 Subject: [PATCH 07/28] Renaming folders to new Spree 2.3.0.beta standard --- Gemfile | 1 + Gemfile.lock | 324 +++++++++--------- LICENSE | 26 ++ MIT-LICENSE | 2 +- README.md | 6 +- Rakefile | 37 +- app/assets/javascripts/admin/spree_conekta.js | 0 .../spree/backend/spree_conekta.js | 2 + .../{store => spree/frontend}/easyXDM.min.js | 0 .../{store => spree/frontend}/printThis.js | 0 .../frontend}/spree_conekta.js.coffee | 0 .../{store => spree/frontend}/utils.js.erb | 2 +- .../{admin => spree/backend}/print.css.sass | 0 .../backend}/spree_conekta.css | 0 .../frontend}/conekta.css.sass | 0 .../frontend}/spree_conekta.css | 0 bin/rails | 7 + .../install/install_generator.rb | 8 +- lib/spree_conekta/factories.rb | 6 + lib/spree_conekta/version.rb | 2 +- spree_conekta.gemspec | 6 +- 21 files changed, 242 insertions(+), 187 deletions(-) create mode 100644 LICENSE delete mode 100644 app/assets/javascripts/admin/spree_conekta.js create mode 100644 app/assets/javascripts/spree/backend/spree_conekta.js rename app/assets/javascripts/{store => spree/frontend}/easyXDM.min.js (100%) rename app/assets/javascripts/{store => spree/frontend}/printThis.js (100%) rename app/assets/javascripts/{store => spree/frontend}/spree_conekta.js.coffee (100%) rename app/assets/javascripts/{store => spree/frontend}/utils.js.erb (89%) rename app/assets/stylesheets/{admin => spree/backend}/print.css.sass (100%) rename app/assets/stylesheets/{admin => spree/backend}/spree_conekta.css (100%) rename app/assets/stylesheets/{store => spree/frontend}/conekta.css.sass (100%) rename app/assets/stylesheets/{store => spree/frontend}/spree_conekta.css (100%) create mode 100644 bin/rails create mode 100644 lib/spree_conekta/factories.rb diff --git a/Gemfile b/Gemfile index d4b59f7..788cd45 100644 --- a/Gemfile +++ b/Gemfile @@ -1,4 +1,5 @@ source "http://rubygems.org" +gem 'spree', github: 'spree/spree', branch: 'master' group :test, :development do gem 'rspec-rails', '~> 2.13' diff --git a/Gemfile.lock b/Gemfile.lock index c55fb77..8250d1d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,32 +1,92 @@ +GIT + remote: git://github.com/spree/spree.git + revision: 4687e608b49236c2850500b026a9fbbab37dc96c + branch: master + specs: + spree (2.3.0.beta) + spree_api (= 2.3.0.beta) + spree_backend (= 2.3.0.beta) + spree_cmd (= 2.3.0.beta) + spree_core (= 2.3.0.beta) + spree_frontend (= 2.3.0.beta) + spree_sample (= 2.3.0.beta) + spree_api (2.3.0.beta) + rabl (~> 0.9.4.pre1) + spree_core (= 2.3.0.beta) + versioncake (~> 2.3.1) + spree_backend (2.3.0.beta) + jquery-rails (~> 3.1.0) + jquery-ui-rails (~> 4.1.0) + select2-rails (~> 3.5.0) + spree_api (= 2.3.0.beta) + spree_core (= 2.3.0.beta) + spree_cmd (2.3.0.beta) + thor (~> 0.14) + spree_core (2.3.0.beta) + activemerchant (~> 1.42.3) + acts_as_list (= 0.3.0) + awesome_nested_set (~> 3.0.0.rc.3) + aws-sdk (= 1.27.0) + cancan (~> 1.6.10) + deface (~> 1.0.0) + ffaker (~> 1.16) + font-awesome-rails (~> 4.0) + friendly_id (~> 5.0.4) + highline (~> 1.6.18) + httparty (~> 0.11) + i18n (= 0.6.9) + json (~> 1.7) + kaminari (~> 0.15.0) + monetize + paperclip (~> 4.1.1) + paranoia (~> 2.0) + rails (~> 4.1.0) + ransack (~> 1.2.2) + state_machine (= 1.2.0) + stringex (~> 1.5.1) + truncate_html (= 0.9.2) + spree_frontend (2.3.0.beta) + canonical-rails (~> 0.0.4) + jquery-rails (~> 3.1.0) + spree_api (= 2.3.0.beta) + spree_core (= 2.3.0.beta) + stringex (~> 1.5.1) + spree_sample (2.3.0.beta) + spree_core (= 2.3.0.beta) + PATH remote: . specs: - spree_conekta (0.5.9) + spree_conekta (0.6.0) activemerchant celluloid coffee-rails faraday faraday_middleware oj - spree (~> 2.0) + spree (~> 2.3.0.beta) typhoeus GEM remote: http://rubygems.org/ specs: - actionmailer (4.0.1) - actionpack (= 4.0.1) + actionmailer (4.1.1) + actionpack (= 4.1.1) + actionview (= 4.1.1) mail (~> 2.5.4) - actionpack (4.0.1) - activesupport (= 4.0.1) - builder (~> 3.1.0) - erubis (~> 2.7.0) + actionpack (4.1.1) + actionview (= 4.1.1) + activesupport (= 4.1.1) rack (~> 1.5.2) rack-test (~> 0.6.2) - active_utils (2.0.2) + actionview (4.1.1) + activesupport (= 4.1.1) + builder (~> 3.1) + erubis (~> 2.7.0) + active_utils (2.2.1) activesupport (>= 2.3.11) i18n - activemerchant (1.42.6) + activemerchant (1.42.9) active_utils (~> 2.0, >= 2.0.1) activesupport (>= 2.3.14, < 5.0.0) builder (>= 2.1.2, < 4.0.0) @@ -34,51 +94,48 @@ GEM json (~> 1.7) money (< 7.0.0) nokogiri (~> 1.4) - activemodel (4.0.1) - activesupport (= 4.0.1) - builder (~> 3.1.0) - activerecord (4.0.1) - activemodel (= 4.0.1) - activerecord-deprecated_finders (~> 1.0.2) - activesupport (= 4.0.1) - arel (~> 4.0.0) - activerecord-deprecated_finders (1.0.3) - activesupport (4.0.1) - i18n (~> 0.6, >= 0.6.4) - minitest (~> 4.2) - multi_json (~> 1.3) + activemodel (4.1.1) + activesupport (= 4.1.1) + builder (~> 3.1) + activerecord (4.1.1) + activemodel (= 4.1.1) + activesupport (= 4.1.1) + arel (~> 5.0.0) + activesupport (4.1.1) + i18n (~> 0.6, >= 0.6.9) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) thread_safe (~> 0.1) - tzinfo (~> 0.3.37) + tzinfo (~> 1.1) acts_as_list (0.3.0) activerecord (>= 3.0) - arel (4.0.2) - atomic (1.1.14) - awesome_nested_set (3.0.0.rc.3) + arel (5.0.1.20140414130214) + awesome_nested_set (3.0.0.rc.5) activerecord (>= 4.0.0, < 5) aws-sdk (1.27.0) json (~> 1.4) nokogiri (>= 1.4.4) uuidtools (~> 2.1) - builder (3.1.4) + builder (3.2.2) cancan (1.6.10) - canonical-rails (0.0.3) + canonical-rails (0.0.7) rails (>= 3.1, < 5.0) - capybara (2.2.0) + capybara (2.3.0) mime-types (>= 1.16) nokogiri (>= 1.3.3) rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (~> 2.0) - capybara-webkit (1.0.0) + capybara-webkit (1.1.0) capybara (~> 2.0, >= 2.0.2) json celluloid (0.15.2) timers (~> 1.1.0) - childprocess (0.3.9) + childprocess (0.5.3) ffi (~> 1.0, >= 1.0.11) climate_control (0.0.3) activesupport (>= 3.0) - cocaine (0.5.3) + cocaine (0.5.4) climate_control (>= 0.0.3, < 1.0) coderay (1.1.0) coffee-rails (4.0.1) @@ -88,32 +145,35 @@ GEM coffee-script-source execjs coffee-script-source (1.7.0) - colorize (0.6.0) - database_cleaner (1.2.0) + colorize (0.7.3) + database_cleaner (1.3.0) deface (1.0.0) colorize (>= 0.5.8) nokogiri (~> 1.6.0) rails (>= 3.1) diff-lcs (1.2.5) erubis (2.7.0) - ethon (0.6.3) + ethon (0.7.0) ffi (>= 1.3.0) - mime-types (~> 1.18) - execjs (2.0.2) - factory_girl (4.3.0) + execjs (2.2.0) + factory_girl (4.4.0) activesupport (>= 3.0.0) - faraday (0.8.9) - multipart-post (~> 1.2.0) - faraday_middleware (0.9.0) - faraday (>= 0.7.4, < 0.9) - ffaker (1.22.1) + faraday (0.9.0) + multipart-post (>= 1.2, < 3) + faraday_middleware (0.9.1) + faraday (>= 0.7.4, < 0.10) + ffaker (1.24.0) ffi (1.9.3) + font-awesome-rails (4.1.0.0) + railties (>= 3.2, < 5.0) + friendly_id (5.0.4) + activerecord (>= 4.0.0) highline (1.6.21) hike (1.2.3) - httparty (0.13.0) + httparty (0.13.1) json (~> 1.8) multi_xml (>= 0.5.2) - i18n (0.6.5) + i18n (0.6.9) jquery-rails (3.1.0) railties (>= 3.0, < 5.0) thor (>= 0.14, < 2.0) @@ -128,156 +188,111 @@ GEM treetop (~> 1.4.8) method_source (0.8.2) mime-types (1.25.1) - mini_portile (0.5.2) - minitest (4.7.5) - monetize (0.1.4) - money (6.0.1) + mini_portile (0.6.0) + minitest (5.3.5) + monetize (0.3.0) + money (~> 6.1.0.beta1) + money (6.1.1) i18n (~> 0.6.4) - monetize (~> 0.1.3) - multi_json (1.8.2) + multi_json (1.10.1) multi_xml (0.5.5) - multipart-post (1.2.0) - nokogiri (1.6.0) - mini_portile (~> 0.5.0) - oj (2.5.4) - paperclip (3.4.2) + multipart-post (2.0.0) + nokogiri (1.6.2.1) + mini_portile (= 0.6.0) + oj (2.9.6) + paperclip (4.1.1) activemodel (>= 3.0.0) - activerecord (>= 3.0.0) activesupport (>= 3.0.0) - cocaine (~> 0.5.0) + cocaine (~> 0.5.3) mime-types paranoia (2.0.2) activerecord (~> 4.0) - polyamorous (0.6.4) + polyamorous (1.0.0) activerecord (>= 3.0) - polyglot (0.3.4) - pry (0.9.12.4) - coderay (~> 1.0) - method_source (~> 0.8) + polyglot (0.3.5) + pry (0.10.0) + coderay (~> 1.1.0) + method_source (~> 0.8.1) slop (~> 3.4) - rabl (0.9.3) + rabl (0.9.4.pre1) activesupport (>= 2.3.14) rack (1.5.2) rack-test (0.6.2) rack (>= 1.0) - rails (4.0.1) - actionmailer (= 4.0.1) - actionpack (= 4.0.1) - activerecord (= 4.0.1) - activesupport (= 4.0.1) + rails (4.1.1) + actionmailer (= 4.1.1) + actionpack (= 4.1.1) + actionview (= 4.1.1) + activemodel (= 4.1.1) + activerecord (= 4.1.1) + activesupport (= 4.1.1) bundler (>= 1.3.0, < 2.0) - railties (= 4.0.1) - sprockets-rails (~> 2.0.0) - railties (4.0.1) - actionpack (= 4.0.1) - activesupport (= 4.0.1) + railties (= 4.1.1) + sprockets-rails (~> 2.0) + railties (4.1.1) + actionpack (= 4.1.1) + activesupport (= 4.1.1) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) - rake (10.1.0) - ransack (1.1.0) + rake (10.3.2) + ransack (1.2.3) actionpack (>= 3.0) activerecord (>= 3.0) - polyamorous (~> 0.6.0) - rspec-core (2.14.7) - rspec-expectations (2.14.4) + activesupport (>= 3.0) + i18n + polyamorous (~> 1.0.0) + rspec-collection_matchers (1.0.0) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (2.99.0) + rspec-expectations (2.99.0) diff-lcs (>= 1.1.3, < 2.0) - rspec-mocks (2.14.4) - rspec-rails (2.14.0) + rspec-mocks (2.99.1) + rspec-rails (2.99.0) actionpack (>= 3.0) + activemodel (>= 3.0) activesupport (>= 3.0) railties (>= 3.0) - rspec-core (~> 2.14.0) - rspec-expectations (~> 2.14.0) - rspec-mocks (~> 2.14.0) - rubyzip (1.0.0) - sass (3.2.14) - sass-rails (4.0.1) - railties (>= 4.0.0, < 5.0) - sass (>= 3.1.10) - sprockets-rails (~> 2.0.0) - select2-rails (3.4.9) - sass-rails + rspec-collection_matchers + rspec-core (~> 2.99.0) + rspec-expectations (~> 2.99.0) + rspec-mocks (~> 2.99.0) + rubyzip (1.1.4) + select2-rails (3.5.7) thor (~> 0.14) - selenium-webdriver (2.37.0) - childprocess (>= 0.2.5) + selenium-webdriver (2.42.0) + childprocess (>= 0.5.0) multi_json (~> 1.0) - rubyzip (~> 1.0.0) + rubyzip (~> 1.0) websocket (~> 1.0.4) - slop (3.4.7) + slop (3.5.0) spork (0.9.2) - spree (2.1.5) - spree_api (= 2.1.5) - spree_backend (= 2.1.5) - spree_cmd (= 2.1.5) - spree_core (= 2.1.5) - spree_frontend (= 2.1.5) - spree_sample (= 2.1.5) - spree_api (2.1.5) - rabl (= 0.9.3) - spree_core (= 2.1.5) - versioncake (~> 1.2.0) - spree_backend (2.1.5) - jquery-rails (~> 3.1.0) - jquery-ui-rails (~> 4.1.0) - select2-rails (~> 3.4.7) - spree_api (= 2.1.5) - spree_core (= 2.1.5) - spree_cmd (2.1.5) - thor (~> 0.14) - spree_core (2.1.5) - activemerchant (~> 1.42.3) - acts_as_list (= 0.3.0) - awesome_nested_set (~> 3.0.0.rc.3) - aws-sdk (= 1.27.0) - cancan (~> 1.6.10) - deface (~> 1.0.0) - ffaker (~> 1.16) - highline (~> 1.6.18) - httparty (~> 0.11) - json (~> 1.7) - kaminari (~> 0.15.0) - paperclip (~> 3.4.1) - paranoia (~> 2.0) - rails (~> 4.0.0) - ransack (= 1.1.0) - state_machine (= 1.2.0) - stringex (~> 1.5.1) - truncate_html (= 0.9.2) - spree_frontend (2.1.5) - canonical-rails - jquery-rails (~> 3.1.0) - spree_api (= 2.1.5) - spree_core (= 2.1.5) - stringex (~> 1.5.1) - spree_sample (2.1.5) - spree_core (= 2.1.5) - sprockets (2.10.1) + sprockets (2.12.1) hike (~> 1.2) multi_json (~> 1.0) rack (~> 1.0) tilt (~> 1.1, != 1.3.0) - sprockets-rails (2.0.1) + sprockets-rails (2.1.3) actionpack (>= 3.0) activesupport (>= 3.0) sprockets (~> 2.8) - sqlite3 (1.3.8) + sqlite3 (1.3.9) state_machine (1.2.0) stringex (1.5.1) - thor (0.18.1) - thread_safe (0.1.3) - atomic + thor (0.19.1) + thread_safe (0.3.4) tilt (1.4.1) timers (1.1.0) treetop (1.4.15) polyglot polyglot (>= 0.3.1) truncate_html (0.9.2) - typhoeus (0.6.7) - ethon (~> 0.6.2) - tzinfo (0.3.38) + typhoeus (0.6.8) + ethon (>= 0.7.0) + tzinfo (1.2.1) + thread_safe (~> 0.1) uuidtools (2.1.4) - vcr (2.8.0) - versioncake (1.2.0) + vcr (2.9.2) + versioncake (2.3.1) actionpack (>= 3.2) activesupport (>= 3.2) railties (>= 3.2) @@ -299,6 +314,7 @@ DEPENDENCIES rspec-rails (~> 2.13) selenium-webdriver spork + spree! spree_conekta! sqlite3 vcr diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e46f806 --- /dev/null +++ b/LICENSE @@ -0,0 +1,26 @@ +Copyright (c) 2014 [name of plugin creator] +All rights reserved. + +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 Spree 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. diff --git a/MIT-LICENSE b/MIT-LICENSE index 0f73133..477d6e3 100644 --- a/MIT-LICENSE +++ b/MIT-LICENSE @@ -1,4 +1,4 @@ -Copyright 2013 Crowd Interactive +Copyright 2013-2014 Crowd Interactive Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/README.md b/README.md index e0fec31..38be99d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Spree Conekta -[![Code Climate](https://codeclimate.com/github/crowdint/spree_conekta.png)](https://codeclimate.com/github/crowdint/spree_conekta) -[![Build Status](https://travis-ci.org/crowdint/spree_conekta.png?branch=conekta-apiv2)](https://travis-ci.org/crowdint/spree_conekta) +[![Code Climate](https://codeclimate.com/github/crowdint/spree_conekta.png)](https://codeclimate.com/github/AgilTec/spree_conekta) +[![Build Status](https://travis-ci.org/crowdint/spree_conekta.png?branch=conekta-apiv2)](https://travis-ci.org/AgilTec/spree_conekta) [![Gem Version](https://badge.fury.io/rb/spree_conekta.png)](http://badge.fury.io/rb/spree_conekta) Setup @@ -9,7 +9,7 @@ Setup Add this extension to your Gemfile: ```ruby -gem 'spree_conekta', git: 'git://github.com/crowdint/spree_conekta.git' +gem 'spree_conekta', github: 'AgilTec/spree_conekta', branch: '2.3.0.beta' ``` Then run: diff --git a/Rakefile b/Rakefile index d6f535f..ab8e3c0 100644 --- a/Rakefile +++ b/Rakefile @@ -1,24 +1,21 @@ -#!/usr/bin/env rake -begin - require 'bundler/setup' -rescue LoadError - puts 'You must `gem install bundler` and `bundle install` to run rake tasks' -end -begin - require 'rdoc/task' - require 'spree/testing_support/common_rake' - -rescue LoadError - require 'rdoc/rdoc' - require 'rake/rdoctask' - RDoc::Task = Rake::RDocTask -end - +require 'bundler' Bundler::GemHelper.install_tasks -require 'rspec/core' require 'rspec/core/rake_task' +require 'spree/testing_support/extension_rake' -desc "Run all specs in spec directory (excluding plugin specs)" -RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare') -task :default => :spec +RSpec::Core::RakeTask.new + +task :default do + if Dir["spec/dummy"].empty? + Rake::Task[:test_app].invoke + Dir.chdir("../../") + end + Rake::Task[:spec].invoke +end + +desc 'Generates a dummy app for testing' +task :test_app do + ENV['LIB_NAME'] = 'spree_conekta' + Rake::Task['extension:test_app'].invoke +end diff --git a/app/assets/javascripts/admin/spree_conekta.js b/app/assets/javascripts/admin/spree_conekta.js deleted file mode 100644 index e69de29..0000000 diff --git a/app/assets/javascripts/spree/backend/spree_conekta.js b/app/assets/javascripts/spree/backend/spree_conekta.js new file mode 100644 index 0000000..8aa3b01 --- /dev/null +++ b/app/assets/javascripts/spree/backend/spree_conekta.js @@ -0,0 +1,2 @@ +// Placeholder manifest file. +// the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/backend/all.js' \ No newline at end of file diff --git a/app/assets/javascripts/store/easyXDM.min.js b/app/assets/javascripts/spree/frontend/easyXDM.min.js similarity index 100% rename from app/assets/javascripts/store/easyXDM.min.js rename to app/assets/javascripts/spree/frontend/easyXDM.min.js diff --git a/app/assets/javascripts/store/printThis.js b/app/assets/javascripts/spree/frontend/printThis.js similarity index 100% rename from app/assets/javascripts/store/printThis.js rename to app/assets/javascripts/spree/frontend/printThis.js diff --git a/app/assets/javascripts/store/spree_conekta.js.coffee b/app/assets/javascripts/spree/frontend/spree_conekta.js.coffee similarity index 100% rename from app/assets/javascripts/store/spree_conekta.js.coffee rename to app/assets/javascripts/spree/frontend/spree_conekta.js.coffee diff --git a/app/assets/javascripts/store/utils.js.erb b/app/assets/javascripts/spree/frontend/utils.js.erb similarity index 89% rename from app/assets/javascripts/store/utils.js.erb rename to app/assets/javascripts/spree/frontend/utils.js.erb index d9ee243..65a4d7f 100644 --- a/app/assets/javascripts/store/utils.js.erb +++ b/app/assets/javascripts/spree/frontend/utils.js.erb @@ -29,7 +29,7 @@ spreeConekta.Utils = (function(){ function printDoc(printable) { printer = new spreeConekta.Utils({ printable: $(printable), - options: { loadCSS: "<%= asset_path('admin/print.css.sass') %>" } + options: { loadCSS: "<%= asset_path('spree/backend/print.css.sass') %>" } }); printer.print(); }; diff --git a/app/assets/stylesheets/admin/print.css.sass b/app/assets/stylesheets/spree/backend/print.css.sass similarity index 100% rename from app/assets/stylesheets/admin/print.css.sass rename to app/assets/stylesheets/spree/backend/print.css.sass diff --git a/app/assets/stylesheets/admin/spree_conekta.css b/app/assets/stylesheets/spree/backend/spree_conekta.css similarity index 100% rename from app/assets/stylesheets/admin/spree_conekta.css rename to app/assets/stylesheets/spree/backend/spree_conekta.css diff --git a/app/assets/stylesheets/store/conekta.css.sass b/app/assets/stylesheets/spree/frontend/conekta.css.sass similarity index 100% rename from app/assets/stylesheets/store/conekta.css.sass rename to app/assets/stylesheets/spree/frontend/conekta.css.sass diff --git a/app/assets/stylesheets/store/spree_conekta.css b/app/assets/stylesheets/spree/frontend/spree_conekta.css similarity index 100% rename from app/assets/stylesheets/store/spree_conekta.css rename to app/assets/stylesheets/spree/frontend/spree_conekta.css diff --git a/bin/rails b/bin/rails new file mode 100644 index 0000000..ada7032 --- /dev/null +++ b/bin/rails @@ -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_conekta/engine', __FILE__) + +require 'rails/all' +require 'rails/engine/commands' diff --git a/lib/generators/spree_conekta/install/install_generator.rb b/lib/generators/spree_conekta/install/install_generator.rb index 055dd3e..ceff243 100644 --- a/lib/generators/spree_conekta/install/install_generator.rb +++ b/lib/generators/spree_conekta/install/install_generator.rb @@ -5,13 +5,13 @@ class InstallGenerator < Rails::Generators::Base class_option :auto_run_migrations, type: :boolean, default: false def add_javascripts - append_file 'app/assets/javascripts/store/all.js', "\n//= require store/spree_conekta\n" - append_file 'app/assets/javascripts/admin/all.js', "\n//= require admin/spree_conekta\n" + append_file 'vendor/assets/javascripts/spree/frontend/all.js', "\n//= require spree/frontend/spree_conekta\n" + append_file 'vendor/assets/javascripts/spree/backend/all.js', "\n//= require spree/backend/spree_conekta\n" end def add_stylesheets - inject_into_file 'app/assets/stylesheets/store/all.css', "\n *= require store/spree_conekta\n", before: /\*\//, verbose: true - inject_into_file 'app/assets/stylesheets/admin/all.css', "\n *= require admin/spree_conekta\n", before: /\*\//, verbose: true + inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css', "\n *= require spree/frontend/spree_conekta\n", before: /\*\//, verbose: true + inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css', "\n *= require spree/backend/spree_conekta\n", before: /\*\//, verbose: true end def add_migrations diff --git a/lib/spree_conekta/factories.rb b/lib/spree_conekta/factories.rb new file mode 100644 index 0000000..c6061d5 --- /dev/null +++ b/lib/spree_conekta/factories.rb @@ -0,0 +1,6 @@ +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_conekta/factories' +end diff --git a/lib/spree_conekta/version.rb b/lib/spree_conekta/version.rb index a66099f..56362c7 100644 --- a/lib/spree_conekta/version.rb +++ b/lib/spree_conekta/version.rb @@ -1,3 +1,3 @@ module SpreeConekta - VERSION = "0.5.9" + VERSION = "0.6.0" end diff --git a/spree_conekta.gemspec b/spree_conekta.gemspec index 6ab7f3d..2231061 100644 --- a/spree_conekta.gemspec +++ b/spree_conekta.gemspec @@ -7,8 +7,8 @@ require 'spree_conekta/version' Gem::Specification.new do |s| s.name = 'spree_conekta' s.version = SpreeConekta::VERSION - s.authors = ['Jonathan Garay', 'Fernando Barajas'] - s.email = %w(jonathan.garay@crowdint.com fernando.barajas@crowdint.com) + s.authors = ['Jonathan Garay', 'Fernando Barajas', 'Manuel Vidaurre'] + s.email = %w(jonathan.garay@crowdint.com fernando.barajas@crowdint.com manuel.vidaurre@agiltec.com.mx) s.homepage = 'http://github.com/crowdint/spree_conekta' s.summary = 'Spree Engine for Conekta Mexican Payment gateway' s.description = 'Spree Engine for Conekta Mexican Payment gateway' @@ -21,7 +21,7 @@ Gem::Specification.new do |s| s.add_dependency 'typhoeus' s.add_dependency 'faraday_middleware' s.add_dependency 'activemerchant' - s.add_dependency 'spree', '~> 2.0' + s.add_dependency 'spree', '~> 2.3.0.beta' s.add_dependency 'coffee-rails' s.add_dependency 'celluloid' end From 7cc7ad1a8fff51d8c082c6ae17febab8682f889d Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Wed, 18 Jun 2014 17:53:10 -0500 Subject: [PATCH 08/28] Improving form for conekta_card --- .../checkout/payment/_conekta_card.html.erb | 45 ++++++++++--------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/app/views/spree/checkout/payment/_conekta_card.html.erb b/app/views/spree/checkout/payment/_conekta_card.html.erb index 189b298..e62ca3c 100644 --- a/app/views/spree/checkout/payment/_conekta_card.html.erb +++ b/app/views/spree/checkout/payment/_conekta_card.html.erb @@ -6,20 +6,21 @@ <%= label_tag "name_on_card_#{payment_method.id}", Spree.t(:name_on_card) %>*
<%= text_field_tag "#{param_prefix}[name_on_card]", "#{@order.billing_firstname} #{@order.billing_lastname}", - { :id => "name_on_card_#{payment_method.id}", data: { conekta: 'card[name]' } } %> + { id: "name_on_card_#{payment_method.id}", + data: { conekta: 'card[name]' } } %>

<%= label_tag "card_number", Spree.t(:card_number) %>*
- <% options_hash = Rails.env.production? ? {:autocomplete => 'off'} : {} %> + <% options_hash = Rails.env.production? ? {autocomplete: 'off'} : {} %> <%= text_field_tag "#{param_prefix}[number]", '', options_hash.merge(:id => 'card_number', - :class => 'required', - :size => 19, - :maxlength => 19, - :autocomplete => "off", - :data => { conekta: 'card[number]' }) %> + class: 'required cardNumber', + size: 19, + maxlength: 19, + autocomplete: "off", + data: { conekta: 'card[number]' }) %>  

<%= label_tag "card_month", Spree.t(:expiration) %>*
<%= select_month(Date.today, - { :prefix => param_prefix, :field_name => 'month', :use_month_numbers => true }, - :class => 'required', - :id => "card_month", - :data => { conekta: 'card[exp_month]' }) %> + { prefix: param_prefix, field_name: 'month', use_month_numbers: true }, + class: 'required', + id: "card_month", + data: { conekta: 'card[exp_month]' } ) %> <%= select_year(Date.today, - { :prefix => param_prefix, :field_name => 'year', :start_year => Date.today.year, :end_year => Date.today.year + 15 }, - :class => 'required', - :id => "card_year", - :data => { conekta: 'card[exp_year]' }) %> + { prefix: param_prefix, field_name: 'year', start_year: Date.today.year, end_year: Date.today.year + 15 }, + class: 'required', + id: "card_year", + data: { conekta: 'card[exp_year]' }) %>

<%= label_tag "card_code", Spree.t(:card_code) %>*
<%= text_field_tag "#{param_prefix}[verification_value]", '', - options_hash.merge(:id => 'card_code', - :class => 'required', - :size => 5, - :data => { conekta: 'card[cvc]' }) %> - <%= link_to "(#{Spree.t(:what_is_this)})", spree.content_path('cvv'), :target => '_blank', "data-hook" => "cvv_link", :id => "cvv_link" %> + options_hash.merge(id: 'card_code', + class: 'required cardCode', + size: 5, + data: { conekta: 'card[cvc]' } ) %> + <%= link_to "(#{Spree.t(:what_is_this)})", spree.content_path('cvv'), target: '_blank', "data-hook" => "cvv_link", id: "cvv_link" %>

<% if payment_method.with_installments? %> @@ -61,8 +62,8 @@

<% end %> -<%= hidden_field_tag "conekta_month", Date.today.month, :data => { conekta: 'card[exp_month]' } %> -<%= hidden_field_tag "conekta_year", Date.today.year, :data => { conekta: 'card[exp_year]' } %> +<%= hidden_field_tag "conekta_month", Date.today.month, data: { conekta: 'card[exp_month]' } %> +<%= hidden_field_tag "conekta_year", Date.today.year, data: { conekta: 'card[exp_year]' } %> <%= hidden_field_tag "#{param_prefix}[conekta_response]", '' %> <%= hidden_field_tag "#{param_prefix}[gateway_payment_profile_id]", '', :id => "gateway_payment_profile_id" %> From 9062aa61ab15b8d1b866d4fa44807a023bb96771 Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Wed, 18 Jun 2014 17:54:59 -0500 Subject: [PATCH 09/28] Delete unecessary files after Rails and Spree updates --- app/assets/javascripts/spree_conekta.js | 0 app/assets/stylesheets/spree_conekta.css | 3 --- script/rails | 8 -------- 3 files changed, 11 deletions(-) delete mode 100644 app/assets/javascripts/spree_conekta.js delete mode 100644 app/assets/stylesheets/spree_conekta.css delete mode 100755 script/rails diff --git a/app/assets/javascripts/spree_conekta.js b/app/assets/javascripts/spree_conekta.js deleted file mode 100644 index e69de29..0000000 diff --git a/app/assets/stylesheets/spree_conekta.css b/app/assets/stylesheets/spree_conekta.css deleted file mode 100644 index c894fce..0000000 --- a/app/assets/stylesheets/spree_conekta.css +++ /dev/null @@ -1,3 +0,0 @@ -/* - *= require_tree . -*/ diff --git a/script/rails b/script/rails deleted file mode 100755 index 12f3e49..0000000 --- a/script/rails +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env ruby -# 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_conekta/engine', __FILE__) - -require 'rails/all' -require 'rails/engine/commands' From 7bccdd6befe439faaac1305a736d725343f566ba Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Tue, 24 Jun 2014 21:11:45 -0500 Subject: [PATCH 10/28] Including factories for testing --- Gemfile | 6 ++ Gemfile.lock | 47 ++++++++++-- .../spree/conekta/payments_controller_spec.rb | 2 +- spec/factories/configuration_factory.rb | 7 ++ spec/factories/line_item_factory.rb | 10 +++ spec/factories/order_factory.rb | 74 +++++++++++++++++++ spec/factories/order_walkthrough.rb | 68 +++++++++++++++++ spec/factories/price_factory.rb | 8 ++ spec/factories/product_factory.rb | 5 ++ spec/factories/variant_factory.rb | 6 ++ spec/features/conekta_checkout_spec.rb | 7 +- spec/lib/spree/conekta/provider_spec.rb | 6 +- spec/spec_helper.rb | 3 +- 13 files changed, 236 insertions(+), 13 deletions(-) create mode 100644 spec/factories/configuration_factory.rb create mode 100644 spec/factories/line_item_factory.rb create mode 100644 spec/factories/order_factory.rb create mode 100644 spec/factories/order_walkthrough.rb create mode 100644 spec/factories/price_factory.rb create mode 100644 spec/factories/product_factory.rb create mode 100644 spec/factories/variant_factory.rb diff --git a/Gemfile b/Gemfile index 788cd45..5faf007 100644 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,11 @@ source "http://rubygems.org" gem 'spree', github: 'spree/spree', branch: 'master' +#gem 'spree', path: '../spree' +gem 'sass-rails', '~> 4.0.3' + +# Spree Internationalization https://github.com/spree/spree_i18n +gem 'spree_i18n', github: 'spree/spree_i18n', branch: 'master' +gem 'globalize', github: 'globalize/globalize', branch: 'master' group :test, :development do gem 'rspec-rails', '~> 2.13' diff --git a/Gemfile.lock b/Gemfile.lock index f9861d8..8a80b32 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,6 +1,15 @@ +GIT + remote: git://github.com/globalize/globalize.git + revision: 49bd7f154e3bdc84fb5513ebfb8bb26e632a9806 + branch: master + specs: + globalize (4.0.1) + activemodel (>= 4.0.0, < 5) + activerecord (>= 4.0.0, < 5) + GIT remote: git://github.com/spree/spree.git - revision: 19eb3b9b496938663a478739ea4d3c2f4ee1e9ed + revision: 15792632da21d1975c020724fce2abe98efd4ded branch: master specs: spree (2.3.0.beta) @@ -40,7 +49,7 @@ GIT monetize paperclip (~> 4.1.1) paranoia (~> 2.0) - rails (~> 4.1.0) + rails (~> 4.1.1) ransack (~> 1.2.2) state_machine (= 1.2.0) stringex (~> 1.5.1) @@ -54,6 +63,17 @@ GIT spree_sample (2.3.0.beta) spree_core (= 2.3.0.beta) +GIT + remote: git://github.com/spree/spree_i18n.git + revision: e541cc01cbc3424c1ff4217973c84ce56c201ee8 + branch: master + specs: + spree_i18n (3.0.0) + globalize (~> 4.0.1) + i18n_data (~> 0.4.1) + rails-i18n (~> 4.0.1) + spree_core (~> 2.3.0.beta) + PATH remote: . specs: @@ -174,7 +194,8 @@ GEM json (~> 1.8) multi_xml (>= 0.5.2) i18n (0.6.9) - jquery-rails (3.1.0) + i18n_data (0.4.1) + jquery-rails (3.1.1) railties (>= 3.0, < 5.0) thor (>= 0.14, < 2.0) jquery-ui-rails (4.1.2) @@ -199,7 +220,7 @@ GEM multipart-post (2.0.0) nokogiri (1.6.2.1) mini_portile (= 0.6.0) - oj (2.9.6) + oj (2.9.7) paperclip (4.1.1) activemodel (>= 3.0.0) activesupport (>= 3.0.0) @@ -229,6 +250,9 @@ GEM bundler (>= 1.3.0, < 2.0) railties (= 4.1.1) sprockets-rails (~> 2.0) + rails-i18n (4.0.2) + i18n (~> 0.6) + rails (>= 4.0) railties (4.1.1) actionpack (= 4.1.1) activesupport (= 4.1.1) @@ -243,8 +267,8 @@ GEM polyamorous (~> 1.0.0) rspec-collection_matchers (1.0.0) rspec-expectations (>= 2.99.0.beta1) - rspec-core (2.99.0) - rspec-expectations (2.99.0) + rspec-core (2.99.1) + rspec-expectations (2.99.1) diff-lcs (>= 1.1.3, < 2.0) rspec-mocks (2.99.1) rspec-rails (2.99.0) @@ -257,6 +281,12 @@ GEM rspec-expectations (~> 2.99.0) rspec-mocks (~> 2.99.0) rubyzip (1.1.4) + sass (3.2.19) + sass-rails (4.0.3) + railties (>= 4.0.0, < 5.0) + sass (~> 3.2.0) + sprockets (~> 2.8, <= 2.11.0) + sprockets-rails (~> 2.0) select2-rails (3.5.7) thor (~> 0.14) selenium-webdriver (2.42.0) @@ -266,7 +296,7 @@ GEM websocket (~> 1.0.4) slop (3.5.0) spork (0.9.2) - sprockets (2.12.1) + sprockets (2.11.0) hike (~> 1.2) multi_json (~> 1.0) rack (~> 1.0) @@ -310,11 +340,14 @@ DEPENDENCIES database_cleaner factory_girl ffaker + globalize! pry rspec-rails (~> 2.13) + sass-rails (~> 4.0.3) selenium-webdriver spork spree! spree_conekta! + spree_i18n! sqlite3 vcr diff --git a/spec/controllers/spree/conekta/payments_controller_spec.rb b/spec/controllers/spree/conekta/payments_controller_spec.rb index aaadd44..b4e2e94 100644 --- a/spec/controllers/spree/conekta/payments_controller_spec.rb +++ b/spec/controllers/spree/conekta/payments_controller_spec.rb @@ -47,7 +47,7 @@ create(:payment, order: order, state: "pending", amount: order.outstanding_balance, - payment_method: create(:bogus_payment_method, environment: 'test')) + payment_method: create(:credit_card_payment_method, environment: 'test')) end diff --git a/spec/factories/configuration_factory.rb b/spec/factories/configuration_factory.rb new file mode 100644 index 0000000..d6deb4a --- /dev/null +++ b/spec/factories/configuration_factory.rb @@ -0,0 +1,7 @@ +FactoryGirl.modify do + factory :configuration, class: Spree::Configuration do + name 'Default Configuration' + type 'app_configuration' + currency 'MXN' + end +end diff --git a/spec/factories/line_item_factory.rb b/spec/factories/line_item_factory.rb new file mode 100644 index 0000000..c9fdcee --- /dev/null +++ b/spec/factories/line_item_factory.rb @@ -0,0 +1,10 @@ +FactoryGirl.modify do + factory :line_item, class: Spree::LineItem do + quantity 1 + price { BigDecimal.new('29.00') } + order + variant + currency 'MXN' + end +end + diff --git a/spec/factories/order_factory.rb b/spec/factories/order_factory.rb new file mode 100644 index 0000000..f236c12 --- /dev/null +++ b/spec/factories/order_factory.rb @@ -0,0 +1,74 @@ +FactoryGirl.modify do + factory :order, class: Spree::Order do + user + bill_address + completed_at nil + email { user.email } + currency 'MXN' + + factory :order_with_totals do + after(:create) do |order| + create(:line_item, order: order, currency: 'MXN') + order.line_items.reload # to ensure order.line_items is accessible after + end + end + + factory :order_with_line_items do + bill_address + ship_address + + ignore do + line_items_count 5 + end + + after(:create) do |order, evaluator| + create_list(:line_item, evaluator.line_items_count, order: order, currency: 'MXN') + order.line_items.reload + + create(:shipment, order: order) + order.shipments.reload + + order.update! + end + + factory :completed_order_with_totals do + state 'complete' + + after(:create) do |order| + order.refresh_shipment_rates + order.update_column(:completed_at, Time.now) + end + + factory :completed_order_with_pending_payment do + after(:create) do |order| + create(:payment, amount: order.total, order: order) + end + end + + factory :order_ready_to_ship do + payment_state 'paid' + shipment_state 'ready' + + after(:create) do |order| + create(:payment, amount: order.total, order: order, state: 'completed') + order.shipments.each do |shipment| + shipment.inventory_units.update_all state: 'on_hand' + shipment.update_column('state', 'ready') + end + order.reload + end + + factory :shipped_order do + after(:create) do |order| + order.shipments.each do |shipment| + shipment.inventory_units.update_all state: 'shipped' + shipment.update_column('state', 'shipped') + end + order.reload + end + end + end + end + end + end +end diff --git a/spec/factories/order_walkthrough.rb b/spec/factories/order_walkthrough.rb new file mode 100644 index 0000000..fae7d38 --- /dev/null +++ b/spec/factories/order_walkthrough.rb @@ -0,0 +1,68 @@ +class OrderWalkthrough + def self.up_to(state) + # A payment method must exist for an order to proceed through the Address state + unless Spree::PaymentMethod.exists? + FactoryGirl.create(:check_payment_method) + end + + # Need to create a valid zone too... + zone = FactoryGirl.create(:zone) + country = FactoryGirl.create(:country) + zone.members << Spree::ZoneMember.create(:zoneable => country) + country.states << FactoryGirl.create(:state, :country => country) + + # A shipping method must exist for rates to be displayed on checkout page + unless Spree::ShippingMethod.exists? + FactoryGirl.create(:shipping_method).tap do |sm| + sm.calculator.preferred_amount = 10 + sm.calculator.preferred_currency = 'MXN' + sm.calculator.save + end + end + + order = Spree::Order.create!(:email => "spree@example.com", currency: 'MXN') + add_line_item!(order) + order.next! + + end_state_position = states.index(state.to_sym) + states[0..end_state_position].each do |state| + send(state, order) + end + + order + end + + private + + def self.add_line_item!(order) + FactoryGirl.create(:line_item, order: order, currency: 'MXN') + order.reload + end + + def self.address(order) + order.bill_address = FactoryGirl.create(:address, :country_id => Spree::Zone.global.members.first.zoneable.id) + order.ship_address = FactoryGirl.create(:address, :country_id => Spree::Zone.global.members.first.zoneable.id) + order.next! + end + + def self.delivery(order) + order.next! + end + + def self.payment(order) + order.payments.create!(:payment_method => Spree::PaymentMethod.first, :amount => order.total) + # TODO: maybe look at some way of making this payment_state change automatic + order.payment_state = 'paid' + order.next! + end + + def self.complete(order) + #noop? + end + + def self.states + [:address, :delivery, :payment, :complete] + end + +end + diff --git a/spec/factories/price_factory.rb b/spec/factories/price_factory.rb new file mode 100644 index 0000000..c78d7e7 --- /dev/null +++ b/spec/factories/price_factory.rb @@ -0,0 +1,8 @@ +FactoryGirl.modify do + puts "factory :price" + factory :price, class: Spree::Price do + variant + amount 29.99 + currency 'MXN' + end +end diff --git a/spec/factories/product_factory.rb b/spec/factories/product_factory.rb new file mode 100644 index 0000000..b0aadbc --- /dev/null +++ b/spec/factories/product_factory.rb @@ -0,0 +1,5 @@ +FactoryGirl.modify do + factory :base_product, class: Spree::Product do + cost_currency 'MXN' + end +end diff --git a/spec/factories/variant_factory.rb b/spec/factories/variant_factory.rb new file mode 100644 index 0000000..e304adf --- /dev/null +++ b/spec/factories/variant_factory.rb @@ -0,0 +1,6 @@ +FactoryGirl.modify do + factory :base_variant, class: Spree::Variant do + currency 'MXN' + cost_currency 'MXN' + end +end diff --git a/spec/features/conekta_checkout_spec.rb b/spec/features/conekta_checkout_spec.rb index 89d5de7..6f9be5a 100644 --- a/spec/features/conekta_checkout_spec.rb +++ b/spec/features/conekta_checkout_spec.rb @@ -1,4 +1,7 @@ require 'spec_helper' +Dir[File.join(File.dirname(__FILE__), "../factories/**/*.rb")].each {|f| require f } + +Spree::Config[:currency] = 'MXN' describe "Conekta checkout" do let!(:country) { create(:country, states_required: true) } @@ -7,12 +10,13 @@ let!(:stock_location) { create(:stock_location) } let!(:mug) { create(:product, name: "RoR Mug") } - let!(:zone) { create(:zone) } let!(:order) { OrderWalkthrough.up_to(:delivery) } before do + puts "factory :price amount: #{price.amount} currency: #{price.currency}" + user = create(:user) order.stub :confirmation_required? => true @@ -22,6 +26,7 @@ order.currency = 'MXN' order.update! + order.stub total: 2000 Spree::PaymentMethod.destroy_all diff --git a/spec/lib/spree/conekta/provider_spec.rb b/spec/lib/spree/conekta/provider_spec.rb index 3347871..87a34e5 100644 --- a/spec/lib/spree/conekta/provider_spec.rb +++ b/spec/lib/spree/conekta/provider_spec.rb @@ -94,15 +94,15 @@ describe '#supports?' do it 'does not support amex' do - expect(subject.supports?('american_express')).to be_false + expect(subject.supports?('american_express')).to be false end it 'supports visa' do - expect(subject.supports?('visa')).to be_true + expect(subject.supports?('visa')).to be true end it 'supports master card' do - expect(subject.supports?('master')).to be_true + expect(subject.supports?('master')).to be true end end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 8cfd0cd..5c2f095 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -63,12 +63,13 @@ config.use_transactional_fixtures = false config.before(:each) do - if example.metadata[:js] + if RSpec.current_example.metadata[:js] DatabaseCleaner.strategy = :truncation else DatabaseCleaner.strategy = :transaction end DatabaseCleaner.start + # FactoryGirl.lint reset_spree_preferences end From 43f1a1ec51a1fd905492f91c16b90b972ab72160 Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Thu, 26 Jun 2014 08:43:05 -0500 Subject: [PATCH 11/28] Removing name methods in credit card decorator because spree/spree #4787 drop credit_cards first_name and last_name fields MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The credit card decorator was redefining name based on name_on_card or first_name and last_name. Because in Spree master first_name and last_name were drop and redefined using name this then was causing an “Stack too deep” error --- Gemfile | 1 - app/models/spree/credit_card_decorator.rb | 7 ----- spec/models/spree/credit_card_spec.rb | 32 ----------------------- 3 files changed, 40 deletions(-) diff --git a/Gemfile b/Gemfile index 5faf007..f26b610 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,5 @@ source "http://rubygems.org" gem 'spree', github: 'spree/spree', branch: 'master' -#gem 'spree', path: '../spree' gem 'sass-rails', '~> 4.0.3' # Spree Internationalization https://github.com/spree/spree_i18n diff --git a/app/models/spree/credit_card_decorator.rb b/app/models/spree/credit_card_decorator.rb index d30442c..5d915dc 100644 --- a/app/models/spree/credit_card_decorator.rb +++ b/app/models/spree/credit_card_decorator.rb @@ -5,11 +5,4 @@ attr_accessible :name_on_card, :installments_number, :conekta_response end - def name? - !!name_on_card | (first_name? & last_name?) - end - - def name - name_on_card || "#{first_name} #{last_name}" - end end diff --git a/spec/models/spree/credit_card_spec.rb b/spec/models/spree/credit_card_spec.rb index 968ba3e..c383674 100644 --- a/spec/models/spree/credit_card_spec.rb +++ b/spec/models/spree/credit_card_spec.rb @@ -24,36 +24,4 @@ end end - describe '#name?' do - context 'name_on_card is present' do - before do - subject.name_on_card = 'foo' - end - - specify do - expect(subject.name?).to be_true - end - end - - context 'name_on_card is not present but first and last name are' do - before do - subject.first_name = 'foo' - subject.last_name = 'bar' - end - - specify do - expect(subject.name?).to be_true - end - end - - context 'name_on_card and first name are not present but last name is' do - before do - subject.first_name = 'foo' - end - - specify do - expect(subject.name?).to be_false - end - end - end end From 7c241cb55617d8b0d30e3610e5ca3f8ba6da83a5 Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Wed, 2 Jul 2014 10:09:25 -0400 Subject: [PATCH 12/28] Updating Spree version --- Gemfile | 3 +- Gemfile.lock | 182 ++++++++++++++++++++---------------------- spree_conekta.gemspec | 2 +- 3 files changed, 91 insertions(+), 96 deletions(-) diff --git a/Gemfile b/Gemfile index f26b610..907fda9 100644 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,6 @@ source "http://rubygems.org" -gem 'spree', github: 'spree/spree', branch: 'master' +# gem 'spree', github: 'spree/spree', branch: 'master' +gem 'spree', '~> 2.3.1' gem 'sass-rails', '~> 4.0.3' # Spree Internationalization https://github.com/spree/spree_i18n diff --git a/Gemfile.lock b/Gemfile.lock index 8a80b32..3774b7c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,71 +1,15 @@ GIT remote: git://github.com/globalize/globalize.git - revision: 49bd7f154e3bdc84fb5513ebfb8bb26e632a9806 + revision: a3243cb8e833104dc06fb3f67efcf1148e7f5f85 branch: master specs: - globalize (4.0.1) + globalize (4.0.2) activemodel (>= 4.0.0, < 5) activerecord (>= 4.0.0, < 5) -GIT - remote: git://github.com/spree/spree.git - revision: 15792632da21d1975c020724fce2abe98efd4ded - branch: master - specs: - spree (2.3.0.beta) - spree_api (= 2.3.0.beta) - spree_backend (= 2.3.0.beta) - spree_cmd (= 2.3.0.beta) - spree_core (= 2.3.0.beta) - spree_frontend (= 2.3.0.beta) - spree_sample (= 2.3.0.beta) - spree_api (2.3.0.beta) - rabl (~> 0.9.4.pre1) - spree_core (= 2.3.0.beta) - versioncake (~> 2.3.1) - spree_backend (2.3.0.beta) - jquery-rails (~> 3.1.0) - jquery-ui-rails (~> 4.1.0) - select2-rails (~> 3.5.0) - spree_api (= 2.3.0.beta) - spree_core (= 2.3.0.beta) - spree_cmd (2.3.0.beta) - thor (~> 0.14) - spree_core (2.3.0.beta) - activemerchant (~> 1.42.3) - acts_as_list (= 0.3.0) - awesome_nested_set (~> 3.0.0.rc.3) - aws-sdk (= 1.27.0) - cancan (~> 1.6.10) - deface (~> 1.0.0) - ffaker (~> 1.16) - font-awesome-rails (~> 4.0) - friendly_id (~> 5.0.4) - highline (~> 1.6.18) - httparty (~> 0.11) - i18n (= 0.6.9) - json (~> 1.7) - kaminari (~> 0.15.0) - monetize - paperclip (~> 4.1.1) - paranoia (~> 2.0) - rails (~> 4.1.1) - ransack (~> 1.2.2) - state_machine (= 1.2.0) - stringex (~> 1.5.1) - truncate_html (= 0.9.2) - spree_frontend (2.3.0.beta) - canonical-rails (~> 0.0.4) - jquery-rails (~> 3.1.0) - spree_api (= 2.3.0.beta) - spree_core (= 2.3.0.beta) - stringex (~> 1.5.1) - spree_sample (2.3.0.beta) - spree_core (= 2.3.0.beta) - GIT remote: git://github.com/spree/spree_i18n.git - revision: e541cc01cbc3424c1ff4217973c84ce56c201ee8 + revision: aa93e9d3cd191c7c308053b4053d62ab184d1f0b branch: master specs: spree_i18n (3.0.0) @@ -84,29 +28,29 @@ PATH faraday faraday_middleware oj - spree (~> 2.3.0.beta) + spree (~> 2.3.1) typhoeus GEM remote: http://rubygems.org/ specs: - actionmailer (4.1.1) - actionpack (= 4.1.1) - actionview (= 4.1.1) + actionmailer (4.1.2) + actionpack (= 4.1.2) + actionview (= 4.1.2) mail (~> 2.5.4) - actionpack (4.1.1) - actionview (= 4.1.1) - activesupport (= 4.1.1) + actionpack (4.1.2) + actionview (= 4.1.2) + activesupport (= 4.1.2) rack (~> 1.5.2) rack-test (~> 0.6.2) - actionview (4.1.1) - activesupport (= 4.1.1) + actionview (4.1.2) + activesupport (= 4.1.2) builder (~> 3.1) erubis (~> 2.7.0) active_utils (2.2.1) activesupport (>= 2.3.11) i18n - activemerchant (1.42.9) + activemerchant (1.43.1) active_utils (~> 2.0, >= 2.0.1) activesupport (>= 2.3.14, < 5.0.0) builder (>= 2.1.2, < 4.0.0) @@ -114,14 +58,14 @@ GEM json (~> 1.7) money (< 7.0.0) nokogiri (~> 1.4) - activemodel (4.1.1) - activesupport (= 4.1.1) + activemodel (4.1.2) + activesupport (= 4.1.2) builder (~> 3.1) - activerecord (4.1.1) - activemodel (= 4.1.1) - activesupport (= 4.1.1) + activerecord (4.1.2) + activemodel (= 4.1.2) + activesupport (= 4.1.2) arel (~> 5.0.0) - activesupport (4.1.1) + activesupport (4.1.2) i18n (~> 0.6, >= 0.6.9) json (~> 1.7, >= 1.7.7) minitest (~> 5.1) @@ -130,7 +74,7 @@ GEM acts_as_list (0.3.0) activerecord (>= 3.0) arel (5.0.1.20140414130214) - awesome_nested_set (3.0.0.rc.5) + awesome_nested_set (3.0.0.rc.6) activerecord (>= 4.0.0, < 5) aws-sdk (1.27.0) json (~> 1.4) @@ -173,9 +117,9 @@ GEM rails (>= 3.1) diff-lcs (1.2.5) erubis (2.7.0) - ethon (0.7.0) + ethon (0.7.1) ffi (>= 1.3.0) - execjs (2.2.0) + execjs (2.2.1) factory_girl (4.4.0) activesupport (>= 3.0.0) faraday (0.9.0) @@ -220,7 +164,7 @@ GEM multipart-post (2.0.0) nokogiri (1.6.2.1) mini_portile (= 0.6.0) - oj (2.9.7) + oj (2.9.8) paperclip (4.1.1) activemodel (>= 3.0.0) activesupport (>= 3.0.0) @@ -240,22 +184,22 @@ GEM rack (1.5.2) rack-test (0.6.2) rack (>= 1.0) - rails (4.1.1) - actionmailer (= 4.1.1) - actionpack (= 4.1.1) - actionview (= 4.1.1) - activemodel (= 4.1.1) - activerecord (= 4.1.1) - activesupport (= 4.1.1) + rails (4.1.2) + actionmailer (= 4.1.2) + actionpack (= 4.1.2) + actionview (= 4.1.2) + activemodel (= 4.1.2) + activerecord (= 4.1.2) + activesupport (= 4.1.2) bundler (>= 1.3.0, < 2.0) - railties (= 4.1.1) + railties (= 4.1.2) sprockets-rails (~> 2.0) rails-i18n (4.0.2) i18n (~> 0.6) rails (>= 4.0) - railties (4.1.1) - actionpack (= 4.1.1) - activesupport (= 4.1.1) + railties (4.1.2) + actionpack (= 4.1.2) + activesupport (= 4.1.2) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) rake (10.3.2) @@ -280,7 +224,7 @@ GEM rspec-core (~> 2.99.0) rspec-expectations (~> 2.99.0) rspec-mocks (~> 2.99.0) - rubyzip (1.1.4) + rubyzip (1.1.5) sass (3.2.19) sass-rails (4.0.3) railties (>= 4.0.0, < 5.0) @@ -296,6 +240,56 @@ GEM websocket (~> 1.0.4) slop (3.5.0) spork (0.9.2) + spree (2.3.1) + spree_api (= 2.3.1) + spree_backend (= 2.3.1) + spree_cmd (= 2.3.1) + spree_core (= 2.3.1) + spree_frontend (= 2.3.1) + spree_sample (= 2.3.1) + spree_api (2.3.1) + rabl (~> 0.9.4.pre1) + spree_core (= 2.3.1) + versioncake (~> 2.3.1) + spree_backend (2.3.1) + jquery-rails (~> 3.1.0) + jquery-ui-rails (~> 4.1.0) + select2-rails (~> 3.5.0) + spree_api (= 2.3.1) + spree_core (= 2.3.1) + spree_cmd (2.3.1) + thor (~> 0.14) + spree_core (2.3.1) + activemerchant (~> 1.43.1) + acts_as_list (= 0.3.0) + awesome_nested_set (~> 3.0.0.rc.3) + aws-sdk (= 1.27.0) + cancan (~> 1.6.10) + deface (~> 1.0.0) + ffaker (~> 1.16) + font-awesome-rails (~> 4.0) + friendly_id (~> 5.0.4) + highline (~> 1.6.18) + httparty (~> 0.11) + i18n (= 0.6.9) + json (~> 1.7) + kaminari (~> 0.15.0) + monetize + paperclip (~> 4.1.1) + paranoia (~> 2.0) + rails (~> 4.1.2) + ransack (~> 1.2.2) + state_machine (= 1.2.0) + stringex (~> 1.5.1) + truncate_html (= 0.9.2) + spree_frontend (2.3.1) + canonical-rails (~> 0.0.4) + jquery-rails (~> 3.1.0) + spree_api (= 2.3.1) + spree_core (= 2.3.1) + stringex (~> 1.5.1) + spree_sample (2.3.1) + spree_core (= 2.3.1) sprockets (2.11.0) hike (~> 1.2) multi_json (~> 1.0) @@ -316,8 +310,8 @@ GEM polyglot polyglot (>= 0.3.1) truncate_html (0.9.2) - typhoeus (0.6.8) - ethon (>= 0.7.0) + typhoeus (0.6.9) + ethon (>= 0.7.1) tzinfo (1.2.1) thread_safe (~> 0.1) uuidtools (2.1.4) @@ -346,7 +340,7 @@ DEPENDENCIES sass-rails (~> 4.0.3) selenium-webdriver spork - spree! + spree (~> 2.3.1) spree_conekta! spree_i18n! sqlite3 diff --git a/spree_conekta.gemspec b/spree_conekta.gemspec index 2231061..224c302 100644 --- a/spree_conekta.gemspec +++ b/spree_conekta.gemspec @@ -21,7 +21,7 @@ Gem::Specification.new do |s| s.add_dependency 'typhoeus' s.add_dependency 'faraday_middleware' s.add_dependency 'activemerchant' - s.add_dependency 'spree', '~> 2.3.0.beta' + s.add_dependency 'spree', '~> 2.3.1' s.add_dependency 'coffee-rails' s.add_dependency 'celluloid' end From 3e06184f8515f9a7c1e8c87505c31fc633e1474a Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Thu, 10 Jul 2014 14:46:12 -0500 Subject: [PATCH 13/28] Update Spree version to 2.4.0.beta and README including Contributors --- Gemfile | 2 +- Gemfile.lock | 182 ++++++++++++++++++++++-------------------- README.md | 22 ++++- spree_conekta.gemspec | 2 +- 4 files changed, 117 insertions(+), 91 deletions(-) diff --git a/Gemfile b/Gemfile index 907fda9..efa0747 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source "http://rubygems.org" # gem 'spree', github: 'spree/spree', branch: 'master' -gem 'spree', '~> 2.3.1' +gem 'spree', github: 'spree/spree', branch: 'master' gem 'sass-rails', '~> 4.0.3' # Spree Internationalization https://github.com/spree/spree_i18n diff --git a/Gemfile.lock b/Gemfile.lock index 3774b7c..04d5aa3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,22 +1,78 @@ GIT remote: git://github.com/globalize/globalize.git - revision: a3243cb8e833104dc06fb3f67efcf1148e7f5f85 + revision: eccb924ac9641b52399f22525b0e3ec004739f4c branch: master specs: globalize (4.0.2) activemodel (>= 4.0.0, < 5) activerecord (>= 4.0.0, < 5) +GIT + remote: git://github.com/spree/spree.git + revision: 8260724092ac72f1e3247ff3b992cdf201cdb152 + branch: master + specs: + spree (2.4.0.beta) + spree_api (= 2.4.0.beta) + spree_backend (= 2.4.0.beta) + spree_cmd (= 2.4.0.beta) + spree_core (= 2.4.0.beta) + spree_frontend (= 2.4.0.beta) + spree_sample (= 2.4.0.beta) + spree_api (2.4.0.beta) + rabl (~> 0.9.4.pre1) + spree_core (= 2.4.0.beta) + versioncake (~> 2.3.1) + spree_backend (2.4.0.beta) + jquery-rails (= 3.1.0) + jquery-ui-rails (~> 4.1.0) + select2-rails (~> 3.5.0) + spree_api (= 2.4.0.beta) + spree_core (= 2.4.0.beta) + spree_cmd (2.4.0.beta) + thor (~> 0.14) + spree_core (2.4.0.beta) + activemerchant (~> 1.43.1) + acts_as_list (= 0.3.0) + awesome_nested_set (~> 3.0.0.rc.3) + aws-sdk (= 1.27.0) + cancan (~> 1.6.10) + deface (~> 1.0.0) + ffaker (~> 1.16) + font-awesome-rails (~> 4.0) + friendly_id (~> 5.0.4) + highline (~> 1.6.18) + httparty (~> 0.11) + i18n (= 0.6.9) + json (~> 1.7) + kaminari (~> 0.15.0) + monetize + paperclip (~> 4.1.1) + paranoia (~> 2.0) + rails (~> 4.1.4) + ransack (~> 1.2.2) + state_machine (= 1.2.0) + stringex (~> 1.5.1) + truncate_html (= 0.9.2) + spree_frontend (2.4.0.beta) + canonical-rails (~> 0.0.4) + jquery-rails (= 3.1.0) + spree_api (= 2.4.0.beta) + spree_core (= 2.4.0.beta) + stringex (~> 1.5.1) + spree_sample (2.4.0.beta) + spree_core (= 2.4.0.beta) + GIT remote: git://github.com/spree/spree_i18n.git - revision: aa93e9d3cd191c7c308053b4053d62ab184d1f0b + revision: 246d6c8ed16d470386dd9fb3fbe89a72720fdd5c branch: master specs: spree_i18n (3.0.0) globalize (~> 4.0.1) - i18n_data (~> 0.4.1) + i18n_data (~> 0.5.1) rails-i18n (~> 4.0.1) - spree_core (~> 2.3.0.beta) + spree_core (~> 2.4.0.beta) PATH remote: . @@ -28,23 +84,23 @@ PATH faraday faraday_middleware oj - spree (~> 2.3.1) + spree (~> 2.4.0.beta) typhoeus GEM remote: http://rubygems.org/ specs: - actionmailer (4.1.2) - actionpack (= 4.1.2) - actionview (= 4.1.2) + actionmailer (4.1.4) + actionpack (= 4.1.4) + actionview (= 4.1.4) mail (~> 2.5.4) - actionpack (4.1.2) - actionview (= 4.1.2) - activesupport (= 4.1.2) + actionpack (4.1.4) + actionview (= 4.1.4) + activesupport (= 4.1.4) rack (~> 1.5.2) rack-test (~> 0.6.2) - actionview (4.1.2) - activesupport (= 4.1.2) + actionview (4.1.4) + activesupport (= 4.1.4) builder (~> 3.1) erubis (~> 2.7.0) active_utils (2.2.1) @@ -58,14 +114,14 @@ GEM json (~> 1.7) money (< 7.0.0) nokogiri (~> 1.4) - activemodel (4.1.2) - activesupport (= 4.1.2) + activemodel (4.1.4) + activesupport (= 4.1.4) builder (~> 3.1) - activerecord (4.1.2) - activemodel (= 4.1.2) - activesupport (= 4.1.2) + activerecord (4.1.4) + activemodel (= 4.1.4) + activesupport (= 4.1.4) arel (~> 5.0.0) - activesupport (4.1.2) + activesupport (4.1.4) i18n (~> 0.6, >= 0.6.9) json (~> 1.7, >= 1.7.7) minitest (~> 5.1) @@ -84,7 +140,7 @@ GEM cancan (1.6.10) canonical-rails (0.0.7) rails (>= 3.1, < 5.0) - capybara (2.3.0) + capybara (2.4.1) mime-types (>= 1.16) nokogiri (>= 1.3.3) rack (>= 1.0.0) @@ -138,8 +194,8 @@ GEM json (~> 1.8) multi_xml (>= 0.5.2) i18n (0.6.9) - i18n_data (0.4.1) - jquery-rails (3.1.1) + i18n_data (0.5.1) + jquery-rails (3.1.0) railties (>= 3.0, < 5.0) thor (>= 0.14, < 2.0) jquery-ui-rails (4.1.2) @@ -154,7 +210,7 @@ GEM method_source (0.8.2) mime-types (1.25.1) mini_portile (0.6.0) - minitest (5.3.5) + minitest (5.4.0) monetize (0.3.0) money (~> 6.1.0.beta1) money (6.1.1) @@ -164,7 +220,7 @@ GEM multipart-post (2.0.0) nokogiri (1.6.2.1) mini_portile (= 0.6.0) - oj (2.9.8) + oj (2.9.9) paperclip (4.1.1) activemodel (>= 3.0.0) activesupport (>= 3.0.0) @@ -184,22 +240,22 @@ GEM rack (1.5.2) rack-test (0.6.2) rack (>= 1.0) - rails (4.1.2) - actionmailer (= 4.1.2) - actionpack (= 4.1.2) - actionview (= 4.1.2) - activemodel (= 4.1.2) - activerecord (= 4.1.2) - activesupport (= 4.1.2) + rails (4.1.4) + actionmailer (= 4.1.4) + actionpack (= 4.1.4) + actionview (= 4.1.4) + activemodel (= 4.1.4) + activerecord (= 4.1.4) + activesupport (= 4.1.4) bundler (>= 1.3.0, < 2.0) - railties (= 4.1.2) + railties (= 4.1.4) sprockets-rails (~> 2.0) rails-i18n (4.0.2) i18n (~> 0.6) rails (>= 4.0) - railties (4.1.2) - actionpack (= 4.1.2) - activesupport (= 4.1.2) + railties (4.1.4) + actionpack (= 4.1.4) + activesupport (= 4.1.4) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) rake (10.3.2) @@ -224,14 +280,14 @@ GEM rspec-core (~> 2.99.0) rspec-expectations (~> 2.99.0) rspec-mocks (~> 2.99.0) - rubyzip (1.1.5) + rubyzip (1.1.6) sass (3.2.19) sass-rails (4.0.3) railties (>= 4.0.0, < 5.0) sass (~> 3.2.0) sprockets (~> 2.8, <= 2.11.0) sprockets-rails (~> 2.0) - select2-rails (3.5.7) + select2-rails (3.5.9) thor (~> 0.14) selenium-webdriver (2.42.0) childprocess (>= 0.5.0) @@ -240,56 +296,6 @@ GEM websocket (~> 1.0.4) slop (3.5.0) spork (0.9.2) - spree (2.3.1) - spree_api (= 2.3.1) - spree_backend (= 2.3.1) - spree_cmd (= 2.3.1) - spree_core (= 2.3.1) - spree_frontend (= 2.3.1) - spree_sample (= 2.3.1) - spree_api (2.3.1) - rabl (~> 0.9.4.pre1) - spree_core (= 2.3.1) - versioncake (~> 2.3.1) - spree_backend (2.3.1) - jquery-rails (~> 3.1.0) - jquery-ui-rails (~> 4.1.0) - select2-rails (~> 3.5.0) - spree_api (= 2.3.1) - spree_core (= 2.3.1) - spree_cmd (2.3.1) - thor (~> 0.14) - spree_core (2.3.1) - activemerchant (~> 1.43.1) - acts_as_list (= 0.3.0) - awesome_nested_set (~> 3.0.0.rc.3) - aws-sdk (= 1.27.0) - cancan (~> 1.6.10) - deface (~> 1.0.0) - ffaker (~> 1.16) - font-awesome-rails (~> 4.0) - friendly_id (~> 5.0.4) - highline (~> 1.6.18) - httparty (~> 0.11) - i18n (= 0.6.9) - json (~> 1.7) - kaminari (~> 0.15.0) - monetize - paperclip (~> 4.1.1) - paranoia (~> 2.0) - rails (~> 4.1.2) - ransack (~> 1.2.2) - state_machine (= 1.2.0) - stringex (~> 1.5.1) - truncate_html (= 0.9.2) - spree_frontend (2.3.1) - canonical-rails (~> 0.0.4) - jquery-rails (~> 3.1.0) - spree_api (= 2.3.1) - spree_core (= 2.3.1) - stringex (~> 1.5.1) - spree_sample (2.3.1) - spree_core (= 2.3.1) sprockets (2.11.0) hike (~> 1.2) multi_json (~> 1.0) @@ -340,7 +346,7 @@ DEPENDENCIES sass-rails (~> 4.0.3) selenium-webdriver spork - spree (~> 2.3.1) + spree! spree_conekta! spree_i18n! sqlite3 diff --git a/README.md b/README.md index 38be99d..0a58d6a 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Setup Add this extension to your Gemfile: ```ruby -gem 'spree_conekta', github: 'AgilTec/spree_conekta', branch: '2.3.0.beta' +gem 'spree_conekta', github: 'AgilTec/spree_conekta', branch: '2.4.0.beta' ``` Then run: @@ -64,3 +64,23 @@ Conekta currently supports four different methods: [Crowd Interactive](http://www.crowdint.com) is an American web design and development company that happens to work in Colima, Mexico. We specialize in building and growing online retail stores. We don’t work with everyone – just companies we believe in. Call us today to see if there’s a fit. + +## Contributors + * Jonathan Garay + * Fernando Cuauhtemoc Barajas Chavez + * Herman Moreno + * Edwin Cruz + * Carlos A. Muñiz Moreno + * Chalo Fernandez + * Guillermo Siliceo + * Jaime Victoria + * Jorge Pardiñas + * Juan Carlos Rojas + * Leo Fischer + * Manuel Vidaurre + * Marco Medina + * Mumo Carlos + * Sergio Morales + * Steven Barragan + * Ulices Barajas + * bishma-stornelli \ No newline at end of file diff --git a/spree_conekta.gemspec b/spree_conekta.gemspec index 224c302..8bc508e 100644 --- a/spree_conekta.gemspec +++ b/spree_conekta.gemspec @@ -21,7 +21,7 @@ Gem::Specification.new do |s| s.add_dependency 'typhoeus' s.add_dependency 'faraday_middleware' s.add_dependency 'activemerchant' - s.add_dependency 'spree', '~> 2.3.1' + s.add_dependency 'spree', '~> 2.4.0.beta' s.add_dependency 'coffee-rails' s.add_dependency 'celluloid' end From 22cf05368d36fdc144e2e79de10b13fd7cd91d9e Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Tue, 19 Aug 2014 21:26:04 -0500 Subject: [PATCH 14/28] Updates the field name_card in the form to the new convention in spree/spree@4e10c9a25553f84ede2877fdd5a4ef22d19ca64a --- app/views/spree/checkout/payment/_conekta_card.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/spree/checkout/payment/_conekta_card.html.erb b/app/views/spree/checkout/payment/_conekta_card.html.erb index e62ca3c..bc0cb21 100644 --- a/app/views/spree/checkout/payment/_conekta_card.html.erb +++ b/app/views/spree/checkout/payment/_conekta_card.html.erb @@ -4,7 +4,7 @@

<%= label_tag "name_on_card_#{payment_method.id}", Spree.t(:name_on_card) %>*
- <%= text_field_tag "#{param_prefix}[name_on_card]", + <%= text_field_tag "#{param_prefix}[name]", "#{@order.billing_firstname} #{@order.billing_lastname}", { id: "name_on_card_#{payment_method.id}", data: { conekta: 'card[name]' } } %> From f164b43d33d2a1afbab0546cdfebf4fe63946d23 Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Fri, 10 Oct 2014 21:48:33 -0500 Subject: [PATCH 15/28] Bump Spree version to 2.4.0.rc3 and updating translations --- app/views/spree/checkout/payment/_conekta_card.html.erb | 4 ++-- config/locales/en.yml | 1 + config/locales/es-MX.yml | 1 + spree_conekta.gemspec | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/views/spree/checkout/payment/_conekta_card.html.erb b/app/views/spree/checkout/payment/_conekta_card.html.erb index bc0cb21..159d62a 100644 --- a/app/views/spree/checkout/payment/_conekta_card.html.erb +++ b/app/views/spree/checkout/payment/_conekta_card.html.erb @@ -57,8 +57,8 @@ <% if payment_method.with_installments? %>

- <%= label_tag "installments_number_#{payment_method.id}", Spree.t(:installments_number) %> - <%= select_tag "#{param_prefix}[installments_number]", options_for_select([6,12], 6), data: { conekta: 'monthly_installments' } %> + <%= label_tag "installments_number_#{payment_method.id}", Spree.t('conekta.installments_number') %> + <%= select_tag "#{param_prefix}[installments_number]", options_for_select([3, 6], 3), data: { conekta: 'monthly_installments' } %>

<% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 4b20c68..bde61b5 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -18,3 +18,4 @@ en: payment_message: Give this reference number at any Banorte bank. order_number: 'Order Number: %{number}' total: 'Total:' + installments_number: 'Installments Number' diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index b4befb7..cb57390 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -18,3 +18,4 @@ es-MX: order_number: 'Número de orden: %{number}' print_payment_form: Imprimir ficha de pago total: 'Total a pagar:' + installments_number: 'Meses sin intereses' diff --git a/spree_conekta.gemspec b/spree_conekta.gemspec index 8bc508e..3e3d2bd 100644 --- a/spree_conekta.gemspec +++ b/spree_conekta.gemspec @@ -21,7 +21,7 @@ Gem::Specification.new do |s| s.add_dependency 'typhoeus' s.add_dependency 'faraday_middleware' s.add_dependency 'activemerchant' - s.add_dependency 'spree', '~> 2.4.0.beta' + s.add_dependency 'spree', '~> 2.4.0.rc3' s.add_dependency 'coffee-rails' s.add_dependency 'celluloid' end From 659958e6e1786d844288af85665475384ce2a1ae Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Sun, 19 Oct 2014 16:28:22 -0500 Subject: [PATCH 16/28] Update specs to RSpec 3.1 --- .gitignore | 3 +- Gemfile | 3 +- Gemfile.lock | 310 ++++++++++-------- .../spree/conekta/payments_controller_spec.rb | 10 +- spec/factories/configuration_factory.rb | 7 - spec/factories/line_item_factory.rb | 3 - spec/factories/order_factory.rb | 69 ---- spec/factories/shipping_method_factory.rb | 9 + spec/features/conekta_checkout_spec.rb | 73 +++-- spec/lib/spree/conekta/client_spec.rb | 6 +- spec/lib/spree/conekta/provider_spec.rb | 10 +- .../billing_integration/conekta/bank_spec.rb | 6 +- .../billing_integration/conekta/card_spec.rb | 6 +- .../billing_integration/conekta/cash_spec.rb | 6 +- .../conekta/monthly_payment_spec.rb | 6 +- .../spree/billing_integration/conekta_spec.rb | 4 +- spec/models/spree/conekta_payment_spec.rb | 8 +- spec/models/spree/credit_card_spec.rb | 27 -- spec/spec_helper.rb | 32 ++ .../spree/payments/show.html.erb_spec.rb | 10 +- 20 files changed, 289 insertions(+), 319 deletions(-) create mode 100644 spec/factories/shipping_method_factory.rb delete mode 100644 spec/models/spree/credit_card_spec.rb diff --git a/.gitignore b/.gitignore index ce1767c..c6d5220 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ spec/dummy/tmp/ spec/dummy/.sass-cache spec/dummy/db/migrate/ .idea -.#* \ No newline at end of file +.#* +tmp/** \ No newline at end of file diff --git a/Gemfile b/Gemfile index efa0747..071f44b 100644 --- a/Gemfile +++ b/Gemfile @@ -8,12 +8,13 @@ gem 'spree_i18n', github: 'spree/spree_i18n', branch: 'master' gem 'globalize', github: 'globalize/globalize', branch: 'master' group :test, :development do - gem 'rspec-rails', '~> 2.13' + gem 'rspec-rails', '~> 3.1.0' gem 'sqlite3' gem 'factory_girl' gem 'pry' gem 'database_cleaner' gem 'spork' + gem 'poltergeist' gem 'selenium-webdriver' gem 'capybara-webkit' gem 'capybara' diff --git a/Gemfile.lock b/Gemfile.lock index 04d5aa3..c842e4b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,6 +1,6 @@ GIT remote: git://github.com/globalize/globalize.git - revision: eccb924ac9641b52399f22525b0e3ec004739f4c + revision: fb6bfb38b5845fd7bc1e080d8c0923f60a327f2c branch: master specs: globalize (4.0.2) @@ -9,67 +9,68 @@ GIT GIT remote: git://github.com/spree/spree.git - revision: 8260724092ac72f1e3247ff3b992cdf201cdb152 + revision: aa34b3a6b1f3dd95f9b3c6ee9e1cd187f2bbd2f2 branch: master specs: - spree (2.4.0.beta) - spree_api (= 2.4.0.beta) - spree_backend (= 2.4.0.beta) - spree_cmd (= 2.4.0.beta) - spree_core (= 2.4.0.beta) - spree_frontend (= 2.4.0.beta) - spree_sample (= 2.4.0.beta) - spree_api (2.4.0.beta) + spree (2.4.0.rc3) + spree_api (= 2.4.0.rc3) + spree_backend (= 2.4.0.rc3) + spree_cmd (= 2.4.0.rc3) + spree_core (= 2.4.0.rc3) + spree_frontend (= 2.4.0.rc3) + spree_sample (= 2.4.0.rc3) + spree_api (2.4.0.rc3) rabl (~> 0.9.4.pre1) - spree_core (= 2.4.0.beta) + spree_core (= 2.4.0.rc3) versioncake (~> 2.3.1) - spree_backend (2.4.0.beta) - jquery-rails (= 3.1.0) - jquery-ui-rails (~> 4.1.0) + spree_backend (2.4.0.rc3) + jquery-rails (~> 3.1.2) + jquery-ui-rails (~> 5.0.0) select2-rails (~> 3.5.0) - spree_api (= 2.4.0.beta) - spree_core (= 2.4.0.beta) - spree_cmd (2.4.0.beta) + spree_api (= 2.4.0.rc3) + spree_core (= 2.4.0.rc3) + spree_cmd (2.4.0.rc3) thor (~> 0.14) - spree_core (2.4.0.beta) - activemerchant (~> 1.43.1) + spree_core (2.4.0.rc3) + activemerchant (~> 1.44.1) acts_as_list (= 0.3.0) awesome_nested_set (~> 3.0.0.rc.3) - aws-sdk (= 1.27.0) - cancan (~> 1.6.10) + cancancan (~> 1.9.2) + carmen (~> 1.0.0) deface (~> 1.0.0) ffaker (~> 1.16) font-awesome-rails (~> 4.0) friendly_id (~> 5.0.4) highline (~> 1.6.18) httparty (~> 0.11) - i18n (= 0.6.9) json (~> 1.7) - kaminari (~> 0.15.0) + kaminari (~> 0.15, >= 0.15.1) monetize - paperclip (~> 4.1.1) + paperclip (~> 4.2.0) paranoia (~> 2.0) - rails (~> 4.1.4) - ransack (~> 1.2.2) + premailer-rails + rails (~> 4.1.6) + ransack (~> 1.4.1) state_machine (= 1.2.0) stringex (~> 1.5.1) truncate_html (= 0.9.2) - spree_frontend (2.4.0.beta) + twitter_cldr (~> 3.0) + spree_frontend (2.4.0.rc3) canonical-rails (~> 0.0.4) - jquery-rails (= 3.1.0) - spree_api (= 2.4.0.beta) - spree_core (= 2.4.0.beta) + jquery-rails (~> 3.1.2) + spree_api (= 2.4.0.rc3) + spree_core (= 2.4.0.rc3) stringex (~> 1.5.1) - spree_sample (2.4.0.beta) - spree_core (= 2.4.0.beta) + spree_sample (2.4.0.rc3) + spree_core (= 2.4.0.rc3) GIT remote: git://github.com/spree/spree_i18n.git - revision: 246d6c8ed16d470386dd9fb3fbe89a72720fdd5c + revision: d092138eee11e34803b16115c18d4c06300a2e96 branch: master specs: spree_i18n (3.0.0) - globalize (~> 4.0.1) + globalize (~> 4.0.2) i18n_data (~> 0.5.1) rails-i18n (~> 4.0.1) spree_core (~> 2.4.0.beta) @@ -84,44 +85,44 @@ PATH faraday faraday_middleware oj - spree (~> 2.4.0.beta) + spree (~> 2.4.0.rc3) typhoeus GEM remote: http://rubygems.org/ specs: - actionmailer (4.1.4) - actionpack (= 4.1.4) - actionview (= 4.1.4) - mail (~> 2.5.4) - actionpack (4.1.4) - actionview (= 4.1.4) - activesupport (= 4.1.4) + actionmailer (4.1.6) + actionpack (= 4.1.6) + actionview (= 4.1.6) + mail (~> 2.5, >= 2.5.4) + actionpack (4.1.6) + actionview (= 4.1.6) + activesupport (= 4.1.6) rack (~> 1.5.2) rack-test (~> 0.6.2) - actionview (4.1.4) - activesupport (= 4.1.4) + actionview (4.1.6) + activesupport (= 4.1.6) builder (~> 3.1) erubis (~> 2.7.0) - active_utils (2.2.1) + active_utils (2.2.3) activesupport (>= 2.3.11) i18n - activemerchant (1.43.1) - active_utils (~> 2.0, >= 2.0.1) - activesupport (>= 2.3.14, < 5.0.0) + activemerchant (1.44.1) + active_utils (~> 2.2.0) + activesupport (>= 3.2.14, < 5.0.0) builder (>= 2.1.2, < 4.0.0) - i18n (~> 0.5) + i18n (>= 0.6.9) json (~> 1.7) - money (< 7.0.0) nokogiri (~> 1.4) - activemodel (4.1.4) - activesupport (= 4.1.4) + offsite_payments (~> 2.0.0) + activemodel (4.1.6) + activesupport (= 4.1.6) builder (~> 3.1) - activerecord (4.1.4) - activemodel (= 4.1.4) - activesupport (= 4.1.4) + activerecord (4.1.6) + activemodel (= 4.1.6) + activesupport (= 4.1.6) arel (~> 5.0.0) - activesupport (4.1.4) + activesupport (4.1.6) i18n (~> 0.6, >= 0.6.9) json (~> 1.7, >= 1.7.7) minitest (~> 5.1) @@ -129,109 +130,134 @@ GEM tzinfo (~> 1.1) acts_as_list (0.3.0) activerecord (>= 3.0) + addressable (2.3.6) arel (5.0.1.20140414130214) - awesome_nested_set (3.0.0.rc.6) + awesome_nested_set (3.0.1) activerecord (>= 4.0.0, < 5) - aws-sdk (1.27.0) - json (~> 1.4) - nokogiri (>= 1.4.4) - uuidtools (~> 2.1) builder (3.2.2) - cancan (1.6.10) + camertron-eprun (1.1.0) + cancancan (1.9.2) canonical-rails (0.0.7) rails (>= 3.1, < 5.0) - capybara (2.4.1) + capybara (2.4.4) mime-types (>= 1.16) nokogiri (>= 1.3.3) rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (~> 2.0) - capybara-webkit (1.1.0) - capybara (~> 2.0, >= 2.0.2) + capybara-webkit (1.3.0) + capybara (>= 2.0.2, < 2.5.0) json - celluloid (0.15.2) - timers (~> 1.1.0) - childprocess (0.5.3) + carmen (1.0.1) + unicode_utils (~> 1.4.0) + celluloid (0.16.0) + timers (~> 4.0.0) + childprocess (0.5.5) ffi (~> 1.0, >= 1.0.11) + cldr-plurals-runtime-rb (1.0.0) climate_control (0.0.3) activesupport (>= 3.0) + cliver (0.3.2) cocaine (0.5.4) climate_control (>= 0.0.3, < 1.0) coderay (1.1.0) - coffee-rails (4.0.1) + coffee-rails (4.1.0) coffee-script (>= 2.2.0) railties (>= 4.0.0, < 5.0) - coffee-script (2.2.0) + coffee-script (2.3.0) coffee-script-source execjs - coffee-script-source (1.7.0) + coffee-script-source (1.8.0) colorize (0.7.3) + css_parser (1.3.5) + addressable database_cleaner (1.3.0) - deface (1.0.0) + deface (1.0.1) colorize (>= 0.5.8) nokogiri (~> 1.6.0) + polyglot rails (>= 3.1) diff-lcs (1.2.5) erubis (2.7.0) ethon (0.7.1) ffi (>= 1.3.0) - execjs (2.2.1) - factory_girl (4.4.0) + execjs (2.2.2) + factory_girl (4.5.0) activesupport (>= 3.0.0) faraday (0.9.0) multipart-post (>= 1.2, < 3) faraday_middleware (0.9.1) faraday (>= 0.7.4, < 0.10) - ffaker (1.24.0) - ffi (1.9.3) - font-awesome-rails (4.1.0.0) + ffaker (1.25.0) + ffi (1.9.6) + font-awesome-rails (4.2.0.0) railties (>= 3.2, < 5.0) friendly_id (5.0.4) activerecord (>= 4.0.0) highline (1.6.21) hike (1.2.3) + hitimes (1.2.2) + htmlentities (4.3.2) httparty (0.13.1) json (~> 1.8) multi_xml (>= 0.5.2) - i18n (0.6.9) + i18n (0.6.11) i18n_data (0.5.1) - jquery-rails (3.1.0) + jquery-rails (3.1.2) railties (>= 3.0, < 5.0) thor (>= 0.14, < 2.0) - jquery-ui-rails (4.1.2) - railties (>= 3.1.0) + jquery-ui-rails (5.0.2) + railties (>= 3.2.16) json (1.8.1) - kaminari (0.15.1) + kaminari (0.16.1) actionpack (>= 3.0.0) activesupport (>= 3.0.0) - mail (2.5.4) - mime-types (~> 1.16) - treetop (~> 1.4.8) + mail (2.6.1) + mime-types (>= 1.16, < 3) method_source (0.8.2) - mime-types (1.25.1) + mime-types (2.4.2) mini_portile (0.6.0) - minitest (5.4.0) - monetize (0.3.0) - money (~> 6.1.0.beta1) - money (6.1.1) - i18n (~> 0.6.4) + minitest (5.4.2) + monetize (0.4.1) + money (~> 6.2.1) + money (6.2.1) + i18n (>= 0.6.4, <= 0.7.0.dev) multi_json (1.10.1) multi_xml (0.5.5) multipart-post (2.0.0) - nokogiri (1.6.2.1) + nokogiri (1.6.3.1) mini_portile (= 0.6.0) - oj (2.9.9) - paperclip (4.1.1) + offsite_payments (2.0.1) + active_utils (~> 2.2.0) + activesupport (>= 3.2.14, < 5.0.0) + builder (>= 2.1.2, < 4.0.0) + i18n (~> 0.5) + json (~> 1.7) + money (< 7.0.0) + nokogiri (~> 1.4) + oj (2.10.3) + paperclip (4.2.0) activemodel (>= 3.0.0) activesupport (>= 3.0.0) cocaine (~> 0.5.3) mime-types paranoia (2.0.2) activerecord (~> 4.0) - polyamorous (1.0.0) + poltergeist (1.5.1) + capybara (~> 2.1) + cliver (~> 0.3.1) + multi_json (~> 1.0) + websocket-driver (>= 0.2.0) + polyamorous (1.1.0) activerecord (>= 3.0) polyglot (0.3.5) - pry (0.10.0) + premailer (1.8.2) + css_parser (>= 1.3.5) + htmlentities (>= 4.0.0) + premailer-rails (1.8.0) + actionmailer (>= 3, < 5) + premailer (~> 1.7, >= 1.7.9) + pry (0.10.1) coderay (~> 1.1.0) method_source (~> 0.8.1) slop (~> 3.4) @@ -240,46 +266,47 @@ GEM rack (1.5.2) rack-test (0.6.2) rack (>= 1.0) - rails (4.1.4) - actionmailer (= 4.1.4) - actionpack (= 4.1.4) - actionview (= 4.1.4) - activemodel (= 4.1.4) - activerecord (= 4.1.4) - activesupport (= 4.1.4) + rails (4.1.6) + actionmailer (= 4.1.6) + actionpack (= 4.1.6) + actionview (= 4.1.6) + activemodel (= 4.1.6) + activerecord (= 4.1.6) + activesupport (= 4.1.6) bundler (>= 1.3.0, < 2.0) - railties (= 4.1.4) + railties (= 4.1.6) sprockets-rails (~> 2.0) - rails-i18n (4.0.2) + rails-i18n (4.0.3) i18n (~> 0.6) - rails (>= 4.0) - railties (4.1.4) - actionpack (= 4.1.4) - activesupport (= 4.1.4) + railties (~> 4.0) + railties (4.1.6) + actionpack (= 4.1.6) + activesupport (= 4.1.6) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) rake (10.3.2) - ransack (1.2.3) + ransack (1.4.1) actionpack (>= 3.0) activerecord (>= 3.0) activesupport (>= 3.0) i18n - polyamorous (~> 1.0.0) - rspec-collection_matchers (1.0.0) - rspec-expectations (>= 2.99.0.beta1) - rspec-core (2.99.1) - rspec-expectations (2.99.1) - diff-lcs (>= 1.1.3, < 2.0) - rspec-mocks (2.99.1) - rspec-rails (2.99.0) + polyamorous (~> 1.1) + rspec-core (3.1.7) + rspec-support (~> 3.1.0) + rspec-expectations (3.1.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.1.0) + rspec-mocks (3.1.3) + rspec-support (~> 3.1.0) + rspec-rails (3.1.0) actionpack (>= 3.0) - activemodel (>= 3.0) activesupport (>= 3.0) railties (>= 3.0) - rspec-collection_matchers - rspec-core (~> 2.99.0) - rspec-expectations (~> 2.99.0) - rspec-mocks (~> 2.99.0) + rspec-core (~> 3.1.0) + rspec-expectations (~> 3.1.0) + rspec-mocks (~> 3.1.0) + rspec-support (~> 3.1.0) + rspec-support (3.1.2) rubyzip (1.1.6) sass (3.2.19) sass-rails (4.0.3) @@ -287,47 +314,51 @@ GEM sass (~> 3.2.0) sprockets (~> 2.8, <= 2.11.0) sprockets-rails (~> 2.0) - select2-rails (3.5.9) + select2-rails (3.5.9.1) thor (~> 0.14) - selenium-webdriver (2.42.0) - childprocess (>= 0.5.0) + selenium-webdriver (2.43.0) + childprocess (~> 0.5) multi_json (~> 1.0) rubyzip (~> 1.0) - websocket (~> 1.0.4) - slop (3.5.0) + websocket (~> 1.0) + slop (3.6.0) spork (0.9.2) sprockets (2.11.0) hike (~> 1.2) multi_json (~> 1.0) rack (~> 1.0) tilt (~> 1.1, != 1.3.0) - sprockets-rails (2.1.3) + sprockets-rails (2.2.0) actionpack (>= 3.0) activesupport (>= 3.0) - sprockets (~> 2.8) + sprockets (>= 2.8, < 4.0) sqlite3 (1.3.9) state_machine (1.2.0) stringex (1.5.1) thor (0.19.1) thread_safe (0.3.4) tilt (1.4.1) - timers (1.1.0) - treetop (1.4.15) - polyglot - polyglot (>= 0.3.1) + timers (4.0.1) + hitimes truncate_html (0.9.2) + twitter_cldr (3.1.0) + camertron-eprun + cldr-plurals-runtime-rb (~> 1.0.0) + json + tzinfo typhoeus (0.6.9) ethon (>= 0.7.1) - tzinfo (1.2.1) + tzinfo (1.2.2) thread_safe (~> 0.1) - uuidtools (2.1.4) - vcr (2.9.2) + unicode_utils (1.4.0) + vcr (2.9.3) versioncake (2.3.1) actionpack (>= 3.2) activesupport (>= 3.2) railties (>= 3.2) tzinfo - websocket (1.0.7) + websocket (1.2.1) + websocket-driver (0.3.5) xpath (2.0.0) nokogiri (~> 1.3) @@ -341,8 +372,9 @@ DEPENDENCIES factory_girl ffaker globalize! + poltergeist pry - rspec-rails (~> 2.13) + rspec-rails (~> 3.1.0) sass-rails (~> 4.0.3) selenium-webdriver spork diff --git a/spec/controllers/spree/conekta/payments_controller_spec.rb b/spec/controllers/spree/conekta/payments_controller_spec.rb index b4e2e94..6961a10 100644 --- a/spec/controllers/spree/conekta/payments_controller_spec.rb +++ b/spec/controllers/spree/conekta/payments_controller_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' require 'celluloid' -describe Spree::Conekta::PaymentsController do +RSpec.describe Spree::Conekta::PaymentsController, :type => :controller do # render_views routes { Spree::Core::Engine.routes } @@ -51,10 +51,10 @@ end - describe :create do + describe 'create' do context 'The order is completed and a pending payment exist' do before do - Spree::Conekta::PaymentNotificationHandler.any_instance.stub delay: 1 + allow_any_instance_of(Spree::Conekta::PaymentNotificationHandler).to receive(:delay).and_return(1) post :create, conekta_response end @@ -66,8 +66,8 @@ context 'The order is completed and a pending payment exist but the charge is not paid' do before do - Spree::Conekta::PaymentNotificationHandler.any_instance.stub delay: 1 - Spree::Conekta::PaymentNotificationHandler.any_instance.should_not_receive :perform_action + allow_any_instance_of(Spree::Conekta::PaymentNotificationHandler).to receive(:delay).and_return(1) + expect_any_instance_of(Spree::Conekta::PaymentNotificationHandler).to_not receive(:perform_action) end it 'It should do nothing if the charge notification is not paid' do diff --git a/spec/factories/configuration_factory.rb b/spec/factories/configuration_factory.rb index d6deb4a..e69de29 100644 --- a/spec/factories/configuration_factory.rb +++ b/spec/factories/configuration_factory.rb @@ -1,7 +0,0 @@ -FactoryGirl.modify do - factory :configuration, class: Spree::Configuration do - name 'Default Configuration' - type 'app_configuration' - currency 'MXN' - end -end diff --git a/spec/factories/line_item_factory.rb b/spec/factories/line_item_factory.rb index c9fdcee..fc4637e 100644 --- a/spec/factories/line_item_factory.rb +++ b/spec/factories/line_item_factory.rb @@ -1,9 +1,6 @@ FactoryGirl.modify do factory :line_item, class: Spree::LineItem do - quantity 1 price { BigDecimal.new('29.00') } - order - variant currency 'MXN' end end diff --git a/spec/factories/order_factory.rb b/spec/factories/order_factory.rb index f236c12..87a563a 100644 --- a/spec/factories/order_factory.rb +++ b/spec/factories/order_factory.rb @@ -1,74 +1,5 @@ FactoryGirl.modify do factory :order, class: Spree::Order do - user - bill_address - completed_at nil - email { user.email } currency 'MXN' - - factory :order_with_totals do - after(:create) do |order| - create(:line_item, order: order, currency: 'MXN') - order.line_items.reload # to ensure order.line_items is accessible after - end - end - - factory :order_with_line_items do - bill_address - ship_address - - ignore do - line_items_count 5 - end - - after(:create) do |order, evaluator| - create_list(:line_item, evaluator.line_items_count, order: order, currency: 'MXN') - order.line_items.reload - - create(:shipment, order: order) - order.shipments.reload - - order.update! - end - - factory :completed_order_with_totals do - state 'complete' - - after(:create) do |order| - order.refresh_shipment_rates - order.update_column(:completed_at, Time.now) - end - - factory :completed_order_with_pending_payment do - after(:create) do |order| - create(:payment, amount: order.total, order: order) - end - end - - factory :order_ready_to_ship do - payment_state 'paid' - shipment_state 'ready' - - after(:create) do |order| - create(:payment, amount: order.total, order: order, state: 'completed') - order.shipments.each do |shipment| - shipment.inventory_units.update_all state: 'on_hand' - shipment.update_column('state', 'ready') - end - order.reload - end - - factory :shipped_order do - after(:create) do |order| - order.shipments.each do |shipment| - shipment.inventory_units.update_all state: 'shipped' - shipment.update_column('state', 'shipped') - end - order.reload - end - end - end - end - end end end diff --git a/spec/factories/shipping_method_factory.rb b/spec/factories/shipping_method_factory.rb new file mode 100644 index 0000000..6e71ce4 --- /dev/null +++ b/spec/factories/shipping_method_factory.rb @@ -0,0 +1,9 @@ +FactoryGirl.modify do + factory :base_shipping_method, class: Spree::ShippingMethod do + after(:create) do |sm| + sm.calculator.preferred_amount = 10 + sm.calculator.preferred_currency = "MXN" + sm.save + end + end +end diff --git a/spec/features/conekta_checkout_spec.rb b/spec/features/conekta_checkout_spec.rb index 6f9be5a..459a26d 100644 --- a/spec/features/conekta_checkout_spec.rb +++ b/spec/features/conekta_checkout_spec.rb @@ -3,7 +3,7 @@ Spree::Config[:currency] = 'MXN' -describe "Conekta checkout" do +RSpec.describe "Conekta checkout", type: :feature do let!(:country) { create(:country, states_required: true) } let!(:state) { create(:state, country: country) } let!(:shipping_method) { create(:shipping_method) } @@ -15,11 +15,9 @@ let!(:order) { OrderWalkthrough.up_to(:delivery) } before do - puts "factory :price amount: #{price.amount} currency: #{price.currency}" - user = create(:user) - order.stub :confirmation_required? => true + allow(order).to receive(:confirmation_required?).and_return(true) order.reload order.user = user @@ -27,17 +25,19 @@ order.update! - order.stub total: 2000 + allow(order).to receive(:total).and_return(2000) Spree::PaymentMethod.destroy_all - Spree::CheckoutController.any_instance.stub(current_order: order) - Spree::CheckoutController.any_instance.stub(try_spree_current_user: user) - Spree::CheckoutController.any_instance.stub(:skip_state_validation? => true) + allow_any_instance_of(Spree::CheckoutController).to receive(:current_order).and_return(order) + allow_any_instance_of(Spree::CheckoutController).to receive(:try_spree_current_user).and_return(user) + allow_any_instance_of(Spree::CheckoutController).to receive(:skip_state_validation?).and_return(true) + end describe "the payment source is credit card", js: true do before do + ENV['CONEKTA_PUBLIC_KEY'] = '1tv5yJp3xnVZ7eK67m4h' end @@ -51,6 +51,7 @@ end before do + visit spree.checkout_state_path(:payment) fill_in "Card Number", with: "4242 4242 4242 4242" @@ -67,7 +68,7 @@ sleep(2) - page.current_url.should include("/checkout/confirm") + expect(page.current_url).to include("/checkout/confirm") VCR.use_cassette('conekta_card') do click_button "Place Order" @@ -75,15 +76,15 @@ end it "can process a valid payment" do - page.should have_content("Your order has been processed successfully") + expect(page).to have_content("Your order has been processed successfully") end it 'should complete the payment' do - order.payments.last.state.should eq('completed') + expect(order.payments.last.state).to eq('completed') end it 'should not show the conekta order receipt' do - page.current_url.should_not include("/conekta/payments") + expect(page.current_url).to_not include("/conekta/payments") end end @@ -113,7 +114,7 @@ sleep(2) - page.current_url.should include("/checkout/confirm") + expect(page.current_url).to include("/checkout/confirm") VCR.use_cassette('conekta_invalid_card') do click_button "Place Order" @@ -121,15 +122,15 @@ end it "should not process an invalid payment" do - page.should_not have_content("Your order has been processed successfully") + expect(page).to_not have_content("Your order has been processed successfully") end it 'should set the payment state as failed' do - order.payments.last.state.should eq('failed') + expect(order.payments.last.state).to eq('failed') end it 'should not show the conekta order receipt' do - page.current_url.should_not include("/conekta/payments") + expect(page.current_url).to_not include("/conekta/payments") end end @@ -159,7 +160,7 @@ sleep(2) - page.current_url.should include("/checkout/confirm") + expect(page.current_url).to include("/checkout/confirm") VCR.use_cassette('conekta_card_with_errors') do click_button "Place Order" @@ -167,15 +168,15 @@ end it "should not process an invalid payment" do - page.should_not have_content("Your order has been processed successfully") + expect(page).to_not have_content("Your order has been processed successfully") end it 'should set the payment state as failed' do - order.payments.last.state.should eq('failed') + expect(order.payments.last.state).to eq('failed') end it 'should not show the conekta order receipt' do - page.current_url.should_not include("/conekta/payments") + expect(page.current_url).to_not include("/conekta/payments") end end @@ -205,7 +206,7 @@ sleep(2) - page.current_url.should include("/checkout/confirm") + expect(page.current_url).to include("/checkout/confirm") VCR.use_cassette('conekta_limit_exceeded_card') do click_button "Place Order" @@ -213,20 +214,20 @@ end it "should not process an invalid payment" do - page.should_not have_content("Your order has been processed successfully") + expect(page).to_not have_content("Your order has been processed successfully") end it 'should set the payment state as failed' do - order.payments.last.state.should eq('failed') + expect(order.payments.last.state).to eq('failed') end it 'should not show the conekta order receipt' do - page.current_url.should_not include("/conekta/payments") + expect(page.current_url).to_not include("/conekta/payments") end end end - context "the payment source is cash" do + context "the payment source is cash", js: true do let!(:conekta_payment) do Spree::BillingIntegration::Conekta::Cash.create!( name: "conekta", @@ -241,7 +242,7 @@ click_button "Save and Continue" sleep(2) - page.current_url.should include("/checkout/confirm") + expect(page.current_url).to include("/checkout/confirm") VCR.use_cassette('conekta_cash') do click_button "Place Order" @@ -249,20 +250,20 @@ end it "can process a valid payment", js: true do - page.should have_content("Your order has been processed successfully") - page.should have_content("OXXO") + expect(page).to have_content("Your order has been processed successfully") + expect(page).to have_content("OXXO") end it 'should leave the payment as pending' do - order.payments.last.state.should eq('pending') + expect(order.payments.last.state).to eq('pending') end it 'should show the conekta order receipt with the oxxo barcode' do - page.current_url.should include("/conekta/payments") + expect(page.current_url).to include("/conekta/payments") end end - context "the payment source is bank" do + context "the payment source is bank", js: true do let!(:conekta_payment) do Spree::BillingIntegration::Conekta::Bank.create!( name: "conekta", @@ -277,7 +278,7 @@ click_button "Save and Continue" sleep(2) - page.current_url.should include("/checkout/confirm") + expect(page.current_url).to include("/checkout/confirm") VCR.use_cassette('conekta_bank') do click_button "Place Order" @@ -285,16 +286,16 @@ end it "can process a valid payment", js: true do - page.should have_content("Your order has been processed successfully") - page.should have_content("Banorte") + expect(page).to have_content("Your order has been processed successfully") + expect(page).to have_content("Banorte") end it 'should leave the payment as pending' do - order.payments.last.state.should eq('pending') + expect(order.payments.last.state).to eq('pending') end it 'should show the conekta order receipt' do - page.current_url.should include("/conekta/payments") + expect(page.current_url).to include("/conekta/payments") end end end diff --git a/spec/lib/spree/conekta/client_spec.rb b/spec/lib/spree/conekta/client_spec.rb index d440bcc..bbaed6f 100644 --- a/spec/lib/spree/conekta/client_spec.rb +++ b/spec/lib/spree/conekta/client_spec.rb @@ -1,13 +1,13 @@ require 'spec_helper' -describe Spree::Conekta::Client do +RSpec.describe Spree::Conekta::Client, type: :model do subject { double('client').extend Spree::Conekta::Client } describe :headers do let(:token){ 'abc12345678' } let(:auth_token){ Base64.encode64(token)} - before { subject.stub(:auth_token).and_return token } + before { allow(subject).to receive(:auth_token).and_return token } it "should return headers with auth token" do expect(subject.headers).to include 'Accept', 'Content-type' @@ -24,7 +24,7 @@ before do subject.stub_chain(:connection, :post, :body).and_return(json) - subject.stub endpoint: 'charges' + allow(subject).to receive_messages(endpoint: 'charges') end it 'should return parsed body' do diff --git a/spec/lib/spree/conekta/provider_spec.rb b/spec/lib/spree/conekta/provider_spec.rb index 87a34e5..1d692e6 100644 --- a/spec/lib/spree/conekta/provider_spec.rb +++ b/spec/lib/spree/conekta/provider_spec.rb @@ -1,16 +1,16 @@ require 'spec_helper' -describe Spree::Conekta::Provider do - describe :payment_procesor do - context "the payment source is card" do +RSpec.describe Spree::Conekta::Provider, type: :model do + describe 'payment_procesor' do + context 'the payment source is card' do it { expect(subject.payment_processor('card')).to be(Spree::Conekta::PaymentSource::Card) } end - context "the payment source is bank" do + context 'the payment source is bank' do it { expect(subject.payment_processor('bank')).to be(Spree::Conekta::PaymentSource::Bank) } end - context "the payment source is cash" do + context 'the payment source is cash' do it { expect(subject.payment_processor('cash')).to be(Spree::Conekta::PaymentSource::Cash) } end end diff --git a/spec/models/spree/billing_integration/conekta/bank_spec.rb b/spec/models/spree/billing_integration/conekta/bank_spec.rb index b855542..0be2f30 100644 --- a/spec/models/spree/billing_integration/conekta/bank_spec.rb +++ b/spec/models/spree/billing_integration/conekta/bank_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Spree::BillingIntegration::Conekta::Bank do +RSpec.describe Spree::BillingIntegration::Conekta::Bank, type: :model do describe '#provider_class' do specify { expect(subject.provider_class).to eq Spree::Conekta::Provider } end @@ -10,11 +10,11 @@ end describe '#card?' do - specify { expect(subject.card?).to be_false } + specify { expect(subject.card?).to eq(false) } end describe '#auto_capture?' do - specify { expect(subject.auto_capture?).to be_false } + specify { expect(subject.auto_capture?).to eq(false) } end describe '#method_type' do diff --git a/spec/models/spree/billing_integration/conekta/card_spec.rb b/spec/models/spree/billing_integration/conekta/card_spec.rb index dc41712..0c82dc9 100644 --- a/spec/models/spree/billing_integration/conekta/card_spec.rb +++ b/spec/models/spree/billing_integration/conekta/card_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Spree::BillingIntegration::Conekta::Card do +RSpec.describe Spree::BillingIntegration::Conekta::Card, type: :model do describe '#provider_class' do specify { expect(subject.provider_class).to eq Spree::Conekta::Provider } end @@ -10,10 +10,10 @@ end describe '#card?' do - specify { expect(subject.card?).to be_true } + specify { expect(subject.card?).to eq(true) } end describe '#auto_capture?' do - specify { expect(subject.auto_capture?).to be_true } + specify { expect(subject.auto_capture?).to eq(true) } end end diff --git a/spec/models/spree/billing_integration/conekta/cash_spec.rb b/spec/models/spree/billing_integration/conekta/cash_spec.rb index f65e0f5..ecc0dc6 100644 --- a/spec/models/spree/billing_integration/conekta/cash_spec.rb +++ b/spec/models/spree/billing_integration/conekta/cash_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Spree::BillingIntegration::Conekta::Cash do +RSpec.describe Spree::BillingIntegration::Conekta::Cash, type: :model do describe '#provider_class' do specify { expect(subject.provider_class).to eq Spree::Conekta::Provider } end @@ -10,11 +10,11 @@ end describe '#card?' do - specify { expect(subject.card?).to be_false } + specify { expect(subject.card?).to eq(false) } end describe '#auto_capture?' do - specify { expect(subject.auto_capture?).to be_false } + specify { expect(subject.auto_capture?).to eq(false) } end describe '#method_type' do diff --git a/spec/models/spree/billing_integration/conekta/monthly_payment_spec.rb b/spec/models/spree/billing_integration/conekta/monthly_payment_spec.rb index d8edcd9..c15f853 100644 --- a/spec/models/spree/billing_integration/conekta/monthly_payment_spec.rb +++ b/spec/models/spree/billing_integration/conekta/monthly_payment_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Spree::BillingIntegration::Conekta::MonthlyPayment do +RSpec.describe Spree::BillingIntegration::Conekta::MonthlyPayment, type: :model do describe '#provider_class' do specify { expect(subject.provider_class).to eq Spree::Conekta::MonthlyPaymentProvider } end @@ -10,11 +10,11 @@ end describe '#card?' do - specify { expect(subject.card?).to be_true } + specify { expect(subject.card?).to eq(true) } end describe '#auto_capture?' do - specify { expect(subject.auto_capture?).to be_false } + specify { expect(subject.auto_capture?).to eq(false) } end describe '#method_type' do diff --git a/spec/models/spree/billing_integration/conekta_spec.rb b/spec/models/spree/billing_integration/conekta_spec.rb index 8376ef7..9efb58d 100644 --- a/spec/models/spree/billing_integration/conekta_spec.rb +++ b/spec/models/spree/billing_integration/conekta_spec.rb @@ -1,11 +1,11 @@ require 'spec_helper' -describe Spree::BillingIntegration::Conekta do +RSpec.describe Spree::BillingIntegration::Conekta, type: :model do context 'When Spree::Config[:auto_capture] is set to true' do before do Spree::Config[:auto_capture] = true end - specify { expect(subject.auto_capture?).to be_false } + specify { expect(subject.auto_capture?).to eq(false) } end end diff --git a/spec/models/spree/conekta_payment_spec.rb b/spec/models/spree/conekta_payment_spec.rb index c53f03d..6d227a9 100644 --- a/spec/models/spree/conekta_payment_spec.rb +++ b/spec/models/spree/conekta_payment_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Spree::ConektaPayment do +RSpec.describe Spree::ConektaPayment, type: :model do describe '#actions' do it { expect(subject.actions).to eql(['capture']) } end @@ -13,7 +13,7 @@ allow(payment).to receive(:state) { 'checkout' } end - it { expect(subject.can_capture?(payment)).to be_true } + it { expect(subject.can_capture?(payment)).to eq(true) } end context 'when payment state is pending' do @@ -21,7 +21,7 @@ allow(payment).to receive(:state) { 'pending' } end - it { expect(subject.can_capture?(payment)).to be_true } + it { expect(subject.can_capture?(payment)).to eq(true) } end context 'when payment state is different than checkout or pending' do @@ -29,7 +29,7 @@ allow(payment).to receive(:state) { 'invalid' } end - it { expect(subject.can_capture?(payment)).to be_false } + it { expect(subject.can_capture?(payment)).to eq(false) } end end end diff --git a/spec/models/spree/credit_card_spec.rb b/spec/models/spree/credit_card_spec.rb deleted file mode 100644 index c383674..0000000 --- a/spec/models/spree/credit_card_spec.rb +++ /dev/null @@ -1,27 +0,0 @@ -require 'spec_helper' - -describe Spree::CreditCard do - describe '#name' do - context 'When name_on_card is present' do - before do - subject.name_on_card = 'foo' - end - - specify "name should be name_on_card" do - expect(subject.name).to eq 'foo' - end - end - - context 'When name_on_card is not present and first name and last name are present' do - before do - subject.first_name = 'foo' - subject.last_name = 'bar' - end - - specify "name should be the first and last name" do - expect(subject.name).to eq 'foo bar' - end - end - end - -end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 5c2f095..1e0eb01 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -47,6 +47,23 @@ require 'spree/api/testing_support/setup' require 'vcr' +require 'capybara/poltergeist' +Capybara.javascript_driver = :poltergeist +options = { + js_errors: false, + timeout: 240, + phantomjs_logger: StringIO.new, + logger: nil, + phantomjs_options: ['--load-images=no', '--ignore-ssl-errors=yes'] +} + +Capybara.register_driver :poltergeist do |app| + Capybara::Poltergeist::Driver.new(app, options) +end +Capybara.default_wait_time = 10 +Capybara.default_host = 'localhost:3000' + + VCR.configure do |c| c.cassette_library_dir = 'spec/fixtures/vcr_cassettes' c.hook_into :faraday @@ -76,4 +93,19 @@ config.after(:each) do DatabaseCleaner.clean end + + config.after(:each, type: :feature) do |example| + missing_translations = page.body.scan(/translation missing: #{I18n.locale}\.(.*?)[\s<\"&]/) + if missing_translations.any? + #binding.pry + puts "Found missing translations: #{missing_translations.inspect}" + puts "In spec: #{example.location}" + end + if ENV['LOCAL'] && example.exception + page.save_screenshot("tmp/capybara/screenshots/#{example.metadata[:description]}.png", full: true) + save_and_open_page + end + end + + config.fail_fast = ENV['FAIL_FAST'] == 'true' || false end diff --git a/spec/views/spree/payments/show.html.erb_spec.rb b/spec/views/spree/payments/show.html.erb_spec.rb index d410eff..0bbd157 100644 --- a/spec/views/spree/payments/show.html.erb_spec.rb +++ b/spec/views/spree/payments/show.html.erb_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe 'spree/conekta/payments/show' do +RSpec. describe 'spree/conekta/payments/show', type: :view do let(:order){ create(:order_with_totals, number: 'RT1234567', currency: 'MXN') } let(:conekta_pending_response) do OpenStruct.new params: { @@ -26,7 +26,7 @@ end before do - Spree::Order.any_instance.stub(:last_payment_details).and_return(conekta_pending_response) + allow_any_instance_of(Spree::Order).to receive(:last_payment_details).and_return(conekta_pending_response) assign(:order, order) assign(:order_details, conekta_pending_response.params) @@ -68,7 +68,7 @@ } } - Spree::Order.any_instance.stub(:last_payment_source).and_return('card') + allow_any_instance_of(Spree::Order).to receive(:last_payment_source).and_return('card') render end @@ -86,7 +86,7 @@ } - Spree::Order.any_instance.stub(:last_payment_source).and_return('cash') + allow_any_instance_of(Spree::Order).to receive(:last_payment_source).and_return('cash') render end @@ -103,7 +103,7 @@ "reference"=>"0000064" } - Spree::Order.any_instance.stub(:last_payment_source).and_return('bank') + allow_any_instance_of(Spree::Order).to receive(:last_payment_source).and_return('bank') render end From c2e3111874edeac5eeb1170ffa21381e62c70ff3 Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Sun, 19 Oct 2014 19:23:41 -0500 Subject: [PATCH 17/28] Update README for branch 2.4.0.rc3 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0a58d6a..d170f59 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Setup Add this extension to your Gemfile: ```ruby -gem 'spree_conekta', github: 'AgilTec/spree_conekta', branch: '2.4.0.beta' +gem 'spree_conekta', github: 'AgilTec/spree_conekta', branch: '2.4.0.rc3' ``` Then run: From 786c7796436c7fa59c95a703b8d9318f095d6df3 Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Wed, 29 Oct 2014 23:04:25 -0600 Subject: [PATCH 18/28] Add configuring options for installements and improving the print of Oxxo recipts --- Gemfile.lock | 28 ++++----- README.md | 19 ++++-- .../stylesheets/spree/backend/print.css.sass | 2 +- .../spree/frontend/conekta.css.sass | 63 ++++++++++--------- .../spree/frontend/spree_conekta.css | 1 + .../checkout/payment/_conekta_card.html.erb | 2 +- .../spree/conekta/payments/show.html.erb | 11 +++- lib/spree/conekta/configuration.rb | 25 ++++++++ lib/spree_conekta.rb | 1 + lib/spree_conekta/engine.rb | 2 +- lib/spree_conekta/version.rb | 2 +- 11 files changed, 102 insertions(+), 54 deletions(-) create mode 100644 lib/spree/conekta/configuration.rb diff --git a/Gemfile.lock b/Gemfile.lock index c842e4b..5e53849 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,6 +1,6 @@ GIT remote: git://github.com/globalize/globalize.git - revision: fb6bfb38b5845fd7bc1e080d8c0923f60a327f2c + revision: f7a504cbfff7a2d427a66eb38bda23136ea00616 branch: master specs: globalize (4.0.2) @@ -9,7 +9,7 @@ GIT GIT remote: git://github.com/spree/spree.git - revision: aa34b3a6b1f3dd95f9b3c6ee9e1cd187f2bbd2f2 + revision: 49d5b314df53b6a71f7c69473575ac90d6acd690 branch: master specs: spree (2.4.0.rc3) @@ -66,7 +66,7 @@ GIT GIT remote: git://github.com/spree/spree_i18n.git - revision: d092138eee11e34803b16115c18d4c06300a2e96 + revision: 08c9df25747ceb45b6f9230d05e8056f3c6f7896 branch: master specs: spree_i18n (3.0.0) @@ -78,7 +78,7 @@ GIT PATH remote: . specs: - spree_conekta (0.6.0) + spree_conekta (0.6.4) activemerchant celluloid coffee-rails @@ -145,7 +145,7 @@ GEM rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (~> 2.0) - capybara-webkit (1.3.0) + capybara-webkit (1.3.1) capybara (>= 2.0.2, < 2.5.0) json carmen (1.0.1) @@ -215,13 +215,13 @@ GEM mail (2.6.1) mime-types (>= 1.16, < 3) method_source (0.8.2) - mime-types (2.4.2) + mime-types (2.4.3) mini_portile (0.6.0) minitest (5.4.2) - monetize (0.4.1) - money (~> 6.2.1) - money (6.2.1) - i18n (>= 0.6.4, <= 0.7.0.dev) + monetize (1.0.0) + money (~> 6.4.0) + money (6.4.0) + i18n (>= 0.6.4, <= 0.7.0.beta1) multi_json (1.10.1) multi_xml (0.5.5) multipart-post (2.0.0) @@ -235,7 +235,7 @@ GEM json (~> 1.7) money (< 7.0.0) nokogiri (~> 1.4) - oj (2.10.3) + oj (2.10.4) paperclip (4.2.0) activemodel (>= 3.0.0) activesupport (>= 3.0.0) @@ -309,10 +309,10 @@ GEM rspec-support (3.1.2) rubyzip (1.1.6) sass (3.2.19) - sass-rails (4.0.3) + sass-rails (4.0.4) railties (>= 4.0.0, < 5.0) - sass (~> 3.2.0) - sprockets (~> 2.8, <= 2.11.0) + sass (~> 3.2.2) + sprockets (~> 2.8, < 2.12) sprockets-rails (~> 2.0) select2-rails (3.5.9.1) thor (~> 0.14) diff --git a/README.md b/README.md index d170f59..fa52b0d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Spree Conekta -[![Code Climate](https://codeclimate.com/github/crowdint/spree_conekta.png)](https://codeclimate.com/github/AgilTec/spree_conekta) -[![Build Status](https://travis-ci.org/crowdint/spree_conekta.png?branch=conekta-apiv2)](https://travis-ci.org/AgilTec/spree_conekta) +[![Code Climate](https://codeclimate.com/github/AgilTec/spree_conekta.png)](https://codeclimate.com/github/AgilTec/spree_conekta) +[![Build Status](https://travis-ci.org/AgilTec/spree_conekta.png?branch=2.4.0.rc3)](https://travis-ci.org/AgilTec/spree_conekta) [![Gem Version](https://badge.fury.io/rb/spree_conekta.png)](http://badge.fury.io/rb/spree_conekta) Setup @@ -45,16 +45,23 @@ rails g spree_conekta:install Conekta currently supports four different methods: ####Card ->Card method will let you pay using your credit or debit card. More info: [Conekta Card](https://www.conekta.io/docs/crear_cargo#tarjetas) +>Card method will let you pay using your credit or debit card. More info: [Conekta Card](https://www.conekta.io/es/docs/tutoriales/pagos-con-tarjeta) ####Cash ->Cash method will generate a bar code with the order information so you'll be able to take it to your nearest OXXO store to pay it. More info: [Conekta Cash](https://www.conekta.io/docs/crear_cargo#oxxo) +>Cash method will generate a bar code with the order information so you'll be able to take it to your nearest OXXO store to pay it. More info: [Conekta Cash](https://www.conekta.io/es/docs/tutoriales/pagos-en-efectivo) ####Bank ->Bank method will let you generate a deposit or transfer reference. More info: [Conekta Bank](https://www.conekta.io/docs/crear_cargo#bancos) +>Bank method will let you generate a deposit or transfer reference. More info: [Conekta Bank](https://www.conekta.io/es/docs/tutoriales/pago-con-transferencia) ####Monthly Payment ->This method will let you pay using your credit card with a monthly payment schema. More info: [Conekta Monthly Payments](https://www.conekta.io/es/docs/tutoriales/meses-sin-intereses) +>This method will let you pay using your credit card with a monthly payment schema. More info: [Conekta Monthly Payments](https://admin.conekta.io/es/docs/tutoriales/meses-sin-intereses) +You can configurate the options for number of installements and default creating an initializer in your app and writing code as this example: +```ruby + Spree::Conekta.configure do |config| + config.installment_options = [3] # [3, 6] , [3, 6, 12] + config.installment_default = 3 # 6 12 + end +``` **Important Note:** If you want to support all source methods, you'll need to create a payment method for each one. diff --git a/app/assets/stylesheets/spree/backend/print.css.sass b/app/assets/stylesheets/spree/backend/print.css.sass index a56c6cf..a734d6f 100644 --- a/app/assets/stylesheets/spree/backend/print.css.sass +++ b/app/assets/stylesheets/spree/backend/print.css.sass @@ -2,7 +2,7 @@ .conekta-oxxo width: 100px - .order-title, .order-footer + .order-title, .order-footer, #top-nav-bar, #search-bar, #footer display: none .print diff --git a/app/assets/stylesheets/spree/frontend/conekta.css.sass b/app/assets/stylesheets/spree/frontend/conekta.css.sass index 71ea9d6..6584fcb 100644 --- a/app/assets/stylesheets/spree/frontend/conekta.css.sass +++ b/app/assets/stylesheets/spree/frontend/conekta.css.sass @@ -1,40 +1,45 @@ -.align-right - text-align: right +html + body + .align-right + text-align: right -.align-center - text-align: center + .align-center + text-align: center -.conekta-brand - float: left + .conekta-brand + float: left -.conekta-oxxo - width: 100px - display: inline + .conekta-oxxo + width: 100px + display: inline -.order-footer - border-top: 1px solid #cee1f4 - margin-top: 20px - padding-top: 10px + .order-footer + border-top: 1px solid #cee1f4 + margin-top: 20px + padding-top: 10px -.order-title - margin-bottom: 20px - border-bottom: 1px solid #cee1f4 + .order-title + margin-bottom: 20px + border-bottom: 1px solid #cee1f4 -.payment-title - padding: 10px 0 - clear: both + .payment-title + padding: 10px 0 + clear: both -table.payment-information - width: 100% - thead - background-color: #cee1f4 + table.payment-information + width: 100% + thead + background-color: #cee1f4 -#barcode - padding: 20px + #barcode + padding: 20px -#order_payment - padding: 20px + #order_payment + padding: 20px -#oxxo-title - display: inline + #oxxo-title + display: inline + #wrapper + width: 95% + padding-bottom: 1em \ No newline at end of file diff --git a/app/assets/stylesheets/spree/frontend/spree_conekta.css b/app/assets/stylesheets/spree/frontend/spree_conekta.css index c894fce..66e6811 100644 --- a/app/assets/stylesheets/spree/frontend/spree_conekta.css +++ b/app/assets/stylesheets/spree/frontend/spree_conekta.css @@ -1,3 +1,4 @@ /* + *= require spree/frontend/conekta *= require_tree . */ diff --git a/app/views/spree/checkout/payment/_conekta_card.html.erb b/app/views/spree/checkout/payment/_conekta_card.html.erb index 159d62a..0548146 100644 --- a/app/views/spree/checkout/payment/_conekta_card.html.erb +++ b/app/views/spree/checkout/payment/_conekta_card.html.erb @@ -58,7 +58,7 @@ <% if payment_method.with_installments? %>

<%= label_tag "installments_number_#{payment_method.id}", Spree.t('conekta.installments_number') %> - <%= select_tag "#{param_prefix}[installments_number]", options_for_select([3, 6], 3), data: { conekta: 'monthly_installments' } %> + <%= select_tag "#{param_prefix}[installments_number]", options_for_select(Spree::Conekta.configuration.installment_options, Spree::Conekta.configuration.installment_default), data: { conekta: 'monthly_installments' } %>

<% end %> diff --git a/app/views/spree/conekta/payments/show.html.erb b/app/views/spree/conekta/payments/show.html.erb index ada4f8c..d1701e1 100644 --- a/app/views/spree/conekta/payments/show.html.erb +++ b/app/views/spree/conekta/payments/show.html.erb @@ -9,6 +9,15 @@ <%= render partial: @order.last_payment_source %>
- <%= button_tag t('conekta.print_payment_form'), class: 'right', onclick: 'printDoc("#order-payment")' %> + <%= button_tag Spree.t('conekta.print_payment_form'), id: 'print-payment', class: 'icon-print' %>
+ + diff --git a/lib/spree/conekta/configuration.rb b/lib/spree/conekta/configuration.rb new file mode 100644 index 0000000..84a66b6 --- /dev/null +++ b/lib/spree/conekta/configuration.rb @@ -0,0 +1,25 @@ +module Spree + module Conekta + + class << self + attr_accessor :configuration + end + + def self.configure + self.configuration ||= Configuration.new + yield(configuration) + end + + class Configuration + attr_accessor :installment_options, :installment_default + + def installment_options + @installment_options ||= :installment_options + end + + def installment_default + @installment_default ||= :installment_default + end + end + end +end \ No newline at end of file diff --git a/lib/spree_conekta.rb b/lib/spree_conekta.rb index e0e3ee8..cd91e12 100644 --- a/lib/spree_conekta.rb +++ b/lib/spree_conekta.rb @@ -6,3 +6,4 @@ require 'faraday' require 'faraday_middleware' require 'spree_conekta/engine' +require 'spree/conekta/configuration' diff --git a/lib/spree_conekta/engine.rb b/lib/spree_conekta/engine.rb index 355960f..3bcac45 100644 --- a/lib/spree_conekta/engine.rb +++ b/lib/spree_conekta/engine.rb @@ -25,8 +25,8 @@ def self.activate initializer "spree.gateway.payment_methods", after: "spree.register.payment_methods" do |app| app.config.spree.payment_methods << Spree::BillingIntegration::Conekta - app.config.spree.payment_methods << Spree::BillingIntegration::Conekta::Card app.config.spree.payment_methods << Spree::BillingIntegration::Conekta::Cash + app.config.spree.payment_methods << Spree::BillingIntegration::Conekta::Card app.config.spree.payment_methods << Spree::BillingIntegration::Conekta::Bank app.config.spree.payment_methods << Spree::BillingIntegration::Conekta::MonthlyPayment end diff --git a/lib/spree_conekta/version.rb b/lib/spree_conekta/version.rb index 56362c7..20919ba 100644 --- a/lib/spree_conekta/version.rb +++ b/lib/spree_conekta/version.rb @@ -1,3 +1,3 @@ module SpreeConekta - VERSION = "0.6.0" + VERSION = "0.6.4" end From d6f57a74463d7aabafb41abd1d77ee15f7608209 Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Thu, 30 Oct 2014 06:56:58 -0600 Subject: [PATCH 19/28] Add OrderHelpers for FIX error in show the payments for missing order_just_completed? method --- app/controllers/spree/conekta/payments_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/spree/conekta/payments_controller.rb b/app/controllers/spree/conekta/payments_controller.rb index 789fbba..6507965 100644 --- a/app/controllers/spree/conekta/payments_controller.rb +++ b/app/controllers/spree/conekta/payments_controller.rb @@ -1,5 +1,6 @@ module Spree::Conekta class PaymentsController < Spree::StoreController + helper Spree::OrdersHelper ssl_required skip_before_filter :verify_authenticity_token, only: :create From 2378600f96afedddba0a5c93973918d0f6a7c3be Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Wed, 12 Nov 2014 13:08:46 -0600 Subject: [PATCH 20/28] i18n fixes --- app/views/spree/checkout/payment/_conekta_card.html.erb | 2 +- app/views/spree/conekta/payments/show.html.erb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/spree/checkout/payment/_conekta_card.html.erb b/app/views/spree/checkout/payment/_conekta_card.html.erb index 0548146..ede8177 100644 --- a/app/views/spree/checkout/payment/_conekta_card.html.erb +++ b/app/views/spree/checkout/payment/_conekta_card.html.erb @@ -57,7 +57,7 @@ <% if payment_method.with_installments? %>

- <%= label_tag "installments_number_#{payment_method.id}", Spree.t('conekta.installments_number') %> + <%= label_tag "installments_number_#{payment_method.id}", t('conekta.installments_number') %> <%= select_tag "#{param_prefix}[installments_number]", options_for_select(Spree::Conekta.configuration.installment_options, Spree::Conekta.configuration.installment_default), data: { conekta: 'monthly_installments' } %>

<% end %> diff --git a/app/views/spree/conekta/payments/show.html.erb b/app/views/spree/conekta/payments/show.html.erb index d1701e1..824ab3b 100644 --- a/app/views/spree/conekta/payments/show.html.erb +++ b/app/views/spree/conekta/payments/show.html.erb @@ -9,7 +9,7 @@ <%= render partial: @order.last_payment_source %>
- <%= button_tag Spree.t('conekta.print_payment_form'), id: 'print-payment', class: 'icon-print' %> + <%= button_tag t('conekta.print_payment_form'), id: 'print-payment', class: 'icon-print' %>
From 612408d254f6ca42821dcae3936c367b1c35a462 Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Mon, 24 Nov 2014 10:48:40 -0600 Subject: [PATCH 21/28] Bump to 2.4.1 --- Gemfile | 4 +- Gemfile.lock | 131 +++++++++++++++++++++--------------------- spree_conekta.gemspec | 2 +- 3 files changed, 68 insertions(+), 69 deletions(-) diff --git a/Gemfile b/Gemfile index 071f44b..d26a7c3 100644 --- a/Gemfile +++ b/Gemfile @@ -1,10 +1,10 @@ source "http://rubygems.org" # gem 'spree', github: 'spree/spree', branch: 'master' -gem 'spree', github: 'spree/spree', branch: 'master' +gem 'spree', github: 'spree/spree', branch: '2-4-stable' gem 'sass-rails', '~> 4.0.3' # Spree Internationalization https://github.com/spree/spree_i18n -gem 'spree_i18n', github: 'spree/spree_i18n', branch: 'master' +gem 'spree_i18n', github: 'spree/spree_i18n', branch: '2-4-stable' gem 'globalize', github: 'globalize/globalize', branch: 'master' group :test, :development do diff --git a/Gemfile.lock b/Gemfile.lock index 5e53849..ae16b78 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,6 +1,6 @@ GIT remote: git://github.com/globalize/globalize.git - revision: f7a504cbfff7a2d427a66eb38bda23136ea00616 + revision: 83a3a46eff4b3c130608641a78455a57be679a50 branch: master specs: globalize (4.0.2) @@ -9,32 +9,32 @@ GIT GIT remote: git://github.com/spree/spree.git - revision: 49d5b314df53b6a71f7c69473575ac90d6acd690 - branch: master + revision: 0b12161679f3516fb783bf15528a5dacb7ea91ea + branch: 2-4-stable specs: - spree (2.4.0.rc3) - spree_api (= 2.4.0.rc3) - spree_backend (= 2.4.0.rc3) - spree_cmd (= 2.4.0.rc3) - spree_core (= 2.4.0.rc3) - spree_frontend (= 2.4.0.rc3) - spree_sample (= 2.4.0.rc3) - spree_api (2.4.0.rc3) + spree (2.4.2.beta) + spree_api (= 2.4.2.beta) + spree_backend (= 2.4.2.beta) + spree_cmd (= 2.4.2.beta) + spree_core (= 2.4.2.beta) + spree_frontend (= 2.4.2.beta) + spree_sample (= 2.4.2.beta) + spree_api (2.4.2.beta) rabl (~> 0.9.4.pre1) - spree_core (= 2.4.0.rc3) + spree_core (= 2.4.2.beta) versioncake (~> 2.3.1) - spree_backend (2.4.0.rc3) + spree_backend (2.4.2.beta) jquery-rails (~> 3.1.2) jquery-ui-rails (~> 5.0.0) select2-rails (~> 3.5.0) - spree_api (= 2.4.0.rc3) - spree_core (= 2.4.0.rc3) - spree_cmd (2.4.0.rc3) + spree_api (= 2.4.2.beta) + spree_core (= 2.4.2.beta) + spree_cmd (2.4.2.beta) thor (~> 0.14) - spree_core (2.4.0.rc3) + spree_core (2.4.2.beta) activemerchant (~> 1.44.1) acts_as_list (= 0.3.0) - awesome_nested_set (~> 3.0.0.rc.3) + awesome_nested_set (~> 3.0.1) cancancan (~> 1.9.2) carmen (~> 1.0.0) deface (~> 1.0.0) @@ -49,25 +49,24 @@ GIT paperclip (~> 4.2.0) paranoia (~> 2.0) premailer-rails - rails (~> 4.1.6) + rails (~> 4.1.8) ransack (~> 1.4.1) state_machine (= 1.2.0) stringex (~> 1.5.1) truncate_html (= 0.9.2) twitter_cldr (~> 3.0) - spree_frontend (2.4.0.rc3) + spree_frontend (2.4.2.beta) canonical-rails (~> 0.0.4) jquery-rails (~> 3.1.2) - spree_api (= 2.4.0.rc3) - spree_core (= 2.4.0.rc3) - stringex (~> 1.5.1) - spree_sample (2.4.0.rc3) - spree_core (= 2.4.0.rc3) + spree_api (= 2.4.2.beta) + spree_core (= 2.4.2.beta) + spree_sample (2.4.2.beta) + spree_core (= 2.4.2.beta) GIT remote: git://github.com/spree/spree_i18n.git - revision: 08c9df25747ceb45b6f9230d05e8056f3c6f7896 - branch: master + revision: 2e77eb0d4bee0f5a53175aef02010184c69ed672 + branch: 2-4-stable specs: spree_i18n (3.0.0) globalize (~> 4.0.2) @@ -85,23 +84,23 @@ PATH faraday faraday_middleware oj - spree (~> 2.4.0.rc3) + spree (~> 2.4.1) typhoeus GEM remote: http://rubygems.org/ specs: - actionmailer (4.1.6) - actionpack (= 4.1.6) - actionview (= 4.1.6) + actionmailer (4.1.8) + actionpack (= 4.1.8) + actionview (= 4.1.8) mail (~> 2.5, >= 2.5.4) - actionpack (4.1.6) - actionview (= 4.1.6) - activesupport (= 4.1.6) + actionpack (4.1.8) + actionview (= 4.1.8) + activesupport (= 4.1.8) rack (~> 1.5.2) rack-test (~> 0.6.2) - actionview (4.1.6) - activesupport (= 4.1.6) + actionview (4.1.8) + activesupport (= 4.1.8) builder (~> 3.1) erubis (~> 2.7.0) active_utils (2.2.3) @@ -115,14 +114,14 @@ GEM json (~> 1.7) nokogiri (~> 1.4) offsite_payments (~> 2.0.0) - activemodel (4.1.6) - activesupport (= 4.1.6) + activemodel (4.1.8) + activesupport (= 4.1.8) builder (~> 3.1) - activerecord (4.1.6) - activemodel (= 4.1.6) - activesupport (= 4.1.6) + activerecord (4.1.8) + activemodel (= 4.1.8) + activesupport (= 4.1.8) arel (~> 5.0.0) - activesupport (4.1.6) + activesupport (4.1.8) i18n (~> 0.6, >= 0.6.9) json (~> 1.7, >= 1.7.7) minitest (~> 5.1) @@ -198,7 +197,7 @@ GEM hike (1.2.3) hitimes (1.2.2) htmlentities (4.3.2) - httparty (0.13.1) + httparty (0.13.3) json (~> 1.8) multi_xml (>= 0.5.2) i18n (0.6.11) @@ -212,12 +211,12 @@ GEM kaminari (0.16.1) actionpack (>= 3.0.0) activesupport (>= 3.0.0) - mail (2.6.1) + mail (2.6.3) mime-types (>= 1.16, < 3) method_source (0.8.2) mime-types (2.4.3) - mini_portile (0.6.0) - minitest (5.4.2) + mini_portile (0.6.1) + minitest (5.4.3) monetize (1.0.0) money (~> 6.4.0) money (6.4.0) @@ -225,8 +224,8 @@ GEM multi_json (1.10.1) multi_xml (0.5.5) multipart-post (2.0.0) - nokogiri (1.6.3.1) - mini_portile (= 0.6.0) + nokogiri (1.6.4.1) + mini_portile (~> 0.6.0) offsite_payments (2.0.1) active_utils (~> 2.2.0) activesupport (>= 3.2.14, < 5.0.0) @@ -235,13 +234,13 @@ GEM json (~> 1.7) money (< 7.0.0) nokogiri (~> 1.4) - oj (2.10.4) + oj (2.11.1) paperclip (4.2.0) activemodel (>= 3.0.0) activesupport (>= 3.0.0) cocaine (~> 0.5.3) mime-types - paranoia (2.0.2) + paranoia (2.0.3) activerecord (~> 4.0) poltergeist (1.5.1) capybara (~> 2.1) @@ -266,22 +265,22 @@ GEM rack (1.5.2) rack-test (0.6.2) rack (>= 1.0) - rails (4.1.6) - actionmailer (= 4.1.6) - actionpack (= 4.1.6) - actionview (= 4.1.6) - activemodel (= 4.1.6) - activerecord (= 4.1.6) - activesupport (= 4.1.6) + rails (4.1.8) + actionmailer (= 4.1.8) + actionpack (= 4.1.8) + actionview (= 4.1.8) + activemodel (= 4.1.8) + activerecord (= 4.1.8) + activesupport (= 4.1.8) bundler (>= 1.3.0, < 2.0) - railties (= 4.1.6) + railties (= 4.1.8) sprockets-rails (~> 2.0) rails-i18n (4.0.3) i18n (~> 0.6) railties (~> 4.0) - railties (4.1.6) - actionpack (= 4.1.6) - activesupport (= 4.1.6) + railties (4.1.8) + actionpack (= 4.1.8) + activesupport (= 4.1.8) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) rake (10.3.2) @@ -316,23 +315,23 @@ GEM sprockets-rails (~> 2.0) select2-rails (3.5.9.1) thor (~> 0.14) - selenium-webdriver (2.43.0) + selenium-webdriver (2.44.0) childprocess (~> 0.5) multi_json (~> 1.0) rubyzip (~> 1.0) websocket (~> 1.0) slop (3.6.0) spork (0.9.2) - sprockets (2.11.0) + sprockets (2.11.3) hike (~> 1.2) multi_json (~> 1.0) rack (~> 1.0) tilt (~> 1.1, != 1.3.0) - sprockets-rails (2.2.0) + sprockets-rails (2.2.1) actionpack (>= 3.0) activesupport (>= 3.0) sprockets (>= 2.8, < 4.0) - sqlite3 (1.3.9) + sqlite3 (1.3.10) state_machine (1.2.0) stringex (1.5.1) thor (0.19.1) @@ -358,7 +357,7 @@ GEM railties (>= 3.2) tzinfo websocket (1.2.1) - websocket-driver (0.3.5) + websocket-driver (0.4.0) xpath (2.0.0) nokogiri (~> 1.3) diff --git a/spree_conekta.gemspec b/spree_conekta.gemspec index 3e3d2bd..3f03914 100644 --- a/spree_conekta.gemspec +++ b/spree_conekta.gemspec @@ -21,7 +21,7 @@ Gem::Specification.new do |s| s.add_dependency 'typhoeus' s.add_dependency 'faraday_middleware' s.add_dependency 'activemerchant' - s.add_dependency 'spree', '~> 2.4.0.rc3' + s.add_dependency 'spree', '~> 2.4.1' s.add_dependency 'coffee-rails' s.add_dependency 'celluloid' end From 37fb0fca87c792b423be19ca044f0298335ffe91 Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Wed, 14 Jan 2015 13:33:06 -0600 Subject: [PATCH 22/28] Update to Spree 3.0.0.beta --- Gemfile | 4 +- Gemfile.lock | 187 ++++++++++++++++++++++-------------------- LICENSE | 2 +- MIT-LICENSE | 2 +- spree_conekta.gemspec | 2 +- 5 files changed, 104 insertions(+), 93 deletions(-) diff --git a/Gemfile b/Gemfile index d26a7c3..071f44b 100644 --- a/Gemfile +++ b/Gemfile @@ -1,10 +1,10 @@ source "http://rubygems.org" # gem 'spree', github: 'spree/spree', branch: 'master' -gem 'spree', github: 'spree/spree', branch: '2-4-stable' +gem 'spree', github: 'spree/spree', branch: 'master' gem 'sass-rails', '~> 4.0.3' # Spree Internationalization https://github.com/spree/spree_i18n -gem 'spree_i18n', github: 'spree/spree_i18n', branch: '2-4-stable' +gem 'spree_i18n', github: 'spree/spree_i18n', branch: 'master' gem 'globalize', github: 'globalize/globalize', branch: 'master' group :test, :development do diff --git a/Gemfile.lock b/Gemfile.lock index ae16b78..7d95a06 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,39 +1,41 @@ GIT remote: git://github.com/globalize/globalize.git - revision: 83a3a46eff4b3c130608641a78455a57be679a50 + revision: c0f909d5c7a6146903e4109da7ceb4b9d8eef685 branch: master specs: - globalize (4.0.2) + globalize (4.0.3) activemodel (>= 4.0.0, < 5) activerecord (>= 4.0.0, < 5) GIT remote: git://github.com/spree/spree.git - revision: 0b12161679f3516fb783bf15528a5dacb7ea91ea - branch: 2-4-stable + revision: cacf4d653114950461ddb4f9a6d7813eae807a7e + branch: master specs: - spree (2.4.2.beta) - spree_api (= 2.4.2.beta) - spree_backend (= 2.4.2.beta) - spree_cmd (= 2.4.2.beta) - spree_core (= 2.4.2.beta) - spree_frontend (= 2.4.2.beta) - spree_sample (= 2.4.2.beta) - spree_api (2.4.2.beta) + spree (3.0.0.beta) + spree_api (= 3.0.0.beta) + spree_backend (= 3.0.0.beta) + spree_cmd (= 3.0.0.beta) + spree_core (= 3.0.0.beta) + spree_frontend (= 3.0.0.beta) + spree_sample (= 3.0.0.beta) + spree_api (3.0.0.beta) rabl (~> 0.9.4.pre1) - spree_core (= 2.4.2.beta) + spree_core (= 3.0.0.beta) versioncake (~> 2.3.1) - spree_backend (2.4.2.beta) + spree_backend (3.0.0.beta) + bootstrap-sass (~> 3.3.1) jquery-rails (~> 3.1.2) jquery-ui-rails (~> 5.0.0) select2-rails (~> 3.5.0) - spree_api (= 2.4.2.beta) - spree_core (= 2.4.2.beta) - spree_cmd (2.4.2.beta) + spree_api (= 3.0.0.beta) + spree_core (= 3.0.0.beta) + sprockets-rails (~> 2.2.1) + spree_cmd (3.0.0.beta) thor (~> 0.14) - spree_core (2.4.2.beta) + spree_core (3.0.0.beta) activemerchant (~> 1.44.1) - acts_as_list (= 0.3.0) + acts_as_list (~> 0.5.0) awesome_nested_set (~> 3.0.1) cancancan (~> 1.9.2) carmen (~> 1.0.0) @@ -45,34 +47,37 @@ GIT httparty (~> 0.11) json (~> 1.7) kaminari (~> 0.15, >= 0.15.1) - monetize + monetize (~> 1.1) paperclip (~> 4.2.0) paranoia (~> 2.0) premailer-rails rails (~> 4.1.8) ransack (~> 1.4.1) state_machine (= 1.2.0) - stringex (~> 1.5.1) + stringex truncate_html (= 0.9.2) twitter_cldr (~> 3.0) - spree_frontend (2.4.2.beta) + spree_frontend (3.0.0.beta) + bootstrap-sass (~> 3.3.1) canonical-rails (~> 0.0.4) jquery-rails (~> 3.1.2) - spree_api (= 2.4.2.beta) - spree_core (= 2.4.2.beta) - spree_sample (2.4.2.beta) - spree_core (= 2.4.2.beta) + spree_api (= 3.0.0.beta) + spree_core (= 3.0.0.beta) + sprockets-rails (~> 2.2.1) + spree_sample (3.0.0.beta) + spree_core (= 3.0.0.beta) GIT remote: git://github.com/spree/spree_i18n.git - revision: 2e77eb0d4bee0f5a53175aef02010184c69ed672 - branch: 2-4-stable + revision: 7d2ae09598790056920f5271854ad2f97c10e701 + branch: master specs: spree_i18n (3.0.0) - globalize (~> 4.0.2) + friendly_id-globalize + globalize (~> 4.0.3) i18n_data (~> 0.5.1) rails-i18n (~> 4.0.1) - spree_core (~> 2.4.0.beta) + spree_core (~> 3.0.0.beta) PATH remote: . @@ -84,23 +89,23 @@ PATH faraday faraday_middleware oj - spree (~> 2.4.1) + spree (~> 3.0.0.beta) typhoeus GEM remote: http://rubygems.org/ specs: - actionmailer (4.1.8) - actionpack (= 4.1.8) - actionview (= 4.1.8) + actionmailer (4.1.9) + actionpack (= 4.1.9) + actionview (= 4.1.9) mail (~> 2.5, >= 2.5.4) - actionpack (4.1.8) - actionview (= 4.1.8) - activesupport (= 4.1.8) + actionpack (4.1.9) + actionview (= 4.1.9) + activesupport (= 4.1.9) rack (~> 1.5.2) rack-test (~> 0.6.2) - actionview (4.1.8) - activesupport (= 4.1.8) + actionview (4.1.9) + activesupport (= 4.1.9) builder (~> 3.1) erubis (~> 2.7.0) active_utils (2.2.3) @@ -114,25 +119,27 @@ GEM json (~> 1.7) nokogiri (~> 1.4) offsite_payments (~> 2.0.0) - activemodel (4.1.8) - activesupport (= 4.1.8) + activemodel (4.1.9) + activesupport (= 4.1.9) builder (~> 3.1) - activerecord (4.1.8) - activemodel (= 4.1.8) - activesupport (= 4.1.8) + activerecord (4.1.9) + activemodel (= 4.1.9) + activesupport (= 4.1.9) arel (~> 5.0.0) - activesupport (4.1.8) + activesupport (4.1.9) i18n (~> 0.6, >= 0.6.9) json (~> 1.7, >= 1.7.7) minitest (~> 5.1) thread_safe (~> 0.1) tzinfo (~> 1.1) - acts_as_list (0.3.0) + acts_as_list (0.5.0) activerecord (>= 3.0) addressable (2.3.6) arel (5.0.1.20140414130214) - awesome_nested_set (3.0.1) + awesome_nested_set (3.0.2) activerecord (>= 4.0.0, < 5) + bootstrap-sass (3.3.1.0) + sass (~> 3.2) builder (3.2.2) camertron-eprun (1.1.0) cancancan (1.9.2) @@ -157,7 +164,7 @@ GEM climate_control (0.0.3) activesupport (>= 3.0) cliver (0.3.2) - cocaine (0.5.4) + cocaine (0.5.5) climate_control (>= 0.0.3, < 1.0) coderay (1.1.0) coffee-rails (4.1.0) @@ -167,10 +174,10 @@ GEM coffee-script-source execjs coffee-script-source (1.8.0) - colorize (0.7.3) + colorize (0.7.5) css_parser (1.3.5) addressable - database_cleaner (1.3.0) + database_cleaner (1.4.0) deface (1.0.1) colorize (>= 0.5.8) nokogiri (~> 1.6.0) @@ -178,36 +185,38 @@ GEM rails (>= 3.1) diff-lcs (1.2.5) erubis (2.7.0) - ethon (0.7.1) + ethon (0.7.2) ffi (>= 1.3.0) execjs (2.2.2) factory_girl (4.5.0) activesupport (>= 3.0.0) - faraday (0.9.0) + faraday (0.9.1) multipart-post (>= 1.2, < 3) faraday_middleware (0.9.1) faraday (>= 0.7.4, < 0.10) - ffaker (1.25.0) + ffaker (1.31.0) ffi (1.9.6) font-awesome-rails (4.2.0.0) railties (>= 3.2, < 5.0) friendly_id (5.0.4) activerecord (>= 4.0.0) + friendly_id-globalize (1.0.0.alpha1) + friendly_id (>= 5.0.0.beta4, < 6.0) highline (1.6.21) hike (1.2.3) hitimes (1.2.2) - htmlentities (4.3.2) + htmlentities (4.3.3) httparty (0.13.3) json (~> 1.8) multi_xml (>= 0.5.2) - i18n (0.6.11) + i18n (0.7.0) i18n_data (0.5.1) jquery-rails (3.1.2) railties (>= 3.0, < 5.0) thor (>= 0.14, < 2.0) - jquery-ui-rails (5.0.2) + jquery-ui-rails (5.0.3) railties (>= 3.2.16) - json (1.8.1) + json (1.8.2) kaminari (0.16.1) actionpack (>= 3.0.0) activesupport (>= 3.0.0) @@ -215,16 +224,16 @@ GEM mime-types (>= 1.16, < 3) method_source (0.8.2) mime-types (2.4.3) - mini_portile (0.6.1) - minitest (5.4.3) - monetize (1.0.0) - money (~> 6.4.0) - money (6.4.0) - i18n (>= 0.6.4, <= 0.7.0.beta1) + mini_portile (0.6.2) + minitest (5.5.1) + monetize (1.1.0) + money (~> 6.5.0) + money (6.5.0) + i18n (>= 0.6.4, <= 0.7.0) multi_json (1.10.1) multi_xml (0.5.5) multipart-post (2.0.0) - nokogiri (1.6.4.1) + nokogiri (1.6.5) mini_portile (~> 0.6.0) offsite_payments (2.0.1) active_utils (~> 2.2.0) @@ -234,13 +243,13 @@ GEM json (~> 1.7) money (< 7.0.0) nokogiri (~> 1.4) - oj (2.11.1) - paperclip (4.2.0) + oj (2.11.2) + paperclip (4.2.1) activemodel (>= 3.0.0) activesupport (>= 3.0.0) cocaine (~> 0.5.3) mime-types - paranoia (2.0.3) + paranoia (2.0.4) activerecord (~> 4.0) poltergeist (1.5.1) capybara (~> 2.1) @@ -263,27 +272,27 @@ GEM rabl (0.9.4.pre1) activesupport (>= 2.3.14) rack (1.5.2) - rack-test (0.6.2) + rack-test (0.6.3) rack (>= 1.0) - rails (4.1.8) - actionmailer (= 4.1.8) - actionpack (= 4.1.8) - actionview (= 4.1.8) - activemodel (= 4.1.8) - activerecord (= 4.1.8) - activesupport (= 4.1.8) + rails (4.1.9) + actionmailer (= 4.1.9) + actionpack (= 4.1.9) + actionview (= 4.1.9) + activemodel (= 4.1.9) + activerecord (= 4.1.9) + activesupport (= 4.1.9) bundler (>= 1.3.0, < 2.0) - railties (= 4.1.8) + railties (= 4.1.9) sprockets-rails (~> 2.0) rails-i18n (4.0.3) i18n (~> 0.6) railties (~> 4.0) - railties (4.1.8) - actionpack (= 4.1.8) - activesupport (= 4.1.8) + railties (4.1.9) + actionpack (= 4.1.9) + activesupport (= 4.1.9) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) - rake (10.3.2) + rake (10.4.2) ransack (1.4.1) actionpack (>= 3.0) activerecord (>= 3.0) @@ -308,10 +317,10 @@ GEM rspec-support (3.1.2) rubyzip (1.1.6) sass (3.2.19) - sass-rails (4.0.4) + sass-rails (4.0.5) railties (>= 4.0.0, < 5.0) sass (~> 3.2.2) - sprockets (~> 2.8, < 2.12) + sprockets (~> 2.8, < 3.0) sprockets-rails (~> 2.0) select2-rails (3.5.9.1) thor (~> 0.14) @@ -322,30 +331,30 @@ GEM websocket (~> 1.0) slop (3.6.0) spork (0.9.2) - sprockets (2.11.3) + sprockets (2.12.3) hike (~> 1.2) multi_json (~> 1.0) rack (~> 1.0) tilt (~> 1.1, != 1.3.0) - sprockets-rails (2.2.1) + sprockets-rails (2.2.2) actionpack (>= 3.0) activesupport (>= 3.0) sprockets (>= 2.8, < 4.0) sqlite3 (1.3.10) state_machine (1.2.0) - stringex (1.5.1) + stringex (2.5.2) thor (0.19.1) thread_safe (0.3.4) tilt (1.4.1) timers (4.0.1) hitimes truncate_html (0.9.2) - twitter_cldr (3.1.0) + twitter_cldr (3.1.1) camertron-eprun cldr-plurals-runtime-rb (~> 1.0.0) json tzinfo - typhoeus (0.6.9) + typhoeus (0.7.0) ethon (>= 0.7.1) tzinfo (1.2.2) thread_safe (~> 0.1) @@ -357,7 +366,9 @@ GEM railties (>= 3.2) tzinfo websocket (1.2.1) - websocket-driver (0.4.0) + websocket-driver (0.5.1) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.1) xpath (2.0.0) nokogiri (~> 1.3) diff --git a/LICENSE b/LICENSE index e46f806..27b85d7 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2014 [name of plugin creator] +Copyright (c) 2015 [name of plugin creator] All rights reserved. Redistribution and use in source and binary forms, with or without modification, diff --git a/MIT-LICENSE b/MIT-LICENSE index 477d6e3..5d1300d 100644 --- a/MIT-LICENSE +++ b/MIT-LICENSE @@ -1,4 +1,4 @@ -Copyright 2013-2014 Crowd Interactive +Copyright 2013-2015 Crowd Interactive Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/spree_conekta.gemspec b/spree_conekta.gemspec index 3f03914..db73347 100644 --- a/spree_conekta.gemspec +++ b/spree_conekta.gemspec @@ -21,7 +21,7 @@ Gem::Specification.new do |s| s.add_dependency 'typhoeus' s.add_dependency 'faraday_middleware' s.add_dependency 'activemerchant' - s.add_dependency 'spree', '~> 2.4.1' + s.add_dependency 'spree', '~> 3.0.0.beta' s.add_dependency 'coffee-rails' s.add_dependency 'celluloid' end From f707b4c960e6313731e723990c517f74003f1086 Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Wed, 14 Jan 2015 14:04:53 -0600 Subject: [PATCH 23/28] Update Trevis YML config file --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6df0c22..9cf89fc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,4 +3,7 @@ before_install: - "sh -e /etc/init.d/xvfb start" before_script: "LIB_NAME=spree_conekta bundle exec rake common:test_app -s" -script: "bundle exec rspec spec" +script: + - RAILS_ENV=test bundle exec rake db:migrate --trace + - bundle exec rake db:test:prepare + - bundle exec rspec spec From 2054aa1b3ab899a66c56de0c4ed3ea06bb593d63 Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Thu, 22 Jan 2015 01:31:43 -0600 Subject: [PATCH 24/28] Update for new Bootstrap Frontend in Spree 3.0.0.beta --- app/controllers/spree/conekta/payments_controller.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/controllers/spree/conekta/payments_controller.rb b/app/controllers/spree/conekta/payments_controller.rb index 6507965..80c06b7 100644 --- a/app/controllers/spree/conekta/payments_controller.rb +++ b/app/controllers/spree/conekta/payments_controller.rb @@ -1,7 +1,6 @@ module Spree::Conekta class PaymentsController < Spree::StoreController helper Spree::OrdersHelper - ssl_required skip_before_filter :verify_authenticity_token, only: :create def show From 83dc148b958c91bc73f7af6249c3b7ade6efd86f Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Tue, 10 Feb 2015 09:31:37 -0600 Subject: [PATCH 25/28] Bump version to Spree 3.0.0.rc2 --- spree_conekta.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spree_conekta.gemspec b/spree_conekta.gemspec index db73347..f191c08 100644 --- a/spree_conekta.gemspec +++ b/spree_conekta.gemspec @@ -21,7 +21,7 @@ Gem::Specification.new do |s| s.add_dependency 'typhoeus' s.add_dependency 'faraday_middleware' s.add_dependency 'activemerchant' - s.add_dependency 'spree', '~> 3.0.0.beta' + s.add_dependency 'spree', '~> 3.0.0.rc2' s.add_dependency 'coffee-rails' s.add_dependency 'celluloid' end From 0f0e392b3a0b9c6b9715b34344dfb89171d133e2 Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Tue, 10 Feb 2015 09:48:46 -0600 Subject: [PATCH 26/28] Bump version to Spree 3.0.0 --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 071f44b..9b49f40 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source "http://rubygems.org" # gem 'spree', github: 'spree/spree', branch: 'master' -gem 'spree', github: 'spree/spree', branch: 'master' +gem 'spree', github: 'spree/spree', branch: '3-0-stable' gem 'sass-rails', '~> 4.0.3' # Spree Internationalization https://github.com/spree/spree_i18n From b6e617af811302cfa2c244cbd96f35bfd495b176 Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Thu, 5 Mar 2015 23:27:10 -0600 Subject: [PATCH 27/28] Bump to Spree 3.1.0.beta --- Gemfile | 2 +- spree_conekta.gemspec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index 9b49f40..071f44b 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source "http://rubygems.org" # gem 'spree', github: 'spree/spree', branch: 'master' -gem 'spree', github: 'spree/spree', branch: '3-0-stable' +gem 'spree', github: 'spree/spree', branch: 'master' gem 'sass-rails', '~> 4.0.3' # Spree Internationalization https://github.com/spree/spree_i18n diff --git a/spree_conekta.gemspec b/spree_conekta.gemspec index f191c08..9bc7721 100644 --- a/spree_conekta.gemspec +++ b/spree_conekta.gemspec @@ -21,7 +21,7 @@ Gem::Specification.new do |s| s.add_dependency 'typhoeus' s.add_dependency 'faraday_middleware' s.add_dependency 'activemerchant' - s.add_dependency 'spree', '~> 3.0.0.rc2' + s.add_dependency 'spree', '~> 3.1.0.beta' s.add_dependency 'coffee-rails' s.add_dependency 'celluloid' end From 35d8983a1acce792433806ac4b6289675e18f069 Mon Sep 17 00:00:00 2001 From: Manuel Vidaurre Date: Mon, 1 Jun 2015 04:19:02 -0500 Subject: [PATCH 28/28] FIX #1 Refactoring of using expiration month and year --- Gemfile | 2 +- Gemfile.lock | 325 ++++----- .../javascripts/spree/frontend/easyXDM.min.js | 5 +- .../spree/frontend/spree_conekta.js.coffee | 5 +- .../checkout/payment/_conekta_card.html.erb | 7 +- config/routes.rb | 2 +- lib/spree/conekta/credit_card.rb | 5 +- lib/spree/conekta/credit_card_collection.rb | 6 +- spree_conekta.gemspec | 4 +- vendor/assets/javascripts/conekta.js | 614 ++++++++++++------ 10 files changed, 592 insertions(+), 383 deletions(-) diff --git a/Gemfile b/Gemfile index 071f44b..f6212ed 100644 --- a/Gemfile +++ b/Gemfile @@ -4,8 +4,8 @@ gem 'spree', github: 'spree/spree', branch: 'master' gem 'sass-rails', '~> 4.0.3' # Spree Internationalization https://github.com/spree/spree_i18n -gem 'spree_i18n', github: 'spree/spree_i18n', branch: 'master' gem 'globalize', github: 'globalize/globalize', branch: 'master' +gem 'spree_i18n', github: 'AgilTec/spree_i18n', branch: 'master' group :test, :development do gem 'rspec-rails', '~> 3.1.0' diff --git a/Gemfile.lock b/Gemfile.lock index 7d95a06..bea58d7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,83 +1,85 @@ +GIT + remote: git://github.com/AgilTec/spree_i18n.git + revision: 78f4db83abb7b15a938199aa0098a70cdf53838b + branch: master + specs: + spree_i18n (3.0.0) + friendly_id-globalize + globalize (~> 5.1.0) + i18n_data (~> 0.6.0) + rails-i18n (~> 4.0.3) + spree_core (~> 3.1.0.beta) + GIT remote: git://github.com/globalize/globalize.git - revision: c0f909d5c7a6146903e4109da7ceb4b9d8eef685 + revision: 38270f18ae60c4901cfd388be3449773d2321947 branch: master specs: - globalize (4.0.3) - activemodel (>= 4.0.0, < 5) - activerecord (>= 4.0.0, < 5) + globalize (5.1.0) + activemodel (>= 4.2.0, < 4.3) + activerecord (>= 4.2.0, < 4.3) + request_store (~> 1.0) GIT remote: git://github.com/spree/spree.git - revision: cacf4d653114950461ddb4f9a6d7813eae807a7e + revision: ba6966f980551ef3119477720ab6c5a4f001d179 branch: master specs: - spree (3.0.0.beta) - spree_api (= 3.0.0.beta) - spree_backend (= 3.0.0.beta) - spree_cmd (= 3.0.0.beta) - spree_core (= 3.0.0.beta) - spree_frontend (= 3.0.0.beta) - spree_sample (= 3.0.0.beta) - spree_api (3.0.0.beta) + spree (3.1.0.beta) + spree_api (= 3.1.0.beta) + spree_backend (= 3.1.0.beta) + spree_cmd (= 3.1.0.beta) + spree_core (= 3.1.0.beta) + spree_frontend (= 3.1.0.beta) + spree_sample (= 3.1.0.beta) + spree_api (3.1.0.beta) rabl (~> 0.9.4.pre1) - spree_core (= 3.0.0.beta) + spree_core (= 3.1.0.beta) versioncake (~> 2.3.1) - spree_backend (3.0.0.beta) + spree_backend (3.1.0.beta) bootstrap-sass (~> 3.3.1) - jquery-rails (~> 3.1.2) + jquery-rails (~> 4.0.3) jquery-ui-rails (~> 5.0.0) - select2-rails (~> 3.5.0) - spree_api (= 3.0.0.beta) - spree_core (= 3.0.0.beta) - sprockets-rails (~> 2.2.1) - spree_cmd (3.0.0.beta) + select2-rails (= 3.5.9.1) + spree_api (= 3.1.0.beta) + spree_core (= 3.1.0.beta) + sprockets-rails (~> 2.2) + spree_cmd (3.1.0.beta) thor (~> 0.14) - spree_core (3.0.0.beta) - activemerchant (~> 1.44.1) - acts_as_list (~> 0.5.0) + spree_core (3.1.0.beta) + activemerchant (~> 1.47.0) + acts_as_list (~> 0.6) awesome_nested_set (~> 3.0.1) - cancancan (~> 1.9.2) + cancancan (~> 1.10.1) carmen (~> 1.0.0) deface (~> 1.0.0) - ffaker (~> 1.16) + ffaker (~> 2.0.0) font-awesome-rails (~> 4.0) - friendly_id (~> 5.0.4) + friendly_id (~> 5.1.0) highline (~> 1.6.18) httparty (~> 0.11) json (~> 1.7) kaminari (~> 0.15, >= 0.15.1) monetize (~> 1.1) paperclip (~> 4.2.0) - paranoia (~> 2.0) + paranoia (~> 2.1.0) premailer-rails - rails (~> 4.1.8) + rails (~> 4.2.0) ransack (~> 1.4.1) - state_machine (= 1.2.0) + responders + state_machines-activerecord (~> 0.2) stringex truncate_html (= 0.9.2) twitter_cldr (~> 3.0) - spree_frontend (3.0.0.beta) + spree_frontend (3.1.0.beta) bootstrap-sass (~> 3.3.1) canonical-rails (~> 0.0.4) - jquery-rails (~> 3.1.2) - spree_api (= 3.0.0.beta) - spree_core (= 3.0.0.beta) - sprockets-rails (~> 2.2.1) - spree_sample (3.0.0.beta) - spree_core (= 3.0.0.beta) - -GIT - remote: git://github.com/spree/spree_i18n.git - revision: 7d2ae09598790056920f5271854ad2f97c10e701 - branch: master - specs: - spree_i18n (3.0.0) - friendly_id-globalize - globalize (~> 4.0.3) - i18n_data (~> 0.5.1) - rails-i18n (~> 4.0.1) - spree_core (~> 3.0.0.beta) + jquery-rails (~> 4.0.3) + spree_api (= 3.1.0.beta) + spree_core (= 3.1.0.beta) + sprockets-rails (~> 2.2) + spree_sample (3.1.0.beta) + spree_core (= 3.1.0.beta) PATH remote: . @@ -89,61 +91,68 @@ PATH faraday faraday_middleware oj - spree (~> 3.0.0.beta) + spree (~> 3.1.0.beta) typhoeus GEM remote: http://rubygems.org/ specs: - actionmailer (4.1.9) - actionpack (= 4.1.9) - actionview (= 4.1.9) + actionmailer (4.2.1) + actionpack (= 4.2.1) + actionview (= 4.2.1) + activejob (= 4.2.1) mail (~> 2.5, >= 2.5.4) - actionpack (4.1.9) - actionview (= 4.1.9) - activesupport (= 4.1.9) - rack (~> 1.5.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.1) + actionview (= 4.2.1) + activesupport (= 4.2.1) + rack (~> 1.6) rack-test (~> 0.6.2) - actionview (4.1.9) - activesupport (= 4.1.9) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.1) + actionview (4.2.1) + activesupport (= 4.2.1) builder (~> 3.1) erubis (~> 2.7.0) - active_utils (2.2.3) - activesupport (>= 2.3.11) - i18n - activemerchant (1.44.1) - active_utils (~> 2.2.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.1) + activejob (4.2.1) + activesupport (= 4.2.1) + globalid (>= 0.3.0) + activemerchant (1.47.0) activesupport (>= 3.2.14, < 5.0.0) builder (>= 2.1.2, < 4.0.0) i18n (>= 0.6.9) - json (~> 1.7) nokogiri (~> 1.4) - offsite_payments (~> 2.0.0) - activemodel (4.1.9) - activesupport (= 4.1.9) + activemodel (4.2.1) + activesupport (= 4.2.1) builder (~> 3.1) - activerecord (4.1.9) - activemodel (= 4.1.9) - activesupport (= 4.1.9) - arel (~> 5.0.0) - activesupport (4.1.9) - i18n (~> 0.6, >= 0.6.9) + activerecord (4.2.1) + activemodel (= 4.2.1) + activesupport (= 4.2.1) + arel (~> 6.0) + activesupport (4.2.1) + i18n (~> 0.7) json (~> 1.7, >= 1.7.7) minitest (~> 5.1) - thread_safe (~> 0.1) + thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) - acts_as_list (0.5.0) + acts_as_list (0.7.2) activerecord (>= 3.0) - addressable (2.3.6) - arel (5.0.1.20140414130214) + addressable (2.3.8) + arel (6.0.0) + autoprefixer-rails (5.2.0) + execjs + json awesome_nested_set (3.0.2) activerecord (>= 4.0.0, < 5) - bootstrap-sass (3.3.1.0) - sass (~> 3.2) + bootstrap-sass (3.3.4.1) + autoprefixer-rails (>= 5.0.0.1) + sass (>= 3.2.19) builder (3.2.2) camertron-eprun (1.1.0) - cancancan (1.9.2) - canonical-rails (0.0.7) + cancancan (1.10.1) + canonical-rails (0.0.9) rails (>= 3.1, < 5.0) capybara (2.4.4) mime-types (>= 1.16) @@ -151,33 +160,33 @@ GEM rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (~> 2.0) - capybara-webkit (1.3.1) - capybara (>= 2.0.2, < 2.5.0) + capybara-webkit (1.5.1) + capybara (>= 2.3.0, < 2.5.0) json - carmen (1.0.1) - unicode_utils (~> 1.4.0) + carmen (1.0.2) + activesupport (>= 3.0.0) celluloid (0.16.0) timers (~> 4.0.0) - childprocess (0.5.5) + childprocess (0.5.6) ffi (~> 1.0, >= 1.0.11) cldr-plurals-runtime-rb (1.0.0) climate_control (0.0.3) activesupport (>= 3.0) cliver (0.3.2) - cocaine (0.5.5) + cocaine (0.5.7) climate_control (>= 0.0.3, < 1.0) coderay (1.1.0) coffee-rails (4.1.0) coffee-script (>= 2.2.0) railties (>= 4.0.0, < 5.0) - coffee-script (2.3.0) + coffee-script (2.4.1) coffee-script-source execjs - coffee-script-source (1.8.0) - colorize (0.7.5) - css_parser (1.3.5) + coffee-script-source (1.9.1.1) + colorize (0.7.7) + css_parser (1.3.6) addressable - database_cleaner (1.4.0) + database_cleaner (1.4.1) deface (1.0.1) colorize (>= 0.5.8) nokogiri (~> 1.6.0) @@ -185,84 +194,81 @@ GEM rails (>= 3.1) diff-lcs (1.2.5) erubis (2.7.0) - ethon (0.7.2) + ethon (0.7.3) ffi (>= 1.3.0) - execjs (2.2.2) + execjs (2.5.2) factory_girl (4.5.0) activesupport (>= 3.0.0) faraday (0.9.1) multipart-post (>= 1.2, < 3) faraday_middleware (0.9.1) faraday (>= 0.7.4, < 0.10) - ffaker (1.31.0) - ffi (1.9.6) - font-awesome-rails (4.2.0.0) + ffaker (2.0.0) + ffi (1.9.8) + font-awesome-rails (4.3.0.0) railties (>= 3.2, < 5.0) - friendly_id (5.0.4) + friendly_id (5.1.0) activerecord (>= 4.0.0) friendly_id-globalize (1.0.0.alpha1) friendly_id (>= 5.0.0.beta4, < 6.0) + globalid (0.3.5) + activesupport (>= 4.1.0) highline (1.6.21) hike (1.2.3) hitimes (1.2.2) htmlentities (4.3.3) - httparty (0.13.3) + httparty (0.13.5) json (~> 1.8) multi_xml (>= 0.5.2) i18n (0.7.0) - i18n_data (0.5.1) - jquery-rails (3.1.2) - railties (>= 3.0, < 5.0) + i18n_data (0.6.3) + jquery-rails (4.0.3) + rails-dom-testing (~> 1.0) + railties (>= 4.2.0) thor (>= 0.14, < 2.0) - jquery-ui-rails (5.0.3) + jquery-ui-rails (5.0.5) railties (>= 3.2.16) json (1.8.2) - kaminari (0.16.1) + kaminari (0.16.3) actionpack (>= 3.0.0) activesupport (>= 3.0.0) + loofah (2.0.2) + nokogiri (>= 1.5.9) mail (2.6.3) mime-types (>= 1.16, < 3) method_source (0.8.2) - mime-types (2.4.3) + mime-types (2.6.1) mini_portile (0.6.2) - minitest (5.5.1) - monetize (1.1.0) + minitest (5.7.0) + monetize (1.3.0) money (~> 6.5.0) - money (6.5.0) + money (6.5.1) i18n (>= 0.6.4, <= 0.7.0) - multi_json (1.10.1) + multi_json (1.11.0) multi_xml (0.5.5) multipart-post (2.0.0) - nokogiri (1.6.5) + nokogiri (1.6.6.2) mini_portile (~> 0.6.0) - offsite_payments (2.0.1) - active_utils (~> 2.2.0) - activesupport (>= 3.2.14, < 5.0.0) - builder (>= 2.1.2, < 4.0.0) - i18n (~> 0.5) - json (~> 1.7) - money (< 7.0.0) - nokogiri (~> 1.4) - oj (2.11.2) + oj (2.12.8) paperclip (4.2.1) activemodel (>= 3.0.0) activesupport (>= 3.0.0) cocaine (~> 0.5.3) mime-types - paranoia (2.0.4) + paranoia (2.1.2) activerecord (~> 4.0) - poltergeist (1.5.1) + poltergeist (1.6.0) capybara (~> 2.1) cliver (~> 0.3.1) multi_json (~> 1.0) websocket-driver (>= 0.2.0) - polyamorous (1.1.0) + polyamorous (1.2.0) activerecord (>= 3.0) polyglot (0.3.5) - premailer (1.8.2) - css_parser (>= 1.3.5) + premailer (1.8.4) + css_parser (>= 1.3.6) htmlentities (>= 4.0.0) - premailer-rails (1.8.0) + premailer-rails (1.8.2) actionmailer (>= 3, < 5) premailer (~> 1.7, >= 1.7.9) pry (0.10.1) @@ -271,25 +277,34 @@ GEM slop (~> 3.4) rabl (0.9.4.pre1) activesupport (>= 2.3.14) - rack (1.5.2) + rack (1.6.1) rack-test (0.6.3) rack (>= 1.0) - rails (4.1.9) - actionmailer (= 4.1.9) - actionpack (= 4.1.9) - actionview (= 4.1.9) - activemodel (= 4.1.9) - activerecord (= 4.1.9) - activesupport (= 4.1.9) + rails (4.2.1) + actionmailer (= 4.2.1) + actionpack (= 4.2.1) + actionview (= 4.2.1) + activejob (= 4.2.1) + activemodel (= 4.2.1) + activerecord (= 4.2.1) + activesupport (= 4.2.1) bundler (>= 1.3.0, < 2.0) - railties (= 4.1.9) - sprockets-rails (~> 2.0) - rails-i18n (4.0.3) + railties (= 4.2.1) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.6) + activesupport (>= 4.2.0.beta, < 5.0) + nokogiri (~> 1.6.0) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.2) + loofah (~> 2.0) + rails-i18n (4.0.4) i18n (~> 0.6) railties (~> 4.0) - railties (4.1.9) - actionpack (= 4.1.9) - activesupport (= 4.1.9) + railties (4.2.1) + actionpack (= 4.2.1) + activesupport (= 4.2.1) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) rake (10.4.2) @@ -299,6 +314,9 @@ GEM activesupport (>= 3.0) i18n polyamorous (~> 1.1) + request_store (1.1.0) + responders (2.1.0) + railties (>= 4.2.0, < 5) rspec-core (3.1.7) rspec-support (~> 3.1.0) rspec-expectations (3.1.2) @@ -315,7 +333,7 @@ GEM rspec-mocks (~> 3.1.0) rspec-support (~> 3.1.0) rspec-support (3.1.2) - rubyzip (1.1.6) + rubyzip (1.1.7) sass (3.2.19) sass-rails (4.0.5) railties (>= 4.0.0, < 5.0) @@ -324,7 +342,7 @@ GEM sprockets-rails (~> 2.0) select2-rails (3.5.9.1) thor (~> 0.14) - selenium-webdriver (2.44.0) + selenium-webdriver (2.45.0) childprocess (~> 0.5) multi_json (~> 1.0) rubyzip (~> 1.0) @@ -336,39 +354,44 @@ GEM multi_json (~> 1.0) rack (~> 1.0) tilt (~> 1.1, != 1.3.0) - sprockets-rails (2.2.2) + sprockets-rails (2.3.1) actionpack (>= 3.0) activesupport (>= 3.0) sprockets (>= 2.8, < 4.0) sqlite3 (1.3.10) - state_machine (1.2.0) + state_machines (0.2.2) + state_machines-activemodel (0.1.2) + activemodel (~> 4.1) + state_machines (~> 0.2.0) + state_machines-activerecord (0.2.0) + activerecord (~> 4.1) + state_machines-activemodel (~> 0.1.0) stringex (2.5.2) thor (0.19.1) - thread_safe (0.3.4) + thread_safe (0.3.5) tilt (1.4.1) timers (4.0.1) hitimes truncate_html (0.9.2) - twitter_cldr (3.1.1) + twitter_cldr (3.1.2) camertron-eprun cldr-plurals-runtime-rb (~> 1.0.0) json tzinfo - typhoeus (0.7.0) + typhoeus (0.7.1) ethon (>= 0.7.1) tzinfo (1.2.2) thread_safe (~> 0.1) - unicode_utils (1.4.0) vcr (2.9.3) versioncake (2.3.1) actionpack (>= 3.2) activesupport (>= 3.2) railties (>= 3.2) tzinfo - websocket (1.2.1) - websocket-driver (0.5.1) + websocket (1.2.2) + websocket-driver (0.5.4) websocket-extensions (>= 0.1.0) - websocket-extensions (0.1.1) + websocket-extensions (0.1.2) xpath (2.0.0) nokogiri (~> 1.3) diff --git a/app/assets/javascripts/spree/frontend/easyXDM.min.js b/app/assets/javascripts/spree/frontend/easyXDM.min.js index 0ea737f..9c46fc5 100644 --- a/app/assets/javascripts/spree/frontend/easyXDM.min.js +++ b/app/assets/javascripts/spree/frontend/easyXDM.min.js @@ -1,5 +1,4 @@ -/** - * @license +/** * easyXDM * http://easyxdm.net/ * Copyright(c) 2009-2011, Øyvind Sean Kinsey, oyvind@kinsey.no. @@ -22,4 +21,4 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -(function(N,d,p,K,k,H){var b=this;var n=Math.floor(Math.random()*10000);var q=Function.prototype;var Q=/^((http.?:)\/\/([^:\/\s]+)(:\d+)*)/;var R=/[\-\w]+\/\.\.\//;var F=/([^:])\/\//g;var I="";var o={};var M=N.easyXDM;var U="easyXDM_";var E;var y=false;var i;var h;function C(X,Z){var Y=typeof X[Z];return Y=="function"||(!!(Y=="object"&&X[Z]))||Y=="unknown"}function u(X,Y){return !!(typeof(X[Y])=="object"&&X[Y])}function r(X){return Object.prototype.toString.call(X)==="[object Array]"}function c(){var Z="Shockwave Flash",ad="application/x-shockwave-flash";if(!t(navigator.plugins)&&typeof navigator.plugins[Z]=="object"){var ab=navigator.plugins[Z].description;if(ab&&!t(navigator.mimeTypes)&&navigator.mimeTypes[ad]&&navigator.mimeTypes[ad].enabledPlugin){i=ab.match(/\d+/g)}}if(!i){var Y;try{Y=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");i=Array.prototype.slice.call(Y.GetVariable("$version").match(/(\d+),(\d+),(\d+),(\d+)/),1);Y=null}catch(ac){}}if(!i){return false}var X=parseInt(i[0],10),aa=parseInt(i[1],10);h=X>9&&aa>0;return true}var v,x;if(C(N,"addEventListener")){v=function(Z,X,Y){Z.addEventListener(X,Y,false)};x=function(Z,X,Y){Z.removeEventListener(X,Y,false)}}else{if(C(N,"attachEvent")){v=function(X,Z,Y){X.attachEvent("on"+Z,Y)};x=function(X,Z,Y){X.detachEvent("on"+Z,Y)}}else{throw new Error("Browser not supported")}}var W=false,J=[],L;if("readyState" in d){L=d.readyState;W=L=="complete"||(~navigator.userAgent.indexOf("AppleWebKit/")&&(L=="loaded"||L=="interactive"))}else{W=!!d.body}function s(){if(W){return}W=true;for(var X=0;X')}else{ac=d.createElement("IFRAME");ac.name=Y.props.name}ac.id=ac.name=Y.props.name;delete Y.props.name;if(typeof Y.container=="string"){Y.container=d.getElementById(Y.container)}if(!Y.container){T(ac.style,{position:"absolute",top:"-2000px",left:"0px"});Y.container=d.body}var ab=Y.props.src;Y.props.src="javascript:false";T(ac,Y.props);ac.border=ac.frameBorder=0;ac.allowTransparency=true;Y.container.appendChild(ac);if(Y.onLoad){v(ac,"load",Y.onLoad)}if(Y.usePost){var aa=Y.container.appendChild(d.createElement("form")),X;aa.target=ac.name;aa.action=ab;aa.method="POST";if(typeof(Y.usePost)==="object"){for(var Z in Y.usePost){if(Y.usePost.hasOwnProperty(Z)){if(E){X=d.createElement('')}else{X=d.createElement("INPUT");X.name=Z}X.value=Y.usePost[Z];aa.appendChild(X)}}}aa.submit();aa.parentNode.removeChild(aa)}else{ac.src=ab}Y.props.src=ab;return ac}function V(aa,Z){if(typeof aa=="string"){aa=[aa]}var Y,X=aa.length;while(X--){Y=aa[X];Y=new RegExp(Y.substr(0,1)=="^"?Y:("^"+Y.replace(/(\*)/g,".$1").replace(/\?/g,".")+"$"));if(Y.test(Z)){return true}}return false}function l(Z){var ae=Z.protocol,Y;Z.isHost=Z.isHost||t(S.xdm_p);y=Z.hash||false;if(!Z.props){Z.props={}}if(!Z.isHost){Z.channel=S.xdm_c.replace(/["'<>\\]/g,"");Z.secret=S.xdm_s;Z.remote=S.xdm_e.replace(/["'<>\\]/g,"");ae=S.xdm_p;if(Z.acl&&!V(Z.acl,Z.remote)){throw new Error("Access denied for "+Z.remote)}}else{Z.remote=B(Z.remote);Z.channel=Z.channel||"default"+n++;Z.secret=Math.random().toString(16).substring(2);if(t(ae)){if(j(p.href)==j(Z.remote)){ae="4"}else{if(C(N,"postMessage")||C(d,"postMessage")){ae="1"}else{if(Z.swf&&C(N,"ActiveXObject")&&c()){ae="6"}else{if(navigator.product==="Gecko"&&"frameElement" in N&&navigator.userAgent.indexOf("WebKit")==-1){ae="5"}else{if(Z.remoteHelper){ae="2"}else{ae="0"}}}}}}}Z.protocol=ae;switch(ae){case"0":T(Z,{interval:100,delay:2000,useResize:true,useParent:false,usePolling:false},true);if(Z.isHost){if(!Z.local){var ac=p.protocol+"//"+p.host,X=d.body.getElementsByTagName("img"),ad;var aa=X.length;while(aa--){ad=X[aa];if(ad.src.substring(0,ac.length)===ac){Z.local=ad.src;break}}if(!Z.local){Z.local=N}}var ab={xdm_c:Z.channel,xdm_p:0};if(Z.local===N){Z.usePolling=true;Z.useParent=true;Z.local=p.protocol+"//"+p.host+p.pathname+p.search;ab.xdm_e=Z.local;ab.xdm_pa=1}else{ab.xdm_e=B(Z.local)}if(Z.container){Z.useResize=false;ab.xdm_po=1}Z.remote=P(Z.remote,ab)}else{T(Z,{channel:S.xdm_c,remote:S.xdm_e,useParent:!t(S.xdm_pa),usePolling:!t(S.xdm_po),useResize:Z.useParent?false:Z.useResize})}Y=[new o.stack.HashTransport(Z),new o.stack.ReliableBehavior({}),new o.stack.QueueBehavior({encode:true,maxLength:4000-Z.remote.length}),new o.stack.VerifyBehavior({initiate:Z.isHost})];break;case"1":Y=[new o.stack.PostMessageTransport(Z)];break;case"2":Z.remoteHelper=B(Z.remoteHelper);Y=[new o.stack.NameTransport(Z),new o.stack.QueueBehavior(),new o.stack.VerifyBehavior({initiate:Z.isHost})];break;case"3":Y=[new o.stack.NixTransport(Z)];break;case"4":Y=[new o.stack.SameOriginTransport(Z)];break;case"5":Y=[new o.stack.FrameElementTransport(Z)];break;case"6":if(!i){c()}Y=[new o.stack.FlashTransport(Z)];break}Y.push(new o.stack.QueueBehavior({lazy:Z.lazy,remove:true}));return Y}function D(aa){var ab,Z={incoming:function(ad,ac){this.up.incoming(ad,ac)},outgoing:function(ac,ad){this.down.outgoing(ac,ad)},callback:function(ac){this.up.callback(ac)},init:function(){this.down.init()},destroy:function(){this.down.destroy()}};for(var Y=0,X=aa.length;Y<\/script>')}}};(function(){var X={};o.Fn={set:function(Y,Z){X[Y]=Z},get:function(Z,Y){var aa=X[Z];if(Y){delete X[Z]}return aa}}}());o.Socket=function(Y){var X=D(l(Y).concat([{incoming:function(ab,aa){Y.onMessage(ab,aa)},callback:function(aa){if(Y.onReady){Y.onReady(aa)}}}])),Z=j(Y.remote);this.origin=j(Y.remote);this.destroy=function(){X.destroy()};this.postMessage=function(aa){X.outgoing(aa,Z)};X.init()};o.Rpc=function(Z,Y){if(Y.local){for(var ab in Y.local){if(Y.local.hasOwnProperty(ab)){var aa=Y.local[ab];if(typeof aa==="function"){Y.local[ab]={method:aa}}}}}var X=D(l(Z).concat([new o.stack.RpcBehavior(this,Y),{callback:function(ac){if(Z.onReady){Z.onReady(ac)}}}]));this.origin=j(Z.remote);this.destroy=function(){X.destroy()};X.init()};o.stack.SameOriginTransport=function(Y){var Z,ab,aa,X;return(Z={outgoing:function(ad,ae,ac){aa(ad);if(ac){ac()}},destroy:function(){if(ab){ab.parentNode.removeChild(ab);ab=null}},onDOMReady:function(){X=j(Y.remote);if(Y.isHost){T(Y.props,{src:P(Y.remote,{xdm_e:p.protocol+"//"+p.host+p.pathname,xdm_c:Y.channel,xdm_p:4}),name:U+Y.channel+"_provider"});ab=A(Y);o.Fn.set(Y.channel,function(ac){aa=ac;K(function(){Z.up.callback(true)},0);return function(ad){Z.up.incoming(ad,X)}})}else{aa=m().Fn.get(Y.channel,true)(function(ac){Z.up.incoming(ac,X)});K(function(){Z.up.callback(true)},0)}},init:function(){G(Z.onDOMReady,Z)}})};o.stack.FlashTransport=function(aa){var ac,X,ab,ad,Y,ae;function af(ah,ag){K(function(){ac.up.incoming(ah,ad)},0)}function Z(ah){var ag=aa.swf+"?host="+aa.isHost;var aj="easyXDM_swf_"+Math.floor(Math.random()*10000);o.Fn.set("flash_loaded"+ah.replace(/[\-.]/g,"_"),function(){o.stack.FlashTransport[ah].swf=Y=ae.firstChild;var ak=o.stack.FlashTransport[ah].queue;for(var al=0;al"}return(ac={outgoing:function(ah,ai,ag){Y.postMessage(aa.channel,ah.toString());if(ag){ag()}},destroy:function(){try{Y.destroyChannel(aa.channel)}catch(ag){}Y=null;if(X){X.parentNode.removeChild(X);X=null}},onDOMReady:function(){ad=aa.remote;o.Fn.set("flash_"+aa.channel+"_init",function(){K(function(){ac.up.callback(true)})});o.Fn.set("flash_"+aa.channel+"_onMessage",af);aa.swf=B(aa.swf);var ah=z(aa.swf);var ag=function(){o.stack.FlashTransport[ah].init=true;Y=o.stack.FlashTransport[ah].swf;Y.createChannel(aa.channel,aa.secret,j(aa.remote),aa.isHost);if(aa.isHost){if(h&&aa.swfNoThrottle){T(aa.props,{position:"fixed",right:0,top:0,height:"20px",width:"20px"})}T(aa.props,{src:P(aa.remote,{xdm_e:j(p.href),xdm_c:aa.channel,xdm_p:6,xdm_s:aa.secret}),name:U+aa.channel+"_provider"});X=A(aa)}};if(o.stack.FlashTransport[ah]&&o.stack.FlashTransport[ah].init){ag()}else{if(!o.stack.FlashTransport[ah]){o.stack.FlashTransport[ah]={queue:[ag]};Z(ah)}else{o.stack.FlashTransport[ah].queue.push(ag)}}},init:function(){G(ac.onDOMReady,ac)}})};o.stack.PostMessageTransport=function(aa){var ac,ad,Y,Z;function X(ae){if(ae.origin){return j(ae.origin)}if(ae.uri){return j(ae.uri)}if(ae.domain){return p.protocol+"//"+ae.domain}throw"Unable to retrieve the origin of the event"}function ab(af){var ae=X(af);if(ae==Z&&af.data.substring(0,aa.channel.length+1)==aa.channel+" "){ac.up.incoming(af.data.substring(aa.channel.length+1),ae)}}return(ac={outgoing:function(af,ag,ae){Y.postMessage(aa.channel+" "+af,ag||Z);if(ae){ae()}},destroy:function(){x(N,"message",ab);if(ad){Y=null;ad.parentNode.removeChild(ad);ad=null}},onDOMReady:function(){Z=j(aa.remote);if(aa.isHost){var ae=function(af){if(af.data==aa.channel+"-ready"){Y=("postMessage" in ad.contentWindow)?ad.contentWindow:ad.contentWindow.document;x(N,"message",ae);v(N,"message",ab);K(function(){ac.up.callback(true)},0)}};v(N,"message",ae);T(aa.props,{src:P(aa.remote,{xdm_e:j(p.href),xdm_c:aa.channel,xdm_p:1}),name:U+aa.channel+"_provider"});ad=A(aa)}else{v(N,"message",ab);Y=("postMessage" in N.parent)?N.parent:N.parent.document;Y.postMessage(aa.channel+"-ready",Z);K(function(){ac.up.callback(true)},0)}},init:function(){G(ac.onDOMReady,ac)}})};o.stack.FrameElementTransport=function(Y){var Z,ab,aa,X;return(Z={outgoing:function(ad,ae,ac){aa.call(this,ad);if(ac){ac()}},destroy:function(){if(ab){ab.parentNode.removeChild(ab);ab=null}},onDOMReady:function(){X=j(Y.remote);if(Y.isHost){T(Y.props,{src:P(Y.remote,{xdm_e:j(p.href),xdm_c:Y.channel,xdm_p:5}),name:U+Y.channel+"_provider"});ab=A(Y);ab.fn=function(ac){delete ab.fn;aa=ac;K(function(){Z.up.callback(true)},0);return function(ad){Z.up.incoming(ad,X)}}}else{if(d.referrer&&j(d.referrer)!=S.xdm_e){N.top.location=S.xdm_e}aa=N.frameElement.fn(function(ac){Z.up.incoming(ac,X)});Z.up.callback(true)}},init:function(){G(Z.onDOMReady,Z)}})};o.stack.NameTransport=function(ab){var ac;var ae,ai,aa,ag,ah,Y,X;function af(al){var ak=ab.remoteHelper+(ae?"#_3":"#_2")+ab.channel;ai.contentWindow.sendMessage(al,ak)}function ad(){if(ae){if(++ag===2||!ae){ac.up.callback(true)}}else{af("ready");ac.up.callback(true)}}function aj(ak){ac.up.incoming(ak,Y)}function Z(){if(ah){K(function(){ah(true)},0)}}return(ac={outgoing:function(al,am,ak){ah=ak;af(al)},destroy:function(){ai.parentNode.removeChild(ai);ai=null;if(ae){aa.parentNode.removeChild(aa);aa=null}},onDOMReady:function(){ae=ab.isHost;ag=0;Y=j(ab.remote);ab.local=B(ab.local);if(ae){o.Fn.set(ab.channel,function(al){if(ae&&al==="ready"){o.Fn.set(ab.channel,aj);ad()}});X=P(ab.remote,{xdm_e:ab.local,xdm_c:ab.channel,xdm_p:2});T(ab.props,{src:X+"#"+ab.channel,name:U+ab.channel+"_provider"});aa=A(ab)}else{ab.remoteHelper=ab.remote;o.Fn.set(ab.channel,aj)}var ak=function(){var al=ai||this;x(al,"load",ak);o.Fn.set(ab.channel+"_load",Z);(function am(){if(typeof al.contentWindow.sendMessage=="function"){ad()}else{K(am,50)}}())};ai=A({props:{src:ab.local+"#_4"+ab.channel},onLoad:ak})},init:function(){G(ac.onDOMReady,ac)}})};o.stack.HashTransport=function(Z){var ac;var ah=this,af,aa,X,ad,am,ab,al;var ag,Y;function ak(ao){if(!al){return}var an=Z.remote+"#"+(am++)+"_"+ao;((af||!ag)?al.contentWindow:al).location=an}function ae(an){ad=an;ac.up.incoming(ad.substring(ad.indexOf("_")+1),Y)}function aj(){if(!ab){return}var an=ab.location.href,ap="",ao=an.indexOf("#");if(ao!=-1){ap=an.substring(ao)}if(ap&&ap!=ad){ae(ap)}}function ai(){aa=setInterval(aj,X)}return(ac={outgoing:function(an,ao){ak(an)},destroy:function(){N.clearInterval(aa);if(af||!ag){al.parentNode.removeChild(al)}al=null},onDOMReady:function(){af=Z.isHost;X=Z.interval;ad="#"+Z.channel;am=0;ag=Z.useParent;Y=j(Z.remote);if(af){T(Z.props,{src:Z.remote,name:U+Z.channel+"_provider"});if(ag){Z.onLoad=function(){ab=N;ai();ac.up.callback(true)}}else{var ap=0,an=Z.delay/50;(function ao(){if(++ap>an){throw new Error("Unable to reference listenerwindow")}try{ab=al.contentWindow.frames[U+Z.channel+"_consumer"]}catch(aq){}if(ab){ai();ac.up.callback(true)}else{K(ao,50)}}())}al=A(Z)}else{ab=N;ai();if(ag){al=parent;ac.up.callback(true)}else{T(Z,{props:{src:Z.remote+"#"+Z.channel+new Date(),name:U+Z.channel+"_consumer"},onLoad:function(){ac.up.callback(true)}});al=A(Z)}}},init:function(){G(ac.onDOMReady,ac)}})};o.stack.ReliableBehavior=function(Y){var aa,ac;var ab=0,X=0,Z="";return(aa={incoming:function(af,ad){var ae=af.indexOf("_"),ag=af.substring(0,ae).split(",");af=af.substring(ae+1);if(ag[0]==ab){Z="";if(ac){ac(true);ac=null}}if(af.length>0){aa.down.outgoing(ag[1]+","+ab+"_"+Z,ad);if(X!=ag[1]){X=ag[1];aa.up.incoming(af,ad)}}},outgoing:function(af,ad,ae){Z=af;ac=ae;aa.down.outgoing(X+","+(++ab)+"_"+af,ad)}})};o.stack.QueueBehavior=function(Z){var ac,ad=[],ag=true,aa="",af,X=0,Y=false,ab=false;function ae(){if(Z.remove&&ad.length===0){w(ac);return}if(ag||ad.length===0||af){return}ag=true;var ah=ad.shift();ac.down.outgoing(ah.data,ah.origin,function(ai){ag=false;if(ah.callback){K(function(){ah.callback(ai)},0)}ae()})}return(ac={init:function(){if(t(Z)){Z={}}if(Z.maxLength){X=Z.maxLength;ab=true}if(Z.lazy){Y=true}else{ac.down.init()}},callback:function(ai){ag=false;var ah=ac.up;ae();ah.callback(ai)},incoming:function(ak,ai){if(ab){var aj=ak.indexOf("_"),ah=parseInt(ak.substring(0,aj),10);aa+=ak.substring(aj+1);if(ah===0){if(Z.encode){aa=k(aa)}ac.up.incoming(aa,ai);aa=""}}else{ac.up.incoming(ak,ai)}},outgoing:function(al,ai,ak){if(Z.encode){al=H(al)}var ah=[],aj;if(ab){while(al.length!==0){aj=al.substring(0,X);al=al.substring(aj.length);ah.push(aj)}while((aj=ah.shift())){ad.push({data:ah.length+"_"+aj,origin:ai,callback:ah.length===0?ak:null})}}else{ad.push({data:al,origin:ai,callback:ak})}if(Y){ac.down.init()}else{ae()}},destroy:function(){af=true;ac.down.destroy()}})};o.stack.VerifyBehavior=function(ab){var ac,aa,Y,Z=false;function X(){aa=Math.random().toString(16).substring(2);ac.down.outgoing(aa)}return(ac={incoming:function(af,ad){var ae=af.indexOf("_");if(ae===-1){if(af===aa){ac.up.callback(true)}else{if(!Y){Y=af;if(!ab.initiate){X()}ac.down.outgoing(af)}}}else{if(af.substring(0,ae)===Y){ac.up.incoming(af.substring(ae+1),ad)}}},outgoing:function(af,ad,ae){ac.down.outgoing(aa+"_"+af,ad,ae)},callback:function(ad){if(ab.initiate){X()}}})};o.stack.RpcBehavior=function(ad,Y){var aa,af=Y.serializer||O();var ae=0,ac={};function X(ag){ag.jsonrpc="2.0";aa.down.outgoing(af.stringify(ag))}function ab(ag,ai){var ah=Array.prototype.slice;return function(){var aj=arguments.length,al,ak={method:ai};if(aj>0&&typeof arguments[aj-1]==="function"){if(aj>1&&typeof arguments[aj-2]==="function"){al={success:arguments[aj-2],error:arguments[aj-1]};ak.params=ah.call(arguments,0,aj-2)}else{al={success:arguments[aj-1]};ak.params=ah.call(arguments,0,aj-1)}ac[""+(++ae)]=al;ak.id=ae}else{ak.params=ah.call(arguments,0)}if(ag.namedParams&&ak.params.length===1){ak.params=ak.params[0]}X(ak)}}function Z(an,am,ai,al){if(!ai){if(am){X({id:am,error:{code:-32601,message:"Procedure not found."}})}return}var ak,ah;if(am){ak=function(ao){ak=q;X({id:am,result:ao})};ah=function(ao,ap){ah=q;var aq={id:am,error:{code:-32099,message:ao}};if(ap){aq.error.data=ap}X(aq)}}else{ak=ah=q}if(!r(al)){al=[al]}try{var ag=ai.method.apply(ai.scope,al.concat([ak,ah]));if(!t(ag)){ak(ag)}}catch(aj){ah(aj.message)}}return(aa={incoming:function(ah,ag){var ai=af.parse(ah);if(ai.method){if(Y.handle){Y.handle(ai,X)}else{Z(ai.method,ai.id,Y.local[ai.method],ai.params)}}else{var aj=ac[ai.id];if(ai.error){if(aj.error){aj.error(ai.error)}}else{if(aj.success){aj.success(ai.result)}}delete ac[ai.id]}},init:function(){if(Y.remote){for(var ag in Y.remote){if(Y.remote.hasOwnProperty(ag)){ad[ag]=ab(Y.remote[ag],ag)}}}aa.down.init()},destroy:function(){for(var ag in Y.remote){if(Y.remote.hasOwnProperty(ag)&&ad.hasOwnProperty(ag)){delete ad[ag]}}aa.down.destroy()}})};b.easyXDM=o})(window,document,location,window.setTimeout,decodeURIComponent,encodeURIComponent); +(function(N,d,p,K,k,H){var b=this;var n=Math.floor(Math.random()*10000);var q=Function.prototype;var Q=/^((http.?:)\/\/([^:\/\s]+)(:\d+)*)/;var R=/[\-\w]+\/\.\.\//;var F=/([^:])\/\//g;var I="";var o={};var M=N.easyXDM;var U="easyXDM_";var E;var y=false;var i;var h;function C(X,Z){var Y=typeof X[Z];return Y=="function"||(!!(Y=="object"&&X[Z]))||Y=="unknown"}function u(X,Y){return !!(typeof(X[Y])=="object"&&X[Y])}function r(X){return Object.prototype.toString.call(X)==="[object Array]"}function c(){var Z="Shockwave Flash",ad="application/x-shockwave-flash";if(!t(navigator.plugins)&&typeof navigator.plugins[Z]=="object"){var ab=navigator.plugins[Z].description;if(ab&&!t(navigator.mimeTypes)&&navigator.mimeTypes[ad]&&navigator.mimeTypes[ad].enabledPlugin){i=ab.match(/\d+/g)}}if(!i){var Y;try{Y=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");i=Array.prototype.slice.call(Y.GetVariable("$version").match(/(\d+),(\d+),(\d+),(\d+)/),1);Y=null}catch(ac){}}if(!i){return false}var X=parseInt(i[0],10),aa=parseInt(i[1],10);h=X>9&&aa>0;return true}var v,x;if(C(N,"addEventListener")){v=function(Z,X,Y){Z.addEventListener(X,Y,false)};x=function(Z,X,Y){Z.removeEventListener(X,Y,false)}}else{if(C(N,"attachEvent")){v=function(X,Z,Y){X.attachEvent("on"+Z,Y)};x=function(X,Z,Y){X.detachEvent("on"+Z,Y)}}else{throw new Error("Browser not supported")}}var W=false,J=[],L;if("readyState" in d){L=d.readyState;W=L=="complete"||(~navigator.userAgent.indexOf("AppleWebKit/")&&(L=="loaded"||L=="interactive"))}else{W=!!d.body}function s(){if(W){return}W=true;for(var X=0;X')}else{ac=d.createElement("IFRAME");ac.name=Y.props.name}ac.id=ac.name=Y.props.name;delete Y.props.name;if(typeof Y.container=="string"){Y.container=d.getElementById(Y.container)}if(!Y.container){T(ac.style,{position:"absolute",top:"-2000px",left:"0px"});Y.container=d.body}var ab=Y.props.src;Y.props.src="javascript:false";T(ac,Y.props);ac.border=ac.frameBorder=0;ac.allowTransparency=true;Y.container.appendChild(ac);if(Y.onLoad){v(ac,"load",Y.onLoad)}if(Y.usePost){var aa=Y.container.appendChild(d.createElement("form")),X;aa.target=ac.name;aa.action=ab;aa.method="POST";if(typeof(Y.usePost)==="object"){for(var Z in Y.usePost){if(Y.usePost.hasOwnProperty(Z)){if(E){X=d.createElement('')}else{X=d.createElement("INPUT");X.name=Z}X.value=Y.usePost[Z];aa.appendChild(X)}}}aa.submit();aa.parentNode.removeChild(aa)}else{ac.src=ab}Y.props.src=ab;return ac}function V(aa,Z){if(typeof aa=="string"){aa=[aa]}var Y,X=aa.length;while(X--){Y=aa[X];Y=new RegExp(Y.substr(0,1)=="^"?Y:("^"+Y.replace(/(\*)/g,".$1").replace(/\?/g,".")+"$"));if(Y.test(Z)){return true}}return false}function l(Z){var ae=Z.protocol,Y;Z.isHost=Z.isHost||t(S.xdm_p);y=Z.hash||false;if(!Z.props){Z.props={}}if(!Z.isHost){Z.channel=S.xdm_c.replace(/["'<>\\]/g,"");Z.secret=S.xdm_s;Z.remote=S.xdm_e.replace(/["'<>\\]/g,"");ae=S.xdm_p;if(Z.acl&&!V(Z.acl,Z.remote)){throw new Error("Access denied for "+Z.remote)}}else{Z.remote=B(Z.remote);Z.channel=Z.channel||"default"+n++;Z.secret=Math.random().toString(16).substring(2);if(t(ae)){if(j(p.href)==j(Z.remote)){ae="4"}else{if(C(N,"postMessage")||C(d,"postMessage")){ae="1"}else{if(Z.swf&&C(N,"ActiveXObject")&&c()){ae="6"}else{if(navigator.product==="Gecko"&&"frameElement" in N&&navigator.userAgent.indexOf("WebKit")==-1){ae="5"}else{if(Z.remoteHelper){ae="2"}else{ae="0"}}}}}}}Z.protocol=ae;switch(ae){case"0":T(Z,{interval:100,delay:2000,useResize:true,useParent:false,usePolling:false},true);if(Z.isHost){if(!Z.local){var ac=p.protocol+"//"+p.host,X=d.body.getElementsByTagName("img"),ad;var aa=X.length;while(aa--){ad=X[aa];if(ad.src.substring(0,ac.length)===ac){Z.local=ad.src;break}}if(!Z.local){Z.local=N}}var ab={xdm_c:Z.channel,xdm_p:0};if(Z.local===N){Z.usePolling=true;Z.useParent=true;Z.local=p.protocol+"//"+p.host+p.pathname+p.search;ab.xdm_e=Z.local;ab.xdm_pa=1}else{ab.xdm_e=B(Z.local)}if(Z.container){Z.useResize=false;ab.xdm_po=1}Z.remote=P(Z.remote,ab)}else{T(Z,{channel:S.xdm_c,remote:S.xdm_e,useParent:!t(S.xdm_pa),usePolling:!t(S.xdm_po),useResize:Z.useParent?false:Z.useResize})}Y=[new o.stack.HashTransport(Z),new o.stack.ReliableBehavior({}),new o.stack.QueueBehavior({encode:true,maxLength:4000-Z.remote.length}),new o.stack.VerifyBehavior({initiate:Z.isHost})];break;case"1":Y=[new o.stack.PostMessageTransport(Z)];break;case"2":if(Z.isHost){Z.remoteHelper=B(Z.remoteHelper)}Y=[new o.stack.NameTransport(Z),new o.stack.QueueBehavior(),new o.stack.VerifyBehavior({initiate:Z.isHost})];break;case"3":Y=[new o.stack.NixTransport(Z)];break;case"4":Y=[new o.stack.SameOriginTransport(Z)];break;case"5":Y=[new o.stack.FrameElementTransport(Z)];break;case"6":if(!i){c()}Y=[new o.stack.FlashTransport(Z)];break}Y.push(new o.stack.QueueBehavior({lazy:Z.lazy,remove:true}));return Y}function D(aa){var ab,Z={incoming:function(ad,ac){this.up.incoming(ad,ac)},outgoing:function(ac,ad){this.down.outgoing(ac,ad)},callback:function(ac){this.up.callback(ac)},init:function(){this.down.init()},destroy:function(){this.down.destroy()}};for(var Y=0,X=aa.length;Y<\/script>')}}};(function(){var X={};o.Fn={set:function(Y,Z){X[Y]=Z},get:function(Z,Y){var aa=X[Z];if(Y){delete X[Z]}return aa}}}());o.Socket=function(Y){var X=D(l(Y).concat([{incoming:function(ab,aa){Y.onMessage(ab,aa)},callback:function(aa){if(Y.onReady){Y.onReady(aa)}}}])),Z=j(Y.remote);this.origin=j(Y.remote);this.destroy=function(){X.destroy()};this.postMessage=function(aa){X.outgoing(aa,Z)};X.init()};o.Rpc=function(Z,Y){if(Y.local){for(var ab in Y.local){if(Y.local.hasOwnProperty(ab)){var aa=Y.local[ab];if(typeof aa==="function"){Y.local[ab]={method:aa}}}}}var X=D(l(Z).concat([new o.stack.RpcBehavior(this,Y),{callback:function(ac){if(Z.onReady){Z.onReady(ac)}}}]));this.origin=j(Z.remote);this.destroy=function(){X.destroy()};X.init()};o.stack.SameOriginTransport=function(Y){var Z,ab,aa,X;return(Z={outgoing:function(ad,ae,ac){aa(ad);if(ac){ac()}},destroy:function(){if(ab){ab.parentNode.removeChild(ab);ab=null}},onDOMReady:function(){X=j(Y.remote);if(Y.isHost){T(Y.props,{src:P(Y.remote,{xdm_e:p.protocol+"//"+p.host+p.pathname,xdm_c:Y.channel,xdm_p:4}),name:U+Y.channel+"_provider"});ab=A(Y);o.Fn.set(Y.channel,function(ac){aa=ac;K(function(){Z.up.callback(true)},0);return function(ad){Z.up.incoming(ad,X)}})}else{aa=m().Fn.get(Y.channel,true)(function(ac){Z.up.incoming(ac,X)});K(function(){Z.up.callback(true)},0)}},init:function(){G(Z.onDOMReady,Z)}})};o.stack.FlashTransport=function(aa){var ac,X,ab,ad,Y,ae;function af(ah,ag){K(function(){ac.up.incoming(ah,ad)},0)}function Z(ah){var ag=aa.swf+"?host="+aa.isHost;var aj="easyXDM_swf_"+Math.floor(Math.random()*10000);o.Fn.set("flash_loaded"+ah.replace(/[\-.]/g,"_"),function(){o.stack.FlashTransport[ah].swf=Y=ae.firstChild;var ak=o.stack.FlashTransport[ah].queue;for(var al=0;al"}return(ac={outgoing:function(ah,ai,ag){Y.postMessage(aa.channel,ah.toString());if(ag){ag()}},destroy:function(){try{Y.destroyChannel(aa.channel)}catch(ag){}Y=null;if(X){X.parentNode.removeChild(X);X=null}},onDOMReady:function(){ad=aa.remote;o.Fn.set("flash_"+aa.channel+"_init",function(){K(function(){ac.up.callback(true)})});o.Fn.set("flash_"+aa.channel+"_onMessage",af);aa.swf=B(aa.swf);var ah=z(aa.swf);var ag=function(){o.stack.FlashTransport[ah].init=true;Y=o.stack.FlashTransport[ah].swf;Y.createChannel(aa.channel,aa.secret,j(aa.remote),aa.isHost);if(aa.isHost){if(h&&aa.swfNoThrottle){T(aa.props,{position:"fixed",right:0,top:0,height:"20px",width:"20px"})}T(aa.props,{src:P(aa.remote,{xdm_e:j(p.href),xdm_c:aa.channel,xdm_p:6,xdm_s:aa.secret}),name:U+aa.channel+"_provider"});X=A(aa)}};if(o.stack.FlashTransport[ah]&&o.stack.FlashTransport[ah].init){ag()}else{if(!o.stack.FlashTransport[ah]){o.stack.FlashTransport[ah]={queue:[ag]};Z(ah)}else{o.stack.FlashTransport[ah].queue.push(ag)}}},init:function(){G(ac.onDOMReady,ac)}})};o.stack.PostMessageTransport=function(aa){var ac,ad,Y,Z;function X(ae){if(ae.origin){return j(ae.origin)}if(ae.uri){return j(ae.uri)}if(ae.domain){return p.protocol+"//"+ae.domain}throw"Unable to retrieve the origin of the event"}function ab(af){var ae=X(af);if(ae==Z&&af.data.substring(0,aa.channel.length+1)==aa.channel+" "){ac.up.incoming(af.data.substring(aa.channel.length+1),ae)}}return(ac={outgoing:function(af,ag,ae){Y.postMessage(aa.channel+" "+af,ag||Z);if(ae){ae()}},destroy:function(){x(N,"message",ab);if(ad){Y=null;ad.parentNode.removeChild(ad);ad=null}},onDOMReady:function(){Z=j(aa.remote);if(aa.isHost){var ae=function(af){if(af.data==aa.channel+"-ready"){Y=("postMessage" in ad.contentWindow)?ad.contentWindow:ad.contentWindow.document;x(N,"message",ae);v(N,"message",ab);K(function(){ac.up.callback(true)},0)}};v(N,"message",ae);T(aa.props,{src:P(aa.remote,{xdm_e:j(p.href),xdm_c:aa.channel,xdm_p:1}),name:U+aa.channel+"_provider"});ad=A(aa)}else{v(N,"message",ab);Y=("postMessage" in N.parent)?N.parent:N.parent.document;Y.postMessage(aa.channel+"-ready",Z);K(function(){ac.up.callback(true)},0)}},init:function(){G(ac.onDOMReady,ac)}})};o.stack.FrameElementTransport=function(Y){var Z,ab,aa,X;return(Z={outgoing:function(ad,ae,ac){aa.call(this,ad);if(ac){ac()}},destroy:function(){if(ab){ab.parentNode.removeChild(ab);ab=null}},onDOMReady:function(){X=j(Y.remote);if(Y.isHost){T(Y.props,{src:P(Y.remote,{xdm_e:j(p.href),xdm_c:Y.channel,xdm_p:5}),name:U+Y.channel+"_provider"});ab=A(Y);ab.fn=function(ac){delete ab.fn;aa=ac;K(function(){Z.up.callback(true)},0);return function(ad){Z.up.incoming(ad,X)}}}else{if(d.referrer&&j(d.referrer)!=S.xdm_e){N.top.location=S.xdm_e}aa=N.frameElement.fn(function(ac){Z.up.incoming(ac,X)});Z.up.callback(true)}},init:function(){G(Z.onDOMReady,Z)}})};o.stack.NameTransport=function(ab){var ac;var ae,ai,aa,ag,ah,Y,X;function af(al){var ak=ab.remoteHelper+(ae?"#_3":"#_2")+ab.channel;ai.contentWindow.sendMessage(al,ak)}function ad(){if(ae){if(++ag===2||!ae){ac.up.callback(true)}}else{af("ready");ac.up.callback(true)}}function aj(ak){ac.up.incoming(ak,Y)}function Z(){if(ah){K(function(){ah(true)},0)}}return(ac={outgoing:function(al,am,ak){ah=ak;af(al)},destroy:function(){ai.parentNode.removeChild(ai);ai=null;if(ae){aa.parentNode.removeChild(aa);aa=null}},onDOMReady:function(){ae=ab.isHost;ag=0;Y=j(ab.remote);ab.local=B(ab.local);if(ae){o.Fn.set(ab.channel,function(al){if(ae&&al==="ready"){o.Fn.set(ab.channel,aj);ad()}});X=P(ab.remote,{xdm_e:ab.local,xdm_c:ab.channel,xdm_p:2});T(ab.props,{src:X+"#"+ab.channel,name:U+ab.channel+"_provider"});aa=A(ab)}else{ab.remoteHelper=ab.remote;o.Fn.set(ab.channel,aj)}var ak=function(){var al=ai||this;x(al,"load",ak);o.Fn.set(ab.channel+"_load",Z);(function am(){if(typeof al.contentWindow.sendMessage=="function"){ad()}else{K(am,50)}}())};ai=A({props:{src:ab.local+"#_4"+ab.channel},onLoad:ak})},init:function(){G(ac.onDOMReady,ac)}})};o.stack.HashTransport=function(Z){var ac;var ah=this,af,aa,X,ad,am,ab,al;var ag,Y;function ak(ao){if(!al){return}var an=Z.remote+"#"+(am++)+"_"+ao;((af||!ag)?al.contentWindow:al).location=an}function ae(an){ad=an;ac.up.incoming(ad.substring(ad.indexOf("_")+1),Y)}function aj(){if(!ab){return}var an=ab.location.href,ap="",ao=an.indexOf("#");if(ao!=-1){ap=an.substring(ao)}if(ap&&ap!=ad){ae(ap)}}function ai(){aa=setInterval(aj,X)}return(ac={outgoing:function(an,ao){ak(an)},destroy:function(){N.clearInterval(aa);if(af||!ag){al.parentNode.removeChild(al)}al=null},onDOMReady:function(){af=Z.isHost;X=Z.interval;ad="#"+Z.channel;am=0;ag=Z.useParent;Y=j(Z.remote);if(af){T(Z.props,{src:Z.remote,name:U+Z.channel+"_provider"});if(ag){Z.onLoad=function(){ab=N;ai();ac.up.callback(true)}}else{var ap=0,an=Z.delay/50;(function ao(){if(++ap>an){throw new Error("Unable to reference listenerwindow")}try{ab=al.contentWindow.frames[U+Z.channel+"_consumer"]}catch(aq){}if(ab){ai();ac.up.callback(true)}else{K(ao,50)}}())}al=A(Z)}else{ab=N;ai();if(ag){al=parent;ac.up.callback(true)}else{T(Z,{props:{src:Z.remote+"#"+Z.channel+new Date(),name:U+Z.channel+"_consumer"},onLoad:function(){ac.up.callback(true)}});al=A(Z)}}},init:function(){G(ac.onDOMReady,ac)}})};o.stack.ReliableBehavior=function(Y){var aa,ac;var ab=0,X=0,Z="";return(aa={incoming:function(af,ad){var ae=af.indexOf("_"),ag=af.substring(0,ae).split(",");af=af.substring(ae+1);if(ag[0]==ab){Z="";if(ac){ac(true)}}if(af.length>0){aa.down.outgoing(ag[1]+","+ab+"_"+Z,ad);if(X!=ag[1]){X=ag[1];aa.up.incoming(af,ad)}}},outgoing:function(af,ad,ae){Z=af;ac=ae;aa.down.outgoing(X+","+(++ab)+"_"+af,ad)}})};o.stack.QueueBehavior=function(Z){var ac,ad=[],ag=true,aa="",af,X=0,Y=false,ab=false;function ae(){if(Z.remove&&ad.length===0){w(ac);return}if(ag||ad.length===0||af){return}ag=true;var ah=ad.shift();ac.down.outgoing(ah.data,ah.origin,function(ai){ag=false;if(ah.callback){K(function(){ah.callback(ai)},0)}ae()})}return(ac={init:function(){if(t(Z)){Z={}}if(Z.maxLength){X=Z.maxLength;ab=true}if(Z.lazy){Y=true}else{ac.down.init()}},callback:function(ai){ag=false;var ah=ac.up;ae();ah.callback(ai)},incoming:function(ak,ai){if(ab){var aj=ak.indexOf("_"),ah=parseInt(ak.substring(0,aj),10);aa+=ak.substring(aj+1);if(ah===0){if(Z.encode){aa=k(aa)}ac.up.incoming(aa,ai);aa=""}}else{ac.up.incoming(ak,ai)}},outgoing:function(al,ai,ak){if(Z.encode){al=H(al)}var ah=[],aj;if(ab){while(al.length!==0){aj=al.substring(0,X);al=al.substring(aj.length);ah.push(aj)}while((aj=ah.shift())){ad.push({data:ah.length+"_"+aj,origin:ai,callback:ah.length===0?ak:null})}}else{ad.push({data:al,origin:ai,callback:ak})}if(Y){ac.down.init()}else{ae()}},destroy:function(){af=true;ac.down.destroy()}})};o.stack.VerifyBehavior=function(ab){var ac,aa,Y,Z=false;function X(){aa=Math.random().toString(16).substring(2);ac.down.outgoing(aa)}return(ac={incoming:function(af,ad){var ae=af.indexOf("_");if(ae===-1){if(af===aa){ac.up.callback(true)}else{if(!Y){Y=af;if(!ab.initiate){X()}ac.down.outgoing(af)}}}else{if(af.substring(0,ae)===Y){ac.up.incoming(af.substring(ae+1),ad)}}},outgoing:function(af,ad,ae){ac.down.outgoing(aa+"_"+af,ad,ae)},callback:function(ad){if(ab.initiate){X()}}})};o.stack.RpcBehavior=function(ad,Y){var aa,af=Y.serializer||O();var ae=0,ac={};function X(ag){ag.jsonrpc="2.0";aa.down.outgoing(af.stringify(ag))}function ab(ag,ai){var ah=Array.prototype.slice;return function(){var aj=arguments.length,al,ak={method:ai};if(aj>0&&typeof arguments[aj-1]==="function"){if(aj>1&&typeof arguments[aj-2]==="function"){al={success:arguments[aj-2],error:arguments[aj-1]};ak.params=ah.call(arguments,0,aj-2)}else{al={success:arguments[aj-1]};ak.params=ah.call(arguments,0,aj-1)}ac[""+(++ae)]=al;ak.id=ae}else{ak.params=ah.call(arguments,0)}if(ag.namedParams&&ak.params.length===1){ak.params=ak.params[0]}X(ak)}}function Z(an,am,ai,al){if(!ai){if(am){X({id:am,error:{code:-32601,message:"Procedure not found."}})}return}var ak,ah;if(am){ak=function(ao){ak=q;X({id:am,result:ao})};ah=function(ao,ap){ah=q;var aq={id:am,error:{code:-32099,message:ao}};if(ap){aq.error.data=ap}X(aq)}}else{ak=ah=q}if(!r(al)){al=[al]}try{var ag=ai.method.apply(ai.scope,al.concat([ak,ah]));if(!t(ag)){ak(ag)}}catch(aj){ah(aj.message)}}return(aa={incoming:function(ah,ag){var ai=af.parse(ah);if(ai.method){if(Y.handle){Y.handle(ai,X)}else{Z(ai.method,ai.id,Y.local[ai.method],ai.params)}}else{var aj=ac[ai.id];if(ai.error){if(aj.error){aj.error(ai.error)}}else{if(aj.success){aj.success(ai.result)}}delete ac[ai.id]}},init:function(){if(Y.remote){for(var ag in Y.remote){if(Y.remote.hasOwnProperty(ag)){ad[ag]=ab(Y.remote[ag],ag)}}}aa.down.init()},destroy:function(){for(var ag in Y.remote){if(Y.remote.hasOwnProperty(ag)&&ad.hasOwnProperty(ag)){delete ad[ag]}}aa.down.destroy()}})};b.easyXDM=o})(window,document,location,window.setTimeout,decodeURIComponent,encodeURIComponent); \ No newline at end of file diff --git a/app/assets/javascripts/spree/frontend/spree_conekta.js.coffee b/app/assets/javascripts/spree/frontend/spree_conekta.js.coffee index cc26280..1379b14 100644 --- a/app/assets/javascripts/spree/frontend/spree_conekta.js.coffee +++ b/app/assets/javascripts/spree/frontend/spree_conekta.js.coffee @@ -15,7 +15,7 @@ jQuery -> listenSubmit: -> @form.on 'submit', (e)=> e.preventDefault() - currentForm = @cleanForm() + currentForm = @form if @isConektaForm(currentForm) @processPayment(currentForm) else @@ -50,8 +50,7 @@ jQuery -> $('select, input', form).is("[data-conekta='monthly_installments']") submitForm: -> - @form.off('submit') - @form.submit() + @form.off('submit').submit() successResponseHandler: (response)=> @saveConektaResponse(response) diff --git a/app/views/spree/checkout/payment/_conekta_card.html.erb b/app/views/spree/checkout/payment/_conekta_card.html.erb index ede8177..1cc7c87 100644 --- a/app/views/spree/checkout/payment/_conekta_card.html.erb +++ b/app/views/spree/checkout/payment/_conekta_card.html.erb @@ -34,13 +34,13 @@ <%= select_month(Date.today, { prefix: param_prefix, field_name: 'month', use_month_numbers: true }, class: 'required', - id: "card_month", + id: "card_month_#{param_prefix[15]}", data: { conekta: 'card[exp_month]' } ) %> <%= select_year(Date.today, { prefix: param_prefix, field_name: 'year', start_year: Date.today.year, end_year: Date.today.year + 15 }, class: 'required', - id: "card_year", + id: "card_year_#{param_prefix[15]}", data: { conekta: 'card[exp_year]' }) %>

@@ -62,9 +62,6 @@

<% end %> -<%= hidden_field_tag "conekta_month", Date.today.month, data: { conekta: 'card[exp_month]' } %> -<%= hidden_field_tag "conekta_year", Date.today.year, data: { conekta: 'card[exp_year]' } %> - <%= hidden_field_tag "#{param_prefix}[conekta_response]", '' %> <%= hidden_field_tag "#{param_prefix}[gateway_payment_profile_id]", '', :id => "gateway_payment_profile_id" %> diff --git a/config/routes.rb b/config/routes.rb index f4881c3..19e94e2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,4 +1,4 @@ -Spree::Core::Engine.routes.draw do +Spree::Core::Engine.add_routes do namespace :conekta do resources :payments, only: [:create, :show] end diff --git a/lib/spree/conekta/credit_card.rb b/lib/spree/conekta/credit_card.rb index 51ab64a..669eeeb 100644 --- a/lib/spree/conekta/credit_card.rb +++ b/lib/spree/conekta/credit_card.rb @@ -4,7 +4,7 @@ class CreditCard include Spree::Conekta::Client attr_reader :customer - attr_accessor :id, :brand, :last4 + attr_accessor :id, :brand, :last4, :exp_month, :exp_year, :token, :name, :cvc, :street1, :zip def self.create(customer, token, auth_token) new(customer, token: token, auth_token: auth_token) @@ -31,6 +31,9 @@ def build_card(card) @id = card['id'] @brand = card['brand'] @last4 = card['last4'] + @exp_month = card['exp_month'] + @exp_year = card['exp_year'] + @name = card['name'] end def create_card(token) diff --git a/lib/spree/conekta/credit_card_collection.rb b/lib/spree/conekta/credit_card_collection.rb index 5f20cd2..eb973ea 100644 --- a/lib/spree/conekta/credit_card_collection.rb +++ b/lib/spree/conekta/credit_card_collection.rb @@ -16,8 +16,10 @@ def initialize(customer, options) @cards = build_cards(get) end - def add(token) - @cards << Spree::Conekta::CreditCard.create(customer, token, auth_token) + def add(token) + card = Spree::Conekta::CreditCard.create(customer, token, auth_token) + @cards << card + card end def endpoint diff --git a/spree_conekta.gemspec b/spree_conekta.gemspec index 9bc7721..ed91886 100644 --- a/spree_conekta.gemspec +++ b/spree_conekta.gemspec @@ -7,8 +7,8 @@ require 'spree_conekta/version' Gem::Specification.new do |s| s.name = 'spree_conekta' s.version = SpreeConekta::VERSION - s.authors = ['Jonathan Garay', 'Fernando Barajas', 'Manuel Vidaurre'] - s.email = %w(jonathan.garay@crowdint.com fernando.barajas@crowdint.com manuel.vidaurre@agiltec.com.mx) + s.authors = ['Jonathan Garay', 'Fernando Barajas'] + s.email = %w(jonathan.garay@crowdint.com fernando.barajas@crowdint.com ) s.homepage = 'http://github.com/crowdint/spree_conekta' s.summary = 'Spree Engine for Conekta Mexican Payment gateway' s.description = 'Spree Engine for Conekta Mexican Payment gateway' diff --git a/vendor/assets/javascripts/conekta.js b/vendor/assets/javascripts/conekta.js index 6304b9b..34edede 100644 --- a/vendor/assets/javascripts/conekta.js +++ b/vendor/assets/javascripts/conekta.js @@ -6,7 +6,7 @@ * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. * This is a reference implementation. You are free to copy, modify, or redistribute. */ -"object"!=typeof JSON&&(JSON={}),function(){"use strict";function f(a){return 10>a?"0"+a:a}function quote(a){return escapable.lastIndex=0,escapable.test(a)?'"'+a.replace(escapable,function(a){var b=meta[a];return"string"==typeof b?b:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function str(a,b){var c,d,e,f,g,h=gap,i=b[a];switch(i&&"object"==typeof i&&"function"==typeof i.toJSON&&(i=i.toJSON(a)),"function"==typeof rep&&(i=rep.call(b,a,i)),typeof i){case"string":return quote(i);case"number":return isFinite(i)?String(i):"null";case"boolean":case"null":return String(i);case"object":if(!i)return"null";if(gap+=indent,g=[],"[object Array]"===Object.prototype.toString.apply(i)){for(f=i.length,c=0;f>c;c+=1)g[c]=str(c,i)||"null";return e=0===g.length?"[]":gap?"[\n"+gap+g.join(",\n"+gap)+"\n"+h+"]":"["+g.join(",")+"]",gap=h,e}if(rep&&"object"==typeof rep)for(f=rep.length,c=0;f>c;c+=1)"string"==typeof rep[c]&&(d=rep[c],e=str(d,i),e&&g.push(quote(d)+(gap?": ":":")+e));else for(d in i)Object.prototype.hasOwnProperty.call(i,d)&&(e=str(d,i),e&&g.push(quote(d)+(gap?": ":":")+e));return e=0===g.length?"{}":gap?"{\n"+gap+g.join(",\n"+gap)+"\n"+h+"}":"{"+g.join(",")+"}",gap=h,e}}"function"!=typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()});var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;"function"!=typeof JSON.stringify&&(JSON.stringify=function(a,b,c){var d;if(gap="",indent="","number"==typeof c)for(d=0;c>d;d+=1)indent+=" ";else"string"==typeof c&&(indent=c);if(rep=b,b&&"function"!=typeof b&&("object"!=typeof b||"number"!=typeof b.length))throw new Error("JSON.stringify");return str("",{"":a})}),"function"!=typeof JSON.parse&&(JSON.parse=function(text,reviver){function walk(a,b){var c,d,e=a[b];if(e&&"object"==typeof e)for(c in e)Object.prototype.hasOwnProperty.call(e,c)&&(d=walk(e,c),void 0!==d?e[c]=d:delete e[c]);return reviver.call(a,b,e)}var j;if(text=String(text),cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})),/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return j=eval("("+text+")"),"function"==typeof reviver?walk({"":j},""):j;throw new SyntaxError("JSON.parse")})}(); +"object"!=typeof JSON&&(JSON={}),function(){"use strict";function f(a){return 10>a?"0"+a:a}function quote(a){return escapable.lastIndex=0,escapable.test(a)?'"'+a.replace(escapable,function(a){var b=meta[a];return"string"==typeof b?b:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function str(a,b){var c,d,e,f,g,h=gap,i=b[a];switch(i&&"object"==typeof i&&"function"==typeof i.toJSON&&(i=i.toJSON(a)),"function"==typeof rep&&(i=rep.call(b,a,i)),typeof i){case"string":return quote(i);case"number":return isFinite(i)?String(i):"null";case"boolean":case"null":return String(i);case"object":if(!i)return"null";if(gap+=indent,g=[],"[object Array]"===Object.prototype.toString.apply(i)){for(f=i.length,c=0;f>c;c+=1)g[c]=str(c,i)||"null";return e=0===g.length?"[]":gap?"[\n"+gap+g.join(",\n"+gap)+"\n"+h+"]":"["+g.join(",")+"]",gap=h,e}if(rep&&"object"==typeof rep)for(f=rep.length,c=0;f>c;c+=1)"string"==typeof rep[c]&&(d=rep[c],e=str(d,i),e&&g.push(quote(d)+(gap?": ":":")+e));else for(d in i)Object.prototype.hasOwnProperty.call(i,d)&&(e=str(d,i),e&&g.push(quote(d)+(gap?": ":":")+e));return e=0===g.length?"{}":gap?"{\n"+gap+g.join(",\n"+gap)+"\n"+h+"}":"{"+g.join(",")+"}",gap=h,e}}"function"!=typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()});var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;"function"!=typeof JSON.stringify&&(JSON.stringify=function(a,b,c){var d;if(gap="",indent="","number"==typeof c)for(d=0;c>d;d+=1)indent+=" ";else"string"==typeof c&&(indent=c);if(rep=b,b&&"function"!=typeof b&&("object"!=typeof b||"number"!=typeof b.length))throw new Error("JSON.stringify");return str("",{"":a})}),"function"!=typeof JSON.parse&&(JSON.parse=function(text,reviver){function walk(a,b){var c,d,e=a[b];if(e&&"object"==typeof e)for(c in e)Object.prototype.hasOwnProperty.call(e,c)&&(d=walk(e,c),void 0!==d?e[c]=d:delete e[c]);return reviver.call(a,b,e)}var j;if(text=String(text),cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})),/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return j=eval("("+text+")"),"function"==typeof reviver?walk({"":j},""):j;throw new SyntaxError("JSON.parse")})}(); /** * easyXDM * http://easyxdm.net/ @@ -31,68 +31,206 @@ * THE SOFTWARE. */ (function(N,d,p,K,k,H){var b=this;var n=Math.floor(Math.random()*10000);var q=Function.prototype;var Q=/^((http.?:)\/\/([^:\/\s]+)(:\d+)*)/;var R=/[\-\w]+\/\.\.\//;var F=/([^:])\/\//g;var I="";var o={};var M=N.easyXDM;var U="easyXDM_";var E;var y=false;var i;var h;function C(X,Z){var Y=typeof X[Z];return Y=="function"||(!!(Y=="object"&&X[Z]))||Y=="unknown"}function u(X,Y){return !!(typeof(X[Y])=="object"&&X[Y])}function r(X){return Object.prototype.toString.call(X)==="[object Array]"}function c(){var Z="Shockwave Flash",ad="application/x-shockwave-flash";if(!t(navigator.plugins)&&typeof navigator.plugins[Z]=="object"){var ab=navigator.plugins[Z].description;if(ab&&!t(navigator.mimeTypes)&&navigator.mimeTypes[ad]&&navigator.mimeTypes[ad].enabledPlugin){i=ab.match(/\d+/g)}}if(!i){var Y;try{Y=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");i=Array.prototype.slice.call(Y.GetVariable("$version").match(/(\d+),(\d+),(\d+),(\d+)/),1);Y=null}catch(ac){}}if(!i){return false}var X=parseInt(i[0],10),aa=parseInt(i[1],10);h=X>9&&aa>0;return true}var v,x;if(C(N,"addEventListener")){v=function(Z,X,Y){Z.addEventListener(X,Y,false)};x=function(Z,X,Y){Z.removeEventListener(X,Y,false)}}else{if(C(N,"attachEvent")){v=function(X,Z,Y){X.attachEvent("on"+Z,Y)};x=function(X,Z,Y){X.detachEvent("on"+Z,Y)}}else{throw new Error("Browser not supported")}}var W=false,J=[],L;if("readyState" in d){L=d.readyState;W=L=="complete"||(~navigator.userAgent.indexOf("AppleWebKit/")&&(L=="loaded"||L=="interactive"))}else{W=!!d.body}function s(){if(W){return}W=true;for(var X=0;X')}else{ac=d.createElement("IFRAME");ac.name=Y.props.name}ac.id=ac.name=Y.props.name;delete Y.props.name;if(typeof Y.container=="string"){Y.container=d.getElementById(Y.container)}if(!Y.container){T(ac.style,{position:"absolute",top:"-2000px",left:"0px"});Y.container=d.body}var ab=Y.props.src;Y.props.src="javascript:false";T(ac,Y.props);ac.border=ac.frameBorder=0;ac.allowTransparency=true;Y.container.appendChild(ac);if(Y.onLoad){v(ac,"load",Y.onLoad)}if(Y.usePost){var aa=Y.container.appendChild(d.createElement("form")),X;aa.target=ac.name;aa.action=ab;aa.method="POST";if(typeof(Y.usePost)==="object"){for(var Z in Y.usePost){if(Y.usePost.hasOwnProperty(Z)){if(E){X=d.createElement('')}else{X=d.createElement("INPUT");X.name=Z}X.value=Y.usePost[Z];aa.appendChild(X)}}}aa.submit();aa.parentNode.removeChild(aa)}else{ac.src=ab}Y.props.src=ab;return ac}function V(aa,Z){if(typeof aa=="string"){aa=[aa]}var Y,X=aa.length;while(X--){Y=aa[X];Y=new RegExp(Y.substr(0,1)=="^"?Y:("^"+Y.replace(/(\*)/g,".$1").replace(/\?/g,".")+"$"));if(Y.test(Z)){return true}}return false}function l(Z){var ae=Z.protocol,Y;Z.isHost=Z.isHost||t(S.xdm_p);y=Z.hash||false;if(!Z.props){Z.props={}}if(!Z.isHost){Z.channel=S.xdm_c.replace(/["'<>\\]/g,"");Z.secret=S.xdm_s;Z.remote=S.xdm_e.replace(/["'<>\\]/g,"");ae=S.xdm_p;if(Z.acl&&!V(Z.acl,Z.remote)){throw new Error("Access denied for "+Z.remote)}}else{Z.remote=B(Z.remote);Z.channel=Z.channel||"default"+n++;Z.secret=Math.random().toString(16).substring(2);if(t(ae)){if(j(p.href)==j(Z.remote)){ae="4"}else{if(C(N,"postMessage")||C(d,"postMessage")){ae="1"}else{if(Z.swf&&C(N,"ActiveXObject")&&c()){ae="6"}else{if(navigator.product==="Gecko"&&"frameElement" in N&&navigator.userAgent.indexOf("WebKit")==-1){ae="5"}else{if(Z.remoteHelper){ae="2"}else{ae="0"}}}}}}}Z.protocol=ae;switch(ae){case"0":T(Z,{interval:100,delay:2000,useResize:true,useParent:false,usePolling:false},true);if(Z.isHost){if(!Z.local){var ac=p.protocol+"//"+p.host,X=d.body.getElementsByTagName("img"),ad;var aa=X.length;while(aa--){ad=X[aa];if(ad.src.substring(0,ac.length)===ac){Z.local=ad.src;break}}if(!Z.local){Z.local=N}}var ab={xdm_c:Z.channel,xdm_p:0};if(Z.local===N){Z.usePolling=true;Z.useParent=true;Z.local=p.protocol+"//"+p.host+p.pathname+p.search;ab.xdm_e=Z.local;ab.xdm_pa=1}else{ab.xdm_e=B(Z.local)}if(Z.container){Z.useResize=false;ab.xdm_po=1}Z.remote=P(Z.remote,ab)}else{T(Z,{channel:S.xdm_c,remote:S.xdm_e,useParent:!t(S.xdm_pa),usePolling:!t(S.xdm_po),useResize:Z.useParent?false:Z.useResize})}Y=[new o.stack.HashTransport(Z),new o.stack.ReliableBehavior({}),new o.stack.QueueBehavior({encode:true,maxLength:4000-Z.remote.length}),new o.stack.VerifyBehavior({initiate:Z.isHost})];break;case"1":Y=[new o.stack.PostMessageTransport(Z)];break;case"2":if(Z.isHost){Z.remoteHelper=B(Z.remoteHelper)}Y=[new o.stack.NameTransport(Z),new o.stack.QueueBehavior(),new o.stack.VerifyBehavior({initiate:Z.isHost})];break;case"3":Y=[new o.stack.NixTransport(Z)];break;case"4":Y=[new o.stack.SameOriginTransport(Z)];break;case"5":Y=[new o.stack.FrameElementTransport(Z)];break;case"6":if(!i){c()}Y=[new o.stack.FlashTransport(Z)];break}Y.push(new o.stack.QueueBehavior({lazy:Z.lazy,remove:true}));return Y}function D(aa){var ab,Z={incoming:function(ad,ac){this.up.incoming(ad,ac)},outgoing:function(ac,ad){this.down.outgoing(ac,ad)},callback:function(ac){this.up.callback(ac)},init:function(){this.down.init()},destroy:function(){this.down.destroy()}};for(var Y=0,X=aa.length;Y<\/script>')}}};(function(){var X={};o.Fn={set:function(Y,Z){X[Y]=Z},get:function(Z,Y){var aa=X[Z];if(Y){delete X[Z]}return aa}}}());o.Socket=function(Y){var X=D(l(Y).concat([{incoming:function(ab,aa){Y.onMessage(ab,aa)},callback:function(aa){if(Y.onReady){Y.onReady(aa)}}}])),Z=j(Y.remote);this.origin=j(Y.remote);this.destroy=function(){X.destroy()};this.postMessage=function(aa){X.outgoing(aa,Z)};X.init()};o.Rpc=function(Z,Y){if(Y.local){for(var ab in Y.local){if(Y.local.hasOwnProperty(ab)){var aa=Y.local[ab];if(typeof aa==="function"){Y.local[ab]={method:aa}}}}}var X=D(l(Z).concat([new o.stack.RpcBehavior(this,Y),{callback:function(ac){if(Z.onReady){Z.onReady(ac)}}}]));this.origin=j(Z.remote);this.destroy=function(){X.destroy()};X.init()};o.stack.SameOriginTransport=function(Y){var Z,ab,aa,X;return(Z={outgoing:function(ad,ae,ac){aa(ad);if(ac){ac()}},destroy:function(){if(ab){ab.parentNode.removeChild(ab);ab=null}},onDOMReady:function(){X=j(Y.remote);if(Y.isHost){T(Y.props,{src:P(Y.remote,{xdm_e:p.protocol+"//"+p.host+p.pathname,xdm_c:Y.channel,xdm_p:4}),name:U+Y.channel+"_provider"});ab=A(Y);o.Fn.set(Y.channel,function(ac){aa=ac;K(function(){Z.up.callback(true)},0);return function(ad){Z.up.incoming(ad,X)}})}else{aa=m().Fn.get(Y.channel,true)(function(ac){Z.up.incoming(ac,X)});K(function(){Z.up.callback(true)},0)}},init:function(){G(Z.onDOMReady,Z)}})};o.stack.FlashTransport=function(aa){var ac,X,ab,ad,Y,ae;function af(ah,ag){K(function(){ac.up.incoming(ah,ad)},0)}function Z(ah){var ag=aa.swf+"?host="+aa.isHost;var aj="easyXDM_swf_"+Math.floor(Math.random()*10000);o.Fn.set("flash_loaded"+ah.replace(/[\-.]/g,"_"),function(){o.stack.FlashTransport[ah].swf=Y=ae.firstChild;var ak=o.stack.FlashTransport[ah].queue;for(var al=0;al"}return(ac={outgoing:function(ah,ai,ag){Y.postMessage(aa.channel,ah.toString());if(ag){ag()}},destroy:function(){try{Y.destroyChannel(aa.channel)}catch(ag){}Y=null;if(X){X.parentNode.removeChild(X);X=null}},onDOMReady:function(){ad=aa.remote;o.Fn.set("flash_"+aa.channel+"_init",function(){K(function(){ac.up.callback(true)})});o.Fn.set("flash_"+aa.channel+"_onMessage",af);aa.swf=B(aa.swf);var ah=z(aa.swf);var ag=function(){o.stack.FlashTransport[ah].init=true;Y=o.stack.FlashTransport[ah].swf;Y.createChannel(aa.channel,aa.secret,j(aa.remote),aa.isHost);if(aa.isHost){if(h&&aa.swfNoThrottle){T(aa.props,{position:"fixed",right:0,top:0,height:"20px",width:"20px"})}T(aa.props,{src:P(aa.remote,{xdm_e:j(p.href),xdm_c:aa.channel,xdm_p:6,xdm_s:aa.secret}),name:U+aa.channel+"_provider"});X=A(aa)}};if(o.stack.FlashTransport[ah]&&o.stack.FlashTransport[ah].init){ag()}else{if(!o.stack.FlashTransport[ah]){o.stack.FlashTransport[ah]={queue:[ag]};Z(ah)}else{o.stack.FlashTransport[ah].queue.push(ag)}}},init:function(){G(ac.onDOMReady,ac)}})};o.stack.PostMessageTransport=function(aa){var ac,ad,Y,Z;function X(ae){if(ae.origin){return j(ae.origin)}if(ae.uri){return j(ae.uri)}if(ae.domain){return p.protocol+"//"+ae.domain}throw"Unable to retrieve the origin of the event"}function ab(af){var ae=X(af);if(ae==Z&&af.data.substring(0,aa.channel.length+1)==aa.channel+" "){ac.up.incoming(af.data.substring(aa.channel.length+1),ae)}}return(ac={outgoing:function(af,ag,ae){Y.postMessage(aa.channel+" "+af,ag||Z);if(ae){ae()}},destroy:function(){x(N,"message",ab);if(ad){Y=null;ad.parentNode.removeChild(ad);ad=null}},onDOMReady:function(){Z=j(aa.remote);if(aa.isHost){var ae=function(af){if(af.data==aa.channel+"-ready"){Y=("postMessage" in ad.contentWindow)?ad.contentWindow:ad.contentWindow.document;x(N,"message",ae);v(N,"message",ab);K(function(){ac.up.callback(true)},0)}};v(N,"message",ae);T(aa.props,{src:P(aa.remote,{xdm_e:j(p.href),xdm_c:aa.channel,xdm_p:1}),name:U+aa.channel+"_provider"});ad=A(aa)}else{v(N,"message",ab);Y=("postMessage" in N.parent)?N.parent:N.parent.document;Y.postMessage(aa.channel+"-ready",Z);K(function(){ac.up.callback(true)},0)}},init:function(){G(ac.onDOMReady,ac)}})};o.stack.FrameElementTransport=function(Y){var Z,ab,aa,X;return(Z={outgoing:function(ad,ae,ac){aa.call(this,ad);if(ac){ac()}},destroy:function(){if(ab){ab.parentNode.removeChild(ab);ab=null}},onDOMReady:function(){X=j(Y.remote);if(Y.isHost){T(Y.props,{src:P(Y.remote,{xdm_e:j(p.href),xdm_c:Y.channel,xdm_p:5}),name:U+Y.channel+"_provider"});ab=A(Y);ab.fn=function(ac){delete ab.fn;aa=ac;K(function(){Z.up.callback(true)},0);return function(ad){Z.up.incoming(ad,X)}}}else{if(d.referrer&&j(d.referrer)!=S.xdm_e){N.top.location=S.xdm_e}aa=N.frameElement.fn(function(ac){Z.up.incoming(ac,X)});Z.up.callback(true)}},init:function(){G(Z.onDOMReady,Z)}})};o.stack.NameTransport=function(ab){var ac;var ae,ai,aa,ag,ah,Y,X;function af(al){var ak=ab.remoteHelper+(ae?"#_3":"#_2")+ab.channel;ai.contentWindow.sendMessage(al,ak)}function ad(){if(ae){if(++ag===2||!ae){ac.up.callback(true)}}else{af("ready");ac.up.callback(true)}}function aj(ak){ac.up.incoming(ak,Y)}function Z(){if(ah){K(function(){ah(true)},0)}}return(ac={outgoing:function(al,am,ak){ah=ak;af(al)},destroy:function(){ai.parentNode.removeChild(ai);ai=null;if(ae){aa.parentNode.removeChild(aa);aa=null}},onDOMReady:function(){ae=ab.isHost;ag=0;Y=j(ab.remote);ab.local=B(ab.local);if(ae){o.Fn.set(ab.channel,function(al){if(ae&&al==="ready"){o.Fn.set(ab.channel,aj);ad()}});X=P(ab.remote,{xdm_e:ab.local,xdm_c:ab.channel,xdm_p:2});T(ab.props,{src:X+"#"+ab.channel,name:U+ab.channel+"_provider"});aa=A(ab)}else{ab.remoteHelper=ab.remote;o.Fn.set(ab.channel,aj)}var ak=function(){var al=ai||this;x(al,"load",ak);o.Fn.set(ab.channel+"_load",Z);(function am(){if(typeof al.contentWindow.sendMessage=="function"){ad()}else{K(am,50)}}())};ai=A({props:{src:ab.local+"#_4"+ab.channel},onLoad:ak})},init:function(){G(ac.onDOMReady,ac)}})};o.stack.HashTransport=function(Z){var ac;var ah=this,af,aa,X,ad,am,ab,al;var ag,Y;function ak(ao){if(!al){return}var an=Z.remote+"#"+(am++)+"_"+ao;((af||!ag)?al.contentWindow:al).location=an}function ae(an){ad=an;ac.up.incoming(ad.substring(ad.indexOf("_")+1),Y)}function aj(){if(!ab){return}var an=ab.location.href,ap="",ao=an.indexOf("#");if(ao!=-1){ap=an.substring(ao)}if(ap&&ap!=ad){ae(ap)}}function ai(){aa=setInterval(aj,X)}return(ac={outgoing:function(an,ao){ak(an)},destroy:function(){N.clearInterval(aa);if(af||!ag){al.parentNode.removeChild(al)}al=null},onDOMReady:function(){af=Z.isHost;X=Z.interval;ad="#"+Z.channel;am=0;ag=Z.useParent;Y=j(Z.remote);if(af){T(Z.props,{src:Z.remote,name:U+Z.channel+"_provider"});if(ag){Z.onLoad=function(){ab=N;ai();ac.up.callback(true)}}else{var ap=0,an=Z.delay/50;(function ao(){if(++ap>an){throw new Error("Unable to reference listenerwindow")}try{ab=al.contentWindow.frames[U+Z.channel+"_consumer"]}catch(aq){}if(ab){ai();ac.up.callback(true)}else{K(ao,50)}}())}al=A(Z)}else{ab=N;ai();if(ag){al=parent;ac.up.callback(true)}else{T(Z,{props:{src:Z.remote+"#"+Z.channel+new Date(),name:U+Z.channel+"_consumer"},onLoad:function(){ac.up.callback(true)}});al=A(Z)}}},init:function(){G(ac.onDOMReady,ac)}})};o.stack.ReliableBehavior=function(Y){var aa,ac;var ab=0,X=0,Z="";return(aa={incoming:function(af,ad){var ae=af.indexOf("_"),ag=af.substring(0,ae).split(",");af=af.substring(ae+1);if(ag[0]==ab){Z="";if(ac){ac(true)}}if(af.length>0){aa.down.outgoing(ag[1]+","+ab+"_"+Z,ad);if(X!=ag[1]){X=ag[1];aa.up.incoming(af,ad)}}},outgoing:function(af,ad,ae){Z=af;ac=ae;aa.down.outgoing(X+","+(++ab)+"_"+af,ad)}})};o.stack.QueueBehavior=function(Z){var ac,ad=[],ag=true,aa="",af,X=0,Y=false,ab=false;function ae(){if(Z.remove&&ad.length===0){w(ac);return}if(ag||ad.length===0||af){return}ag=true;var ah=ad.shift();ac.down.outgoing(ah.data,ah.origin,function(ai){ag=false;if(ah.callback){K(function(){ah.callback(ai)},0)}ae()})}return(ac={init:function(){if(t(Z)){Z={}}if(Z.maxLength){X=Z.maxLength;ab=true}if(Z.lazy){Y=true}else{ac.down.init()}},callback:function(ai){ag=false;var ah=ac.up;ae();ah.callback(ai)},incoming:function(ak,ai){if(ab){var aj=ak.indexOf("_"),ah=parseInt(ak.substring(0,aj),10);aa+=ak.substring(aj+1);if(ah===0){if(Z.encode){aa=k(aa)}ac.up.incoming(aa,ai);aa=""}}else{ac.up.incoming(ak,ai)}},outgoing:function(al,ai,ak){if(Z.encode){al=H(al)}var ah=[],aj;if(ab){while(al.length!==0){aj=al.substring(0,X);al=al.substring(aj.length);ah.push(aj)}while((aj=ah.shift())){ad.push({data:ah.length+"_"+aj,origin:ai,callback:ah.length===0?ak:null})}}else{ad.push({data:al,origin:ai,callback:ak})}if(Y){ac.down.init()}else{ae()}},destroy:function(){af=true;ac.down.destroy()}})};o.stack.VerifyBehavior=function(ab){var ac,aa,Y,Z=false;function X(){aa=Math.random().toString(16).substring(2);ac.down.outgoing(aa)}return(ac={incoming:function(af,ad){var ae=af.indexOf("_");if(ae===-1){if(af===aa){ac.up.callback(true)}else{if(!Y){Y=af;if(!ab.initiate){X()}ac.down.outgoing(af)}}}else{if(af.substring(0,ae)===Y){ac.up.incoming(af.substring(ae+1),ad)}}},outgoing:function(af,ad,ae){ac.down.outgoing(aa+"_"+af,ad,ae)},callback:function(ad){if(ab.initiate){X()}}})};o.stack.RpcBehavior=function(ad,Y){var aa,af=Y.serializer||O();var ae=0,ac={};function X(ag){ag.jsonrpc="2.0";aa.down.outgoing(af.stringify(ag))}function ab(ag,ai){var ah=Array.prototype.slice;return function(){var aj=arguments.length,al,ak={method:ai};if(aj>0&&typeof arguments[aj-1]==="function"){if(aj>1&&typeof arguments[aj-2]==="function"){al={success:arguments[aj-2],error:arguments[aj-1]};ak.params=ah.call(arguments,0,aj-2)}else{al={success:arguments[aj-1]};ak.params=ah.call(arguments,0,aj-1)}ac[""+(++ae)]=al;ak.id=ae}else{ak.params=ah.call(arguments,0)}if(ag.namedParams&&ak.params.length===1){ak.params=ak.params[0]}X(ak)}}function Z(an,am,ai,al){if(!ai){if(am){X({id:am,error:{code:-32601,message:"Procedure not found."}})}return}var ak,ah;if(am){ak=function(ao){ak=q;X({id:am,result:ao})};ah=function(ao,ap){ah=q;var aq={id:am,error:{code:-32099,message:ao}};if(ap){aq.error.data=ap}X(aq)}}else{ak=ah=q}if(!r(al)){al=[al]}try{var ag=ai.method.apply(ai.scope,al.concat([ak,ah]));if(!t(ag)){ak(ag)}}catch(aj){ah(aj.message)}}return(aa={incoming:function(ah,ag){var ai=af.parse(ah);if(ai.method){if(Y.handle){Y.handle(ai,X)}else{Z(ai.method,ai.id,Y.local[ai.method],ai.params)}}else{var aj=ac[ai.id];if(ai.error){if(aj.error){aj.error(ai.error)}}else{if(aj.success){aj.success(ai.result)}}delete ac[ai.id]}},init:function(){if(Y.remote){for(var ag in Y.remote){if(Y.remote.hasOwnProperty(ag)){ad[ag]=ab(Y.remote[ag],ag)}}}aa.down.init()},destroy:function(){for(var ag in Y.remote){if(Y.remote.hasOwnProperty(ag)&&ad.hasOwnProperty(ag)){delete ad[ag]}}aa.down.destroy()}})};b.easyXDM=o})(window,document,location,window.setTimeout,decodeURIComponent,encodeURIComponent); -!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;ge;e++){source=c[e];for(u in source)void 0!==source[u]&&(a[u]=source[u])}return a}var r;try{r=a("type-of")}catch(s){var t=a;r=t("type")}var u,v,w=0,x=window.document,y=/^(?:text|application)\/javascript/i,z=/^(?:text|application)\/xml/i,A="application/json",B="text/html",C=/^\s*$/;window.ajax=b.exports=function(a){var b=q({},a||{});for(u in ajax.settings)void 0===b[u]&&(b[u]=ajax.settings[u]);e(b),b.crossDomain||(b.crossDomain=/^([\w-]+:)?\/\/([^\/]+)/.test(b.url)&&RegExp.$2!=window.location.host);var c=b.dataType,d=/=\?/.test(b.url);if("jsonp"==c||d)return d||(b.url=m(b.url,"callback=?")),ajax.JSONP(b);b.url||(b.url=window.location.toString()),n(b);var f,j=b.accepts[c],o={},p=/^([\w-]+:)\/\//.test(b.url)?RegExp.$1:window.location.protocol,r=ajax.settings.xhr();b.crossDomain||(o["X-Requested-With"]="XMLHttpRequest"),j&&(o.Accept=j,j.indexOf(",")>-1&&(j=j.split(",",2)[0]),r.overrideMimeType&&r.overrideMimeType(j)),(b.contentType||b.data&&"GET"!=b.type.toUpperCase())&&(o["Content-Type"]=b.contentType||"application/x-www-form-urlencoded"),b.headers=q(o,b.headers||{}),r.onreadystatechange=function(){if(4==r.readyState){clearTimeout(f);var a,d=!1;if(r.status>=200&&r.status<300||304==r.status||0==r.status&&"file:"==p){c=c||l(r.getResponseHeader("content-type")),a=r.responseText;try{"script"==c?(1,eval)(a):"xml"==c?a=r.responseXML:"json"==c&&(a=C.test(a)?null:JSON.parse(a))}catch(e){d=e}d?i(d,"parsererror",r,b):h(a,r,b)}else i(null,"error",r,b)}};var s="async"in b?b.async:!0;r.open(b.type,b.url,s);for(v in b.headers)r.setRequestHeader(v,b.headers[v]);return g(r,b)===!1?(r.abort(),!1):(b.timeout>0&&(f=setTimeout(function(){r.onreadystatechange=k,r.abort(),i(null,"timeout",r,b)},b.timeout)),r.send(b.data?b.data:null),r)},ajax.active=0,ajax.JSONP=function(a){if(!("type"in a))return ajax(a);var b,c="jsonp"+ ++w,d=x.createElement("script"),e=function(){c in window&&(window[c]=k),j("abort",f,a)},f={abort:e},g=x.getElementsByTagName("head")[0]||x.documentElement;return a.error&&(d.onerror=function(){f.abort(),a.error()}),window[c]=function(d){clearTimeout(b),delete window[c],h(d,f,a)},n(a),d.src=a.url.replace(/=\?/,"="+c),g.insertBefore(d,g.firstChild),a.timeout>0&&(b=setTimeout(function(){f.abort(),j("timeout",f,a)},a.timeout)),f},ajax.settings={type:"GET",beforeSend:k,success:k,error:k,complete:k,context:null,global:!0,xhr:function(){return new window.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript",json:A,xml:"application/xml, text/xml",html:B,text:"text/plain"},crossDomain:!1,timeout:0},ajax.get=function(a,b){return ajax({url:a,success:b})},ajax.post=function(a,b,c,d){return"function"===r(b)&&(d=d||c,c=b,b=null),ajax({type:"POST",url:a,data:b,success:c,dataType:d})},ajax.getJSON=function(a,b){return ajax({url:a,success:b,dataType:"json"})};var D=encodeURIComponent},{"type-of":2}],2:[function(a,b){var c=Object.prototype.toString;b.exports=function(a){switch(c.call(a)){case"[object Function]":return"function";case"[object Date]":return"date";case"[object RegExp]":return"regexp";case"[object Arguments]":return"arguments";case"[object Array]":return"array";case"[object String]":return"string"}return null===a?"null":void 0===a?"undefined":a&&1===a.nodeType?"element":a===Object(a)?"object":typeof a}},{}]},{},[1]); -/*conekta.js v0.3.0 | 2013- Conekta | https://github.com/conekta/conekta.js/blob/master/LICENSE-MIT.txt +!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;ge;e++){source=c[e];for(u in source)void 0!==source[u]&&(a[u]=source[u])}return a}var r;try{r=a("type-of")}catch(s){var t=a;r=t("type")}var u,v,w=0,x=window.document,y=/^(?:text|application)\/javascript/i,z=/^(?:text|application)\/xml/i,A="application/json",B="text/html",C=/^\s*$/;window.ajax=b.exports=function(a){var b=q({},a||{});for(u in ajax.settings)void 0===b[u]&&(b[u]=ajax.settings[u]);e(b),b.crossDomain||(b.crossDomain=/^([\w-]+:)?\/\/([^\/]+)/.test(b.url)&&RegExp.$2!=window.location.host);var c=b.dataType,d=/=\?/.test(b.url);if("jsonp"==c||d)return d||(b.url=m(b.url,"callback=?")),ajax.JSONP(b);b.url||(b.url=window.location.toString()),n(b);var f,j=b.accepts[c],o={},p=/^([\w-]+:)\/\//.test(b.url)?RegExp.$1:window.location.protocol,r=ajax.settings.xhr();b.crossDomain||(o["X-Requested-With"]="XMLHttpRequest"),j&&(o.Accept=j,j.indexOf(",")>-1&&(j=j.split(",",2)[0]),r.overrideMimeType&&r.overrideMimeType(j)),(b.contentType||b.data&&"GET"!=b.type.toUpperCase())&&(o["Content-Type"]=b.contentType||"application/x-www-form-urlencoded"),b.headers=q(o,b.headers||{}),r.onreadystatechange=function(){if(4==r.readyState){clearTimeout(f);var a,d=!1;if(r.status>=200&&r.status<300||304==r.status||0==r.status&&"file:"==p){c=c||l(r.getResponseHeader("content-type")),a=r.responseText;try{"script"==c?(1,eval)(a):"xml"==c?a=r.responseXML:"json"==c&&(a=C.test(a)?null:JSON.parse(a))}catch(e){d=e}d?i(d,"parsererror",r,b):h(a,r,b)}else i(null,"error",r,b)}};var s="async"in b?b.async:!0;r.open(b.type,b.url,s);for(v in b.headers)r.setRequestHeader(v,b.headers[v]);return g(r,b)===!1?(r.abort(),!1):(b.timeout>0&&(f=setTimeout(function(){r.onreadystatechange=k,r.abort(),i(null,"timeout",r,b)},b.timeout)),r.send(b.data?b.data:null),r)},ajax.active=0,ajax.JSONP=function(a){if(!("type"in a))return ajax(a);var b="jsonp"+ ++w;a.jsonpCallback&&(b=a.jsonpCallback);var c,d=x.createElement("script"),e=function(){b in window&&(window[b]=k),j("abort",f,a)},f={abort:e},g=x.getElementsByTagName("head")[0]||x.documentElement;return a.error&&(d.onerror=function(){f.abort(),a.error()}),window[b]=function(d){clearTimeout(c);try{delete window[b]}catch(e){window[b]=void 0}h(d,f,a)},n(a),d.src=a.url.replace(/=\?/,"="+b),g.insertBefore(d,g.firstChild),a.timeout>0&&(c=setTimeout(function(){f.abort(),j("timeout",f,a)},a.timeout)),f},ajax.settings={type:"GET",beforeSend:k,success:k,error:k,complete:k,context:null,global:!0,xhr:function(){return new window.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript",json:A,xml:"application/xml, text/xml",html:B,text:"text/plain"},crossDomain:!1,timeout:0},ajax.get=function(a,b){return ajax({url:a,success:b})},ajax.post=function(a,b,c,d){return"function"===r(b)&&(d=d||c,c=b,b=null),ajax({type:"POST",url:a,data:b,success:c,dataType:d})},ajax.getJSON=function(a,b){return ajax({url:a,success:b,dataType:"json"})};var D=encodeURIComponent},{"type-of":2}],2:[function(a,b){var c=Object.prototype.toString;b.exports=function(a){switch(c.call(a)){case"[object Function]":return"function";case"[object Date]":return"date";case"[object RegExp]":return"regexp";case"[object Arguments]":return"arguments";case"[object Array]":return"array";case"[object String]":return"string"}return null===a?"null":void 0===a?"undefined":a&&1===a.nodeType?"element":a===Object(a)?"object":typeof a}},{}]},{},[1]); +/*conekta.js v1.0.0 | 2013- Conekta | https://github.com/conekta/conekta.js/blob/master/LICENSE-MIT.txt */ (function() { - var Base64, base_url, fingerprint, i, publishable_key, session_id, useable_characters, _i; + var Base64, antifraud_config, base_url, fingerprint, getAntifraudConfig, getCartCallback, i, kount_merchant_id, localstorageGet, localstorageSet, originalGetCart, originalOnCartUpdated, originalOnItemAdded, publishable_key, random_index, random_value_array, send_beacon, session_id, useable_characters, _i, _j, _language, _ref; base_url = 'https://api.conekta.io/'; - publishable_key = null; - session_id = ""; - useable_characters = "abcdefghijklmnopqrstuvwxyz0123456789"; + _language = 'es'; - for (i = _i = 0; _i <= 30; i = ++_i) { - session_id += useable_characters.charAt(Math.floor(Math.random() * 36)); - } + kount_merchant_id = '205000'; + + antifraud_config = {}; + + localstorageGet = function(key) { + if (typeof localStorage !== 'undefined' && typeof localStorage.getItem !== 'undefined') { + return localStorage.getItem(key); + } else { + return null; + } + }; + + localstorageSet = function(key, value) { + if (typeof localStorage !== 'undefined' && typeof localStorage.setItem !== 'undefined') { + return localStorage.setItem(key, value); + } + }; + + publishable_key = localstorageGet('_conekta_publishable_key'); fingerprint = function() { - var add_swf, body, fingerprint_png_img, fingerprint_png_p, fingerprint_script; - if (typeof document !== 'undefined' && typeof document.body !== 'undefined' && document.body && (document.readyState === 'interactive' || document.readyState === 'complete')) { - body = document.getElementsByTagName('body')[0]; - fingerprint_png_p = document.createElement('p'); - fingerprint_png_p.setAttribute("style", "background:url(https://h.online-metrix.net/fp/clear.png?org_id=k8vif92e&session_id=banorteixe_conekta" + session_id + "&m=1) ! important; display:none ! important;"); - body.appendChild(fingerprint_png_p); - fingerprint_png_img = document.createElement('img'); - fingerprint_png_img.setAttribute('style', 'display:none ! important;'); - fingerprint_png_img.src = "https://h.online-metrix.net/fp/clear.png?org_id=k8vif92e&session_id=banorteixe_conekta" + session_id + "&m=2"; - body.appendChild(fingerprint_png_img); - add_swf = function() { - var fingerprint_swf_object, fingerprint_swf_param; - fingerprint_swf_object = document.createElement('object'); - fingerprint_swf_object.type = 'application/x-shockwave-flash'; - fingerprint_swf_object.data = "https://h.online-metrix.net/fp/fp.swf?org_id=k8vif92e&session_id=banorteixe_conekta" + session_id; - fingerprint_swf_object.width = '1'; - fingerprint_swf_object.setAttribute('style', 'display:none ! important;'); - body.appendChild(fingerprint_swf_object); - fingerprint_swf_param = document.createElement('param'); - fingerprint_swf_param.name = 'movie'; - fingerprint_swf_param.setAttribute('style', 'display:none ! important;'); - fingerprint_swf_param.value = 'https://h.online-metrix.net/fp/fp.swf?org_id=k8vif92e&session_id=merchant' + session_id; - if (typeof fingerprint_swf_param.appendChild === 'function') { - fingerprint_swf_param.appendChild(document.createElement('div')); + var body, e, iframe, image; + if (typeof document !== 'undefined' && typeof document.body !== 'undefined' && document.body && (document.readyState === 'interactive' || document.readyState === 'complete') && 'undefined' !== typeof Conekta) { + if (!Conekta._helpers.finger_printed) { + Conekta._helpers.finger_printed = true; + body = document.getElementsByTagName('body')[0]; + iframe = document.createElement('iframe'); + iframe.setAttribute("height", "1"); + iframe.setAttribute("scrolling", "no"); + iframe.setAttribute("frameborder", "0"); + iframe.setAttribute("width", "1"); + iframe.setAttribute("src", "" + base_url + "fraud_providers/kount/logo.htm?m=" + kount_merchant_id + "&s=" + session_id); + image = document.createElement('img'); + image.setAttribute("height", "1"); + image.setAttribute("width", "1"); + image.setAttribute("src", "" + base_url + "fraud_providers/kount/logo.gif?m=" + kount_merchant_id + "&s=" + session_id); + try { + iframe.appendChild(image); + } catch (_error) { + e = _error; } - body.appendChild(fingerprint_swf_param); - }; - if (navigator.userAgent.match(/MSIE [5-9]+/) && document.readyState !== 'complete') { - window.attachEvent("onload", add_swf); - } else { - add_swf(); + body.appendChild(iframe); } - fingerprint_script = document.createElement('script'); - fingerprint_script.type = 'text/javascript'; - fingerprint_script.src = 'https://h.online-metrix.net/fp/check.js?org_id=k8vif92e&session_id=banorteixe_conekta' + session_id; - body.appendChild(fingerprint_script); } else { setTimeout(fingerprint, 150); } }; - fingerprint(); + send_beacon = function() { + var ls, _user_id; + if (typeof document !== 'undefined' && typeof document.body !== 'undefined' && document.body && (document.readyState === 'interactive' || document.readyState === 'complete') && 'undefined' !== typeof Conekta) { + if (!Conekta._helpers.beacon_sent) { + if (antifraud_config['riskified']) { + ls = function() { + var s, store_domain, url, x; + store_domain = antifraud_config['riskified']['domain']; + session_id = session_id; + url = ('https:' === document.location.protocol ? 'https://' : 'http://') + 'beacon.riskified.com?shop=' + store_domain + '&sid=' + session_id; + s = document.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = url; + x = document.getElementsByTagName('script')[0]; + x.parentNode.insertBefore(s, x); + }; + ls(); + } + if (antifraud_config['siftscience']) { + _user_id = session_id; + window._sift = window._sift || []; + _sift.push(["_setAccount", antifraud_config['siftscience']['beacon_key']]); + _sift.push(["_setSessionId", session_id]); + _sift.push(["_trackPageview"]); + ls = function() { + var e, s; + e = document.createElement("script"); + e.type = "text/javascript"; + e.async = true; + e.src = ('https:' === document.location.protocol ? 'https://' : 'http://') + 'cdn.siftscience.com/s.js'; + s = document.getElementsByTagName("script")[0]; + s.parentNode.insertBefore(e, s); + }; + ls(); + } + } + } else { + setTimeout(send_beacon, 150); + } + }; + + if (localstorageGet('_conekta_session_id') && localstorageGet('_conekta_session_id_timestamp') && ((new Date).getTime() - 600000) < parseInt(localstorageGet('_conekta_session_id_timestamp'))) { + session_id = localStorage.getItem('_conekta_session_id'); + fingerprint(); + } else if (typeof Shopify !== 'undefined' && typeof Shopify.getCart !== 'undefined') { + getCartCallback = function(cart) { + session_id = cart['token']; + if (session_id !== null && session_id !== '') { + fingerprint(); + send_beacon(); + localstorageSet('_conekta_session_id', session_id); + localstorageSet('_conekta_session_id_timestamp', (new Date).getTime().toString()); + } + }; + Shopify.getCart(function(cart) { + getCartCallback(cart); + }); + originalGetCart = Shopify.getCart; + Shopify.getCart = function(callback) { + var tapped_callback; + tapped_callback = function(cart) { + getCartCallback(cart); + callback(cart); + }; + originalGetCart(tapped_callback); + }; + originalOnItemAdded = Shopify.onItemAdded; + Shopify.onItemAdded = function(callback) { + var tapped_callback; + tapped_callback = function(item) { + Shopify.getCart(function(cart) { + getCartCallback(cart); + }); + callback(item); + }; + originalOnItemAdded(tapped_callback); + }; + originalOnCartUpdated = Shopify.onCartUpdated; + Shopify.onCartUpdated = function(callback) { + var tapped_callback; + tapped_callback = function(cart) { + getCartCallback(cart); + callback(cart); + }; + originalOnCartUpdated(tapped_callback); + }; + if (typeof jQuery !== 'undefined') { + jQuery(document).ajaxSuccess(function(event, request, options, data) { + if (options['url'] === 'cart/add.js') { + Shopify.getCart(function(cart) { + getCartCallback(cart); + }); + } + }); + } + } else { + useable_characters = "abcdefghijklmnopqrstuvwxyz0123456789"; + if (typeof crypto !== 'undefined' && typeof crypto.getRandomValues !== 'undefined') { + random_value_array = new Uint32Array(32); + crypto.getRandomValues(random_value_array); + for (i = _i = 0, _ref = random_value_array.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) { + session_id += useable_characters.charAt(random_value_array[i] % 36); + } + } else { + for (i = _j = 0; _j <= 30; i = ++_j) { + random_index = Math.floor(Math.random() * 36); + session_id += useable_characters.charAt(random_index); + } + } + localstorageSet('_conekta_session_id', session_id); + localstorageSet('_conekta_session_id_timestamp', (new Date).getTime().toString()); + fingerprint(); + } + + getAntifraudConfig = function() { + var error_callback, success_callback, unparsed_antifraud_config, url; + unparsed_antifraud_config = localstorageGet('conekta_antifraud_config'); + if (unparsed_antifraud_config && unparsed_antifraud_config.match(/^\{/)) { + return antifraud_config = JSON.parse(unparsed_antifraud_config); + } else { + success_callback = function(config) { + antifraud_config = config; + localstorageSet('conekta_antifraud_config', antifraud_config); + return send_beacon(); + }; + error_callback = function() {}; + url = "https://d3fxnri0mz3rya.cloudfront.net/antifraud/" + document.domain + ".js"; + return ajax({ + url: url, + dataType: 'jsonp', + jsonpCallback: 'conekta_antifraud_config_jsonp', + success: success_callback, + error: error_callback + }); + } + }; + + getAntifraudConfig(); Base64 = { _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", @@ -204,163 +342,190 @@ } }; - window.Conekta = { - setPublishableKey: function(key) { - var e, s; - if (typeof key === 'string' && key.match(/^[a-zA-Z0-9_]*$/) && key.length >= 20 && key.length < 30) { - publishable_key = key; - } else { - Conekta._helpers.log('Unusable public key: ' + key); - } - }, - getPublishableKey: function() { - return publishable_key; - }, - _helpers: { - parseForm: function(charge_form) { - var all_inputs, attribute, attribute_name, attributes, charge, input, inputs, key, last_attribute, line_items, node, parent_node, selects, textareas, val, _j, _k, _l, _len, _len1, _m, _n, _ref, _ref1, _ref2; - charge = {}; - if (typeof charge_form === 'object') { - if (typeof jQuery !== 'undefined' && (charge_form instanceof jQuery || 'jquery' in Object(charge_form))) { - charge_form = charge_form.get()[0]; - } - if (charge_form.nodeType) { - textareas = charge_form.getElementsByTagName('textarea'); - inputs = charge_form.getElementsByTagName('input'); - selects = charge_form.getElementsByTagName('select'); - all_inputs = new Array(textareas.length + inputs.length + selects.length); - for (i = _j = 0, _ref = textareas.length - 1; _j <= _ref; i = _j += 1) { - all_inputs[i] = textareas[i]; - } - for (i = _k = 0, _ref1 = inputs.length - 1; _k <= _ref1; i = _k += 1) { - all_inputs[i + textareas.length] = inputs[i]; + if (!window.Conekta) { + window.Conekta = { + setLanguage: function(language) { + return _language = language; + }, + getLanguage: function() { + return _language; + }, + setPublishableKey: function(key) { + if (typeof key === 'string' && key.match(/^[a-zA-Z0-9_]*$/) && key.length >= 20 && key.length < 30) { + publishable_key = key; + localstorageSet('_conekta_publishable_key', publishable_key); + } else { + Conekta._helpers.log('Unusable public key: ' + key); + } + }, + getPublishableKey: function() { + return publishable_key; + }, + _helpers: { + finger_printed: false, + beacon_sent: false, + objectKeys: function(obj) { + var keys, p; + keys = []; + for (p in obj) { + if (Object.prototype.hasOwnProperty.call(obj, p)) { + keys.push(p); } - for (i = _l = 0, _ref2 = selects.length - 1; _l <= _ref2; i = _l += 1) { - all_inputs[i + textareas.length + inputs.length] = selects[i]; + } + return keys; + }, + parseForm: function(charge_form) { + var all_inputs, attribute, attribute_name, attributes, charge, input, inputs, key, last_attribute, line_items, node, parent_node, selects, textareas, val, _k, _l, _len, _len1, _m, _n, _o, _ref1, _ref2, _ref3; + charge = {}; + if (typeof charge_form === 'object') { + if (typeof jQuery !== 'undefined' && (charge_form instanceof jQuery || 'jquery' in Object(charge_form))) { + charge_form = charge_form.get()[0]; + if (typeof charge_form !== 'object') { + return {}; + } } - for (_m = 0, _len = all_inputs.length; _m < _len; _m++) { - input = all_inputs[_m]; - if (input) { - attribute_name = input.getAttribute('data-conekta'); - if (attribute_name) { - if (input.tagName === 'SELECT') { - val = input.value; - } else { - val = input.getAttribute('value') || input.innerHTML || input.value; - } - attributes = attribute_name.replace(/\]/g, '').replace(/\-/g, '_').split(/\[/); - parent_node = null; - node = charge; - last_attribute = null; - for (_n = 0, _len1 = attributes.length; _n < _len1; _n++) { - attribute = attributes[_n]; - if (!node[attribute]) { - node[attribute] = {}; + if (charge_form.nodeType) { + textareas = charge_form.getElementsByTagName('textarea'); + inputs = charge_form.getElementsByTagName('input'); + selects = charge_form.getElementsByTagName('select'); + all_inputs = new Array(textareas.length + inputs.length + selects.length); + for (i = _k = 0, _ref1 = textareas.length - 1; _k <= _ref1; i = _k += 1) { + all_inputs[i] = textareas[i]; + } + for (i = _l = 0, _ref2 = inputs.length - 1; _l <= _ref2; i = _l += 1) { + all_inputs[i + textareas.length] = inputs[i]; + } + for (i = _m = 0, _ref3 = selects.length - 1; _m <= _ref3; i = _m += 1) { + all_inputs[i + textareas.length + inputs.length] = selects[i]; + } + for (_n = 0, _len = all_inputs.length; _n < _len; _n++) { + input = all_inputs[_n]; + if (input) { + attribute_name = input.getAttribute('data-conekta'); + if (attribute_name) { + if (input.tagName === 'SELECT') { + val = input.value; + } else { + val = input.value || input.getAttribute('value') || input.innerHTML; } - parent_node = node; - last_attribute = attribute; - node = node[attribute]; + attributes = attribute_name.replace(/\]/g, '').replace(/\-/g, '_').split(/\[/); + parent_node = null; + node = charge; + last_attribute = null; + for (_o = 0, _len1 = attributes.length; _o < _len1; _o++) { + attribute = attributes[_o]; + if (!node[attribute]) { + node[attribute] = {}; + } + parent_node = node; + last_attribute = attribute; + node = node[attribute]; + } + parent_node[last_attribute] = val; } - parent_node[last_attribute] = val; } } + } else { + charge = charge_form; } - } else { - charge = charge_form; - } - if (charge.details && charge.details.line_items && Object.prototype.toString.call(charge.details.line_items) !== '[object Array]' && typeof charge.details.line_items === 'object') { - line_items = []; - for (key in charge.details.line_items) { - line_items.push(charge.details.line_items[key]); + if (charge.details && charge.details.line_items && Object.prototype.toString.call(charge.details.line_items) !== '[object Array]' && typeof charge.details.line_items === 'object') { + line_items = []; + for (key in charge.details.line_items) { + line_items.push(charge.details.line_items[key]); + } + charge.details.line_items = line_items; } - charge.details.line_items = line_items; } - } - return charge; - }, - getSessionId: function() { - return session_id; - }, - xDomainPost: function(params) { - var error_callback, rpc, success_callback; - success_callback = function(data, textStatus, jqXHR) { - if (!data || (data.object === 'error')) { - return params.error(data || { + return charge; + }, + getSessionId: function() { + return session_id; + }, + xDomainPost: function(params) { + var error_callback, rpc, success_callback; + success_callback = function(data, textStatus, jqXHR) { + if (!data || (data.object === 'error') || !data.id) { + return params.error(data || { + object: 'error', + type: 'api_error', + message: "Something went wrong on Conekta's end", + message_to_purchaser: "Your code could not be processed, please try again later" + }); + } else { + return params.success(data); + } + }; + error_callback = function() { + return params.error({ object: 'error', type: 'api_error', - message: "Something went wrong on Conekta's end" + message: 'Something went wrong, possibly a connectivity issue', + message_to_purchaser: "Your code could not be processed, please try again later" }); - } else { - return params.success(data); - } - }; - error_callback = function() { - return params.error({ - object: 'error', - type: 'api_error', - message: 'Something went wrong, possibly a connectivity issue' - }); - }; - if (document.location.protocol === 'file:') { - params.url = (params.jsonp_url || params.url) + '/create.js'; - params.data['_Version'] = "0.3.0"; - params.data['_RaiseHtmlError'] = false; - params.data['auth_token'] = Conekta.getPublishableKey(); - params.data['conekta_client_user_agent'] = '{"agent":"Conekta JavascriptBindings/0.3.0"}'; - return ajax({ - url: base_url + params.url, - dataType: 'jsonp', - data: params.data, - success: success_callback, - error: error_callback - }); - } else { - if (typeof (new XMLHttpRequest()).withCredentials !== 'undefined') { + }; + if (document.location.protocol === 'file:') { + params.url = (params.jsonp_url || params.url) + '/create.js'; + params.data['_Version'] = "0.3.0"; + params.data['_RaiseHtmlError'] = false; + params.data['auth_token'] = Conekta.getPublishableKey(); + params.data['conekta_client_user_agent'] = '{"agent":"Conekta JavascriptBindings/0.3.0"}'; return ajax({ url: base_url + params.url, - type: 'POST', - dataType: 'json', - data: JSON.stringify(params.data), - contentType: 'application/json', - headers: { - 'RaiseHtmlError': false, - 'Accept': 'application/vnd.conekta-v0.3.0+json', - 'Conekta-Client-User-Agent': '{"agent":"Conekta JavascriptBindings/0.3.0"}', - 'Authorization': 'Basic ' + Base64.encode(Conekta.getPublishableKey() + ':') - }, + dataType: 'jsonp', + data: params.data, success: success_callback, error: error_callback }); } else { - rpc = new easyXDM.Rpc({ - swf: "https://conektaapi.s3.amazonaws.com/v0.3.0/flash/easyxdm.swf", - remote: base_url + "easyxdm_cors_proxy.html" - }, { - remote: { - request: {} - } - }); - return rpc.request({ - url: base_url + params.url, - method: 'POST', - headers: { - 'RaiseHtmlError': false, - 'Accept': 'application/vnd.conekta-v0.3.0+json', - 'Conekta-Client-User-Agent': '{"agent":"Conekta JavascriptBindings/0.3.0"}', - 'Authorization': 'Basic ' + Base64.encode(Conekta.getPublishableKey() + ':') - }, - data: JSON.stringify(params.data) - }, success_callback, error_callback); + if (typeof (new XMLHttpRequest()).withCredentials !== 'undefined') { + return ajax({ + url: base_url + params.url, + type: 'POST', + dataType: 'json', + data: JSON.stringify(params.data), + contentType: 'application/json', + headers: { + 'RaiseHtmlError': false, + 'Accept': 'application/vnd.conekta-v0.3.0+json', + 'Accept-Language': Conekta.getLanguage(), + 'Conekta-Client-User-Agent': '{"agent":"Conekta JavascriptBindings/0.3.0"}', + 'Authorization': 'Basic ' + Base64.encode(Conekta.getPublishableKey() + ':') + }, + success: success_callback, + error: error_callback + }); + } else { + rpc = new easyXDM.Rpc({ + swf: "https://conektaapi.s3.amazonaws.com/v0.3.2/flash/easyxdm.swf", + remote: base_url + "easyxdm_cors_proxy.html" + }, { + remote: { + request: {} + } + }); + return rpc.request({ + url: base_url + params.url, + method: 'POST', + headers: { + 'RaiseHtmlError': false, + 'Accept': 'application/vnd.conekta-v0.3.0+json', + 'Accept-Language': Conekta.getLanguage(), + 'Conekta-Client-User-Agent': '{"agent":"Conekta JavascriptBindings/0.3.0"}', + 'Authorization': 'Basic ' + Base64.encode(Conekta.getPublishableKey() + ':') + }, + data: JSON.stringify(params.data) + }, success_callback, error_callback); + } + } + }, + log: function(data) { + if (typeof console !== 'undefined' && console.log) { + return console.log(data); } - } - }, - log: function(data) { - if (typeof console !== 'undefined' && console.log) { - return console.log(data); } } - } - }; + }; + } }).call(this); @@ -376,23 +541,33 @@ failure_callback = Conekta._helpers.log; } charge = Conekta._helpers.parseForm(charge_form); - charge.session_id = Conekta._helpers.getSessionId(); - if (charge.card && charge.card.address && !(charge.card.address.street1 || charge.card.address.street2 || charge.card.address.street3 || charge.card.address.city || charge.card.address.state || charge.card.address.country || charge.card.address.zip)) { - delete charge.card.address; - } if (typeof charge === 'object') { - return Conekta._helpers.xDomainPost({ - jsonp_url: 'charges/create', - url: 'charges', - data: charge, - success: success_callback, - error: failure_callback - }); + if (Conekta._helpers.objectKeys(charge).length > 0) { + charge.session_id = Conekta._helpers.getSessionId(); + if (charge.card && charge.card.address && !(charge.card.address.street1 || charge.card.address.street2 || charge.card.address.street3 || charge.card.address.city || charge.card.address.state || charge.card.address.country || charge.card.address.zip)) { + delete charge.card.address; + } + return Conekta._helpers.xDomainPost({ + jsonp_url: 'charges/create', + url: 'charges', + data: charge, + success: success_callback, + error: failure_callback + }); + } else { + return failure_callback({ + 'object': 'error', + 'type': 'invalid_request_error', + 'message': "Supplied parameter 'charge' is usable object but has no values (e.g. amount, description) associated with it", + 'message_to_purchaser': "The card could not be processed, please try again later" + }); + } } else { return failure_callback({ 'object': 'error', 'type': 'invalid_request_error', - 'message': "Supplied parameter 'charge' is not a javascript object" + 'message': "Supplied parameter 'charge' is not a javascript object", + 'message_to_purchaser': "The card could not be processed, please try again later" }); } }; @@ -556,7 +731,7 @@ month = parseMonth(exp_month); year = parseYear(exp_year); if ((typeof month === 'number' && month > 0 && month < 13) && (typeof year === 'number' && year > 2013 && year < 2035)) { - return Date.parse(month + '/' + new Date(year, month, 0).getDate() + '/' + year) > Date.now(); + return (new Date(year, month, new Date(year, month, 0).getDate())) > (new Date()); } else { return false; } @@ -603,31 +778,42 @@ failure_callback = Conekta._helpers.log; } token = Conekta._helpers.parseForm(token_form); - if (token.card) { - token.card.device_fingerprint = Conekta._helpers.getSessionId(); - } else { - failure_callback({ - 'object': 'error', - 'type': 'invalid_request_error', - 'message': "The form or hash has no attributes 'card'. If you are using a form, please ensure that you have have an input or text area with the data-conekta attribute 'card[number]'. For an example form see: https://github.com/conekta/conekta.js/blob/master/examples/credit_card.html" - }); - } - if (token.card && token.card.address && !(token.card.address.street1 || token.card.address.street2 || token.card.address.street3 || token.card.address.city || token.card.address.state || token.card.address.country || token.card.address.zip)) { - delete token.card.address; - } if (typeof token === 'object') { - return Conekta._helpers.xDomainPost({ - jsonp_url: 'tokens/create', - url: 'tokens', - data: token, - success: success_callback, - error: failure_callback - }); + if (Conekta._helpers.objectKeys(token).length > 0) { + if (token.card) { + token.card.device_fingerprint = Conekta._helpers.getSessionId(); + } else { + failure_callback({ + 'object': 'error', + 'type': 'invalid_request_error', + 'message': "The form or hash has no attributes 'card'. If you are using a form, please ensure that you have have an input or text area with the data-conekta attribute 'card[number]'. For an example form see: https://github.com/conekta/conekta.js/blob/master/examples/credit_card.html", + 'message_to_purchaser': "The card could not be processed, please try again later" + }); + } + if (token.card && token.card.address && !(token.card.address.street1 || token.card.address.street2 || token.card.address.street3 || token.card.address.city || token.card.address.state || token.card.address.country || token.card.address.zip)) { + delete token.card.address; + } + return Conekta._helpers.xDomainPost({ + jsonp_url: 'tokens/create', + url: 'tokens', + data: token, + success: success_callback, + error: failure_callback + }); + } else { + return failure_callback({ + 'object': 'error', + 'type': 'invalid_request_error', + 'message': "supplied parameter 'token' is usable object but has no values (e.g. amount, description) associated with it", + 'message_to_purchaser': "The card could not be processed, please try again later" + }); + } } else { return failure_callback({ 'object': 'error', 'type': 'invalid_request_error', - 'message': "Supplied parameter 'token' is not a javascript object or a form" + 'message': "Supplied parameter 'token' is not a javascript object or a form", + 'message_to_purchaser': "The card could not be processed, please try again later" }); } };