spree_mobility 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.hound.yml +21 -0
- data/.rspec +3 -0
- data/.rubocop.yml +7 -0
- data/.travis.yml +45 -0
- data/Appraisals +8 -0
- data/CONTRIBUTING.md +81 -0
- data/Gemfile +8 -0
- data/Guardfile +12 -0
- data/LICENSE.md +26 -0
- data/README.md +92 -0
- data/Rakefile +24 -0
- data/app/assets/javascripts/spree/backend/spree_mobility.js +2 -0
- data/app/assets/javascripts/spree/backend/taxon_tree_menu.js +49 -0
- data/app/assets/javascripts/spree/backend/translations.js +50 -0
- data/app/controllers/concerns/spree_mobility/controller_mobility_helper.rb +18 -0
- data/app/controllers/spree/admin/option_values_controller_decorator.rb +23 -0
- data/app/controllers/spree/admin/product_properties_controller_decorator.rb +22 -0
- data/app/controllers/spree/admin/shipping_methods_controller_decorator.rb +18 -0
- data/app/controllers/spree/admin/translations_controller.rb +53 -0
- data/app/controllers/spree/api/base_controller_decorator.rb +5 -0
- data/app/controllers/spree/base_controller_decorator.rb +5 -0
- data/app/helpers/spree_mobility/locale_helper.rb +11 -0
- data/app/models/concerns/spree_mobility/translatable.rb +63 -0
- data/app/overrides/spree/admin/option_types/_option_value_fields/add_translation.rb +10 -0
- data/app/overrides/spree/admin/option_types/index/add_translation.rb +8 -0
- data/app/overrides/spree/admin/product_properties/_product_property_fields/add_translation.rb +10 -0
- data/app/overrides/spree/admin/products/index/search_by_name_or_sku.rb +21 -0
- data/app/overrides/spree/admin/promotions/index/add_translation_link.rb +8 -0
- data/app/overrides/spree/admin/properties/index/add_translation.rb +8 -0
- data/app/overrides/spree/admin/shared/_product_tabs/add_translations.rb +10 -0
- data/app/overrides/spree/admin/shared/_translations/translation.rb +8 -0
- data/app/overrides/spree/admin/shared/sub_menu/_configuration/store_translations.rb +8 -0
- data/app/overrides/spree/admin/shipping_methods/index/add_translation.rb +8 -0
- data/app/overrides/spree/admin/taxonomies/_list/add_translations.rb +8 -0
- data/app/views/spree/admin/translations/_fields.html.erb +12 -0
- data/app/views/spree/admin/translations/_form.html.erb +13 -0
- data/app/views/spree/admin/translations/_form_fields.html.erb +38 -0
- data/app/views/spree/admin/translations/_settings.html.erb +22 -0
- data/app/views/spree/admin/translations/option_type.html.erb +9 -0
- data/app/views/spree/admin/translations/option_value.html.erb +25 -0
- data/app/views/spree/admin/translations/product.html.erb +7 -0
- data/app/views/spree/admin/translations/product_property.html.erb +23 -0
- data/app/views/spree/admin/translations/promotion.html.erb +9 -0
- data/app/views/spree/admin/translations/property.html.erb +9 -0
- data/app/views/spree/admin/translations/shipping_method.html.erb +9 -0
- data/app/views/spree/admin/translations/store.html.erb +25 -0
- data/app/views/spree/admin/translations/taxon.html.erb +25 -0
- data/app/views/spree/admin/translations/taxonomy.html.erb +9 -0
- data/bin/rails +7 -0
- data/config/initializers/enable_extensions.rb +27 -0
- data/config/initializers/form_builder_mobility_patch.rb +53 -0
- data/config/initializers/mobility.rb +118 -0
- data/config/initializers/spree_ransack.rb +31 -0
- data/config/locales/be.yml +6 -0
- data/config/locales/bg.yml +6 -0
- data/config/locales/en.yml +6 -0
- data/config/locales/it.yml +6 -0
- data/config/locales/ru.yml +6 -0
- data/config/locales/zh-TW.yml +6 -0
- data/config/routes.rb +7 -0
- data/db/migrate/20220411041407_add_translations_to_main_models.rb +83 -0
- data/db/migrate/20220412095648_remove_null_constraints_from_spree_tables.rb +13 -0
- data/db/migrate/20220413095648_migrate_translation_data.rb +53 -0
- data/gemfiles/spree_4_2.gemfile +8 -0
- data/gemfiles/spree_master.gemfile +10 -0
- data/lib/generators/spree_mobility/install/install_generator.rb +23 -0
- data/lib/spree_mobility/configuration.rb +12 -0
- data/lib/spree_mobility/core_ext/mobility/backends/active_record/table/mobility_acts_as_paranoid_decorator.rb +31 -0
- data/lib/spree_mobility/core_ext/spree/option_type_decorator.rb +11 -0
- data/lib/spree_mobility/core_ext/spree/option_value_decorator.rb +30 -0
- data/lib/spree_mobility/core_ext/spree/product_decorator.rb +87 -0
- data/lib/spree_mobility/core_ext/spree/product_property_decorator.rb +6 -0
- data/lib/spree_mobility/core_ext/spree/product_scopes_with_mobility_decorator.rb +16 -0
- data/lib/spree_mobility/core_ext/spree/products/find_with_mobility_decorator.rb +12 -0
- data/lib/spree_mobility/core_ext/spree/promotion_decorator.rb +11 -0
- data/lib/spree_mobility/core_ext/spree/property_decorator.rb +26 -0
- data/lib/spree_mobility/core_ext/spree/shipping_method_decorator.rb +10 -0
- data/lib/spree_mobility/core_ext/spree/store_decorator.rb +12 -0
- data/lib/spree_mobility/core_ext/spree/taxon_decorator.rb +54 -0
- data/lib/spree_mobility/core_ext/spree/taxonomy_decorator.rb +29 -0
- data/lib/spree_mobility/core_ext/spree/variant_decorator.rb +19 -0
- data/lib/spree_mobility/engine.rb +33 -0
- data/lib/spree_mobility/fallbacks.rb +45 -0
- data/lib/spree_mobility/translation_query.rb +36 -0
- data/lib/spree_mobility/version.rb +18 -0
- data/lib/spree_mobility.rb +47 -0
- data/spec/features/admin/products_spec.rb +15 -0
- data/spec/features/admin/translations_spec.rb +259 -0
- data/spec/features/translations_spec.rb +35 -0
- data/spec/models/product_spec.rb +77 -0
- data/spec/models/taxon_spec.rb +16 -0
- data/spec/models/translated_models_spec.rb +33 -0
- data/spec/models/variant_spec.rb +33 -0
- data/spec/spec_helper.rb +10 -0
- data/spec/support/i18n.rb +5 -0
- data/spec/support/matchers/be_a_thorough_translation_of_matcher.rb +21 -0
- data/spec/support/matchers/have_text_like.rb +3 -0
- data/spec/support/shared_contexts/translatable_context.rb +63 -0
- data/spree_mobility.gemspec +37 -0
- metadata +316 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 022505f406f3f9336ed07f01f2e991a46d04d21fb8c6a8320dc4b3c79093b227
|
4
|
+
data.tar.gz: 4bd438df89aad4b7be914cf0e8e40b128b67ac70409d99bc5a775d0841d95a0a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: db5144c00d20a57c15a5ce19de8b507d8cf56195ca5c1de4dcb554fb21f4127713fefbb4ed3e2817aa3be5b2335916c7b544e7d363929d5042e9c37622bf2313
|
7
|
+
data.tar.gz: 0cd224a84e281656efd79977715d2c688fa068ff846cea76b84f9a9506e77fb6adc1b09bc6ecf86d6e0ca51e92bbb5ce466a4c0e162745de2816e355b67dc9b2
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
\#*
|
2
|
+
*~
|
3
|
+
.#*
|
4
|
+
.DS_Store
|
5
|
+
.idea
|
6
|
+
.localeapp/locales
|
7
|
+
.project
|
8
|
+
coverage
|
9
|
+
default
|
10
|
+
Gemfile.lock
|
11
|
+
tmp
|
12
|
+
nbproject
|
13
|
+
pkg
|
14
|
+
*.sw?
|
15
|
+
spec/dummy
|
16
|
+
.rvmrc
|
17
|
+
.sass-cache
|
18
|
+
public/spree
|
19
|
+
.ruby-version
|
20
|
+
.ruby-gemset
|
21
|
+
.bundle
|
22
|
+
gemfiles/*.gemfile.lock
|
data/.hound.yml
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
---
|
2
|
+
# Too picky.
|
3
|
+
LineLength:
|
4
|
+
Enabled: false
|
5
|
+
|
6
|
+
# This should truly be on for well documented gems.
|
7
|
+
Documentation:
|
8
|
+
Enabled: false
|
9
|
+
|
10
|
+
# Neatly aligned code is too swell.
|
11
|
+
SingleSpaceBeforeFirstArg:
|
12
|
+
Enabled: false
|
13
|
+
|
14
|
+
# Don't mess with RSpec DSL.
|
15
|
+
Blocks:
|
16
|
+
Exclude:
|
17
|
+
- 'spec/**/*'
|
18
|
+
|
19
|
+
# Avoid contradictory style rules by enforce single quotes.
|
20
|
+
StringLiterals:
|
21
|
+
EnforcedStyle: single_quotes
|
data/.rspec
ADDED
data/.rubocop.yml
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
os: linux
|
2
|
+
dist: bionic
|
3
|
+
|
4
|
+
addons:
|
5
|
+
apt:
|
6
|
+
sources:
|
7
|
+
- google-chrome
|
8
|
+
packages:
|
9
|
+
- google-chrome-stable
|
10
|
+
|
11
|
+
services:
|
12
|
+
- mysql
|
13
|
+
- postgresql
|
14
|
+
|
15
|
+
language: ruby
|
16
|
+
|
17
|
+
rvm:
|
18
|
+
- 2.7
|
19
|
+
|
20
|
+
env:
|
21
|
+
- DB=mysql
|
22
|
+
- DB=postgres
|
23
|
+
|
24
|
+
gemfile:
|
25
|
+
- gemfiles/spree_4_2.gemfile
|
26
|
+
- gemfiles/spree_master.gemfile
|
27
|
+
|
28
|
+
jobs:
|
29
|
+
allow_failures:
|
30
|
+
- gemfile: gemfiles/spree_master.gemfile
|
31
|
+
|
32
|
+
before_script:
|
33
|
+
- CHROME_MAIN_VERSION=`google-chrome-stable --version | sed -E 's/(^Google Chrome |\.[0-9]+ )//g'`
|
34
|
+
- CHROMEDRIVER_VERSION=`curl -s "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_$CHROME_MAIN_VERSION"`
|
35
|
+
- curl "https://chromedriver.storage.googleapis.com/${CHROMEDRIVER_VERSION}/chromedriver_linux64.zip" -O
|
36
|
+
- unzip chromedriver_linux64.zip -d ~/bin
|
37
|
+
- nvm install 14
|
38
|
+
|
39
|
+
script:
|
40
|
+
- bundle exec rake test_app
|
41
|
+
- bundle exec rake spec
|
42
|
+
|
43
|
+
|
44
|
+
before_install:
|
45
|
+
- mysql -u root -e "GRANT ALL ON *.* TO 'travis'@'%';"
|
data/Appraisals
ADDED
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
Spree mobility is an open source project and we encourage contributions. Please see the [contributors guidelines](http://spreecommerce.com/documentation/contributing_to_spree.html) for more information before contributing.
|
4
|
+
|
5
|
+
In the spirit of [free software][1], **everyone** is encouraged to help improve this project.
|
6
|
+
|
7
|
+
Here are some ways *you* can contribute:
|
8
|
+
|
9
|
+
* by using prerelease versions
|
10
|
+
* by reporting [bugs][2]
|
11
|
+
* by suggesting new features
|
12
|
+
* by writing [translations][3] (e.g. use branch 2-4-stable for Spree v2.4.x)
|
13
|
+
* by writing or editing documentation
|
14
|
+
* by writing specifications
|
15
|
+
* by writing code (*no patch is too small*: fix typos, add comments, clean up inconsistent whitespace)
|
16
|
+
* by refactoring code
|
17
|
+
* by resolving [issues][2]
|
18
|
+
* by reviewing patches
|
19
|
+
|
20
|
+
---
|
21
|
+
|
22
|
+
## Filing an issue
|
23
|
+
|
24
|
+
When filing an issue on this extension, please first do these things:
|
25
|
+
|
26
|
+
* Verify you can reproduce this issue in a brand new application.
|
27
|
+
* Run through the steps to reproduce the issue again.
|
28
|
+
|
29
|
+
In the issue itself please provide:
|
30
|
+
|
31
|
+
* A comprehensive list of steps to reproduce the issue.
|
32
|
+
* What you're *expecting* to happen compared with what's *actually* happening.
|
33
|
+
* The version of Spree *and* the version of Rails.
|
34
|
+
* A list of all extensions.
|
35
|
+
* Any relevant stack traces ("Full trace" preferred)
|
36
|
+
* Your `Gemfile`
|
37
|
+
|
38
|
+
In 99% of cases, this information is enough to determine the cause and solution to the problem that is being described.
|
39
|
+
|
40
|
+
---
|
41
|
+
|
42
|
+
## Pull requests
|
43
|
+
|
44
|
+
We gladly accept pull requests to fix bugs and, in some circumstances, add new features to this extension.
|
45
|
+
|
46
|
+
Here's a quick guide:
|
47
|
+
|
48
|
+
1. Fork the repo.
|
49
|
+
|
50
|
+
2. Run the tests. We only take pull requests with passing tests, and it's great to know that you have a clean slate.
|
51
|
+
|
52
|
+
3. Create new branch then make changes and add tests for your changes. Only refactoring and documentation changes require no new tests. If you are adding functionality or fixing a bug, we need tests!
|
53
|
+
|
54
|
+
4. Push to your fork and submit a pull request. If the changes will apply cleanly to the latest stable branches and master branch, you will only need to submit one pull request.
|
55
|
+
|
56
|
+
At this point you're waiting on us. We may suggest some changes or improvements or alternatives.
|
57
|
+
|
58
|
+
Some things that will increase the chance that your pull request is accepted, taken straight from the Ruby on Rails guide:
|
59
|
+
|
60
|
+
* Use Rails idioms and helpers.
|
61
|
+
* Include tests that fail without your code, and pass with it.
|
62
|
+
* Update the documentation, the surrounding one, examples elsewhere, guides, whatever is affected by your contribution.
|
63
|
+
|
64
|
+
---
|
65
|
+
|
66
|
+
## TL;DR
|
67
|
+
|
68
|
+
* Fork the repo
|
69
|
+
* Clone your repo
|
70
|
+
* Run `bundle install`
|
71
|
+
* Run `bundle exec rake test_app` to create the test application in `spec/dummy`
|
72
|
+
* Make your changes
|
73
|
+
* Ensure specs pass by running `bundle exec rspec spec`
|
74
|
+
* Ensure all syntax ok by running `rubocop .`
|
75
|
+
* Submit your pull request
|
76
|
+
|
77
|
+
And in case we didn't emphasize it enough: **we love tests!**
|
78
|
+
|
79
|
+
[1]: http://www.fsf.org/licensing/essays/free-sw.html
|
80
|
+
[2]: https://github.com/spree-contrib/spree_mobility/issues
|
81
|
+
[3]: https://github.com/spree-contrib/spree_mobility/tree/master/config/locales
|
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
group :red_green_refactor, halt_on_fail: true do
|
2
|
+
|
3
|
+
guard 'rspec', cmd: 'bundle exec rspec' do
|
4
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
5
|
+
watch('config/routes.rb') { 'spec/controllers' }
|
6
|
+
watch(%r{^spec/(.+)_spec\.rb$}) { |m| "spec/#{m[1]}_spec.rb"}
|
7
|
+
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
8
|
+
watch(%r{^app/(.*)(\.erb)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
9
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
10
|
+
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb" }
|
11
|
+
end
|
12
|
+
end
|
data/LICENSE.md
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
Copyright (c) 2011-2015 Spree Commerce Inc., and other contributors.
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without modification,
|
5
|
+
are permitted provided that the following conditions are met:
|
6
|
+
|
7
|
+
* Redistributions of source code must retain the above copyright notice,
|
8
|
+
this list of conditions and the following disclaimer.
|
9
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
10
|
+
this list of conditions and the following disclaimer in the documentation
|
11
|
+
and/or other materials provided with the distribution.
|
12
|
+
* Neither the name Spree nor the names of its contributors may be used to
|
13
|
+
endorse or promote products derived from this software without specific
|
14
|
+
prior written permission.
|
15
|
+
|
16
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
17
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
18
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
19
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
20
|
+
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
21
|
+
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
22
|
+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
23
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
24
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
25
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
26
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
# Spree Mobility
|
2
|
+
|
3
|
+
This is a Spree model translation gem based on `spree_globalize` for [Spree Commerce][1] version 4.3+.
|
4
|
+
It uses `mobility` instead of `globalize`, since `globalize` is not actively developed anymore.
|
5
|
+
It is a drop-in replacement for `spree_globalize` and will use your existing translations.
|
6
|
+
|
7
|
+
## Improvements
|
8
|
+
|
9
|
+
This gem offers several improvements over `spree_globalize`:
|
10
|
+
|
11
|
+
* Proper translation fallbacks support (if a translation for the current locale is missing, it will fallback to other locales, strictly based on configured fallbacks):
|
12
|
+
* for finders (slug/permalink)
|
13
|
+
* when searching by product name (frontend & admin search)
|
14
|
+
* Proper validations on translation models (e.g. slug presence validation), also meaning uniqueness validations will now work correctly per-locale
|
15
|
+
* Better support for future versions of Rails as `mobility` is more actively maintained
|
16
|
+
|
17
|
+
Admin:
|
18
|
+
|
19
|
+
* Rich-text editor for product description translations in admin (if enabled)
|
20
|
+
* Searching by product SKU in admin
|
21
|
+
* Admin product search will no longer return duplicate results
|
22
|
+
* Works correctly if using custom Spree.admin_path config
|
23
|
+
|
24
|
+
## Installation
|
25
|
+
|
26
|
+
Add the following to your `Gemfile`:
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
gem 'spree_i18n', '~> 5.0'
|
30
|
+
gem 'friendly_id-mobility', github: 'mrbrdo/friendly_id-mobility', branch: 'master'
|
31
|
+
gem 'spree_mobility'
|
32
|
+
```
|
33
|
+
|
34
|
+
Run `bundle install`
|
35
|
+
|
36
|
+
You can use the generator to install migrations and append spree_mobility assets to
|
37
|
+
your app spree manifest file.
|
38
|
+
|
39
|
+
rails g spree_mobility:install
|
40
|
+
|
41
|
+
This will insert these lines into your spree manifest files:
|
42
|
+
|
43
|
+
```
|
44
|
+
vendor/assets/javascripts/spree/backend/all.js
|
45
|
+
//= require spree/backend/spree_mobility
|
46
|
+
```
|
47
|
+
|
48
|
+
It is also recommended to configure Mobility fallback locales, especially if your admin locale is not the same as your Store's default_locale. For example if you have en and de locale:
|
49
|
+
|
50
|
+
```
|
51
|
+
# config/initializers/mobility.rb
|
52
|
+
Mobility.configure do
|
53
|
+
plugins do
|
54
|
+
fallbacks({ :en => [:de], :de => [:en] })
|
55
|
+
end
|
56
|
+
end
|
57
|
+
```
|
58
|
+
|
59
|
+
---
|
60
|
+
|
61
|
+
## Model Translations
|
62
|
+
|
63
|
+
This feature uses the [Mobility][3] gem to localize model data.
|
64
|
+
So far the following models are translatable:
|
65
|
+
|
66
|
+
Product, Promotion, OptionType, Taxonomy, Taxon, Property, Store and ShippingMethod.
|
67
|
+
|
68
|
+
Start your server and you should see a TRANSLATIONS link or a flag icon on each
|
69
|
+
admin section that supports this feature.
|
70
|
+
|
71
|
+
*Every record needs to have a translation. If by any chance you remove `spree_mobility`
|
72
|
+
from your Gemfile, add some records and then add `spree_mobility` gem back you might get
|
73
|
+
errors like ``undefined method for nilClass`` because Mobility will try fetch
|
74
|
+
translations that do not exist.*
|
75
|
+
|
76
|
+
---
|
77
|
+
|
78
|
+
## Contributing
|
79
|
+
|
80
|
+
[See corresponding guidelines][7]
|
81
|
+
|
82
|
+
---
|
83
|
+
|
84
|
+
Copyright (c) 2010-2022 MrBrdo. released under the [New BSD License][6]
|
85
|
+
|
86
|
+
[1]: http://spreecommerce.org
|
87
|
+
[2]: http://guides.spreecommerce.org/developer/i18n.html
|
88
|
+
[3]: https://github.com/shioyama/mobility
|
89
|
+
[5]: https://github.com/spree-contrib/spree_globalize/graphs/contributors
|
90
|
+
[6]: https://github.com/mrbrdo/spree_mobility/blob/master/LICENSE.md
|
91
|
+
[7]: https://github.com/mrbrdo/spree_mobility/blob/master/CONTRIBUTING.md
|
92
|
+
[8]: https://github.com/spree-contrib/spree_i18n
|
data/Rakefile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/testtask'
|
4
|
+
require 'rake/packagetask'
|
5
|
+
require 'rubygems/package_task'
|
6
|
+
require 'rspec/core/rake_task'
|
7
|
+
require 'spree/testing_support/extension_rake'
|
8
|
+
|
9
|
+
Bundler::GemHelper.install_tasks
|
10
|
+
RSpec::Core::RakeTask.new
|
11
|
+
|
12
|
+
task default: :spec
|
13
|
+
|
14
|
+
spec = eval(File.read('spree_mobility.gemspec'))
|
15
|
+
|
16
|
+
Gem::PackageTask.new(spec) do |p|
|
17
|
+
p.gem_spec = spec
|
18
|
+
end
|
19
|
+
|
20
|
+
desc 'Generates a dummy app for testing'
|
21
|
+
task :test_app do
|
22
|
+
ENV['LIB_NAME'] = 'spree_mobility'
|
23
|
+
Rake::Task['extension:test_app'].invoke
|
24
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
(function() {
|
2
|
+
var root;
|
3
|
+
|
4
|
+
root = typeof exports !== "undefined" && exports !== null ? exports : this;
|
5
|
+
|
6
|
+
root.taxon_tree_menu = function(obj, context) {
|
7
|
+
var admin_base_url, edit_url, id, translation_base_path, translation_url;
|
8
|
+
id = obj.attr("id");
|
9
|
+
admin_base_url = Spree.url(Spree.routes.admin_taxonomy_taxons_path);
|
10
|
+
edit_url = admin_base_url.clone();
|
11
|
+
edit_url.setPath(edit_url.path() + '/' + id + "/edit");
|
12
|
+
translation_url = Spree.url(admin_base_url.path().replace(/\/taxonomies\/\d.+$/, '') + '/taxons/' + id + '/translations');
|
13
|
+
return {
|
14
|
+
create: {
|
15
|
+
label: "<span class='icon icon-plus'></span> " + Spree.translations.add,
|
16
|
+
action: function(obj) {
|
17
|
+
return context.create(obj);
|
18
|
+
}
|
19
|
+
},
|
20
|
+
rename: {
|
21
|
+
label: "<span class='icon icon-pencil'></span> " + Spree.translations.rename,
|
22
|
+
action: function(obj) {
|
23
|
+
return context.rename(obj);
|
24
|
+
}
|
25
|
+
},
|
26
|
+
remove: {
|
27
|
+
label: "<span class='icon icon-trash'></span> " + Spree.translations.remove,
|
28
|
+
action: function(obj) {
|
29
|
+
return context.remove(obj);
|
30
|
+
}
|
31
|
+
},
|
32
|
+
edit: {
|
33
|
+
separator_before: true,
|
34
|
+
label: "<span class='icon icon-cog'></span> " + Spree.translations.edit,
|
35
|
+
action: function(obj) {
|
36
|
+
return window.location = edit_url.toString();
|
37
|
+
}
|
38
|
+
},
|
39
|
+
translate: {
|
40
|
+
separator_before: true,
|
41
|
+
label: "<span class='icon icon-flag'></span> " + Spree.translations.translations,
|
42
|
+
action: function(obj) {
|
43
|
+
return window.location = translation_url.toString();
|
44
|
+
}
|
45
|
+
}
|
46
|
+
};
|
47
|
+
};
|
48
|
+
|
49
|
+
}).call(this);
|
@@ -0,0 +1,50 @@
|
|
1
|
+
(function() {
|
2
|
+
var display_locale_fields;
|
3
|
+
|
4
|
+
display_locale_fields = function() {
|
5
|
+
var attr, locale, locales, show, _fn, _i, _len;
|
6
|
+
attr = $('#attr_list a.active').data('attr');
|
7
|
+
locale = $('#locale').val();
|
8
|
+
available_locales = $('#available_locales').val().split(',');
|
9
|
+
show = $("select[name='show-only']").val();
|
10
|
+
$('#attr_fields .panel').hide();
|
11
|
+
_fn = function(locale) {
|
12
|
+
var display, value;
|
13
|
+
value = $('#attr_fields .panel.' + attr + '.' + locale + ' :input').val().replace(/^\s+|\s+$/g, "");
|
14
|
+
if (show === 'incomplete') {
|
15
|
+
display = value === '';
|
16
|
+
} else if (show === 'complete') {
|
17
|
+
display = value !== '';
|
18
|
+
} else {
|
19
|
+
display = true;
|
20
|
+
}
|
21
|
+
if (display) {
|
22
|
+
return $('#attr_fields .panel.' + attr + '.' + locale).show();
|
23
|
+
}
|
24
|
+
};
|
25
|
+
if (locale === '') {
|
26
|
+
available_locales.forEach(function(locale) { _fn(locale) });
|
27
|
+
} else {
|
28
|
+
_fn(locale);
|
29
|
+
}
|
30
|
+
if ($('#attr_fields .panel:visible').length === 0 && show !== 'all') {
|
31
|
+
return $('#attr_fields .no-translations').show();
|
32
|
+
}
|
33
|
+
};
|
34
|
+
|
35
|
+
$(function() {
|
36
|
+
$('#attr_list a').click(function() {
|
37
|
+
$('#attr_list a').removeClass('active');
|
38
|
+
$(this).addClass('active');
|
39
|
+
display_locale_fields();
|
40
|
+
return false;
|
41
|
+
});
|
42
|
+
$('#locale').change(function() {
|
43
|
+
return display_locale_fields();
|
44
|
+
});
|
45
|
+
return $("select[name='show-only']").change(function() {
|
46
|
+
return display_locale_fields();
|
47
|
+
});
|
48
|
+
});
|
49
|
+
|
50
|
+
}).call(this);
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module SpreeMobility
|
2
|
+
# The fact this logic is in a single module also helps to apply a custom
|
3
|
+
# locale on the spree/api context since api base controller inherits from
|
4
|
+
# MetalController instead of Spree::BaseController
|
5
|
+
module ControllerMobilityHelper
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
prepend_before_action :mobility_fallbacks
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def mobility_fallbacks
|
14
|
+
SpreeMobility::Fallbacks.config!
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
module OptionValuesControllerDecorator
|
4
|
+
def update
|
5
|
+
option_value = Spree::OptionValue.find(params[:id])
|
6
|
+
option_value.update update_option_value_attribute
|
7
|
+
redirect_to spree.edit_admin_option_type_path(option_value.option_type)
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def update_option_value_attribute
|
13
|
+
params.require(:option_value).permit(permitted_params)
|
14
|
+
end
|
15
|
+
|
16
|
+
def permitted_params
|
17
|
+
Spree::PermittedAttributes.option_value_attributes
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
SpreeMobility.prepend_once(::Spree::Admin::OptionValuesController, Spree::Admin::OptionValuesControllerDecorator)
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
module ProductPropertiesControllerDecorator
|
4
|
+
def translate
|
5
|
+
product_property = Spree::ProductProperty.find(params[:id])
|
6
|
+
product_property.update update_product_property_attribute
|
7
|
+
redirect_to spree.admin_product_product_properties_path(product_property.product)
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
def update_product_property_attribute
|
12
|
+
params.require(:product_property).permit(permitted_params)
|
13
|
+
end
|
14
|
+
|
15
|
+
def permitted_params
|
16
|
+
[translations_attributes: [:id, :locale, :value]]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
SpreeMobility.prepend_once(::Spree::Admin::ProductPropertiesController, Spree::Admin::ProductPropertiesControllerDecorator)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
module ShippingMethodsControllerDecorator
|
4
|
+
private
|
5
|
+
# We have to override those filters since they break proper PATCH behaviour.
|
6
|
+
|
7
|
+
def set_shipping_category
|
8
|
+
super unless params['shipping_method'][:translations_attributes]
|
9
|
+
end
|
10
|
+
|
11
|
+
def set_zones
|
12
|
+
super unless params['shipping_method'][:translations_attributes]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
SpreeMobility.prepend_once(::Spree::Admin::ShippingMethodsController, Spree::Admin::ShippingMethodsControllerDecorator)
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Spree
|
2
|
+
class Admin::TranslationsController < Admin::BaseController
|
3
|
+
before_action :load_parent
|
4
|
+
|
5
|
+
if defined?(SpreeI18n::ControllerLocaleHelper)
|
6
|
+
helper 'spree_i18n/locale'
|
7
|
+
end
|
8
|
+
helper 'spree_mobility/locale'
|
9
|
+
|
10
|
+
helper_method :collection_url
|
11
|
+
|
12
|
+
def index
|
13
|
+
render resource_name
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def load_parent
|
19
|
+
set_resource_ivar(resource)
|
20
|
+
end
|
21
|
+
|
22
|
+
def resource_name
|
23
|
+
params[:resource].singularize
|
24
|
+
end
|
25
|
+
|
26
|
+
def set_resource_ivar(resource)
|
27
|
+
instance_variable_set("@#{resource_name}", resource)
|
28
|
+
end
|
29
|
+
|
30
|
+
def klass
|
31
|
+
@klass ||= "Spree::#{params[:resource].classify}".constantize
|
32
|
+
end
|
33
|
+
|
34
|
+
def resource
|
35
|
+
@resource ||= if slugged_models.include? klass.name
|
36
|
+
klass.friendly.find(params[:resource_id])
|
37
|
+
else
|
38
|
+
klass.find(params[:resource_id])
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def collection_url
|
43
|
+
ActionController::Routing::Routes.recognize_path("admin_#{resource_name}_url", @resource)
|
44
|
+
send "admin_#{resource_name}_url", @resource
|
45
|
+
rescue
|
46
|
+
send "edit_admin_#{resource_name}_url", @resource
|
47
|
+
end
|
48
|
+
|
49
|
+
def slugged_models
|
50
|
+
["Spree::Product"]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|