jsom-pagination 0.1.1 → 0.1.2

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 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