solidus_payment_method_by_zone 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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: []