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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 21b0f92d77e15c80aa132104b24364189c1767e7
4
- data.tar.gz: e1699ab35cbaabba74f93524a13bc4a3ee48952e
3
+ metadata.gz: 3430eeda993cfbe14e78e0db458e45ffcff310f7
4
+ data.tar.gz: aaacaea9451a308e118149656d1b7b7bf7e994f2
5
5
  SHA512:
6
- metadata.gz: 1e08d9016ae46c03000e48464df75dd2a22c53d361eaf96bae8031914b23b57c823b98ca654c28ed7806603e43f9eb11a48e11f6a8e55f0d7445d62d2553a488
7
- data.tar.gz: b4b5a0fb24e46b1eeaeecb52b5599b0a7a251d8e5c195a43212e4262efccec92d3601e5792aa55f18ada4f6c6fb6517bc2e9cddad99bf6663c0d5429848e69b9
6
+ metadata.gz: f15c29d05d3386ef1c52c9212d20d938958afc61014b6db81f87941d978e5d7eb890b4580112d1e08074418a9cd1f86aa27fd54b8a675258749dbb247d74d616
7
+ data.tar.gz: 366451b773dd444f436e02af981271c39bcc5e0a9489c8c69fb8c6cc71abcd1a3005b22cdb6e7df70d2937dbb214e0c8d38c638b93dfea81b2400cea21db0a97
@@ -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
@@ -1,5 +1,5 @@
1
1
  module Headless
2
2
  module Rails
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
@@ -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
@@ -14,7 +14,7 @@ RSpec.describe Headless::Rails do
14
14
  end
15
15
 
16
16
  let(:request) { double(:request) }
17
- let(:headless_response) { double(:headless_response, :content => :headless_content) }
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.1
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