spyke-kaminari 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4c2b893be4e3c8e97b6381f646202cbcb0a8e9ab
4
+ data.tar.gz: 4c984f8cfbc6067a2bb63aac2efd1c7e692890fd
5
+ SHA512:
6
+ metadata.gz: c709df12964400ca5c022d997d28e962a46eebc7c2dfbacccd00ef6ff1fcb85b98df23d19d0cc9336689952645c1181f77c5b5b6d35faadf51e100be25548dc2
7
+ data.tar.gz: e37f2c451194f7d8e8e5ed1c006fe6135b3a3f951a279e59d088f1623f9ce63d023aa9baaf15328b5e53ffac428cd47de18f3422d727748daa5a80e1287fe5cc
@@ -0,0 +1,21 @@
1
+ module Spyke::Kaminari
2
+ class HeaderParser < Faraday::Response::Middleware
3
+ def on_complete(env)
4
+ @env = env
5
+
6
+ metadata = Spyke::Kaminari::HEADERS.each_with_object({}) do |(symbol, key), hash|
7
+ hash[symbol] = header(key)
8
+ end
9
+
10
+ @env.body[:metadata] ||= {}
11
+ @env.body[:metadata][Spyke::Kaminari::METADATA_KEY] = metadata
12
+ end
13
+
14
+ private
15
+
16
+ def header(key)
17
+ value = @env.response_headers[key]
18
+ value.try(:to_i)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,54 @@
1
+ module Spyke::Kaminari
2
+ # A Spyke relation extended with pagination metadata and helpers, similar
3
+ # Kaminari's PaginatableArray.
4
+ class Relation < Spyke::Relation
5
+ Spyke::Kaminari::HEADERS.keys.each do |symbol|
6
+ define_method(symbol) do
7
+ find_some.metadata[Spyke::Kaminari::METADATA_KEY][symbol]
8
+ end
9
+ end
10
+
11
+ def first_page?
12
+ current_page == 1
13
+ end
14
+
15
+ def last_page?
16
+ current_page == total_pages
17
+ end
18
+
19
+ def out_of_range?
20
+ current_page > total_pages
21
+ end
22
+
23
+ # Iterates through each page.
24
+ #
25
+ # Useful for stitching together an array of all records, across every page.
26
+ # For example:
27
+ #
28
+ # users = User.all.each_page.flat_map(&:to_a)
29
+ #
30
+ # If there are 3 total pages, it would result in these HTTP requests:
31
+ #
32
+ # GET /v1/users
33
+ # GET /v1/users?page=2
34
+ # GET /v1/users?page=3
35
+ #
36
+ # ...and this array of users (25 records per page):
37
+ #
38
+ # users.count
39
+ # # => 75
40
+ #
41
+ # With the exception of the first one, pages are lazily fetched.
42
+ def each_page
43
+ return to_enum(:each_page) unless block_given?
44
+
45
+ relation = clone
46
+ yield relation
47
+ return if relation.last_page? || relation.out_of_range?
48
+
49
+ (relation.next_page..relation.total_pages).each do |number|
50
+ yield clone.page(number)
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,19 @@
1
+ module Spyke::Kaminari
2
+ module Scopes
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ %i{page per_page offset}.each do |symbol|
7
+ scope symbol, ->(value) { where(symbol => value) }
8
+ end
9
+ end
10
+
11
+ module ClassMethods
12
+ # Overrides the method included by Spyke::Scoping to return paginated
13
+ # relations.
14
+ def all
15
+ current_scope || Spyke::Kaminari::Relation.new(self, uri: uri)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ require 'active_support/core_ext'
2
+
3
+ module Spyke::Kaminari
4
+ HEADERS = {
5
+ total_count: 'X-Total',
6
+ total_pages: 'X-Total-Pages',
7
+ limit_value: 'X-Per-Page',
8
+ current_page: 'X-Page',
9
+ next_page: 'X-Next-Page',
10
+ prev_page: 'X-Prev-Page',
11
+ offset_value: 'X-Offset'
12
+ }
13
+
14
+ METADATA_KEY = :kaminari
15
+ end
16
+
17
+ require 'spyke/kaminari/header_parser'
18
+ require 'spyke/kaminari/relation'
19
+ require 'spyke/kaminari/scopes'
metadata ADDED
@@ -0,0 +1,118 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spyke-kaminari
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ platform: ruby
6
+ authors:
7
+ - Todd Mazierski
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: spyke
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 3.1.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 3.1.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.10.1
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 0.10.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: webmock
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.20'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.20'
83
+ description:
84
+ email:
85
+ - todd@generalassemb.ly
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - lib/spyke/kaminari.rb
91
+ - lib/spyke/kaminari/header_parser.rb
92
+ - lib/spyke/kaminari/relation.rb
93
+ - lib/spyke/kaminari/scopes.rb
94
+ homepage: https://github.com/generalassembly/spyke-kaminari
95
+ licenses: []
96
+ metadata: {}
97
+ post_install_message:
98
+ rdoc_options: []
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubyforge_project:
113
+ rubygems_version: 2.2.2
114
+ signing_key:
115
+ specification_version: 4
116
+ summary: Kaminari pagination for Spyke models
117
+ test_files: []
118
+ has_rdoc: