para-seo_tools 0.2.1

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.
Files changed (60) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +178 -0
  6. data/Rakefile +2 -0
  7. data/app/.DS_Store +0 -0
  8. data/app/components/seo_tools_skeleton_component.rb +7 -0
  9. data/app/controllers/.DS_Store +0 -0
  10. data/app/controllers/admin/para/seo_tools/skeleton_resources_controller.rb +21 -0
  11. data/app/decorators/seo_tools_skeleton_component_decorator.rb +3 -0
  12. data/app/helpers/para/seo_tools/admin/fields_helper.rb +15 -0
  13. data/app/models/para/seo_tools/page.rb +54 -0
  14. data/app/views/.DS_Store +0 -0
  15. data/app/views/admin/.DS_Store +0 -0
  16. data/app/views/admin/para/seo_tools/pages/_actions.html.haml +5 -0
  17. data/app/views/admin/para/seo_tools/pages/_filters.html.haml +25 -0
  18. data/app/views/admin/para/seo_tools/pages/_form.html.haml +13 -0
  19. data/app/views/admin/para/seo_tools/pages/_table.html.haml +20 -0
  20. data/app/views/admin/para/seo_tools/skeleton_resources/index.html.haml +4 -0
  21. data/bin/rails +12 -0
  22. data/config/locales/para-seo_tools.fr.yml +22 -0
  23. data/db/migrate/20150601085253_create_seo_tools_pages.rb +14 -0
  24. data/db/migrate/20160610094032_add_meta_tags_to_seo_tools_pages.rb +12 -0
  25. data/db/migrate/20160614081242_add_locale_and_remove_meta_tags_list_to_seo_tools_pages.rb +8 -0
  26. data/lib/generators/para/seo_tools/install/install_generator.rb +24 -0
  27. data/lib/generators/para/seo_tools/install/templates/initializer.rb +33 -0
  28. data/lib/generators/para/seo_tools/install/templates/skeleton.rb +37 -0
  29. data/lib/para/seo_tools/controller.rb +50 -0
  30. data/lib/para/seo_tools/engine.rb +27 -0
  31. data/lib/para/seo_tools/meta_tags/renderer.rb +80 -0
  32. data/lib/para/seo_tools/meta_tags/store.rb +52 -0
  33. data/lib/para/seo_tools/meta_tags/tags/base.rb +49 -0
  34. data/lib/para/seo_tools/meta_tags/tags/description.rb +54 -0
  35. data/lib/para/seo_tools/meta_tags/tags/image.rb +46 -0
  36. data/lib/para/seo_tools/meta_tags/tags/keywords.rb +20 -0
  37. data/lib/para/seo_tools/meta_tags/tags/title.rb +48 -0
  38. data/lib/para/seo_tools/meta_tags/tags/url.rb +13 -0
  39. data/lib/para/seo_tools/meta_tags/tags.rb +29 -0
  40. data/lib/para/seo_tools/meta_tags/vendors/base.rb +27 -0
  41. data/lib/para/seo_tools/meta_tags/vendors/open_graph.rb +23 -0
  42. data/lib/para/seo_tools/meta_tags/vendors/twitter.rb +23 -0
  43. data/lib/para/seo_tools/meta_tags/vendors.rb +17 -0
  44. data/lib/para/seo_tools/meta_tags.rb +12 -0
  45. data/lib/para/seo_tools/routes.rb +15 -0
  46. data/lib/para/seo_tools/sitemap.rb +13 -0
  47. data/lib/para/seo_tools/skeleton/page.rb +71 -0
  48. data/lib/para/seo_tools/skeleton/site.rb +18 -0
  49. data/lib/para/seo_tools/skeleton/worker.rb +11 -0
  50. data/lib/para/seo_tools/skeleton.rb +79 -0
  51. data/lib/para/seo_tools/version.rb +5 -0
  52. data/lib/para/seo_tools/view_helpers.rb +9 -0
  53. data/lib/para/seo_tools.rb +43 -0
  54. data/lib/tasks/migration.rake +20 -0
  55. data/lib/tasks/sitemap.rake +17 -0
  56. data/lib/tasks/skeleton.rake +9 -0
  57. data/para-seo_tools.gemspec +27 -0
  58. data/test/fixtures/seo_tools/pages.yml +11 -0
  59. data/test/models/seo_tools/page_test.rb +7 -0
  60. metadata +181 -0
