yap 1.3.0 → 1.4.0

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
  SHA1:
3
- metadata.gz: f8a8cb98d770164d8c28e7b5ecb574a7962430fe
4
- data.tar.gz: 3841588ca088dc11673d04a8d2a9e7c8aa1705cc
3
+ metadata.gz: 90a7fb8f804bd7b631c632deeb7241bfcdac00ee
4
+ data.tar.gz: 4d2de49002fcdc9d79dd60786a3c191fac6275cb
5
5
  SHA512:
6
- metadata.gz: 5ac5778aace7e20671a21195db90c12d2672e2de0e9244d063a429b1334b6ffefbd7791c0cb50ca75f8eb38b78a582449bdc9368077eddfdd4fe5df902d7e71b
7
- data.tar.gz: 170f73e6b59ef73478fe75745336a53f1f8fa188a8aa613ae638ad97d5eff4837ef754ad39a302dcdadca32ad9dd5c3e3a6a3a5f937a8d8489c46be300190e85
6
+ metadata.gz: 1669e8d881f42da049c61c49c1b1c483340ece46642f281831dd104f999198320eca72b82c097d8d1df534830b8c97223a559c080fdae695671c8f9a9a36a89e
7
+ data.tar.gz: fac27392172ca4fbbf5fb96332f79bcf157893a87076335e094d50908589b9e85e6f1ee5cbaa55d900538bf688cbc7451751d985ec57af61a7e32af9db2d564e
data/README.md CHANGED
@@ -162,6 +162,10 @@ If an option cannot be parsed it will raise `Yap::PaginationError` or `Yap::Filt
162
162
 
163
163
  ## Changelog
164
164
 
165
+ ### 1.4
166
+
167
+ * added support for strings and dates with comparison parameters
168
+
165
169
  ### 1.3
166
170
 
167
171
  * added comparison operators <, >, <=, >= to filters
@@ -169,7 +173,7 @@ If an option cannot be parsed it will raise `Yap::PaginationError` or `Yap::Filt
169
173
  * will give you any element with and id equal to or greater 100
170
174
  * you can even combine multiple filters: ?filter[id]=>=100,<200
171
175
  * although the same result can be achieved through ?filter[id]=100...200
172
- * _currently, there is not support for strings and dates. This will be implemented in the future_
176
+ * ~~_currently, there is no support for strings and dates. This will be implemented in the future._~~ (see version 1.4)
173
177
 
174
178
  ### 1.2
175
179
 
@@ -0,0 +1,14 @@
1
+ class StringInfinity < String
2
+ def -@
3
+ String::INFINITY_NEGATIVE
4
+ end
5
+
6
+ def ==(value)
7
+ self.class == value.class
8
+ end
9
+ end
10
+
11
+ class StringInfinityNegative < StringInfinity; end
12
+
13
+ String::INFINITY = StringInfinity.new
14
+ String::INFINITY_NEGATIVE = StringInfinityNegative.new
data/lib/yap.rb CHANGED
@@ -3,6 +3,7 @@ require 'yap/active_record/relation'
3
3
  require 'yap/column_mapper'
4
4
  require 'yap/filterable'
5
5
  require 'yap/exceptions'
6
+ require 'string_infinity'
6
7
 
7
8
  ##
8
9
  # Support for Active Record pagination. All options can be safely accessed by the user through url query parameters. To
@@ -0,0 +1,25 @@
1
+ module Yap
2
+ class ExtendedRange < Range
3
+ def begin
4
+ infinity_or_do_not_change super
5
+ end
6
+
7
+ def end
8
+ infinity_or_do_not_change super
9
+ end
10
+
11
+ def infinity_or_do_not_change(value)
12
+ if value.is_a? StringInfinity
13
+ if value == String::INFINITY
14
+ Float::INFINITY
15
+ elsif value == -String::INFINITY
16
+ -Float::INFINITY
17
+ else
18
+ raise ArgumentError, "Invalid value for StringInfinity."
19
+ end
20
+ else
21
+ value
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,5 @@
1
+ require 'yap/extended_range'
2
+
1
3
  module Yap
2
4
  class Filter < Hash
3
5
  def initialize
@@ -37,18 +39,15 @@ module Yap
37
39
  private
38
40
 
39
41
  def handle_comparison_operators(match, column, operator, value)
40
- # TODO make comparison operators work for String. See here: http://c4se.hatenablog.com/entry/2013/10/01/010305
41
- value = Float(value) rescue raise(Yap::FilterError, 'You can only use float values with comparison operators <, >, <= and >=.')
42
-
43
42
  case operator
44
43
  when :<
45
44
  handle_comparison_operators(toggle_match(match), column, :>=, value)
46
45
  when :>
47
46
  handle_comparison_operators(toggle_match(match), column, :<=, value)
48
47
  when :<=
49
- return match, -Float::INFINITY..value.to_f
48
+ return match, ExtendedRange.new(-String::INFINITY, value)
50
49
  when :>=
51
- return match, value.to_f..Float::INFINITY
50
+ return match, ExtendedRange.new(value, String::INFINITY)
52
51
  end
53
52
  end
54
53
 
@@ -1,3 +1,3 @@
1
1
  module Yap
2
- VERSION = '1.3.0'
2
+ VERSION = '1.4.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yap
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Finn Glöe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-05 00:00:00.000000000 Z
11
+ date: 2016-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -47,10 +47,12 @@ extra_rdoc_files: []
47
47
  files:
48
48
  - LICENSE
49
49
  - README.md
50
+ - lib/string_infinity.rb
50
51
  - lib/yap.rb
51
52
  - lib/yap/active_record/relation.rb
52
53
  - lib/yap/column_mapper.rb
53
54
  - lib/yap/exceptions.rb
55
+ - lib/yap/extended_range.rb
54
56
  - lib/yap/filter.rb
55
57
  - lib/yap/filterable.rb
56
58
  - lib/yap/version.rb
@@ -74,8 +76,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
74
76
  version: '0'
75
77
  requirements: []
76
78
  rubyforge_project:
77
- rubygems_version: 2.4.8
79
+ rubygems_version: 2.5.1
78
80
  signing_key:
79
81
  specification_version: 4
80
82
  summary: Yet another paginator for Ruby on Rails
81
83
  test_files: []
84
+ has_rdoc: