seojs 0.0.4 → 0.0.5
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 +4 -4
- data/Gemfile +0 -1
- data/Gemfile.lock +0 -2
- data/VERSION +1 -1
- data/lib/seojs.rb +4 -18
- data/lib/seojs/middleware.rb +3 -14
- data/lib/seojs/rack/proxy.rb +61 -6
- data/lib/seojs/railtie.rb +0 -2
- data/seojs.gemspec +2 -5
- metadata +2 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ff41c44815271af27f16d7419a59a8820f270f0
|
4
|
+
data.tar.gz: edeb8d13e24cf062cd5faa3b0294668e103ef68a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31b473f7b05c647e43102021e76fc1bebc8f699571c319c243af46838c677c49279609db7d8c6cd8e18e052801cea9ff5913cdd4d0c798e7172be15e10915ece
|
7
|
+
data.tar.gz: 94290ae8623c1cf71847442f7964063ffc25014e1c0a0106dffb714087dbfd8f8db8fcf7e1672106c548f4a0477654770c6b83bac5dcc0b8baa137bf23e7e203
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -51,7 +51,6 @@ GEM
|
|
51
51
|
rack (1.5.2)
|
52
52
|
rack-proxy (0.5.1)
|
53
53
|
rack
|
54
|
-
rack-rewrite (1.4.01)
|
55
54
|
rake (10.1.0)
|
56
55
|
rdoc (3.12.2)
|
57
56
|
json (~> 1.4)
|
@@ -72,6 +71,5 @@ DEPENDENCIES
|
|
72
71
|
bundler (~> 1.0)
|
73
72
|
jeweler (~> 1.8.7)
|
74
73
|
rack-proxy
|
75
|
-
rack-rewrite
|
76
74
|
rdoc (~> 3.12)
|
77
75
|
shoulda
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.5
|
data/lib/seojs.rb
CHANGED
@@ -1,20 +1,5 @@
|
|
1
1
|
module Seojs
|
2
|
-
@strategy = :forward
|
3
2
|
|
4
|
-
def self.strategy=(value)
|
5
|
-
allowed_values = [:forward, :redirect]
|
6
|
-
unless allowed_values.map(&:to_s).include?(value.to_s)
|
7
|
-
puts "Seojs.strategy must be one of the following values:\n\t#{allowed_values}"
|
8
|
-
return
|
9
|
-
else
|
10
|
-
@strategy = value.to_sym
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.strategy
|
15
|
-
@strategy
|
16
|
-
end
|
17
|
-
|
18
3
|
def self.token=(value)
|
19
4
|
@url = "http://cdn.getseojs.com/snapshots/#{value}"
|
20
5
|
end
|
@@ -26,10 +11,11 @@ module Seojs
|
|
26
11
|
def self.url
|
27
12
|
@url
|
28
13
|
end
|
29
|
-
|
30
|
-
self.token = ENV['SEOJS_TOKEN'] if ENV['SEOJS_TOKEN']
|
31
|
-
self.url = ENV['SEOJS_URL'] if ENV['SEOJS_URL']
|
14
|
+
|
32
15
|
end
|
33
16
|
|
17
|
+
Seojs.token = ENV['SEOJS_TOKEN'] if ENV['SEOJS_TOKEN']
|
18
|
+
Seojs.url = ENV['SEOJS_URL'] if ENV['SEOJS_URL']
|
19
|
+
|
34
20
|
require 'seojs/middleware'
|
35
21
|
require 'seojs/railtie' if defined?(Rails::Railtie)
|
data/lib/seojs/middleware.rb
CHANGED
@@ -6,18 +6,9 @@ module Seojs
|
|
6
6
|
|
7
7
|
def initialize(app)
|
8
8
|
@app = app
|
9
|
-
|
10
|
-
backend = "#{Seojs.url}/v3"
|
11
|
-
|
12
|
-
@rack_rewrite = ::Rack::Rewrite.new(app) do |env|
|
13
|
-
r301 %r{(.*_escaped_fragment_.*)}, lambda { |match, rack_env|
|
14
|
-
"#{backend}/#{rack_env['rack.url_scheme']}://#{rack_env['SERVER_NAME']}:#{rack_env['SERVER_PORT']}#{match[0]}"
|
15
|
-
}
|
16
|
-
end
|
17
|
-
|
18
|
-
proxy_app = Rack::Proxy.new(backend: backend, streaming: false)
|
19
|
-
|
9
|
+
proxy_app = Rack::Proxy.new(backend: "#{Seojs.url}/v3", streaming: false)
|
20
10
|
@rack_proxy = Rack::Cascade.new([proxy_app, app], [200, 301, 302, 304])
|
11
|
+
puts "init"
|
21
12
|
end
|
22
13
|
|
23
14
|
def call(env)
|
@@ -25,9 +16,7 @@ module Seojs
|
|
25
16
|
|
26
17
|
if test?
|
27
18
|
[ 200, {"Content-Type" => "text/html"}, self ]
|
28
|
-
elsif Seojs.
|
29
|
-
@rack_rewrite.call(env)
|
30
|
-
elsif Seojs.strategy == :forward && Seojs.token && escaped_fragment_query?
|
19
|
+
elsif Seojs.url && escaped_fragment_query?
|
31
20
|
@rack_proxy.call(env)
|
32
21
|
else
|
33
22
|
@app.call(env)
|
data/lib/seojs/rack/proxy.rb
CHANGED
@@ -13,17 +13,72 @@ module Seojs
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
+
# TODO: Submit PR to rack-proxy for target_response.to_hash
|
16
17
|
def perform_request(env)
|
17
|
-
|
18
|
+
source_request = ::Rack::Request.new(env)
|
19
|
+
|
20
|
+
# Initialize request
|
21
|
+
if source_request.fullpath == ""
|
22
|
+
full_path = URI.parse(env['REQUEST_URI']).request_uri
|
23
|
+
else
|
24
|
+
full_path = source_request.fullpath
|
25
|
+
end
|
26
|
+
|
27
|
+
target_request = Net::HTTP.const_get(source_request.request_method.capitalize).new(full_path)
|
28
|
+
|
29
|
+
# Setup headers
|
30
|
+
target_request.initialize_http_header(extract_http_request_headers(source_request.env))
|
31
|
+
|
32
|
+
# Setup body
|
33
|
+
if target_request.request_body_permitted? && source_request.body
|
34
|
+
target_request.body_stream = source_request.body
|
35
|
+
target_request.content_length = source_request.content_length.to_i
|
36
|
+
target_request.content_type = source_request.content_type if source_request.content_type
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
# Create a streaming response (the actual network communication is deferred, a.k.a. streamed)
|
41
|
+
if @streaming
|
42
|
+
if @backend
|
43
|
+
target_response = HttpStreamingResponse.new(target_request, @backend.host, @backend.port)
|
44
|
+
|
45
|
+
target_response.use_ssl = "https" == @backend.scheme
|
46
|
+
else
|
47
|
+
target_response = HttpStreamingResponse.new(target_request, source_request.host, source_request.port)
|
48
|
+
|
49
|
+
target_response.use_ssl = "https" == source_request.scheme
|
50
|
+
end
|
51
|
+
|
52
|
+
triplet = [target_response.status, target_response.headers, target_response.body]
|
53
|
+
else
|
54
|
+
host = (@backend && @backend.host) || source_request.host
|
55
|
+
port = (@backend && @backend.port) || source_request.port
|
56
|
+
target_response = Net::HTTP.start(host, port) do |http|
|
57
|
+
http.request(target_request)
|
58
|
+
end
|
59
|
+
|
60
|
+
if target_response.respond_to?(:headers)
|
61
|
+
headers = target_response.headers
|
62
|
+
elsif target_response.respond_to?(:to_hash)
|
63
|
+
headers = target_response.to_hash
|
64
|
+
else
|
65
|
+
headers = {}
|
66
|
+
end
|
67
|
+
|
68
|
+
body = target_response.body
|
69
|
+
body = [body] unless body.respond_to?(:each)
|
70
|
+
|
71
|
+
triplet = [target_response.code, headers, body]
|
72
|
+
end
|
73
|
+
|
74
|
+
triplet
|
18
75
|
end
|
76
|
+
|
19
77
|
|
20
78
|
def call(env)
|
21
|
-
Timeout.timeout(
|
22
|
-
|
23
|
-
body = [body] unless body.respond_to?(:each)
|
24
|
-
return [code, headers, body]
|
79
|
+
Timeout.timeout(10) do
|
80
|
+
return super(env)
|
25
81
|
end
|
26
|
-
[500, {}, ["Request timed out"]]
|
27
82
|
rescue Exception => e
|
28
83
|
[500, {}, [e.to_s]]
|
29
84
|
end
|
data/lib/seojs/railtie.rb
CHANGED
data/seojs.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "seojs"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["getseojs.com"]
|
12
|
-
s.date = "2013-
|
12
|
+
s.date = "2013-10-01"
|
13
13
|
s.description = "SEO.js makes your BackboneJS, AngularJS or EmberJS apps crawlable by Google to make them appear in search results."
|
14
14
|
s.email = "hello@getseojs.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -43,14 +43,12 @@ Gem::Specification.new do |s|
|
|
43
43
|
s.specification_version = 4
|
44
44
|
|
45
45
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
46
|
-
s.add_runtime_dependency(%q<rack-rewrite>, [">= 0"])
|
47
46
|
s.add_runtime_dependency(%q<rack-proxy>, [">= 0"])
|
48
47
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
49
48
|
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
50
49
|
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
51
50
|
s.add_development_dependency(%q<jeweler>, ["~> 1.8.7"])
|
52
51
|
else
|
53
|
-
s.add_dependency(%q<rack-rewrite>, [">= 0"])
|
54
52
|
s.add_dependency(%q<rack-proxy>, [">= 0"])
|
55
53
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
56
54
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
@@ -58,7 +56,6 @@ Gem::Specification.new do |s|
|
|
58
56
|
s.add_dependency(%q<jeweler>, ["~> 1.8.7"])
|
59
57
|
end
|
60
58
|
else
|
61
|
-
s.add_dependency(%q<rack-rewrite>, [">= 0"])
|
62
59
|
s.add_dependency(%q<rack-proxy>, [">= 0"])
|
63
60
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
64
61
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: seojs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- getseojs.com
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: rack-rewrite
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - '>='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - '>='
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: rack-proxy
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|