uploadcare-ruby 1.2.1 → 3.0.3
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 +5 -5
- data/.github/workflows/gem-push.yml +20 -0
- data/.github/workflows/ruby.yml +52 -0
- data/.gitignore +13 -5
- data/.rspec +3 -0
- data/.rubocop.yml +20 -0
- data/.yardopts +4 -0
- data/CHANGELOG.md +25 -24
- data/DEVELOPMENT.md +18 -0
- data/Gemfile +2 -0
- data/LICENSE +1 -1
- data/README.md +191 -519
- data/Rakefile +6 -4
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/lib/uploadcare.rb +36 -26
- data/lib/uploadcare/api/api.rb +25 -0
- data/lib/uploadcare/client/file_client.rb +44 -0
- data/lib/uploadcare/client/file_list_client.rb +46 -0
- data/lib/uploadcare/client/group_client.rb +45 -0
- data/lib/uploadcare/client/multipart_upload/chunks_client.rb +46 -0
- data/lib/uploadcare/client/multipart_upload_client.rb +62 -0
- data/lib/uploadcare/client/project_client.rb +18 -0
- data/lib/uploadcare/client/rest_client.rb +73 -0
- data/lib/uploadcare/client/rest_group_client.rb +23 -0
- data/lib/uploadcare/client/upload_client.rb +35 -0
- data/lib/uploadcare/client/uploader_client.rb +93 -0
- data/lib/uploadcare/client/webhook_client.rb +43 -0
- data/lib/uploadcare/concern/error_handler.rb +54 -0
- data/lib/uploadcare/concern/throttle_handler.rb +25 -0
- data/lib/uploadcare/concern/upload_error_handler.rb +32 -0
- data/lib/uploadcare/entity/decorator/paginator.rb +81 -0
- data/lib/uploadcare/entity/entity.rb +18 -0
- data/lib/uploadcare/entity/file.rb +81 -0
- data/lib/uploadcare/entity/file_list.rb +30 -0
- data/lib/uploadcare/entity/group.rb +41 -0
- data/lib/uploadcare/entity/group_list.rb +24 -0
- data/lib/uploadcare/entity/project.rb +13 -0
- data/lib/uploadcare/entity/uploader.rb +73 -0
- data/lib/uploadcare/entity/webhook.rb +14 -0
- data/lib/uploadcare/exception/request_error.rb +9 -0
- data/lib/uploadcare/exception/throttle_error.rb +14 -0
- data/lib/uploadcare/param/authentication_header.rb +25 -0
- data/lib/uploadcare/param/param.rb +10 -0
- data/lib/uploadcare/param/secure_auth_header.rb +37 -0
- data/lib/uploadcare/param/simple_auth_header.rb +14 -0
- data/lib/uploadcare/param/upload/signature_generator.rb +24 -0
- data/lib/uploadcare/param/upload/upload_params_generator.rb +23 -0
- data/lib/uploadcare/param/user_agent.rb +21 -0
- data/lib/uploadcare/ruby/version.rb +5 -0
- data/uploadcare-ruby.gemspec +50 -36
- metadata +112 -96
- data/.travis.yml +0 -12
- data/lib/uploadcare/api.rb +0 -24
- data/lib/uploadcare/api/file_api.rb +0 -7
- data/lib/uploadcare/api/file_list_api.rb +0 -8
- data/lib/uploadcare/api/group_api.rb +0 -38
- data/lib/uploadcare/api/group_list_api.rb +0 -8
- data/lib/uploadcare/api/project_api.rb +0 -9
- data/lib/uploadcare/api/raw_api.rb +0 -44
- data/lib/uploadcare/api/uploading_api.rb +0 -110
- data/lib/uploadcare/errors/errors.rb +0 -64
- data/lib/uploadcare/resources/file.rb +0 -164
- data/lib/uploadcare/resources/file_list.rb +0 -41
- data/lib/uploadcare/resources/group.rb +0 -115
- data/lib/uploadcare/resources/group_list.rb +0 -31
- data/lib/uploadcare/resources/project.rb +0 -13
- data/lib/uploadcare/rest/auth/auth.rb +0 -31
- data/lib/uploadcare/rest/auth/secure.rb +0 -43
- data/lib/uploadcare/rest/auth/simple.rb +0 -16
- data/lib/uploadcare/rest/connections/api_connection.rb +0 -32
- data/lib/uploadcare/rest/connections/upload_connection.rb +0 -21
- data/lib/uploadcare/rest/middlewares/auth_middleware.rb +0 -24
- data/lib/uploadcare/rest/middlewares/parse_json_middleware.rb +0 -33
- data/lib/uploadcare/rest/middlewares/raise_error_middleware.rb +0 -21
- data/lib/uploadcare/utils/parser.rb +0 -71
- data/lib/uploadcare/utils/user_agent.rb +0 -44
- data/lib/uploadcare/version.rb +0 -3
- data/spec/api/raw_api_spec.rb +0 -25
- data/spec/resources/file_list_spec.rb +0 -64
- data/spec/resources/file_spec.rb +0 -222
- data/spec/resources/group_list_spec.rb +0 -30
- data/spec/resources/group_spec.rb +0 -101
- data/spec/resources/operations_spec.rb +0 -59
- data/spec/resources/project_spec.rb +0 -21
- data/spec/rest/api_connection_spec.rb +0 -68
- data/spec/rest/auth/secure_spec.rb +0 -66
- data/spec/rest/auth/simple_spec.rb +0 -31
- data/spec/rest/errors_spec.rb +0 -75
- data/spec/rest/upload_connection_spec.rb +0 -19
- data/spec/spec_helper.rb +0 -41
- data/spec/uploadcare_spec.rb +0 -16
- data/spec/uploading/uploading_multiple_spec.rb +0 -43
- data/spec/uploading/uploading_spec.rb +0 -40
- data/spec/utils/parser_spec.rb +0 -87
- data/spec/utils/user_agent_spec.rb +0 -46
- data/spec/view.png +0 -0
- data/spec/view2.jpg +0 -0
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'ostruct'
|
2
|
-
|
3
|
-
module Uploadcare
|
4
|
-
class Api
|
5
|
-
class GroupList < OpenStruct
|
6
|
-
def initialize api, data
|
7
|
-
@api = api
|
8
|
-
|
9
|
-
unless data["results"].nil?
|
10
|
-
data["results"].map! do |group|
|
11
|
-
Uploadcare::Api::Group.new @api, group["id"], group
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
super data
|
16
|
-
end
|
17
|
-
|
18
|
-
def [] index
|
19
|
-
results[index] if defined?(:results)
|
20
|
-
end
|
21
|
-
|
22
|
-
def to_a
|
23
|
-
results if defined?(:results)
|
24
|
-
end
|
25
|
-
|
26
|
-
def groups
|
27
|
-
results if defined?(:results)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
module Uploadcare
|
2
|
-
module Connections
|
3
|
-
module Auth
|
4
|
-
|
5
|
-
def self.strategy(options)
|
6
|
-
auth_scheme = options.fetch(:auth_scheme)
|
7
|
-
|
8
|
-
unless [:simple, :secure].include?(auth_scheme)
|
9
|
-
raise ArgumentError, "Unknown auth_scheme: '#{auth_scheme}'"
|
10
|
-
end
|
11
|
-
|
12
|
-
klass = const_get(auth_scheme.capitalize)
|
13
|
-
klass.new(options)
|
14
|
-
end
|
15
|
-
|
16
|
-
class Base
|
17
|
-
attr_reader :public_key, :private_key
|
18
|
-
|
19
|
-
def initialize(options)
|
20
|
-
@public_key = options.fetch(:public_key)
|
21
|
-
@private_key = options.fetch(:private_key)
|
22
|
-
end
|
23
|
-
|
24
|
-
def apply(env)
|
25
|
-
raise NotImplementedError
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'time'
|
2
|
-
|
3
|
-
module Uploadcare
|
4
|
-
module Connections
|
5
|
-
module Auth
|
6
|
-
class Secure < Base
|
7
|
-
|
8
|
-
def apply(env)
|
9
|
-
date = Time.now.utc
|
10
|
-
headers(env, date).each{|k, v| env.request_headers[k] = v}
|
11
|
-
env
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def headers(env, date)
|
17
|
-
{
|
18
|
-
"Date" => date.rfc2822,
|
19
|
-
"Authorization" => "Uploadcare #{public_key}:#{signature(env, date)}"
|
20
|
-
}
|
21
|
-
end
|
22
|
-
|
23
|
-
def signature(env, date)
|
24
|
-
sign_string = sign_string(env, date)
|
25
|
-
digest = OpenSSL::Digest.new('sha1')
|
26
|
-
|
27
|
-
OpenSSL::HMAC.hexdigest(digest, private_key, sign_string)
|
28
|
-
end
|
29
|
-
|
30
|
-
def sign_string(env, date)
|
31
|
-
verb = env.method.upcase.to_s
|
32
|
-
uri = env.url.request_uri
|
33
|
-
date_header = date.rfc2822
|
34
|
-
content_type = env.request_headers['Content-Type']
|
35
|
-
content_md5 = OpenSSL::Digest.new('md5').hexdigest(env.body || "")
|
36
|
-
|
37
|
-
[verb, content_md5, content_type, date_header, uri].join("\n")
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module Uploadcare
|
2
|
-
module Connections
|
3
|
-
module Auth
|
4
|
-
class Simple < Base
|
5
|
-
|
6
|
-
def apply(env)
|
7
|
-
auth_string = "Uploadcare.Simple #{public_key}:#{private_key}"
|
8
|
-
env.request_headers['Authorization'] = auth_string
|
9
|
-
|
10
|
-
env
|
11
|
-
end
|
12
|
-
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
require "faraday_middleware"
|
3
|
-
|
4
|
-
module Uploadcare
|
5
|
-
module Connections
|
6
|
-
class ApiConnection < Faraday::Connection
|
7
|
-
|
8
|
-
def initialize options
|
9
|
-
super options[:api_url_base] do |frd|
|
10
|
-
auth_strategy = Auth.strategy(options)
|
11
|
-
|
12
|
-
frd.headers['Accept'] = "application/vnd.uploadcare-v#{options[:api_version]}+json"
|
13
|
-
frd.headers['User-Agent'] = UserAgent.new.call(options)
|
14
|
-
|
15
|
-
# order of middleware matters!
|
16
|
-
|
17
|
-
# url_encoded changes request body and thus should be before
|
18
|
-
# uploadcare_auth which uses it to sign requests when secure auth
|
19
|
-
# strategy is being used
|
20
|
-
frd.request :url_encoded
|
21
|
-
frd.request :uploadcare_auth, auth_strategy
|
22
|
-
|
23
|
-
frd.response :uploadcare_raise_error
|
24
|
-
frd.response :follow_redirects, limit: 3, callback: lambda{|old, env| auth_strategy.apply(env) }
|
25
|
-
frd.response :uploadcare_parse_json
|
26
|
-
|
27
|
-
frd.adapter :net_http # actually, default adapter, just to be clear
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require "faraday"
|
2
|
-
|
3
|
-
module Uploadcare
|
4
|
-
module Connections
|
5
|
-
class UploadConnection < Faraday::Connection
|
6
|
-
def initialize options
|
7
|
-
ca_path = '/etc/ssl/certs' if File.exists?('/etc/ssl/certs')
|
8
|
-
|
9
|
-
super ssl: { ca_path: ca_path }, url: options[:upload_url_base] do |frd|
|
10
|
-
frd.request :multipart
|
11
|
-
frd.request :url_encoded
|
12
|
-
frd.adapter :net_http
|
13
|
-
frd.headers['User-Agent'] = UserAgent.new.call(options)
|
14
|
-
|
15
|
-
frd.response :uploadcare_raise_error
|
16
|
-
frd.response :uploadcare_parse_json
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
|
3
|
-
module Uploadcare
|
4
|
-
module Connections
|
5
|
-
module Request
|
6
|
-
class Auth < Faraday::Middleware
|
7
|
-
attr_reader :auth_strategy
|
8
|
-
|
9
|
-
def initialize(app=nil, auth_strategy)
|
10
|
-
@auth_strategy = auth_strategy
|
11
|
-
super(app)
|
12
|
-
end
|
13
|
-
|
14
|
-
def call(env)
|
15
|
-
auth_strategy.apply(env)
|
16
|
-
@app.call(env)
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
Faraday::Request.register_middleware uploadcare_auth: Uploadcare::Connections::Request::Auth
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
require 'json'
|
3
|
-
|
4
|
-
module Uploadcare
|
5
|
-
module Connections
|
6
|
-
module Response
|
7
|
-
class ParseJson < Faraday::Response::Middleware
|
8
|
-
WHITESPACE_REGEX = /\A^\s*$\z/
|
9
|
-
|
10
|
-
ERROR_CODES = [400, 401, 403, 404, 406, 408, 422, 429, 500, 502, 503, 504]
|
11
|
-
|
12
|
-
def parse(body)
|
13
|
-
case body
|
14
|
-
when WHITESPACE_REGEX, nil
|
15
|
-
nil
|
16
|
-
else
|
17
|
-
JSON.parse(body)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def on_complete(response)
|
22
|
-
response[:body] = parse(response[:body]) if respond_to?(:parse) && !ERROR_CODES.include?(response[:status])
|
23
|
-
end
|
24
|
-
|
25
|
-
def unparsable_status_codes
|
26
|
-
[204, 301, 302, 304]
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
Faraday::Response.register_middleware :uploadcare_parse_json => Uploadcare::Connections::Response::ParseJson
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
|
3
|
-
module Uploadcare
|
4
|
-
module Connections
|
5
|
-
module Response
|
6
|
-
class RaiseError < Faraday::Response::Middleware
|
7
|
-
def on_complete(response)
|
8
|
-
@error_codes = Uploadcare::Error.errors.keys
|
9
|
-
@status = response[:status]
|
10
|
-
|
11
|
-
if @error_codes.include?(@status)
|
12
|
-
error = Uploadcare::Error.errors[@status].new
|
13
|
-
fail(error)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
Faraday::Response.register_middleware :uploadcare_raise_error => Uploadcare::Connections::Response::RaiseError
|
@@ -1,71 +0,0 @@
|
|
1
|
-
require 'ostruct'
|
2
|
-
|
3
|
-
module Uploadcare
|
4
|
-
module Parser
|
5
|
-
|
6
|
-
META_URL = /
|
7
|
-
(?<uuid>[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12} # base uuid
|
8
|
-
~?(?<count>\d+)?) # optional count
|
9
|
-
(?:\/-\/(?<operations>.*?))?\/?$ # optional operations
|
10
|
-
/ix
|
11
|
-
|
12
|
-
def self.parse_file_string string
|
13
|
-
result = Uploadcare::Parser.parse(string)
|
14
|
-
|
15
|
-
unless result.is_a?(Uploadcare::Parser::File)
|
16
|
-
msg = "invalid CDN URL or UUID was given for file: #{uuid_or_cdn_url}."
|
17
|
-
if result.is_a?(Uploadcare::Parser::Group)
|
18
|
-
msg = msg + "\n Group UUID was given. Try call @api.group if it is what you intended."
|
19
|
-
end
|
20
|
-
raise msg
|
21
|
-
end
|
22
|
-
|
23
|
-
result
|
24
|
-
end
|
25
|
-
|
26
|
-
|
27
|
-
def self.parse_group_string string
|
28
|
-
result = Uploadcare::Parser.parse(string)
|
29
|
-
|
30
|
-
unless result.is_a?(Uploadcare::Parser::Group)
|
31
|
-
msg = "invalid CDN URL or UUID was given for group: #{uuid_or_cdn_url}."
|
32
|
-
if result.is_a?(Uploadcare::Parser::File)
|
33
|
-
msg = msg + "\n File UUID was given. Try call @api.file if it is what you intended."
|
34
|
-
end
|
35
|
-
raise msg
|
36
|
-
end
|
37
|
-
|
38
|
-
result
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.parse string
|
42
|
-
matched = META_URL.match(string)
|
43
|
-
|
44
|
-
# just a simple hash - easy to pass next
|
45
|
-
captured = Hash[ matched.names.zip( matched.captures ) ]
|
46
|
-
|
47
|
-
# raise an error if no uuid was given in the sting
|
48
|
-
raise "Invalid UUID or url was given" if captured["uuid"].nil?
|
49
|
-
|
50
|
-
# operations sring to array of operations
|
51
|
-
if captured["operations"]
|
52
|
-
captured["operations"] = captured["operations"].split("/-/")
|
53
|
-
else
|
54
|
-
captured["operations"] = []
|
55
|
-
end
|
56
|
-
|
57
|
-
# if count was given - it is a group
|
58
|
-
if captured["count"]
|
59
|
-
obj = Group.new captured
|
60
|
-
else
|
61
|
-
obj = File.new captured
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
class File < OpenStruct
|
66
|
-
end
|
67
|
-
|
68
|
-
class Group < OpenStruct
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
module Uploadcare
|
2
|
-
# Determines User-Agent string either taking it from settings or building
|
3
|
-
# in accordance with common Uploadcare format
|
4
|
-
#
|
5
|
-
class UserAgent
|
6
|
-
# @param options [Hash]
|
7
|
-
# @option options [String] :user_agent (nil)
|
8
|
-
# @option options [String] :public_key (nil)
|
9
|
-
# @option options [String] :user_agent_environment (nil)
|
10
|
-
# @return [String]
|
11
|
-
#
|
12
|
-
def call(options)
|
13
|
-
return options[:user_agent].to_s if options[:user_agent]
|
14
|
-
|
15
|
-
user_agent_string(
|
16
|
-
options.fetch(:public_key, nil),
|
17
|
-
options.fetch(:user_agent_environment, {})
|
18
|
-
)
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def user_agent_string(public_key, extensions)
|
24
|
-
format(
|
25
|
-
'%<library>s/%<pubkey>s (%<environment>s)',
|
26
|
-
library: versioned('UploadcareRuby', Uploadcare::VERSION),
|
27
|
-
pubkey: public_key,
|
28
|
-
environment: environment_string(extensions)
|
29
|
-
)
|
30
|
-
end
|
31
|
-
|
32
|
-
def environment_string(extensions)
|
33
|
-
[
|
34
|
-
versioned('Ruby', Gem.ruby_version),
|
35
|
-
versioned(extensions[:framework_name], extensions[:framework_version]),
|
36
|
-
versioned(extensions[:extension_name], extensions[:extension_version])
|
37
|
-
].compact.join('; ')
|
38
|
-
end
|
39
|
-
|
40
|
-
def versioned(name, version = nil)
|
41
|
-
name ? [name, version].compact.join('/') : nil
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
data/lib/uploadcare/version.rb
DELETED
data/spec/api/raw_api_spec.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'uri'
|
3
|
-
require 'socket'
|
4
|
-
|
5
|
-
describe Uploadcare::Api do
|
6
|
-
before :each do
|
7
|
-
@api = Uploadcare::Api.new(CONFIG)
|
8
|
-
end
|
9
|
-
|
10
|
-
it "should initialize api" do
|
11
|
-
@api.should be_an_instance_of(Uploadcare::Api)
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'should respond to request methods' do
|
15
|
-
@api.should respond_to :request
|
16
|
-
@api.should respond_to :get
|
17
|
-
@api.should respond_to :post
|
18
|
-
@api.should respond_to :put
|
19
|
-
@api.should respond_to :delete
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'should perform custom requests' do
|
23
|
-
expect { @api.request }.to_not raise_error
|
24
|
-
end
|
25
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'uri'
|
3
|
-
require 'socket'
|
4
|
-
|
5
|
-
describe Uploadcare::Api::File do
|
6
|
-
before :all do
|
7
|
-
@api = API
|
8
|
-
@list = @api.file_list 1
|
9
|
-
end
|
10
|
-
|
11
|
-
it "should return file list" do
|
12
|
-
@list.should be_kind_of(Uploadcare::Api::FileList)
|
13
|
-
end
|
14
|
-
|
15
|
-
it "should respont to results method" do
|
16
|
-
@list.should respond_to :results
|
17
|
-
end
|
18
|
-
|
19
|
-
it "results should be an array" do
|
20
|
-
@list.results.should be_kind_of(Array)
|
21
|
-
end
|
22
|
-
|
23
|
-
it "resulst should be UC files" do
|
24
|
-
@list.results.each do |file|
|
25
|
-
file.should be_kind_of(Uploadcare::Api::File)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
it "results should be not only files, but loaded files" do
|
30
|
-
@list.results.each do |file|
|
31
|
-
file.is_loaded?.should be true
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
it "should load next page" do
|
36
|
-
next_page = @list.next_page
|
37
|
-
next_page.should be_kind_of(Uploadcare::Api::FileList)
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should load prev page" do
|
41
|
-
list = @api.file_list 3
|
42
|
-
prev_page = list.previous_page
|
43
|
-
prev_page.should be_kind_of(Uploadcare::Api::FileList)
|
44
|
-
end
|
45
|
-
|
46
|
-
it "should load custom page" do
|
47
|
-
page = @list.go_to(@list.pages - 1)
|
48
|
-
page.should be_kind_of(Uploadcare::Api::FileList)
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should not load next page if there isn't one" do
|
52
|
-
page= @list.go_to @list.pages
|
53
|
-
page.next_page.should be_nil
|
54
|
-
end
|
55
|
-
|
56
|
-
it "should not load prev page if there isn't one" do
|
57
|
-
@list.previous_page.should be_nil
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should not load custom page with index more than there is actually page in project" do
|
61
|
-
page = @list.go_to @list.pages + 3
|
62
|
-
page.should be_nil
|
63
|
-
end
|
64
|
-
end
|