headless-rails 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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