browshot 1.3.0 → 1.4.0

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.
data/Gemfile CHANGED
@@ -1,11 +1,15 @@
1
1
  source "http://rubygems.org"
2
2
  # Dependencies required to use browshot
3
3
 
4
- gem "json", ">= 0"
5
- gem "url", ">= 0"
4
+ group :runtime do
5
+ gem "json", ">= 0"
6
+ gem "url", ">= 0"
7
+ end
6
8
 
7
9
  # Dependencies to develop browshot.
8
10
  group :development do
11
+ gem "json", ">= 0"
12
+ gem "url", ">= 0"
9
13
  gem "shoulda", ">= 0"
10
14
  gem "bundler", "~> 1.0.0"
11
15
  gem "jeweler", "~> 1.6.4"
data/README.rdoc CHANGED
@@ -33,5 +33,5 @@ Or
33
33
 
34
34
  == Copyright
35
35
 
36
- Copyright (c) 2011 Julien Sobrier. See LICENSE.txt for
36
+ Copyright (c) 2012 Julien Sobrier. See LICENSE.txt for
37
37
  further details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.0
1
+ 1.4.0
data/lib/browshot.rb CHANGED
@@ -5,7 +5,7 @@
5
5
  # and this library.
6
6
  #
7
7
  # Author:: Julien Sobrier (mailto:jsobrier@browshot.com)
8
- # Copyright:: Copyright (c) 2011 Browshot
8
+ # Copyright:: Copyright (c) 2012 Browshot
9
9
  # License:: Distributes under the same terms as Ruby
10
10
 
11
11
  require 'url'
@@ -34,8 +34,42 @@ class Browshot
34
34
 
35
35
  # Return the API version handled by the library. Note that this library can usually handle new arguments in requests without requiring an update.
36
36
  def api_version()
37
- return "1.3"
38
- end
37
+ return "1.4"
38
+ end
39
+
40
+ # Retrieve a screenshot with one call. See http://browshot.com/api/documentation#simple for the full list of possible arguments.
41
+ #
42
+ # Return {: code => 200, :png => <content>} in case of success
43
+ def simple(parameters={})
44
+ begin
45
+ url = make_url('simple', parameters)
46
+ response = fetch(url.to_s)
47
+ case response
48
+ when Net::HTTPSuccess then
49
+ return {:code => response.code, :png => response.response.body}
50
+ else
51
+ return {:code => response.code, :png => ''}
52
+ end
53
+ rescue Exception => e
54
+ puts "{e.message}" if (@debug)
55
+ raise e
56
+ end
57
+ end
58
+
59
+ # Save a screenshot to a file with one call, and save it to a file. See http://browshot.com/api/documentation#simple for the full list of possible arguments.
60
+ #
61
+ # Return {: code => 200, :file => <file_name>} in case of success
62
+ #
63
+ # +file+: Local file name to write to.
64
+ def simple_file(file='', parameters={})
65
+ data = self.simple(parameters)
66
+ if (data[:png].length > 0)
67
+ File.open(file, 'w') {|f| f.write(data[:png]) }
68
+ return {:code => data[:code], :file => file}
69
+ else
70
+ return {:code => data[:code], :file => ''}
71
+ end
72
+ end
39
73
 
40
74
  # Return the list of instances. See http://browshot.com/api/documentation#instance_list for the response format.
41
75
  def instance_list()
@@ -176,4 +210,29 @@ class Browshot
176
210
  raise e
177
211
  end
178
212
  end
213
+
214
+ def fetch(url, limit=32)
215
+ raise ArgumentError, 'HTTP redirect too deep' if (limit == 0)
216
+
217
+ uri = URI.parse(url)
218
+ http = Net::HTTP.new(uri.host, uri.port)
219
+ http.open_timeout = 240
220
+ http.read_timeout = 240
221
+
222
+ request = Net::HTTP::Get.new(uri.request_uri)
223
+ if (uri.scheme == 'https')
224
+ http.use_ssl = true
225
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
226
+ end
227
+ response = http.request(request)
228
+
229
+ case response
230
+ when Net::HTTPRedirection then
231
+ path = response['location']
232
+ url = URL.new( URI.join(@base, path).to_s )
233
+ return fetch(url.to_s, limit - 1)
234
+ else
235
+ return response
236
+ end
237
+ end
179
238
  end
