solidus_payment_method_by_zone 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d0bd3c701d01a805251733db0d75ed7e1be700a487961f59607d24d2c8577d4a
4
+ data.tar.gz: 69a42ced23e6770eef966fdc4ca25c51acd374797e5510ef7a2027e69c2e05e2
5
+ SHA512:
6
+ metadata.gz: c6306285417440c6f1c2c76b7265334a12f3742fab58e7a1d78e6864f614e0c9cb991f8d0d852cf1b2d2033fa26a597c7249411189e5ae8c784e35abc285ef73
7
+ data.tar.gz: fbf58e2cc3880bd501f78b687880eb1418a8f6e8f7c0179208f084db50253c39e651e188b96fc490b258b61c372d0b91ba91f953bd6ac6df450cde6b367fd70a
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2019 MagmaLabs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,39 @@
1
+ [![Build Status](https://travis-ci.org/magma-labs/solidus_payment_method_by_zone.svg?branch=master)](https://travis-ci.org/magma-labs/solidus_payment_method_by_zone)
2
+
3
+ # solidus_payment_method_by_zone
4
+ Solidus extension to allow payment methods to be restricted by zones.
5
+
6
+ Installation
7
+ ------------
8
+
9
+ Add solidus_payment_method_by_zone to your Gemfile:
10
+
11
+ ```ruby
12
+ gem 'solidus_payment_method_by_zone'
13
+ ```
14
+
15
+ Bundle your dependencies and run the installation generator:
16
+
17
+ ```shell
18
+ bundle
19
+ bundle exec rails g solidus_payment_method_by_zone:install
20
+ ```
21
+
22
+ Testing
23
+ -------
24
+
25
+ First bundle your dependencies, then run `rake`. `rake` will default to building the dummy app if it does not exist, then it will run specs, and [Rubocop](https://github.com/bbatsov/rubocop) static code analysis. The dummy app can be regenerated by using `rake test_app`.
26
+
27
+ ```shell
28
+ bundle
29
+ bundle exec rake
30
+ ```
31
+
32
+ When testing your applications integration with this extension you may use it's factories.
33
+ Simply add this require statement to your spec_helper:
34
+
35
+ ```ruby
36
+ require 'solidus_payment_method_by_zone/factories'
37
+ ```
38
+
39
+ Copyright (c) 2019 MagmaLabs, released under the New BSD License
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler'
4
+ Bundler::GemHelper.install_tasks
5
+
6
+ require 'rspec/core/rake_task'
7
+ require 'spree/testing_support/extension_rake'
8
+
9
+ RSpec::Core::RakeTask.new
10
+
11
+ task :default do
12
+ if Dir["spec/dummy"].empty?
13
+ Rake::Task[:test_app].invoke
14
+ Dir.chdir("../../")
15
+ end
16
+ Rake::Task[:spec].invoke
17
+ end
18
+
19
+ desc 'Generates a dummy app for testing'
20
+ task :test_app do
21
+ ENV['LIB_NAME'] = 'solidus_payment_method_by_zone'
22
+ Rake::Task['extension:test_app'].invoke
23
+ end
@@ -0,0 +1,2 @@
1
+ // Placeholder manifest file.
2
+ // the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/backend/all.js'
@@ -0,0 +1,2 @@
1
+ // Placeholder manifest file.
2
+ // the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/frontend/all.js'
@@ -0,0 +1,4 @@
1
+ /*
2
+ Placeholder manifest file.
3
+ the installer will append this file to the app vendored assets here: 'vendor/assets/stylesheets/spree/backend/all.css'
4
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Placeholder manifest file.
3
+ the installer will append this file to the app vendored assets here: 'vendor/assets/stylesheets/spree/frontend/all.css'
4
+ */
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidusPaymentMethodByZone
4
+ module PaymentMethod
5
+ extend ActiveSupport::Concern
6
+ included do
7
+ has_many :payment_method_zone
8
+ has_many :zones, through: :payment_method_zone
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ Spree::Order.class_eval do
4
+ def available_payment_methods
5
+ @available_payment_methods ||= Spree::PaymentMethod
6
+ .active
7
+ .available_to_store(store)
8
+ .available_to_users
9
+ .left_joins(:payment_method_zone)
10
+ .where(spree_payment_method_zones: {zone_id: [nil] + Spree::Zone.for_address(ship_address).pluck(&:id)})
11
+ .order(:position)
12
+ end
13
+ end
@@ -0,0 +1 @@
1
+ Spree::PaymentMethod.include(SolidusPaymentMethodByZone::PaymentMethod)
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ class PaymentMethodZone < Spree::Base
5
+ belongs_to :zone
6
+ belongs_to :payment_method
7
+ end
8
+ end
@@ -0,0 +1,18 @@
1
+ <!-- insert_bottom '[data-hook=payment_method]'-->
2
+ <div class="row">
3
+ <div class="col-4">
4
+ <%= f.field_container :zones do %>
5
+ <%= f.label :zones, t('spree.admin.payment_method_zones') %>
6
+ <br>
7
+ <% payment_method_zones = f.object.zones.to_a %>
8
+ <% Spree::Zone.all.each do |zone| %>
9
+ <%= label_tag do %>
10
+ <%= check_box_tag('payment_method[zone_ids][]', zone.id, payment_method_zones.include?(zone)) %>
11
+ <%= zone.name %>
12
+ <% end %>
13
+ <br>
14
+ <% end %>
15
+ <%= error_message_on :shipping_method, :zone_id %>
16
+ <% end %>
17
+ </div>
18
+ </div>
@@ -0,0 +1,7 @@
1
+ # Sample localization file for English. Add more files in this directory for other locales.
2
+ # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
+
4
+ en:
5
+ spree:
6
+ admin:
7
+ payment_method_zones: Zones (if applicable)
@@ -0,0 +1,3 @@
1
+ Spree::Core::Engine.routes.draw do
2
+ # Add your extension routes here
3
+ end
@@ -0,0 +1,8 @@
1
+ class SolidusPaymentMethodByZoneCreatePaymentMethodZones < SolidusSupport::Migration[5.0]
2
+ def change
3
+ create_table :spree_payment_method_zones do |t|
4
+ t.references :zone
5
+ t.references :payment_method
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,30 @@
1
+ module SolidusPaymentMethodByZone
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ class_option :auto_run_migrations, type: :boolean, default: false
5
+
6
+ def add_javascripts
7
+ append_file 'vendor/assets/javascripts/spree/frontend/all.js', "//= require spree/frontend/solidus_payment_method_by_zone\n"
8
+ append_file 'vendor/assets/javascripts/spree/backend/all.js', "//= require spree/backend/solidus_payment_method_by_zone\n"
9
+ end
10
+
11
+ def add_stylesheets
12
+ inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css', " *= require spree/frontend/solidus_payment_method_by_zone\n", before: /\*\//, verbose: true
13
+ inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css', " *= require spree/backend/solidus_payment_method_by_zone\n", before: /\*\//, verbose: true
14
+ end
15
+
16
+ def add_migrations
17
+ run 'bundle exec rake railties:install:migrations FROM=solidus_payment_method_by_zone'
18
+ end
19
+
20
+ def run_migrations
21
+ run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask('Would you like to run the migrations now? [Y/n]'))
22
+ if run_migrations
23
+ run 'bundle exec rake db:migrate'
24
+ else
25
+ puts 'Skipping rake db:migrate, don\'t forget to run it!'
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,4 @@
1
+ require 'solidus_core'
2
+ require 'solidus_support'
3
+ require 'deface'
4
+ require 'solidus_payment_method_by_zone/engine'
@@ -0,0 +1,20 @@
1
+ module SolidusPaymentMethodByZone
2
+ class Engine < Rails::Engine
3
+ require 'spree/core'
4
+ isolate_namespace Spree
5
+ engine_name 'solidus_payment_method_by_zone'
6
+
7
+ # use rspec for tests
8
+ config.generators do |g|
9
+ g.test_framework :rspec
10
+ end
11
+
12
+ def self.activate
13
+ Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
14
+ Rails.configuration.cache_classes ? require(c) : load(c)
15
+ end
16
+ end
17
+
18
+ config.to_prepare(&method(:activate).to_proc)
19
+ end
20
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ Dir["#{File.dirname(__FILE__)}/factories/**"].each do |f|
4
+ require File.expand_path(f)
5
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ eval(ENV.fetch('FACTORY')).define do
4
+ factory :country_mx, class: 'Spree::Country' do
5
+ iso { 'MX' }
6
+
7
+ transient do
8
+ carmen_country { Carmen::Country.coded(iso) || fail("Unknown country iso code: #{iso.inspect}") }
9
+ end
10
+
11
+ iso_name { carmen_country.name.upcase }
12
+ name { carmen_country.name }
13
+ iso3 { carmen_country.alpha_3_code }
14
+ numcode { carmen_country.numeric_code }
15
+ end
16
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ eval(ENV.fetch('FACTORY')).define do
4
+ factory :state_ja, class: 'Spree::State' do
5
+ transient do
6
+ country_iso { 'MX' }
7
+ state_code { 'JA' }
8
+
9
+ carmen_subregion do
10
+ carmen_country = Carmen::Country.coded(country.iso)
11
+
12
+ carmen_country.subregions.coded(state_code) ||
13
+ carmen_country.subregions.sort_by(&:name).first ||
14
+ fail("Country #{country.iso} has no subregions")
15
+ end
16
+ end
17
+
18
+ abbr { carmen_subregion.code }
19
+ name { carmen_subregion.name }
20
+
21
+ country do |country|
22
+ Spree::Country.find_by(iso: country_iso) ||
23
+ country.association(:country, iso: country_iso)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ module SolidusPaymentMethodByZone
2
+ VERSION = '1.0.0'
3
+ end
metadata ADDED
@@ -0,0 +1,281 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: solidus_payment_method_by_zone
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Magmalabs
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-07-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: solidus_core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1.1'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '3'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '1.1'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '3'
33
+ - !ruby/object:Gem::Dependency
34
+ name: solidus_support
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: deface
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: capybara
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: poltergeist
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: coffee-rails
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: sass-rails
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: database_cleaner
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: factory_bot
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ - !ruby/object:Gem::Dependency
146
+ name: ffaker
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: rspec-rails
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ - !ruby/object:Gem::Dependency
174
+ name: rubocop
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - '='
178
+ - !ruby/object:Gem::Version
179
+ version: 0.49.0
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - '='
185
+ - !ruby/object:Gem::Version
186
+ version: 0.49.0
187
+ - !ruby/object:Gem::Dependency
188
+ name: rubocop-rspec
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - '='
192
+ - !ruby/object:Gem::Version
193
+ version: 1.4.0
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - '='
199
+ - !ruby/object:Gem::Version
200
+ version: 1.4.0
201
+ - !ruby/object:Gem::Dependency
202
+ name: simplecov
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ type: :development
209
+ prerelease: false
210
+ version_requirements: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ version: '0'
215
+ - !ruby/object:Gem::Dependency
216
+ name: sqlite3
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - ">="
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
222
+ type: :development
223
+ prerelease: false
224
+ version_requirements: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - ">="
227
+ - !ruby/object:Gem::Version
228
+ version: '0'
229
+ description: Solidus extension to allow payment methods to be restricted by zones
230
+ email: developers@magmalabs.com
231
+ executables: []
232
+ extensions: []
233
+ extra_rdoc_files: []
234
+ files:
235
+ - LICENSE
236
+ - README.md
237
+ - Rakefile
238
+ - app/assets/javascripts/spree/backend/solidus_payment_method_by_zone.js
239
+ - app/assets/javascripts/spree/frontend/solidus_payment_method_by_zone.js
240
+ - app/assets/stylesheets/spree/backend/solidus_payment_method_by_zone.css
241
+ - app/assets/stylesheets/spree/frontend/solidus_payment_method_by_zone.css
242
+ - app/models/concerns/solidus_payment_method_by_zone/payment_method.rb
243
+ - app/models/spree/order_decorator.rb
244
+ - app/models/spree/payment_method_decorator.rb
245
+ - app/models/spree/payment_method_zone.rb
246
+ - app/overrides/spree/admin/payment_methods/_form/add_zones.html.erb.deface
247
+ - config/locales/en.yml
248
+ - config/routes.rb
249
+ - db/migrate/20190208214252_solidus_payment_method_by_zone_create_payment_method_zones.rb
250
+ - lib/generators/solidus_payment_method_by_zone/install/install_generator.rb
251
+ - lib/solidus_payment_method_by_zone.rb
252
+ - lib/solidus_payment_method_by_zone/engine.rb
253
+ - lib/solidus_payment_method_by_zone/factories.rb
254
+ - lib/solidus_payment_method_by_zone/factories/country_factory.rb
255
+ - lib/solidus_payment_method_by_zone/factories/state_factory.rb
256
+ - lib/solidus_payment_method_by_zone/version.rb
257
+ homepage: https://www.magmalabs.io
258
+ licenses:
259
+ - BSD-3-Clause
260
+ metadata: {}
261
+ post_install_message:
262
+ rdoc_options: []
263
+ require_paths:
264
+ - lib
265
+ required_ruby_version: !ruby/object:Gem::Requirement
266
+ requirements:
267
+ - - ">="
268
+ - !ruby/object:Gem::Version
269
+ version: '0'
270
+ required_rubygems_version: !ruby/object:Gem::Requirement
271
+ requirements:
272
+ - - ">="
273
+ - !ruby/object:Gem::Version
274
+ version: '0'
275
+ requirements: []
276
+ rubyforge_project:
277
+ rubygems_version: 2.7.6
278
+ signing_key:
279
+ specification_version: 4
280
+ summary: Solidus extension to allow payment methods by zones
281
+ test_files: []