headless-rails 0.0.1 → 0.0.2
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/lib/headless/api_client.rb +2 -15
- data/lib/headless/api_response.rb +20 -0
- data/lib/headless/rails/version.rb +1 -1
- data/lib/headless/rails.rb +2 -2
- data/spec/headless/ap_response_spec.rb +42 -0
- data/spec/headless/rails_spec.rb +16 -3
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3430eeda993cfbe14e78e0db458e45ffcff310f7
|
4
|
+
data.tar.gz: aaacaea9451a308e118149656d1b7b7bf7e994f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f15c29d05d3386ef1c52c9212d20d938958afc61014b6db81f87941d978e5d7eb890b4580112d1e08074418a9cd1f86aa27fd54b8a675258749dbb247d74d616
|
7
|
+
data.tar.gz: 366451b773dd444f436e02af981271c39bcc5e0a9489c8c69fb8c6cc71abcd1a3005b22cdb6e7df70d2937dbb214e0c8d38c638b93dfea81b2400cea21db0a97
|
data/lib/headless/api_client.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
+
require "headless/api_response"
|
1
2
|
require "rest_client"
|
2
|
-
require "json"
|
3
3
|
|
4
4
|
module Headless
|
5
5
|
class APIClient
|
@@ -9,20 +9,7 @@ module Headless
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def crawl(url)
|
12
|
-
APIResponse.new(get("/api/crawl", :url => url))
|
13
|
-
end
|
14
|
-
|
15
|
-
class APIResponse < Struct.new(:response)
|
16
|
-
|
17
|
-
def content
|
18
|
-
parsed_response["content"]
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def parsed_response
|
24
|
-
@parsed_response ||= ::JSON.parse(response)
|
25
|
-
end
|
12
|
+
::Headless::APIResponse.new(get("/api/crawl", :url => url))
|
26
13
|
end
|
27
14
|
|
28
15
|
private
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "json"
|
2
|
+
|
3
|
+
module Headless
|
4
|
+
class APIResponse < Struct.new(:response)
|
5
|
+
|
6
|
+
def success?
|
7
|
+
parsed_response["success"]
|
8
|
+
end
|
9
|
+
|
10
|
+
def content
|
11
|
+
parsed_response["content"]
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def parsed_response
|
17
|
+
@parsed_response ||= ::JSON.parse(response)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/headless/rails.rb
CHANGED
@@ -9,9 +9,9 @@ module Headless
|
|
9
9
|
|
10
10
|
def respond_to_ajax_crawlers
|
11
11
|
if params.has_key?(ESCAPED_FRAGMENT_KEY)
|
12
|
-
url = EscapedFragmentExtractor.call(request)
|
12
|
+
url = ::Headless::Rails::EscapedFragmentExtractor.call(request)
|
13
13
|
crawled = ::Headless::APIClient.crawl(url)
|
14
|
-
render text: crawled.content
|
14
|
+
render text: crawled.content if crawled.success?
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe Headless::APIResponse do
|
4
|
+
|
5
|
+
let(:successful) do
|
6
|
+
{
|
7
|
+
"success" => true,
|
8
|
+
"status" => "success",
|
9
|
+
"url" => "http://example.com",
|
10
|
+
"title" => "Title",
|
11
|
+
"content" => "<h1>Title</h1>",
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:failed) do
|
16
|
+
{"success"=>false, "status"=>"fail"}
|
17
|
+
end
|
18
|
+
|
19
|
+
context "success" do
|
20
|
+
subject do
|
21
|
+
Headless::APIResponse.new(JSON.dump(successful))
|
22
|
+
end
|
23
|
+
|
24
|
+
it "parses the content" do
|
25
|
+
expect(subject.content).to eq("<h1>Title</h1>")
|
26
|
+
end
|
27
|
+
|
28
|
+
it "returns true for success?" do
|
29
|
+
expect(subject.success?).to be_true
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "failure" do
|
34
|
+
subject do
|
35
|
+
Headless::APIResponse.new(JSON.dump(failed))
|
36
|
+
end
|
37
|
+
|
38
|
+
it "returns false for success?" do
|
39
|
+
expect(subject.success?).to be_false
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/spec/headless/rails_spec.rb
CHANGED
@@ -14,7 +14,7 @@ RSpec.describe Headless::Rails do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
let(:request) { double(:request) }
|
17
|
-
let(:headless_response)
|
17
|
+
let(:headless_response) { double(:headless_response, :success? => true, :content => :headless_content) }
|
18
18
|
|
19
19
|
describe "respond_to_ajax_crawlers" do
|
20
20
|
before do
|
@@ -41,15 +41,28 @@ RSpec.describe Headless::Rails do
|
|
41
41
|
context "with an escaped fragment" do
|
42
42
|
before do
|
43
43
|
controller.stub(:params).and_return({"_escaped_fragment_" => "something"})
|
44
|
-
end
|
45
44
|
|
46
|
-
it "extracts the fragment, fetches content from the api, and renders its" do
|
47
45
|
expect(Headless::Rails::EscapedFragmentExtractor).to receive(:call).with(request).and_return(:a_url)
|
48
46
|
expect(Headless::APIClient).to receive(:crawl).with(:a_url).and_return(headless_response)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "extracts the fragment, fetches content from the api, and renders its" do
|
49
50
|
expect(controller).to receive(:render).with(:text => :headless_content)
|
50
51
|
|
51
52
|
controller.respond_to_ajax_crawlers
|
52
53
|
end
|
54
|
+
|
55
|
+
context "failure" do
|
56
|
+
before do
|
57
|
+
headless_response.stub(:success?).and_return(false)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "doesn't render" do
|
61
|
+
expect(controller).to_not receive(:render)
|
62
|
+
|
63
|
+
controller.respond_to_ajax_crawlers
|
64
|
+
end
|
65
|
+
end
|
53
66
|
end
|
54
67
|
end
|
55
68
|
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.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Rudy Jacobs
|
@@ -110,9 +110,11 @@ files:
|
|
110
110
|
- Rakefile
|
111
111
|
- headless-rails.gemspec
|
112
112
|
- lib/headless/api_client.rb
|
113
|
+
- lib/headless/api_response.rb
|
113
114
|
- lib/headless/rails.rb
|
114
115
|
- lib/headless/rails/escaped_fragment_extractor.rb
|
115
116
|
- lib/headless/rails/version.rb
|
117
|
+
- spec/headless/ap_response_spec.rb
|
116
118
|
- spec/headless/api_client_spec.rb
|
117
119
|
- spec/headless/rails/escaped_fragment_extractor_spec.rb
|
118
120
|
- spec/headless/rails_spec.rb
|
@@ -142,6 +144,7 @@ signing_key:
|
|
142
144
|
specification_version: 4
|
143
145
|
summary: API wrapper for the HeadlessApp.com
|
144
146
|
test_files:
|
147
|
+
- spec/headless/ap_response_spec.rb
|
145
148
|
- spec/headless/api_client_spec.rb
|
146
149
|
- spec/headless/rails/escaped_fragment_extractor_spec.rb
|
147
150
|
- spec/headless/rails_spec.rb
|