@@ -14,7 +14,19 @@ class TestBrowshot < Test::Unit::TestCase
14
14
  end
15
15
 
16
16
  should "get the API version" do
17
- assert_equal '1.3', @browshot.api_version()
17
+ assert_equal '1.4', @browshot.api_version()
18
+ end
19
+
20
+ should "get a screenshot with the simple method" do
21
+ data = @browshot.simple({'url' => 'http://mobilito.net/', 'cache' => 60 * 60 * 24 * 365})
22
+ assert_equal 200, data[:code].to_i, "Screenshot should be succesful"
23
+ assert_equal true, data[:png].length > 0, "Screenshot should be sent"
24
+ end
25
+
26
+ should "get an error with the simple method" do
27
+ data = @browshot.simple({'url' => 'http://', 'cache' => 60 * 60 * 24 * 365})
28
+ assert_equal 400, data[:code].to_i, "Screenshot should have failed"
29
+ assert_equal 0, data[:png].length, "Screenshot should not be sent"
18
30
  end
19
31
 
20
32
  should "get the list of instances available" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: browshot
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-11 00:00:00.000000000 Z
12
+ date: 2012-01-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
- requirement: &245654200 !ruby/object:Gem::Requirement
16
+ requirement: &76488040 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *245654200
24
+ version_requirements: *76488040
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: url
27
- requirement: &245652940 !ruby/object:Gem::Requirement
27
+ requirement: &76487040 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,32 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *245652940
35
+ version_requirements: *76487040
36
+ - !ruby/object:Gem::Dependency
37
+ name: json
38
+ requirement: &76486260 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *76486260
47
+ - !ruby/object:Gem::Dependency
48
+ name: url
49
+ requirement: &76485600 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *76485600
36
58
  - !ruby/object:Gem::Dependency
37
59
  name: shoulda
38
- requirement: &245448520 !ruby/object:Gem::Requirement
60
+ requirement: &76484880 !ruby/object:Gem::Requirement
39
61
  none: false
40
62
  requirements:
41
63
  - - ! '>='
@@ -43,10 +65,10 @@ dependencies:
43
65
  version: '0'
44
66
  type: :development
45
67
  prerelease: false
46
- version_requirements: *245448520
68
+ version_requirements: *76484880
47
69
  - !ruby/object:Gem::Dependency
48
70
  name: bundler
49
- requirement: &245447720 !ruby/object:Gem::Requirement
71
+ requirement: &76520160 !ruby/object:Gem::Requirement
50
72
  none: false
51
73
  requirements:
52
74
  - - ~>
@@ -54,10 +76,10 @@ dependencies:
54
76
  version: 1.0.0
55
77
  type: :development
56
78
  prerelease: false
57
- version_requirements: *245447720
79
+ version_requirements: *76520160
58
80
  - !ruby/object:Gem::Dependency
59
81
  name: jeweler
60
- requirement: &245447060 !ruby/object:Gem::Requirement
82
+ requirement: &76519480 !ruby/object:Gem::Requirement
61
83
  none: false
62
84
  requirements:
63
85
  - - ~>
@@ -65,10 +87,10 @@ dependencies:
65
87
  version: 1.6.4
66
88
  type: :development
67
89
  prerelease: false
68
- version_requirements: *245447060
90
+ version_requirements: *76519480
69
91
  - !ruby/object:Gem::Dependency
70
92
  name: rcov
71
- requirement: &245446360 !ruby/object:Gem::Requirement
93
+ requirement: &76518780 !ruby/object:Gem::Requirement
72
94
  none: false
73
95
  requirements:
74
96
  - - ! '>='
@@ -76,7 +98,7 @@ dependencies:
76
98
  version: '0'
77
99
  type: :development
78
100
  prerelease: false
79
- version_requirements: *245446360
101
+ version_requirements: *76518780
80
102
  description: ! 'Browshot (http://www.browshot.com/) is a web service to easily make
81
103
  screenshots of web pages in any screen size, as any device: iPhone©, iPad©, Android©,
82
104
  Nook©, PC, etc. Browshot has full Flash, JavaScript, CSS, & HTML5 support. The latest
@@ -119,7 +141,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
141
  version: '0'
120
142
  segments:
121
143
  - 0
122
- hash: -318905846475433273
144
+ hash: -2499451636168677631
123
145
  required_rubygems_version: !ruby/object:Gem::Requirement
124
146
  none: false
125
147
  requirements: