jsom-pagination 0.1.1 → 0.1.2

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
  SHA256:
3
- metadata.gz: 83137a4848a276bed8f982609a3b7de765a311718d983db6a7694f9abe99327d
4
- data.tar.gz: c427e98b74e1c00c5d40f5546c943455c5c42ffddf1aa5ee2c037c03997a996a
3
+ metadata.gz: 958462b2b7cc07a82f7c352984670cfa619496bc7ef5a009ab0bed423b44b252
4
+ data.tar.gz: ea5d33d37aeabb2df86be9168e052763f38139b28a0af0219c457700f238e68d
5
5
  SHA512:
6
- metadata.gz: 5b0067520185211ad3bee63fff7d60aedb109985680bc59e63f7c10600f41ae8e65ce787652f445d2df54b377b87ed8569d4f5b80f3db7a409a31815005b08dd
7
- data.tar.gz: '00596d4aeb84d6f19ce513debfcca21a00314f5145c2ec8d9bfa8b627551081c0bff5c6c0a4036ec795535e0f62628a651da2587df1bacfdd0c8d9228928134e'
6
+ metadata.gz: 84e817541cf21c0bd29d50ac7fb0e814f6550487e2d7fcbdf45b46f83a9849e678352fa1b767c17ec8f461698a9ae5144a37fe98936012c42d3b96bae787cfb9
7
+ data.tar.gz: b5c2766d144812a4bc4334271d32304dd48569ff151ac90501faefe8412d89b8292d4c0b68349405ddd3d9a1e4c3dd27a3355e15f3982ba46bd38d70cf1b0887
@@ -1,9 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jsom-pagination (0.1.1)
4
+ jsom-pagination (0.1.2)
5
5
  dry-struct (~> 1.3.0)
6
6
  pagy (~> 3.8.3)
7
+ rack
7
8
 
8
9
  GEM
9
10
  remote: https://rubygems.org/
@@ -40,6 +41,7 @@ GEM
40
41
  dry-logic (~> 1.0, >= 1.0.2)
41
42
  ice_nine (0.11.2)
42
43
  pagy (3.8.3)
44
+ rack (2.2.3)
43
45
  rake (12.3.3)
44
46
  rspec (3.9.0)
45
47
  rspec-core (~> 3.9.0)
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # JSOM::Pagination
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/jsom-pagination.svg)](https://badge.fury.io/rb/jsom-pagination)
4
+ ![Tests](https://github.com/useo-pl/jsom-pagination/workflows/Run%20tests/badge.svg?branch=master&event=push)
4
5
  [![Codacy Badge](https://api.codacy.com/project/badge/Grade/bc98c8c017c64b70a11ca79aea6c3e3c)](https://app.codacy.com/gh/useo-pl/jsom-pagination?utm_source=github.com&utm_medium=referral&utm_content=useo-pl/jsom-pagination&utm_campaign=Badge_Grade_Dashboard)
5
6
  [![Codacy Badge](https://app.codacy.com/project/badge/Coverage/eab277bd1f694da88691a2e645adbe96)](https://www.codacy.com/gh/useo-pl/jsom-pagination?utm_source=github.com&utm_medium=referral&utm_content=useo-pl/jsom-pagination&utm_campaign=Badge_Coverage)
6
7
 
@@ -39,6 +39,7 @@ Gem::Specification.new do |spec|
39
39
 
40
40
  spec.add_dependency 'dry-struct', '~>1.3.0'
41
41
  spec.add_dependency 'pagy', '~>3.8.3'
42
+ spec.add_dependency 'rack'
42
43
 
43
44
  spec.add_development_dependency 'simplecov'
44
45
  spec.add_development_dependency 'simplecov-cobertura'
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'rack'
4
+
3
5
  module JSOM
4
6
  module Pagination
5
7
  class Links
@@ -30,12 +32,22 @@ module JSOM
30
32
  attr_reader :page, :total_pages, :url
31
33
 
32
34
  def initialize(page:, url:, total_pages:)
33
- @url = url
35
+ @url = parse_url(url)
34
36
  @page = page
35
37
  @total_pages = total_pages
36
38
  generate_links
37
39
  end
38
40
 
41
+ def parse_url(url)
42
+ uri = URI.parse(URI.unescape(url))
43
+ url_params = Rack::Utils.parse_nested_query(
44
+ uri.query
45
+ ).delete_if { |key, _value| key == 'page' }
46
+ uri.query = to_query(url_params)
47
+ uri.query = nil if uri.query.empty?
48
+ uri
49
+ end
50
+
39
51
  def generate_links
40
52
  if page.number > 1
41
53
  @first = generate_url(1)
@@ -50,7 +62,8 @@ module JSOM
50
62
  end
51
63
 
52
64
  def generate_url(page_number)
53
- [url, url_params(page_number)].reject(&:empty?).join('?')
65
+ separator = url.to_s.include?('?') ? '&' : '?'
66
+ [url.to_s, url_params(page_number)].reject(&:empty?).join(separator)
54
67
  end
55
68
 
56
69
  def url_params(page_number)
@@ -61,12 +74,16 @@ module JSOM
61
74
  to_query(url_params)
62
75
  end
63
76
 
64
- def to_query(obj, namespace = nil)
77
+ def to_query(obj, namespace = '')
65
78
  query = obj.collect do |key, value|
66
79
  if value.is_a?(Hash)
67
- to_query(value, namespace ? "#{namespace}[#{key}]" : key)
80
+ to_query(value, namespace.empty? ? key : "#{namespace}[#{key}]")
68
81
  else
69
- ["#{namespace}[#{key}]", value].join('=')
82
+ if namespace.empty?
83
+ [key, value].join('=')
84
+ else
85
+ ["#{namespace}[#{key}]", value].join('=')
86
+ end
70
87
  end
71
88
  end.compact
72
89
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module JSOM
4
4
  module Pagination
5
- VERSION = '0.1.1'
5
+ VERSION = '0.1.2'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsom-pagination
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastian Wilgosz
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-13 00:00:00.000000000 Z
11
+ date: 2020-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-struct
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 3.8.3
41
+ - !ruby/object:Gem::Dependency
42
+ name: rack
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: simplecov
43
57
  requirement: !ruby/object:Gem::Requirement