rails_angular_seo 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7e73eb69378b9cc7909a5fcbebe0acd2007ee332
4
- data.tar.gz: 5164182c7c70d4428cbd6c76552fea53a9d4ea87
3
+ metadata.gz: 9dc8041502d1872ebe5c88a59f918f60f5e558a5
4
+ data.tar.gz: d25693f847227afd1281d02f284e80fd0ae010aa
5
5
  SHA512:
6
- metadata.gz: 9110d9537df5cb07ee4d22cd73d0bc08726d18dd58a500f4f51dfd67ad4b5f7d342f4503cb17f4881d3ebe333f135c82c17d986629044bc5e1f761fbf9dc992c
7
- data.tar.gz: ed4746c179ad69cc9dc7e5c703f1c6fc7861474862e3ceea326f93651431076e3245771ede822a51327f23fd2ba2d4a8d5aedf5e93aa9da18425f49b60254041
6
+ metadata.gz: d2aa7ff1534bb6f3990785140d9c3d2290377645f5e2075f86d5fb0efbbf82190c69db2ead5dbe93f56fd9ee096ffbdf670b6eaf8373ad4965fd5b3a84cc0b61
7
+ data.tar.gz: b72d584cea072fc59d36f8e58021f5d0573c858071997a2aebc23f111e5992c3a7b35dd369ed251cfc9aa6fd3bd38098ec80b0cce9db71aa21061bf8d09ce52c
data/README.txt CHANGED
@@ -4,14 +4,20 @@
4
4
 
5
5
  == DESCRIPTION:
6
6
 
7
+ rails_angular_seo assumes that phantomjs is installed. Please install it if not installed already.
8
+
7
9
  rails_angular_seo allows you to make your single-page apps (Backbone, Angular, etc) built on Rails SEO-friendly. It works by injecting a small rack middleware that will render pages as plain html, when the requester has one of the following user-agent headers:
8
10
 
