headless-rails 0.0.3 → 0.0.4
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/headless-rails.gemspec +1 -0
- data/lib/headless/ajax_crawler/middleware.rb +25 -0
- data/lib/headless/ajax_crawler/request_matcher.rb +3 -1
- data/lib/headless/ajax_crawler/url_extractor.rb +2 -1
- data/lib/headless/ajax_crawler.rb +1 -2
- data/lib/headless/rails/version.rb +1 -1
- data/lib/headless/rails.rb +2 -11
- data/spec/headless/ajax_crawler/middleware_spec.rb +40 -0
- data/spec/headless/rails_spec.rb +0 -64
- metadata +18 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e99bfee5683052e01dcd3ff6064f12ba84f1ebc
|
4
|
+
data.tar.gz: a799666cdfc2a8ae4b61b315697611ab3fda75ad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79b18dbb88c26be4af7898e4703758f61ab9b301ad0ffd964c9e99a1954474e202b8f7c2ae8c7b0cabcc5e068652ae87c817fce5a5f993a9002bd31fc9921668
|
7
|
+
data.tar.gz: d1ba0c21be9b57b08678ea49924f6266867d6a34bbf1b7c7d255c708a59a726c01bd779ef50d512dca4b1ffe1d87ce52999844094f1ffbdc0f39a407435c7061
|
data/headless-rails.gemspec
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
require "rack/request"
|
2
|
+
require "headless/ajax_crawler/request_matcher"
|
3
|
+
require "headless/ajax_crawler/url_extractor"
|
4
|
+
require "headless/api_client"
|
5
|
+
|
6
|
+
module Headless
|
7
|
+
module AjaxCrawler
|
8
|
+
class Middleware < Struct.new(:app)
|
9
|
+
def call(env)
|
10
|
+
request = ::Rack::Request.new(env)
|
11
|
+
|
12
|
+
if ::Headless::AjaxCrawler::RequestMatcher.call(request)
|
13
|
+
url = ::Headless::AjaxCrawler::UrlExtractor.call(request)
|
14
|
+
crawled = ::Headless::APIClient.crawl(url)
|
15
|
+
|
16
|
+
if crawled.success?
|
17
|
+
return [200, { 'Content-Type' => "text/html" }, [crawled.content]]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
app.call(env)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/headless/rails.rb
CHANGED
@@ -1,17 +1,8 @@
|
|
1
1
|
require "headless/rails/version"
|
2
|
-
require "headless/ajax_crawler"
|
3
|
-
require "headless/api_client"
|
2
|
+
require "headless/ajax_crawler/middleware"
|
4
3
|
|
5
4
|
module Headless
|
6
5
|
module Rails
|
7
|
-
|
8
|
-
def respond_to_ajax_crawlers
|
9
|
-
if ::Headless::AjaxCrawler::RequestMatcher.call(request)
|
10
|
-
url = ::Headless::AjaxCrawler::UrlExtractor.call(request)
|
11
|
-
crawled = ::Headless::APIClient.crawl(url)
|
12
|
-
render :text => crawled.content if crawled.success?
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
6
|
+
Middleware = Headless::AjaxCrawler::Middleware
|
16
7
|
end
|
17
8
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'rack/test'
|
3
|
+
|
4
|
+
RSpec.describe Headless::AjaxCrawler::Middleware do
|
5
|
+
|
6
|
+
include Rack::Test::Methods
|
7
|
+
|
8
|
+
def app
|
9
|
+
hello_world = lambda { |env|
|
10
|
+
headers = { 'Content-Type' => "text/html" }
|
11
|
+
[200, headers, ['Hello world!']]
|
12
|
+
}
|
13
|
+
Headless::AjaxCrawler::Middleware.new(hello_world)
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:headless_response) { double(:headless_response, :success? => true, :content => :headless_content) }
|
17
|
+
|
18
|
+
context "regular url" do
|
19
|
+
it "renders hello world" do
|
20
|
+
get "/"
|
21
|
+
expect(last_response.body).to include("Hello world")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context "with an escaped_fragment" do
|
26
|
+
it "call headless and renders it" do
|
27
|
+
expect(Headless::APIClient).to receive(:crawl).and_return(headless_response)
|
28
|
+
get "/?_escaped_fragment_="
|
29
|
+
expect(last_response.body).to include("headless_content")
|
30
|
+
end
|
31
|
+
|
32
|
+
context "a POST" do
|
33
|
+
it "renders hello world" do
|
34
|
+
post "/?_escaped_fragment_="
|
35
|
+
expect(last_response.body).to include("Hello world")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
data/spec/headless/rails_spec.rb
CHANGED
@@ -4,68 +4,4 @@ RSpec.describe Headless::Rails do
|
|
4
4
|
it 'should have a version number' do
|
5
5
|
Headless::Rails::VERSION.should_not be_nil
|
6
6
|
end
|
7
|
-
|
8
|
-
let(:controller) do
|
9
|
-
double(:controller,
|
10
|
-
:request => request,
|
11
|
-
:params => {},
|
12
|
-
:render => nil
|
13
|
-
)
|
14
|
-
end
|
15
|
-
|
16
|
-
let(:request) { request_for_uri("/user/matthewrudy?foo=bar") }
|
17
|
-
let(:headless_response) { double(:headless_response, :success? => true, :content => :headless_content) }
|
18
|
-
|
19
|
-
describe "respond_to_ajax_crawlers" do
|
20
|
-
before do
|
21
|
-
controller.extend(Headless::Rails)
|
22
|
-
end
|
23
|
-
|
24
|
-
context "with no escaped_fragment" do
|
25
|
-
|
26
|
-
let(:request) { request_for_uri("/user/matthewrudy?foo=bar") }
|
27
|
-
|
28
|
-
before do
|
29
|
-
controller.stub(:params).and_return({})
|
30
|
-
end
|
31
|
-
|
32
|
-
it "doesn't call render" do
|
33
|
-
expect(controller).to_not receive(:render)
|
34
|
-
|
35
|
-
controller.respond_to_ajax_crawlers
|
36
|
-
end
|
37
|
-
|
38
|
-
it "returns nil" do
|
39
|
-
value = controller.respond_to_ajax_crawlers
|
40
|
-
expect(value).to be_nil
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context "with an escaped fragment" do
|
45
|
-
|
46
|
-
let(:request) { request_for_uri("/user/matthewrudy?foo=bar&_escaped_fragment_=/show/twitter") }
|
47
|
-
|
48
|
-
before do
|
49
|
-
expect(Headless::APIClient).to receive(:crawl).with("http://localhost:3000/user/matthewrudy?foo=bar#/show/twitter").and_return(headless_response)
|
50
|
-
end
|
51
|
-
|
52
|
-
it "extracts the fragment, fetches content from the api, and renders its" do
|
53
|
-
expect(controller).to receive(:render).with(:text => :headless_content)
|
54
|
-
|
55
|
-
controller.respond_to_ajax_crawlers
|
56
|
-
end
|
57
|
-
|
58
|
-
context "failure" do
|
59
|
-
before do
|
60
|
-
headless_response.stub(:success?).and_return(false)
|
61
|
-
end
|
62
|
-
|
63
|
-
it "doesn't render" do
|
64
|
-
expect(controller).to_not receive(:render)
|
65
|
-
|
66
|
-
controller.respond_to_ajax_crawlers
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
7
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: headless-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Rudy Jacobs
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - '>='
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rack-test
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
description: ' Seamlessly integrate headlessapp.com into your Rails application '
|
98
112
|
email:
|
99
113
|
- MatthewRudyJacobs@gmail.com
|
@@ -110,12 +124,14 @@ files:
|
|
110
124
|
- Rakefile
|
111
125
|
- headless-rails.gemspec
|
112
126
|
- lib/headless/ajax_crawler.rb
|
127
|
+
- lib/headless/ajax_crawler/middleware.rb
|
113
128
|
- lib/headless/ajax_crawler/request_matcher.rb
|
114
129
|
- lib/headless/ajax_crawler/url_extractor.rb
|
115
130
|
- lib/headless/api_client.rb
|
116
131
|
- lib/headless/api_response.rb
|
117
132
|
- lib/headless/rails.rb
|
118
133
|
- lib/headless/rails/version.rb
|
134
|
+
- spec/headless/ajax_crawler/middleware_spec.rb
|
119
135
|
- spec/headless/ajax_crawler/request_matcher_spec.rb
|
120
136
|
- spec/headless/ajax_crawler/url_extractor_spec.rb
|
121
137
|
- spec/headless/ap_response_spec.rb
|
@@ -148,6 +164,7 @@ signing_key:
|
|
148
164
|
specification_version: 4
|
149
165
|
summary: API wrapper for the HeadlessApp.com
|
150
166
|
test_files:
|
167
|
+
- spec/headless/ajax_crawler/middleware_spec.rb
|
151
168
|
- spec/headless/ajax_crawler/request_matcher_spec.rb
|
152
169
|
- spec/headless/ajax_crawler/url_extractor_spec.rb
|
153
170
|
- spec/headless/ap_response_spec.rb
|