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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f8f528076eccde288b3cec6d1fe33dcbddbea353
4
- data.tar.gz: 0ac9c6ce2bb2856dd14b8c24588d4fd546e0408d
3
+ metadata.gz: 3e99bfee5683052e01dcd3ff6064f12ba84f1ebc
4
+ data.tar.gz: a799666cdfc2a8ae4b61b315697611ab3fda75ad
5
5
  SHA512:
6
- metadata.gz: 4ec9616d598293f33e8876f5649e14b5bbfaee4fa7da824bd6b0990cb701025ed26799c9171c91b476cd57e68bad63b3ece0b2cbc7b63b6737b0df041d9614f9
7
- data.tar.gz: ab7267fdb39ab4699200ccc3ca0cb0943697209c2c95eb0ba5d55c7970ce9c38b6bfc5106d1452f48b54dc44e3abc43dd6ba645026e29401cadc7821964e83fb
6
+ metadata.gz: 79b18dbb88c26be4af7898e4703758f61ab9b301ad0ffd964c9e99a1954474e202b8f7c2ae8c7b0cabcc5e068652ae87c817fce5a5f993a9002bd31fc9921668
7
+ data.tar.gz: d1ba0c21be9b57b08678ea49924f6266867d6a34bbf1b7c7d255c708a59a726c01bd779ef50d512dca4b1ffe1d87ce52999844094f1ffbdc0f39a407435c7061
@@ -26,4 +26,5 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency "bundler", "~> 1.3"
27
27
  spec.add_development_dependency "rake"
28
28
  spec.add_development_dependency "rspec"
29
+ spec.add_development_dependency "rack-test"
29
30
  end
@@ -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
@@ -1,6 +1,8 @@
1
+ require "headless/ajax_crawler"
2
+
1
3
  module Headless
2
4
  module AjaxCrawler
3
- class RequestMatcher< Struct.new(:request)
5
+ class RequestMatcher < Struct.new(:request)
4
6
 
5
7
  def self.call(request)
6
8
  new(request).match?
@@ -1,4 +1,5 @@
1
- require 'rack/utils'
1
+ require "headless/ajax_crawler"
2
+ require "rack/utils"
2
3
 
3
4
  module Headless
4
5
  module AjaxCrawler
@@ -1,5 +1,4 @@
1
- require 'headless/ajax_crawler/request_matcher'
2
- require 'headless/ajax_crawler/url_extractor'
1
+ require 'headless/ajax_crawler/middleware'
3
2
 
4
3
  module Headless
5
4
  module AjaxCrawler
@@ -1,5 +1,5 @@
1
1
  module Headless
2
2
  module Rails
3
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
4
4
  end
5
5
  end
@@ -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
+
@@ -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.3
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