solidus_sitemap 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.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/.rspec +4 -0
- data/.travis.yml +19 -0
- data/CONTRIBUTING.md +90 -0
- data/Gemfile +17 -0
- data/LICENSE.md +26 -0
- data/README.md +113 -0
- data/Rakefile +21 -0
- data/lib/generators/solidus_sitemap/install/install_generator.rb +12 -0
- data/lib/generators/templates/config/sitemap.rb +52 -0
- data/lib/solidus_sitemap.rb +4 -0
- data/lib/solidus_sitemap/engine.rb +26 -0
- data/lib/solidus_sitemap/solidus_defaults.rb +107 -0
- data/lib/solidus_sitemap/version.rb +18 -0
- data/solidus_sitemap.gemspec +33 -0
- data/spec/lib/solidus_sitemap/solidus_defaults_spec.rb +57 -0
- data/spec/spec_helper.rb +24 -0
- data/spec/support/database_cleaner.rb +16 -0
- data/spec/support/factory_girl.rb +5 -0
- data/spec/support/spree.rb +6 -0
- metadata +186 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 718fecbf020589158c6f22d26213dc8aedd8a67a
|
4
|
+
data.tar.gz: 2b9e64f822ede23cd8b7f56cc13d71fd1329f61c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 77256038eb46f5f659a3e8d5c87ffc66617c77124a9dd7c257852cfb125dd6e2e591913a856094d6d6ad8e9d065b2fab87c47b013f4c97bc3973739a3d21b928
|
7
|
+
data.tar.gz: 1ecda5f6886e8e39c77fbd4bfc27c569e4daec0eb1692fec4c4fa53c4368d237143e1cad08ffc9650879c983ac6b4192b34310ffe611682c889314954c61aa4b
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
sudo: false
|
2
|
+
cache: bundler
|
3
|
+
language: ruby
|
4
|
+
rvm:
|
5
|
+
- 2.3.1
|
6
|
+
env:
|
7
|
+
matrix:
|
8
|
+
- SOLIDUS_BRANCH=v1.1 DB=postgres
|
9
|
+
- SOLIDUS_BRANCH=v1.2 DB=postgres
|
10
|
+
- SOLIDUS_BRANCH=v1.3 DB=postgres
|
11
|
+
- SOLIDUS_BRANCH=v1.4 DB=postgres
|
12
|
+
- SOLIDUS_BRANCH=v2.0 DB=postgres
|
13
|
+
- SOLIDUS_BRANCH=master DB=postgres
|
14
|
+
- SOLIDUS_BRANCH=v1.1 DB=mysql
|
15
|
+
- SOLIDUS_BRANCH=v1.2 DB=mysql
|
16
|
+
- SOLIDUS_BRANCH=v1.3 DB=mysql
|
17
|
+
- SOLIDUS_BRANCH=v1.4 DB=mysql
|
18
|
+
- SOLIDUS_BRANCH=v2.0 DB=mysql
|
19
|
+
- SOLIDUS_BRANCH=master DB=mysql
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
Solidus Sitemap is an open source project and we encourage contributions. Please
|
4
|
+
see the [contributor guidelines](https://github.com/solidusio/solidus/blob/master/CONTRIBUTING.md)
|
5
|
+
for more information before contributing.
|
6
|
+
|
7
|
+
In the spirit of [free software][1], **everyone** is encouraged to help improve
|
8
|
+
this project.
|
9
|
+
|
10
|
+
Here are some ways *you* can contribute:
|
11
|
+
|
12
|
+
* by using prerelease versions
|
13
|
+
* by reporting [bugs][2]
|
14
|
+
* by suggesting new features
|
15
|
+
* by writing or editing documentation
|
16
|
+
* by writing specifications
|
17
|
+
* by writing code (*no patch is too small*: fix typos, add comments, clean up
|
18
|
+
inconsistent whitespace)
|
19
|
+
* by refactoring code
|
20
|
+
* by resolving [issues][2]
|
21
|
+
* by reviewing patches
|
22
|
+
|
23
|
+
---
|
24
|
+
|
25
|
+
## Filing an issue
|
26
|
+
|
27
|
+
When filing an issue on this extension, please first do these things:
|
28
|
+
|
29
|
+
* Verify you can reproduce this issue in a brand new application.
|
30
|
+
* Run through the steps to reproduce the issue again.
|
31
|
+
|
32
|
+
In the issue itself please provide:
|
33
|
+
|
34
|
+
* A comprehensive list of steps to reproduce the issue.
|
35
|
+
* What you're *expecting* to happen compared with what's *actually* happening.
|
36
|
+
* The version of Solidus *and* the version of Rails.
|
37
|
+
* A list of all extensions.
|
38
|
+
* Any relevant stack traces ("Full trace" preferred)
|
39
|
+
* Your `Gemfile`
|
40
|
+
|
41
|
+
In 99% of cases, this information is enough to determine the cause and solution
|
42
|
+
to the problem that is being described.
|
43
|
+
|
44
|
+
---
|
45
|
+
|
46
|
+
## Pull requests
|
47
|
+
|
48
|
+
We gladly accept pull requests to fix bugs and, in some circumstances, add new
|
49
|
+
features to this extension.
|
50
|
+
|
51
|
+
Here's a quick guide:
|
52
|
+
|
53
|
+
1. Fork the repo.
|
54
|
+
2. Run the tests. We only take pull requests with passing tests, and it's great
|
55
|
+
to know that you have a clean slate.
|
56
|
+
3. Create new branch then make changes and add tests for your changes. Only
|
57
|
+
refactoring and documentation changes require no new tests. If you are adding
|
58
|
+
functionality or fixing a bug, we need tests!
|
59
|
+
4. Push to your fork and submit a pull request. If the changes will apply
|
60
|
+
cleanly to the latest stable branches and master branch, you will only need
|
61
|
+
to submit one pull request.
|
62
|
+
|
63
|
+
At this point you're waiting on us. We may suggest some changes or improvements
|
64
|
+
or alternatives.
|
65
|
+
|
66
|
+
Some things that will increase the chance that your pull request is accepted,
|
67
|
+
taken straight from the Ruby on Rails guide:
|
68
|
+
|
69
|
+
* Use Rails idioms and helpers.
|
70
|
+
* Include tests that fail without your code, and pass with it.
|
71
|
+
* Update the documentation, the surrounding one, examples elsewhere, guides,
|
72
|
+
whatever is affected by your contribution.
|
73
|
+
|
74
|
+
---
|
75
|
+
|
76
|
+
## TL;DR
|
77
|
+
|
78
|
+
* Fork the repo
|
79
|
+
* Clone your repo
|
80
|
+
* Run `bundle install`
|
81
|
+
* Run `bundle exec rake test_app` to create the test application in `spec/dummy`
|
82
|
+
* Make your changes
|
83
|
+
* Ensure specs pass by running `bundle exec rspec spec`
|
84
|
+
* Ensure all syntax ok by running `rubocop .`
|
85
|
+
* Submit your pull request
|
86
|
+
|
87
|
+
And in case we didn't emphasize it enough: **we love tests!**
|
88
|
+
|
89
|
+
[1]: http://www.fsf.org/licensing/essays/free-sw.html
|
90
|
+
[2]: https://github.com/StemboltHQ/solidus_sitemap/issues
|
data/Gemfile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
branch = ENV.fetch('SOLIDUS_BRANCH', 'master')
|
4
|
+
gem "solidus", github: "solidusio/solidus", branch: branch
|
5
|
+
|
6
|
+
if branch == 'master' || branch >= "v2.0"
|
7
|
+
gem "rails-controller-testing", group: :test
|
8
|
+
end
|
9
|
+
|
10
|
+
gem 'pg'
|
11
|
+
gem 'mysql2'
|
12
|
+
|
13
|
+
group :development, :test do
|
14
|
+
gem "pry-rails"
|
15
|
+
end
|
16
|
+
|
17
|
+
gemspec
|
data/LICENSE.md
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
Copyright (c) 2011-2015 Jeff Dutil 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 Solidus 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,113 @@
|
|
1
|
+
# Solidus Sitemap
|
2
|
+
|
3
|
+
[](https://travis-ci.org/solidusio-contrib/solidus_sitemap)
|
4
|
+
|
5
|
+
Solidus Sitemap is a sitemap generator based on the [sitemap_generator][1] gem.
|
6
|
+
It adheres to the Sitemap 0.9 protocol specification. This is a continuation of
|
7
|
+
the [original Spree version](https://github.com/spree-contrib/spree_sitemap),
|
8
|
+
updated to work with the [Solidus](https://solidus.io) eCommerce platform.
|
9
|
+
|
10
|
+
### Features
|
11
|
+
|
12
|
+
- Notifies search engine of new sitemaps (Google, Yahoo, Ask, Bing)
|
13
|
+
- Supports large huge product catalogs
|
14
|
+
- Adheres to 0.9 Sitemap protocol specification
|
15
|
+
- Compresses sitemaps with gzip
|
16
|
+
- Provides basic sitemap of a Solidus site (products, taxons, login page, signup page)
|
17
|
+
- Easily add additional sitemaps for pages you add to your solidus site
|
18
|
+
- Supports Amazon S3 and other hosting services
|
19
|
+
- Thin wrapper over battle tested sitemap generator
|
20
|
+
|
21
|
+
### Configuration Options
|
22
|
+
|
23
|
+
Check out the [README][1] for the [sitemap_generator][1].
|
24
|
+
|
25
|
+
---
|
26
|
+
|
27
|
+
## Installation
|
28
|
+
|
29
|
+
1. Add the gem to your Solidus store's `Gemfile`:
|
30
|
+
```ruby
|
31
|
+
gem 'solidus_sitemap', github: 'solidusio-contrib/solidus_sitemap', branch: 'master'
|
32
|
+
```
|
33
|
+
|
34
|
+
2. Update your bundle:
|
35
|
+
|
36
|
+
```
|
37
|
+
$ bundle install
|
38
|
+
```
|
39
|
+
|
40
|
+
3. Run the installer, it will create a `config/sitemap.rb` file with some sane
|
41
|
+
defaults
|
42
|
+
|
43
|
+
```
|
44
|
+
$ rails g solidus_sitemap:install
|
45
|
+
```
|
46
|
+
|
47
|
+
4. Add the sitemap to your `.gitignore`, since it will be regenerated
|
48
|
+
server-side.
|
49
|
+
|
50
|
+
```
|
51
|
+
$ echo "public/sitemap*" >> .gitignore
|
52
|
+
```
|
53
|
+
|
54
|
+
5. Set up a cron job to regenrate your sitemap via the `rake sitemap:refresh`
|
55
|
+
task. If you use the [Whenever gem](https://github.com/javan/whenever), add
|
56
|
+
this to your `config/schedule.rb`:
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
every 1.day, at: '5:00 am' do
|
60
|
+
rake '-s sitemap:refresh'
|
61
|
+
end
|
62
|
+
```
|
63
|
+
|
64
|
+
6. Ensure crawlers can find the sitemap, by adding the following line to your
|
65
|
+
`public/robots.txt` with your correct domain name
|
66
|
+
|
67
|
+
```
|
68
|
+
$ echo "Sitemap: http://www.example.com/sitemap.xml.gz" >> public/robots.txt
|
69
|
+
```
|
70
|
+
|
71
|
+
---
|
72
|
+
|
73
|
+
## Acknowledgements
|
74
|
+
|
75
|
+
- [The original Spree version of this gem](https://github.com/spree-contrib/spree_sitemap)
|
76
|
+
- [The creators & contributors of sitemap_generator](http://github.com/kjvarga/sitemap_generator/contributors)
|
77
|
+
- [Joshua Nussbaum's original implementation of spree-sitemap-generator](https://github.com/joshnuss/spree-sitemap-generator)
|
78
|
+
|
79
|
+
---
|
80
|
+
|
81
|
+
## Upgrading
|
82
|
+
|
83
|
+
If you upgrade from early versions of `solidus_sitemap` you need to change your sitemaps from:
|
84
|
+
```ruby
|
85
|
+
SitemapGenerator::Sitemap.add_links do
|
86
|
+
# ...
|
87
|
+
end
|
88
|
+
```
|
89
|
+
|
90
|
+
to this:
|
91
|
+
```ruby
|
92
|
+
SitemapGenerator::Sitemap.create do
|
93
|
+
# ...
|
94
|
+
end
|
95
|
+
```
|
96
|
+
|
97
|
+
---
|
98
|
+
|
99
|
+
## Contributing
|
100
|
+
|
101
|
+
See corresponding [guidelines][2]
|
102
|
+
|
103
|
+
---
|
104
|
+
|
105
|
+
Copyright (c) 2016 [Stembolt](https://stembolt.com/)
|
106
|
+
|
107
|
+
Copyright (c) 2011-2015 [Jeff Dutil][5] and other [contributors][6], released under the [New BSD License][4].
|
108
|
+
|
109
|
+
[1]: http://github.com/kjvarga/sitemap_generator
|
110
|
+
[2]: https://github.com/spree-contrib/spree_i18n/blob/master/CONTRIBUTING.md
|
111
|
+
[4]: https://github.com/spree-contrib/spree_sitemap/blob/master/LICENSE.md
|
112
|
+
[5]: https://github.com/jdutil
|
113
|
+
[6]: https://github.com/solidusio-contrib/solidus_sitemap/graphs/contributors
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
require 'spree/testing_support/extension_rake'
|
6
|
+
|
7
|
+
RSpec::Core::RakeTask.new
|
8
|
+
|
9
|
+
task :default do
|
10
|
+
if Dir["spec/dummy"].empty?
|
11
|
+
Rake::Task[:test_app].invoke
|
12
|
+
Dir.chdir("../../")
|
13
|
+
end
|
14
|
+
Rake::Task[:spec].invoke
|
15
|
+
end
|
16
|
+
|
17
|
+
desc 'Generates a dummy app for testing'
|
18
|
+
task :test_app do
|
19
|
+
ENV['LIB_NAME'] = 'solidus_sitemap'
|
20
|
+
Rake::Task['extension:test_app'].invoke
|
21
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module SolidusSitemap
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
source_root File.expand_path('../../../templates', __FILE__)
|
5
|
+
|
6
|
+
desc 'Configures your Rails application for use with solidus_sitemap'
|
7
|
+
def copy_config
|
8
|
+
directory 'config'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
SitemapGenerator::Sitemap.default_host = "http://#{Spree::Store.default.url}"
|
2
|
+
|
3
|
+
##
|
4
|
+
## If using Heroku or similar service where you want sitemaps to live in S3 you'll need to setup these settings.
|
5
|
+
##
|
6
|
+
|
7
|
+
## Pick a place safe to write the files
|
8
|
+
# SitemapGenerator::Sitemap.public_path = 'tmp/'
|
9
|
+
|
10
|
+
## Store on S3 using Fog - Note must add fog to your Gemfile.
|
11
|
+
# SitemapGenerator::Sitemap.adapter = SitemapGenerator::S3Adapter.new(aws_access_key_id: Spree::Config[:s3_access_key],
|
12
|
+
# aws_secret_access_key: Spree::Config[:s3_secret],
|
13
|
+
# fog_provider: 'AWS',
|
14
|
+
# fog_directory: Spree::Config[:s3_bucket])
|
15
|
+
|
16
|
+
## Inform the map cross-linking where to find the other maps.
|
17
|
+
# SitemapGenerator::Sitemap.sitemaps_host = "http://#{Spree::Config[:s3_bucket]}.s3.amazonaws.com/"
|
18
|
+
|
19
|
+
## Pick a namespace within your bucket to organize your maps. Note you'll need to set this directory to be public.
|
20
|
+
# SitemapGenerator::Sitemap.sitemaps_path = 'sitemaps/'
|
21
|
+
|
22
|
+
SitemapGenerator::Sitemap.create do
|
23
|
+
# Put links creation logic here.
|
24
|
+
#
|
25
|
+
# The root path '/' and sitemap index file are added automatically.
|
26
|
+
# Links are added to the Sitemap in the order they are specified.
|
27
|
+
#
|
28
|
+
# Usage: add(path, options = {})
|
29
|
+
# (default options are used if you don't specify)
|
30
|
+
#
|
31
|
+
# Defaults: priority: 0.5, changefreq: 'weekly',
|
32
|
+
# lastmod: Time.now, host: default_host
|
33
|
+
#
|
34
|
+
#
|
35
|
+
# Examples:
|
36
|
+
#
|
37
|
+
# Add '/articles'
|
38
|
+
#
|
39
|
+
# add articles_path, priority: 0.7, changefreq: 'daily'
|
40
|
+
#
|
41
|
+
# Add individual articles:
|
42
|
+
#
|
43
|
+
# Article.find_each do |article|
|
44
|
+
# add article_path(article), lastmod: article.updated_at
|
45
|
+
# end
|
46
|
+
add_login
|
47
|
+
add_signup
|
48
|
+
add_account
|
49
|
+
add_password_reset
|
50
|
+
add_taxons
|
51
|
+
add_products
|
52
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module SolidusSitemap
|
2
|
+
class Engine < Rails::Engine
|
3
|
+
require 'spree/core'
|
4
|
+
isolate_namespace Spree
|
5
|
+
engine_name 'solidus_sitemap'
|
6
|
+
|
7
|
+
config.autoload_paths += %W(#{config.root}/lib)
|
8
|
+
|
9
|
+
def self.activate
|
10
|
+
Spree::Product.class_eval do
|
11
|
+
def self.last_updated
|
12
|
+
last_update = order('spree_products.updated_at DESC').first
|
13
|
+
last_update.try(:updated_at)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
require 'solidus_sitemap/solidus_defaults'
|
18
|
+
SitemapGenerator::Interpreter.send :include, SolidusSitemap::SolidusDefaults
|
19
|
+
if defined? SitemapGenerator::LinkSet
|
20
|
+
SitemapGenerator::LinkSet.send :include, SolidusSitemap::SolidusDefaults
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
config.to_prepare(&method(:activate).to_proc)
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
module SolidusSitemap::SolidusDefaults
|
2
|
+
include Spree::Core::Engine.routes.url_helpers
|
3
|
+
include Spree::BaseHelper # for meta_data
|
4
|
+
|
5
|
+
def default_url_options
|
6
|
+
{ host: SitemapGenerator::Sitemap.default_host }
|
7
|
+
end
|
8
|
+
|
9
|
+
def add_login(options = {})
|
10
|
+
add(login_path, options)
|
11
|
+
end
|
12
|
+
|
13
|
+
def add_signup(options = {})
|
14
|
+
add(signup_path, options)
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_account(options = {})
|
18
|
+
add(account_path, options)
|
19
|
+
end
|
20
|
+
|
21
|
+
def add_password_reset(options = {})
|
22
|
+
add(new_spree_user_password_path, options)
|
23
|
+
end
|
24
|
+
|
25
|
+
def add_products(options = {})
|
26
|
+
active_products = Spree::Product.active.uniq
|
27
|
+
|
28
|
+
add(products_path, options.merge(lastmod: active_products.last_updated))
|
29
|
+
active_products.each do |product|
|
30
|
+
add_product(product, options)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def add_product(product, options = {})
|
35
|
+
opts = options.merge(lastmod: product.updated_at)
|
36
|
+
|
37
|
+
if gem_available?('spree_videos') && product.videos.present?
|
38
|
+
# TODO: add exclusion list configuration option
|
39
|
+
# https://sites.google.com/site/webmasterhelpforum/en/faq-video-sitemaps#multiple-pages
|
40
|
+
|
41
|
+
# don't include all the videos on the page to avoid duplicate title warnings
|
42
|
+
primary_video = product.videos.first
|
43
|
+
opts.merge!(video: [video_options(primary_video.youtube_ref, product)])
|
44
|
+
end
|
45
|
+
|
46
|
+
add(product_path(product), opts)
|
47
|
+
end
|
48
|
+
|
49
|
+
def add_pages(options = {})
|
50
|
+
# TODO: this should be refactored to add_pages & add_page
|
51
|
+
|
52
|
+
Spree::Page.active.each do |page|
|
53
|
+
add(page.path, options.merge(lastmod: page.updated_at))
|
54
|
+
end if gem_available? 'spree_essential_cms'
|
55
|
+
|
56
|
+
Spree::Page.visible.each do |page|
|
57
|
+
add(page.slug, options.merge(lastmod: page.updated_at))
|
58
|
+
end if gem_available? 'spree_static_content'
|
59
|
+
end
|
60
|
+
|
61
|
+
def add_taxons(options = {})
|
62
|
+
Spree::Taxon.roots.each { |taxon| add_taxon(taxon, options) }
|
63
|
+
end
|
64
|
+
|
65
|
+
def add_taxon(taxon, options = {})
|
66
|
+
add(nested_taxons_path(taxon.permalink), options.merge(lastmod: taxon.products.last_updated)) if taxon.permalink.present?
|
67
|
+
taxon.children.each { |child| add_taxon(child, options) }
|
68
|
+
end
|
69
|
+
|
70
|
+
def gem_available?(name)
|
71
|
+
Gem::Specification.find_by_name(name)
|
72
|
+
rescue Gem::LoadError
|
73
|
+
false
|
74
|
+
rescue
|
75
|
+
Gem.available?(name)
|
76
|
+
end
|
77
|
+
|
78
|
+
def main_app
|
79
|
+
Rails.application.routes.url_helpers
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
|
84
|
+
##
|
85
|
+
# Multiple videos of the same ID can exist, but all videos linked in the sitemap should be inique
|
86
|
+
#
|
87
|
+
# Required video fields:
|
88
|
+
# http://www.seomoz.org/blog/video-sitemap-guide-for-vimeo-and-youtube
|
89
|
+
#
|
90
|
+
# YouTube thumbnail images:
|
91
|
+
# http://www.reelseo.com/youtube-thumbnail-image/
|
92
|
+
#
|
93
|
+
# NOTE title should match the page title, however the title generation isn't self-contained
|
94
|
+
# although not a future proof solution, the best (+ easiest) solution is to mimic the title for product pages
|
95
|
+
# https://github.com/solidusio/solidus/blob/1-3-stable/core/lib/spree/core/controller_helpers/common.rb#L39
|
96
|
+
# https://github.com/solidusio/solidus/blob/1-3-stable/core/app/controllers/spree/products_controller.rb#L41
|
97
|
+
#
|
98
|
+
def video_options(youtube_id, object = false)
|
99
|
+
({ description: meta_data(object)[:description] } rescue {}).merge(
|
100
|
+
({ title: [Spree::Config[:site_name], object.name].join(' - ') } rescue {})
|
101
|
+
).merge(
|
102
|
+
thumbnail_loc: "http://img.youtube.com/vi/#{youtube_id}/0.jpg",
|
103
|
+
player_loc: "http://www.youtube.com/v/#{youtube_id}",
|
104
|
+
autoplay: 'ap=1'
|
105
|
+
)
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module SolidusSitemap
|
2
|
+
module_function
|
3
|
+
|
4
|
+
# Returns the version of the currently loaded SolidusSitemap as a
|
5
|
+
# <tt>Gem::Version</tt>.
|
6
|
+
def version
|
7
|
+
Gem::Version.new VERSION::STRING
|
8
|
+
end
|
9
|
+
|
10
|
+
module VERSION
|
11
|
+
MAJOR = 1
|
12
|
+
MINOR = 0
|
13
|
+
TINY = 0
|
14
|
+
PRE = nil
|
15
|
+
|
16
|
+
STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib/', __FILE__)
|
3
|
+
$LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
|
4
|
+
|
5
|
+
require 'solidus_sitemap/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.name = 'solidus_sitemap'
|
10
|
+
s.version = SolidusSitemap.version
|
11
|
+
s.summary = 'Provides a sitemap file for Solidus'
|
12
|
+
s.description = s.summary
|
13
|
+
s.required_ruby_version = '>= 2.1.0'
|
14
|
+
|
15
|
+
s.author = 'Stembolt'
|
16
|
+
s.email = 'contact@stembolt.com'
|
17
|
+
s.homepage = 'https://github.com/StemboltHQ/solidus_sitemap'
|
18
|
+
|
19
|
+
s.files = `git ls-files`.split("\n")
|
20
|
+
s.test_files = `git ls-files -- spec/*`.split("\n")
|
21
|
+
s.require_path = 'lib'
|
22
|
+
s.requirements << 'none'
|
23
|
+
|
24
|
+
s.add_runtime_dependency 'solidus_core', ['>= 1.1', '< 3']
|
25
|
+
s.add_runtime_dependency 'sitemap_generator', '~> 5.1.0'
|
26
|
+
|
27
|
+
s.add_development_dependency 'database_cleaner', '~> 1.4.0'
|
28
|
+
s.add_development_dependency 'factory_girl', '~> 4.4'
|
29
|
+
s.add_development_dependency 'ffaker'
|
30
|
+
s.add_development_dependency 'rspec-rails', '~> 3.5'
|
31
|
+
s.add_development_dependency 'sqlite3', '~> 1.3.10'
|
32
|
+
s.add_development_dependency 'simplecov', '~> 0.9.0'
|
33
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
RSpec.describe SolidusSitemap::SolidusDefaults do
|
2
|
+
before do
|
3
|
+
@interpreter = SitemapGenerator::Interpreter.send :include, SolidusSitemap::SolidusDefaults
|
4
|
+
end
|
5
|
+
|
6
|
+
subject { @interpreter.new }
|
7
|
+
|
8
|
+
context 'Interpreter' do
|
9
|
+
%w( add_login
|
10
|
+
add_signup
|
11
|
+
add_account
|
12
|
+
add_password_reset
|
13
|
+
add_products
|
14
|
+
add_product
|
15
|
+
add_pages
|
16
|
+
add_taxons
|
17
|
+
add_taxons ).each do |method|
|
18
|
+
it "inherit included method #{method.to_sym}" do
|
19
|
+
expect(subject.respond_to?(method.to_sym)).to be(true)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context '.default_url_options' do
|
25
|
+
it 'returns a hash' do
|
26
|
+
expect(subject.default_url_options).to be_a Hash
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context '.gem_available?' do
|
31
|
+
it 'verifies that gem is available' do
|
32
|
+
expect(subject.gem_available?('rspec-rails')).to be_truthy
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'when there is no such gem' do
|
36
|
+
it 'returns false' do
|
37
|
+
expect(subject.gem_available?('fake_solidus_gem_name')).to be false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '.main_app' do
|
43
|
+
context 'returns the url helpers module for the application' do
|
44
|
+
it { expect(subject.main_app).to respond_to(:url_for, :spree_path, :_routes) }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
skip '.add_login(options = {})'
|
49
|
+
skip '.add_signup(options = {})'
|
50
|
+
skip '.add_account(options = {})'
|
51
|
+
skip '.add_password_reset(options = {})'
|
52
|
+
skip '.add_products(options = {})'
|
53
|
+
skip '.add_product(product, options = {})'
|
54
|
+
skip '.add_pages(options = {})'
|
55
|
+
skip '.add_taxons(options = {})'
|
56
|
+
skip '.add_taxon(taxon, options = {})'
|
57
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
SimpleCov.start do
|
3
|
+
add_group 'Libraries', 'lib'
|
4
|
+
add_filter 'spec'
|
5
|
+
end
|
6
|
+
|
7
|
+
ENV['RAILS_ENV'] ||= 'test'
|
8
|
+
|
9
|
+
begin
|
10
|
+
require File.expand_path('../dummy/config/environment', __FILE__)
|
11
|
+
rescue LoadError
|
12
|
+
puts 'Could not load dummy application. Please ensure you have run `bundle exec rake test_app`'
|
13
|
+
exit
|
14
|
+
end
|
15
|
+
|
16
|
+
require 'rspec/rails'
|
17
|
+
require 'ffaker'
|
18
|
+
|
19
|
+
RSpec.configure do |config|
|
20
|
+
config.use_transactional_fixtures = false
|
21
|
+
config.infer_base_class_for_anonymous_controllers = false
|
22
|
+
end
|
23
|
+
|
24
|
+
Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |file| require file }
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'database_cleaner'
|
2
|
+
|
3
|
+
RSpec.configure do |config|
|
4
|
+
config.before(:suite) do
|
5
|
+
DatabaseCleaner.clean_with :truncation
|
6
|
+
end
|
7
|
+
|
8
|
+
config.before do
|
9
|
+
DatabaseCleaner.strategy = :transaction
|
10
|
+
DatabaseCleaner.start
|
11
|
+
end
|
12
|
+
|
13
|
+
config.after do
|
14
|
+
DatabaseCleaner.clean
|
15
|
+
end
|
16
|
+
end
|
metadata
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: solidus_sitemap
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Stembolt
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-09-22 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: sitemap_generator
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 5.1.0
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 5.1.0
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: database_cleaner
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.4.0
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 1.4.0
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: factory_girl
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '4.4'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '4.4'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: ffaker
|
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: rspec-rails
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '3.5'
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '3.5'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: sqlite3
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.3.10
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 1.3.10
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: simplecov
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 0.9.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.9.0
|
131
|
+
description: Provides a sitemap file for Solidus
|
132
|
+
email: contact@stembolt.com
|
133
|
+
executables: []
|
134
|
+
extensions: []
|
135
|
+
extra_rdoc_files: []
|
136
|
+
files:
|
137
|
+
- ".gitignore"
|
138
|
+
- ".rspec"
|
139
|
+
- ".travis.yml"
|
140
|
+
- CONTRIBUTING.md
|
141
|
+
- Gemfile
|
142
|
+
- LICENSE.md
|
143
|
+
- README.md
|
144
|
+
- Rakefile
|
145
|
+
- lib/generators/solidus_sitemap/install/install_generator.rb
|
146
|
+
- lib/generators/templates/config/sitemap.rb
|
147
|
+
- lib/solidus_sitemap.rb
|
148
|
+
- lib/solidus_sitemap/engine.rb
|
149
|
+
- lib/solidus_sitemap/solidus_defaults.rb
|
150
|
+
- lib/solidus_sitemap/version.rb
|
151
|
+
- solidus_sitemap.gemspec
|
152
|
+
- spec/lib/solidus_sitemap/solidus_defaults_spec.rb
|
153
|
+
- spec/spec_helper.rb
|
154
|
+
- spec/support/database_cleaner.rb
|
155
|
+
- spec/support/factory_girl.rb
|
156
|
+
- spec/support/spree.rb
|
157
|
+
homepage: https://github.com/StemboltHQ/solidus_sitemap
|
158
|
+
licenses: []
|
159
|
+
metadata: {}
|
160
|
+
post_install_message:
|
161
|
+
rdoc_options: []
|
162
|
+
require_paths:
|
163
|
+
- lib
|
164
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
165
|
+
requirements:
|
166
|
+
- - ">="
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: 2.1.0
|
169
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
requirements:
|
175
|
+
- none
|
176
|
+
rubyforge_project:
|
177
|
+
rubygems_version: 2.5.1
|
178
|
+
signing_key:
|
179
|
+
specification_version: 4
|
180
|
+
summary: Provides a sitemap file for Solidus
|
181
|
+
test_files:
|
182
|
+
- spec/lib/solidus_sitemap/solidus_defaults_spec.rb
|
183
|
+
- spec/spec_helper.rb
|
184
|
+
- spec/support/database_cleaner.rb
|
185
|
+
- spec/support/factory_girl.rb
|
186
|
+
- spec/support/spree.rb
|