@@ -0,0 +1,79 @@
1
+ module Para
2
+ module SeoTools
3
+ module Skeleton
4
+ extend ActiveSupport::Autoload
5
+
6
+ autoload :Site
7
+ autoload :Page
8
+ autoload :Worker
9
+
10
+ mattr_accessor :site, :config, :enable_logging
11
+
12
+ def self.with_logging(&block)
13
+ self.enable_logging = true
14
+ block.call
15
+ ensure
16
+ self.enable_logging = false
17
+ end
18
+
19
+ def self.load
20
+ # Ensure routes are loaded to allow skeleton to call routes name helpers
21
+ Rails.application.reload_routes!
22
+ # Skeleton file path
23
+ skeleton_path = Rails.root.join('config', 'skeleton.rb')
24
+ # Load the skeleton file
25
+ require skeleton_path if File.exists?(skeleton_path)
26
+ end
27
+
28
+ def self.draw(lazy: false, &block)
29
+ self.config = block
30
+ build unless lazy
31
+ end
32
+
33
+ def self.build
34
+ return if migrating?
35
+ return unless ActiveRecord::Base.connection.table_exists?(Para::SeoTools::Page.table_name)
36
+
37
+ log " * Building app skeleton pages ..."
38
+
39
+ self.site = Skeleton::Site.new
40
+ # Evaluate the configuration block
41
+ site.instance_exec(&config)
42
+
43
+ # Save all the pages to database
44
+ ActiveRecord::Base.transaction do
45
+ log " * Saving generated pages ..."
46
+
47
+ site.pages.each do |page|
48
+ page.model.save!
49
+ end
50
+
51
+ log " * Destroying old pages ..."
52
+
53
+ # Delete pages not in skeleton
54
+ destroy_deleted_pages!
55
+ end
56
+ end
57
+
58
+ def self.migrating?
59
+ ActiveRecord::Migrator.needs_migration?
60
+ end
61
+
62
+ def self.destroy_deleted_pages!
63
+ identifiers = site.pages.map(&:identifier)
64
+ pages = Para::SeoTools::Page.where.not(identifier: identifiers)
65
+
66
+ if (count = pages.count) > 0
67
+ log "Destroying #{ count } removed pages from Skeleton"
68
+ pages.destroy_all
69
+ end
70
+ end
71
+
72
+ # Log messages when you're not in rails
73
+ #
74
+ def self.log(message)
75
+ Rails.logger.info(message) if enable_logging || !$0.end_with?('rails')
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,5 @@
1
+ module Para
2
+ module SeoTools
3
+ VERSION = "0.2.1"
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ module Para
2
+ module SeoTools
3
+ module ViewHelpers
4
+ def meta_tags(options = {})
5
+ MetaTags::Renderer.new(self, options).render
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,43 @@
1
+ require 'sitemap'
2
+ require 'para'
3
+
4
+ require 'para/seo_tools/engine'
5
+
6
+ module Para
7
+ module SeoTools
8
+ extend ActiveSupport::Autoload
9
+
10
+ autoload :Controller
11
+ autoload :MetaTags
12
+ autoload :Routes
13
+ autoload :Skeleton
14
+ autoload :Sitemap
15
+
16
+ autoload :MetaTaggable
17
+ autoload :MetaTaggableMacro
18
+ autoload :ViewHelpers
19
+
20
+ mattr_accessor :host
21
+ @@host = ENV['APP_DOMAIN']
22
+
23
+ mattr_accessor :title_methods
24
+ @@title_methods = %w(title name)
25
+
26
+ mattr_accessor :description_methods
27
+ @@description_methods = %w(description desc content)
28
+
29
+ mattr_accessor :image_methods
30
+ @@image_methods = %w(image picture avatar)
31
+
32
+ mattr_accessor :defaults
33
+ @@defaults = nil
34
+
35
+ def self.configure
36
+ block_given? ? yield(self) : self
37
+ end
38
+
39
+ def self.table_name_prefix
40
+ 'seo_tools_'
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,20 @@
1
+ namespace :seo_tools do
2
+ task migrate_from_meta_tags: :environment do
3
+ ActiveRecord::Base.transaction do
4
+ pages = Para::SeoTools::Page.all
5
+
6
+ meta_tags = MetaTags::List.where(identifier: pages.map(&:identifier)).each_with_object({}) do |mt, hash|
7
+ hash[mt.identifier] = mt
8
+ end
9
+
10
+ print " * Migrating data for #{ pages.length } pages and #{ meta_tags.length } meta tags items ... "
11
+
12
+ pages.each do |page|
13
+ next unless (mt = meta_tags[page.identifier])
14
+ page.update(title: mt.meta_title, description: mt.meta_description, keywords: mt.meta_keywords)
15
+ end
16
+
17
+ puts 'done !'
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ namespace :seo_tools do
2
+ namespace :sitemap do
3
+ desc "Generates a new sitemap."
4
+ task generate: :environment do
5
+ Para::SeoTools::Sitemap.build
6
+ root = ::Sitemap.configuration.save_path || ENV["LOCATION"] || Rails.public_path
7
+ path = File.join(root, "sitemap.xml")
8
+ ::Sitemap::Generator.instance.build!
9
+ ::Sitemap::Generator.instance.save(path)
10
+ end
11
+
12
+ desc "Ping engines."
13
+ task ping: :environment do
14
+ ::Sitemap::Ping.send_request(ENV["LOCATION"])
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ namespace :seo_tools do
2
+ namespace :skeleton do
3
+ desc "Builds or refreshes the app skeleton."
4
+ task build: :environment do
5
+ Para::SeoTools::Skeleton.load
6
+ Para::SeoTools::Skeleton::Worker.perform
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'para/seo_tools/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "para-seo_tools"
8
+ spec.version = Para::SeoTools::VERSION
9
+ spec.authors = ["Valentin Ballestrino"]
10
+ spec.email = ["vala@glyph.fr"]
11
+ spec.summary = %q{SEO tools for the Para CMS}
12
+ spec.description = %q{SEO tools for the Para CMS}
13
+ spec.homepage = "https://github.com/para-cms/para"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency 'rails', '>= 4.0', '< 5.0'
22
+ spec.add_dependency 'sitemap', '~> 0.3'
23
+ spec.add_dependency 'request_store'
24
+
25
+ spec.add_development_dependency "bundler", "~> 1.7"
26
+ spec.add_development_dependency "rake", "~> 10.0"
27
+ end
@@ -0,0 +1,11 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2
+
3
+ one:
4
+ identifier: MyString
5
+ path: MyString
6
+ meta_tags_list_id:
7
+
8
+ two:
9
+ identifier: MyString
10
+ path: MyString
11
+ meta_tags_list_id:
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class SeoTools::PageTest < ActiveSupport::TestCase
4
+ # test "the truth" do
5
+ # assert true
6
+ # end
7
+ end
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: para-seo_tools
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.1
5
+ platform: ruby
6
+ authors:
7
+ - Valentin Ballestrino
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-06-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '4.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: sitemap
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.3'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.3'
47
+ - !ruby/object:Gem::Dependency
48
+ name: request_store
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: bundler
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.7'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '1.7'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rake
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '10.0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '10.0'
89
+ description: SEO tools for the Para CMS
90
+ email:
91
+ - vala@glyph.fr
92
+ executables:
93
+ - rails
94
+ extensions: []
95
+ extra_rdoc_files: []
96
+ files:
97
+ - ".gitignore"
98
+ - Gemfile
99
+ - LICENSE.txt
100
+ - README.md
101
+ - Rakefile
102
+ - app/.DS_Store
103
+ - app/components/seo_tools_skeleton_component.rb
104
+ - app/controllers/.DS_Store
105
+ - app/controllers/admin/para/seo_tools/skeleton_resources_controller.rb
106
+ - app/decorators/seo_tools_skeleton_component_decorator.rb
107
+ - app/helpers/para/seo_tools/admin/fields_helper.rb
108
+ - app/models/para/seo_tools/page.rb
109
+ - app/views/.DS_Store
110
+ - app/views/admin/.DS_Store
111
+ - app/views/admin/para/seo_tools/pages/_actions.html.haml
112
+ - app/views/admin/para/seo_tools/pages/_filters.html.haml
113
+ - app/views/admin/para/seo_tools/pages/_form.html.haml
114
+ - app/views/admin/para/seo_tools/pages/_table.html.haml
115
+ - app/views/admin/para/seo_tools/skeleton_resources/index.html.haml
116
+ - bin/rails
117
+ - config/locales/para-seo_tools.fr.yml
118
+ - db/migrate/20150601085253_create_seo_tools_pages.rb
119
+ - db/migrate/20160610094032_add_meta_tags_to_seo_tools_pages.rb
120
+ - db/migrate/20160614081242_add_locale_and_remove_meta_tags_list_to_seo_tools_pages.rb
121
+ - lib/generators/para/seo_tools/install/install_generator.rb
122
+ - lib/generators/para/seo_tools/install/templates/initializer.rb
123
+ - lib/generators/para/seo_tools/install/templates/skeleton.rb
124
+ - lib/para/seo_tools.rb
125
+ - lib/para/seo_tools/controller.rb
126
+ - lib/para/seo_tools/engine.rb
127
+ - lib/para/seo_tools/meta_tags.rb
128
+ - lib/para/seo_tools/meta_tags/renderer.rb
129
+ - lib/para/seo_tools/meta_tags/store.rb
130
+ - lib/para/seo_tools/meta_tags/tags.rb
131
+ - lib/para/seo_tools/meta_tags/tags/base.rb
132
+ - lib/para/seo_tools/meta_tags/tags/description.rb
133
+ - lib/para/seo_tools/meta_tags/tags/image.rb
134
+ - lib/para/seo_tools/meta_tags/tags/keywords.rb
135
+ - lib/para/seo_tools/meta_tags/tags/title.rb
136
+ - lib/para/seo_tools/meta_tags/tags/url.rb
137
+ - lib/para/seo_tools/meta_tags/vendors.rb
138
+ - lib/para/seo_tools/meta_tags/vendors/base.rb
139
+ - lib/para/seo_tools/meta_tags/vendors/open_graph.rb
140
+ - lib/para/seo_tools/meta_tags/vendors/twitter.rb
141
+ - lib/para/seo_tools/routes.rb
142
+ - lib/para/seo_tools/sitemap.rb
143
+ - lib/para/seo_tools/skeleton.rb
144
+ - lib/para/seo_tools/skeleton/page.rb
145
+ - lib/para/seo_tools/skeleton/site.rb
146
+ - lib/para/seo_tools/skeleton/worker.rb
147
+ - lib/para/seo_tools/version.rb
148
+ - lib/para/seo_tools/view_helpers.rb
149
+ - lib/tasks/migration.rake
150
+ - lib/tasks/sitemap.rake
151
+ - lib/tasks/skeleton.rake
152
+ - para-seo_tools.gemspec
153
+ - test/fixtures/seo_tools/pages.yml
154
+ - test/models/seo_tools/page_test.rb
155
+ homepage: https://github.com/para-cms/para
156
+ licenses:
157
+ - MIT
158
+ metadata: {}
159
+ post_install_message:
160
+ rdoc_options: []
161
+ require_paths:
162
+ - lib
163
+ required_ruby_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ requirements: []
174
+ rubyforge_project:
175
+ rubygems_version: 2.5.1
176
+ signing_key:
177
+ specification_version: 4
178
+ summary: SEO tools for the Para CMS
179
+ test_files:
180
+ - test/fixtures/seo_tools/pages.yml
181
+ - test/models/seo_tools/page_test.rb