9
- Googlebot
10
- Googlebot-Mobile
11
- AdsBot-Google
12
- Mozilla/5.0 (compatible; Ask Jeeves/Teoma; +http://about.ask.com/en/docs/about/webmasters.shtml)
13
- Baiduspider
14
- Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
11
+ "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
12
+ "Googlebot/2.1 (+http://www.google.com/bot.html)",
13
+ "compatible; Mediapartners-Google/2.1; +http://www.google.com/bot.html",
14
+ "AdsBot-Google (+http://www.google.com/adsbot.html)",
15
+ "Mediapartners-Google",
16
+ "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)",
17
+ "Mozilla/5.0 (compatible; bingbot/2.0 +http://www.bing.com/bingbot.htm)",
18
+ "Baiduspider+(+http://www.baidu.com/search/spider_jp.html)",
19
+ "Baiduspider+(+http://www.baidu.com/search/spider.htm)",
20
+ "BaiDuSpider"
15
21
 
16
22
  Please note that, in order for this to work, you need more than one thread/process of your webserver running, as the middleware will effectively make a second call back to your own app and render the content, streaming it back to the requester (crawler/bot).
17
23
 
@@ -35,6 +41,7 @@ In order to serve a set of routes as a single-page app, your routes.rb usually c
35
41
  RailsAngularSeo::Middleware.base_path = "/" # replace / for whichever path matches your app's index.html
36
42
  RailsAngularSeo::Middleware.seo_id = "seo_id" # replace seo_id with whatever ID is used for the HTML DOM element which would be updated with status as "ready" once the ajax load is completed.
37
43
  RailsAngularSeo::Middleware.server_name = "NAME OF YOUR SERVER"
44
+ RailsAngularSeo::Middleware.phantomjs_path = "/usr/local/bin/phantomjs" # If phantomjs is not in the default PATH.
38
45
 
39
46
  And you're done! The middleware will only try to static-render requests made by bots AND that would render application/html content.
40
47
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.7
1
+ 0.0.8
@@ -11,6 +11,7 @@ module RailsAngularSeo
11
11
  attr_accessor :seo_id
12
12
  attr_accessor :server_name
13
13
  attr_accessor :phantomjs_path
14
+ attr_accessor :phantomjs_options
14
15
  end
15
16
 
16
17
  def initialize(app)
@@ -21,9 +22,10 @@ module RailsAngularSeo
21
22
  if will_render?(env)
22
23
  self.class.server_name ||= env["HTTP_HOST"]
23
24
  self.class.phantomjs_path ||= 'phantomjs'
25
+ self.class.phantomjs_options ||= ["--ssl-protocol=any"]
24
26
  path = URI("#{env["rack.url_scheme"]}://#{self.class.server_name}#{env["REQUEST_URI"]}")
25
27
  path_without_port = "#{env["rack.url_scheme"]}://#{path.host}#{env["REQUEST_URI"]}"
26
- RailsAngularSeo::Renderer.render(self.class.phantomjs_path, self.class.seo_id, path_without_port)
28
+ RailsAngularSeo::Renderer.render(self.class.phantomjs_path, self.class.seo_id, path_without_port, {phantomjs_options: self.class.phantomjs_options})
27
29
  else
28
30
  @app.call(env)
29
31
  end
@@ -1,9 +1,11 @@
1
1
  module RailsAngularSeo
2
2
  class Renderer
3
3
 
4
- def self.render(phantomjs_path, seo_id, path_without_port)
4
+ def self.render(phantomjs_path, seo_id, path_without_port, options = {})
5
5
  output = ""
6
- output = IO.popen([phantomjs_path, "--ssl-protocol=any", File.expand_path("../../../phantomjs/phantomjs-runner.js", __FILE__), path_without_port, seo_id]){|phantom_output| output = phantom_output.read}
6
+ options = {phantomjs_options: []}.merge(options)
7
+ open_options = [phantomjs_path] + options[:phantomjs_options] + [File.expand_path("../../../phantomjs/phantomjs-runner.js", __FILE__), path_without_port, seo_id]
8
+ output = IO.popen(open_options){|phantom_output| output = phantom_output.read}
7
9
  [200, { "Content-Type" => "text/html" }, [output]]
8
10
  end
9
11
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "rails_angular_seo"
8
- s.version = "0.0.7"
8
+ s.version = "0.0.8"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["herval", "arunn"]
@@ -1,8 +1,8 @@
1
- require "render_static/middleware"
1
+ require "rails_angular_seo/middleware"
2
2
 
3
- describe RenderStatic::Middleware do
3
+ describe RailsAngularSeo::Middleware do
4
4
  let(:app) { stub }
5
- let(:middleware) { RenderStatic::Middleware.new(app) }
5
+ let(:middleware) { RailsAngularSeo::Middleware.new(app) }
6
6
  let(:request) {
7
7
  {
8
8
  "PATH_INFO" => "/somewhere/",
@@ -11,7 +11,7 @@ describe RenderStatic::Middleware do
11
11
  }
12
12
 
13
13
  before do
14
- RenderStatic::Middleware.base_path = "/somewhere/"
14
+ RailsAngularSeo::Middleware.base_path = "/somewhere/"
15
15
  end
16
16
 
17
17
  describe "a non-bot user agent" do
@@ -19,7 +19,7 @@ describe RenderStatic::Middleware do
19
19
  env = request.merge("HTTP_USER_AGENT" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31")
20
20
 
21
21
  app.should_receive(:call).with(env)
22
- RenderStatic::Renderer.should_not_receive(:render)
22
+ RailsAngularSeo::Renderer.should_not_receive(:render)
23
23
 
24
24
  middleware.call(env)
25
25
  end
@@ -30,7 +30,7 @@ describe RenderStatic::Middleware do
30
30
  env = request.merge("HTTP_USER_AGENT" => "Googlebot", "PATH_INFO" => "/somewhere_else/a.html")
31
31
 
32
32
  app.should_receive(:call).with(env)
33
- RenderStatic::Renderer.should_not_receive(:render)
33
+ RailsAngularSeo::Renderer.should_not_receive(:render)
34
34
  middleware.call(env)
35
35
  end
36
36
 
@@ -38,7 +38,7 @@ describe RenderStatic::Middleware do
38
38
  env = request.merge("HTTP_USER_AGENT" => "Googlebot", "PATH_INFO" => "/somewhere/index.html")
39
39
 
40
40
  app.should_not_receive(:call)
41
- RenderStatic::Renderer.should_receive(:render).with(env)
41
+ RailsAngularSeo::Renderer.should_receive(:render).with(env)
42
42
  middleware.call(env)
43
43
  end
44
44
 
@@ -46,7 +46,7 @@ describe RenderStatic::Middleware do
46
46
  env = request.merge("HTTP_USER_AGENT" => "Googlebot", "PATH_INFO" => "/somewhere/index")
47
47
 
48
48
  app.should_not_receive(:call)
49
- RenderStatic::Renderer.should_receive(:render).with(env)
49
+ RailsAngularSeo::Renderer.should_receive(:render).with(env)
50
50
  middleware.call(env)
51
51
  end
52
52
 
@@ -54,7 +54,7 @@ describe RenderStatic::Middleware do
54
54
  env = request.merge("REQUEST_METHOD" => "POST", "PATH_INFO" => "/somewhere/index")
55
55
 
56
56
  app.should_receive(:call)
57
- RenderStatic::Renderer.should_not_receive(:render)
57
+ RailsAngularSeo::Renderer.should_not_receive(:render)
58
58
  middleware.call(env)
59
59
  end
60
60
 
@@ -62,7 +62,7 @@ describe RenderStatic::Middleware do
62
62
  env = request.merge("HTTP_USER_AGENT" => "Googlebot", "PATH_INFO" => "/somewhere/a.js")
63
63
 
64
64
  app.should_receive(:call).with(env)
65
- RenderStatic::Renderer.should_not_receive(:render)
65
+ RailsAngularSeo::Renderer.should_not_receive(:render)
66
66
  middleware.call(env)
67
67
  end
68
68
  end
@@ -1,4 +1,4 @@
1
- require "RailsAngularSeo/renderer"
1
+ require "rails_angular_seo/renderer"
2
2
 
3
3
  describe RailsAngularSeo::Renderer do
4
4
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_angular_seo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - herval