para-seo_tools 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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