seojs 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1accd1613c1b3854ef08a9d85086245760c0f2ff
4
+ data.tar.gz: a058817ed7c61d7939a708ace59c0a8f5e395106
5
+ SHA512:
6
+ metadata.gz: 28dc3156768a0024bec8651eb7d4d13b59da29f9a00327f7876a6e3a0fd3f43852ee169f9e954bc9f4c44b8154db1d5d23add8034741c04d32e57e8b20d8e106
7
+ data.tar.gz: 4771403b96a4816e0dd94f7e55b3e62355c54024f327db28f548447a48e41ac16d1fbe2a0192b0e6d4b474d2298c9c5447fca59edc137c87d8677506840c3574
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+
9
+ gem 'rack-rewrite'
10
+ gem 'rack-proxy'
11
+
12
+ group :development do
13
+ gem "shoulda", ">= 0"
14
+ gem "rdoc", "~> 3.12"
15
+ gem "bundler", "~> 1.0"
16
+ gem "jeweler", "~> 1.8.7"
17
+ #gem "rcov", ">= 0"
18
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,77 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activesupport (4.0.0)
5
+ i18n (~> 0.6, >= 0.6.4)
6
+ minitest (~> 4.2)
7
+ multi_json (~> 1.3)
8
+ thread_safe (~> 0.1)
9
+ tzinfo (~> 0.3.37)
10
+ addressable (2.3.5)
11
+ atomic (1.1.14)
12
+ builder (3.2.2)
13
+ faraday (0.8.8)
14
+ multipart-post (~> 1.2.0)
15
+ git (1.2.6)
16
+ github_api (0.10.1)
17
+ addressable
18
+ faraday (~> 0.8.1)
19
+ hashie (>= 1.2)
20
+ multi_json (~> 1.4)
21
+ nokogiri (~> 1.5.2)
22
+ oauth2
23
+ hashie (2.0.5)
24
+ highline (1.6.19)
25
+ httpauth (0.2.0)
26
+ i18n (0.6.5)
27
+ jeweler (1.8.7)
28
+ builder
29
+ bundler (~> 1.0)
30
+ git (>= 1.2.5)
31
+ github_api (= 0.10.1)
32
+ highline (>= 1.6.15)
33
+ nokogiri (= 1.5.10)
34
+ rake
35
+ rdoc
36
+ json (1.8.0)
37
+ jwt (0.1.8)
38
+ multi_json (>= 1.5)
39
+ minitest (4.7.5)
40
+ multi_json (1.8.0)
41
+ multi_xml (0.5.5)
42
+ multipart-post (1.2.0)
43
+ nokogiri (1.5.10)
44
+ oauth2 (0.9.2)
45
+ faraday (~> 0.8)
46
+ httpauth (~> 0.2)
47
+ jwt (~> 0.1.4)
48
+ multi_json (~> 1.0)
49
+ multi_xml (~> 0.5)
50
+ rack (~> 1.2)
51
+ rack (1.5.2)
52
+ rack-proxy (0.5.1)
53
+ rack
54
+ rack-rewrite (1.4.01)
55
+ rake (10.1.0)
56
+ rdoc (3.12.2)
57
+ json (~> 1.4)
58
+ shoulda (3.5.0)
59
+ shoulda-context (~> 1.0, >= 1.0.1)
60
+ shoulda-matchers (>= 1.4.1, < 3.0)
61
+ shoulda-context (1.1.5)
62
+ shoulda-matchers (2.3.0)
63
+ activesupport (>= 3.0.0)
64
+ thread_safe (0.1.3)
65
+ atomic
66
+ tzinfo (0.3.37)
67
+
68
+ PLATFORMS
69
+ ruby
70
+
71
+ DEPENDENCIES
72
+ bundler (~> 1.0)
73
+ jeweler (~> 1.8.7)
74
+ rack-proxy
75
+ rack-rewrite
76
+ rdoc (~> 3.12)
77
+ shoulda
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2013 SEO.js
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,62 @@
1
+ # SEO.js for Rails
2
+
3
+ Welcome to [SEO.js](http://getseojs.com/) for Rails! SEO.js makes your BackboneJS, AngularJS or EmberJS apps crawlable by Google to make them appear in search results. Integrating it to your Rails or Sinatra app is easy.
4
+
5
+
6
+ ## Installation
7
+ To get started add **seojs** to your ```Gemfile```:
8
+
9
+ ``` ruby
10
+ gem 'seojs'
11
+ ```
12
+
13
+ Next you need an **API token**. To get it sign up at http://getseojs.com/. While you're there add your site in the dashboard so the snapshots can already be prepared.
14
+
15
+ ### Rails
16
+
17
+ To configure the API token for SEO.js create a new file in your project ```config/initializers/seojs.rb``` with the following content:
18
+
19
+ ``` ruby
20
+ Seojs.token = "your_secret_api_token"
21
+ ```
22
+
23
+ If you are running your app on Heroku you can also just set ```SEOJS_TOKEN``` environment variable:
24
+
25
+ ``` bash
26
+ heroku config:set SEOJS_TOKEN=your_secret_api_token
27
+ ```
28
+
29
+ ### Sinatra
30
+
31
+ Add this to your ```config.ru``` (or other rackup file):
32
+ ``` ruby
33
+ require 'seojs'
34
+ Seojs.token = "your_secret_api_token"
35
+ use Seojs::Middleware
36
+ ```
37
+
38
+ That's it! Requests to your app containing the *\_escaped_fragment\_* query parameter will now be forwarded to the SEO.js CDN where HTML snapshots of your pages are kept. To tell search engines to look for these snapshots you need to add the fragment meta tag to the head section of your application's layout (probably at ```app/views/layouts/application.html.erb```):
39
+
40
+ ``` html
41
+ <head>
42
+ <meta name="fragment" content="!">
43
+ ...
44
+ </head>
45
+ ```
46
+
47
+ This method works both with **HTML5 pushState URLs** as well as **Hashbang URLs** (/some/action#!route)
48
+
49
+ ## Contributing to seojs
50
+
51
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
52
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
53
+ * Fork the project.
54
+ * Start a feature/bugfix branch.
55
+ * Commit and push until you are happy with your contribution.
56
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
57
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
58
+
59
+ ## Copyright
60
+
61
+ Copyright (c) 2013 SEO.js. See LICENSE.txt for
62
+ further details.
data/Rakefile ADDED
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "seojs"
18
+ gem.homepage = "http://github.com/seojs/seojs-ruby"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Integrate SEO.js to your Rack or Rails project}
21
+ gem.description = %Q{SEO.js makes your BackboneJS, AngularJS or EmberJS apps crawlable by Google to make them appear in search results.}
22
+ gem.email = "hello@getseojs.com"
23
+ gem.authors = ["getseojs.com"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ #require 'rcov/rcovtask'
36
+ #Rcov::RcovTask.new do |test|
37
+ # test.libs << 'test'
38
+ # test.pattern = 'test/**/test_*.rb'
39
+ # test.verbose = true
40
+ # test.rcov_opts << '--exclude "gems/*"'
41
+ #end
42
+
43
+ task :default => :test
44
+
45
+ require 'rdoc/task'
46
+ Rake::RDocTask.new do |rdoc|
47
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
+
49
+ rdoc.rdoc_dir = 'rdoc'
50
+ rdoc.title = "seojs #{version}"
51
+ rdoc.rdoc_files.include('README*')
52
+ rdoc.rdoc_files.include('lib/**/*.rb')
53
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.3
@@ -0,0 +1,57 @@
1
+ require 'seojs/rack/proxy'
2
+ require 'seojs/rack/cascade'
3
+
4
+ module Seojs
5
+ class Middleware
6
+
7
+ def initialize(app)
8
+ @app = app
9
+
10
+ backend = "#{Seojs.url}/v3"
11
+ puts "middleware init: #{Seojs.url}"
12
+
13
+ @rack_rewrite = ::Rack::Rewrite.new(app) do |env|
14
+ r301 %r{(.*_escaped_fragment_.*)}, lambda { |match, rack_env|
15
+ "#{backend}/#{rack_env['rack.url_scheme']}://#{rack_env['SERVER_NAME']}:#{rack_env['SERVER_PORT']}#{match[0]}"
16
+ }
17
+ end
18
+
19
+ proxy_app = Rack::Proxy.new(backend: backend, streaming: false)
20
+
21
+ @rack_proxy = Rack::Cascade.new([proxy_app, app], [200, 301, 302, 304])
22
+ end
23
+
24
+ def call(env)
25
+ @env = env
26
+
27
+ puts "middlware call: #{Seojs.url}"
28
+
29
+ if test?
30
+ [ 200, {"Content-Type" => "text/html"}, self ]
31
+ elsif Seojs.strategy == :redirect && Seojs.token && escaped_fragment_query?
32
+ @rack_rewrite.call(env)
33
+ elsif Seojs.strategy == :forward && Seojs.token && escaped_fragment_query?
34
+ @rack_proxy.call(env)
35
+ else
36
+ @app.call(env)
37
+ end
38
+ end
39
+
40
+ def each(&block)
41
+ if test?
42
+ block.call "SEO.js Middleware Found!"
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def escaped_fragment_query?
49
+ @env['ORIGINAL_FULLPATH'].match(/_escaped_fragment_/)
50
+ end
51
+
52
+ def test?
53
+ @env["PATH_INFO"] == "/seojs/test"
54
+ end
55
+
56
+ end
57
+ end
@@ -0,0 +1,18 @@
1
+ require 'rack/cascade'
2
+
3
+ module Seojs
4
+ module Rack
5
+ class Cascade < ::Rack::Cascade
6
+ def call(env)
7
+ result = NotFound
8
+
9
+ @apps.each do |app|
10
+ result = app.call(env)
11
+ break if @catch.include?(result[0].to_i)
12
+ end
13
+
14
+ result
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,34 @@
1
+ require 'rack/proxy'
2
+
3
+ module Seojs
4
+ module Rack
5
+ class Proxy < ::Rack::Proxy
6
+
7
+ def rewrite_env(rack_env)
8
+ rack_env.dup.tap do |env|
9
+ env['PATH_INFO'] = "#{@backend.request_uri}/#{env['rack.url_scheme']}://#{env['SERVER_NAME']}:#{env['SERVER_PORT']}#{env['PATH_INFO']}"
10
+ env['SERVER_NAME'] = @backend.host
11
+ env['SERVER_PORT'] = @backend.port
12
+ env['HTTP_HOST'] = "#{@backend.host}:#{@backend.port}"
13
+ end
14
+ end
15
+
16
+ def perform_request(env)
17
+ byebug
18
+ super(env)
19
+ end
20
+
21
+ def call(env)
22
+ # Timeout.timeout(20) do
23
+ code, headers, body = super(env)
24
+ body = [body] unless body.respond_to?(:each)
25
+ return [code, headers, body]
26
+ # end
27
+ [500, {}, ["Request timed out"]]
28
+ rescue Exception => e
29
+ [500, {}, [e.to_s]]
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,9 @@
1
+ require 'rack/rewrite'
2
+
3
+ module Seojs
4
+ class Railtie < ::Rails::Railtie
5
+ initializer "seojs.add_middleware" do |app|
6
+ app.config.middleware.use "Seojs::Middleware"
7
+ end
8
+ end
9
+ end
data/lib/seojs.rb ADDED
@@ -0,0 +1,35 @@
1
+ module Seojs
2
+ @strategy = :forward
3
+
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
+ def self.token=(value)
19
+ @url = "http://cdn.getseojs.com/snapshots/#{value}"
20
+ end
21
+
22
+ def self.url=(value)
23
+ @url = value
24
+ end
25
+
26
+ def self.url
27
+ @url
28
+ end
29
+
30
+ self.token = ENV['SEOJS_TOKEN'] if ENV['SEOJS_TOKEN']
31
+ self.url = ENV['SEOJS_URL'] if ENV['SEOJS_URL']
32
+ end
33
+
34
+ require 'seojs/middleware'
35
+ require 'seojs/railtie' if defined?(Rails::Railtie)
data/seojs.gemspec ADDED
@@ -0,0 +1,69 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "seojs"
8
+ s.version = "0.0.3"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["getseojs.com"]
12
+ s.date = "2013-09-30"
13
+ s.description = "SEO.js makes your BackboneJS, AngularJS or EmberJS apps crawlable by Google to make them appear in search results."
14
+ s.email = "hello@getseojs.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "LICENSE.txt",
24
+ "README.md",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "lib/seojs.rb",
28
+ "lib/seojs/middleware.rb",
29
+ "lib/seojs/rack/cascade.rb",
30
+ "lib/seojs/rack/proxy.rb",
31
+ "lib/seojs/railtie.rb",
32
+ "seojs.gemspec",
33
+ "test/helper.rb",
34
+ "test/test_seojs.rb"
35
+ ]
36
+ s.homepage = "http://github.com/seojs/seojs-ruby"
37
+ s.licenses = ["MIT"]
38
+ s.require_paths = ["lib"]
39
+ s.rubygems_version = "2.0.5"
40
+ s.summary = "Integrate SEO.js to your Rack or Rails project"
41
+
42
+ if s.respond_to? :specification_version then
43
+ s.specification_version = 4
44
+
45
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
46
+ s.add_runtime_dependency(%q<rack-rewrite>, [">= 0"])
47
+ s.add_runtime_dependency(%q<rack-proxy>, [">= 0"])
48
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
49
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
50
+ s.add_development_dependency(%q<bundler>, ["~> 1.0"])
51
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.7"])
52
+ else
53
+ s.add_dependency(%q<rack-rewrite>, [">= 0"])
54
+ s.add_dependency(%q<rack-proxy>, [">= 0"])
55
+ s.add_dependency(%q<shoulda>, [">= 0"])
56
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
57
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
58
+ s.add_dependency(%q<jeweler>, ["~> 1.8.7"])
59
+ end
60
+ else
61
+ s.add_dependency(%q<rack-rewrite>, [">= 0"])
62
+ s.add_dependency(%q<rack-proxy>, [">= 0"])
63
+ s.add_dependency(%q<shoulda>, [">= 0"])
64
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
65
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
66
+ s.add_dependency(%q<jeweler>, ["~> 1.8.7"])
67
+ end
68
+ end
69
+
data/test/helper.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'shoulda'
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+ require 'seojs'
16
+
17
+ class Test::Unit::TestCase
18
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestSeojs < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: seojs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - getseojs.com
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-09-30 00:00:00.000000000 Z
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
+ - !ruby/object:Gem::Dependency
28
+ name: rack-proxy
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: shoulda
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rdoc
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '3.12'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '3.12'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: jeweler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 1.8.7
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 1.8.7
97
+ description: SEO.js makes your BackboneJS, AngularJS or EmberJS apps crawlable by
98
+ Google to make them appear in search results.
99
+ email: hello@getseojs.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files:
103
+ - LICENSE.txt
104
+ - README.md
105
+ files:
106
+ - .document
107
+ - Gemfile
108
+ - Gemfile.lock
109
+ - LICENSE.txt
110
+ - README.md
111
+ - Rakefile
112
+ - VERSION
113
+ - lib/seojs.rb
114
+ - lib/seojs/middleware.rb
115
+ - lib/seojs/rack/cascade.rb
116
+ - lib/seojs/rack/proxy.rb
117
+ - lib/seojs/railtie.rb
118
+ - seojs.gemspec
119
+ - test/helper.rb
120
+ - test/test_seojs.rb
121
+ homepage: http://github.com/seojs/seojs-ruby
122
+ licenses:
123
+ - MIT
124
+ metadata: {}
125
+ post_install_message:
126
+ rdoc_options: []
127
+ require_paths:
128
+ - lib
129
+ required_ruby_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ required_rubygems_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ requirements: []
140
+ rubyforge_project:
141
+ rubygems_version: 2.0.5
142
+ signing_key:
143
+ specification_version: 4
144
+ summary: Integrate SEO.js to your Rack or Rails project
145
+ test_files: []