query_filter 0.1.8 → 0.2.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
- SHA1:
3
- metadata.gz: 4b6afc4d8301e89187a25929659d0bf700393759
4
- data.tar.gz: f02b574cca6bb204af006029925294da51b8ea0b
2
+ SHA256:
3
+ metadata.gz: f281a64c42dfafb2f5478b7dc850e4d09fbc177357d85590a45e2abaa55b91ea
4
+ data.tar.gz: c9823c4351c0757a97eeb0d851e22980da495ecdc13784002f6e2ef3390f6403
5
5
  SHA512:
6
- metadata.gz: 907332261dafbb301d9d59ab4cf50673dcb8b4fe08ce120b4a0e42f7fa5a4d12feca5dfb95bf40adc9682e3ef81f5a83d8d5dea817b540a2bc5a33669f9406cd
7
- data.tar.gz: 4fd382934f56ffcc95722d9ac05c4e02a20575f29402e197b4c1518a6b7f697c9aa3caf8dc7402a8d4096f7ce5da9ca466deef646c86934a39e1aeae972e8511
6
+ metadata.gz: 38bdd2e28381998445c90a2c86fff1f0d3513df6b995ffbafc1399cf3b3460d5fb25b462602ff3b48426597e0a1aba0951e2adcc4cc3eb4c42ca943bf0c0bff8
7
+ data.tar.gz: a1aeac38a34238ecb73269246e716501e01897f420181c1a1cdd632a2b5b803a976d26c6d6e012389e9ca2e7b681f573081835df489ed9acbe85959aae928cc8
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.5.5
data/.travis.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.3.4
4
+ - 2.5.5
5
5
  before_install: gem install bundler -v 1.15.1
data/Gemfile.lock CHANGED
@@ -1,33 +1,33 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- query_filter (0.1.8)
4
+ query_filter (0.2.0)
5
5
  activesupport (>= 4.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activemodel (5.1.2)
11
- activesupport (= 5.1.2)
12
- activerecord (5.1.2)
13
- activemodel (= 5.1.2)
14
- activesupport (= 5.1.2)
15
- arel (~> 8.0)
16
- activesupport (5.1.2)
10
+ activemodel (5.2.3)
11
+ activesupport (= 5.2.3)
12
+ activerecord (5.2.3)
13
+ activemodel (= 5.2.3)
14
+ activesupport (= 5.2.3)
15
+ arel (>= 9.0)
16
+ activesupport (5.2.3)
17
17
  concurrent-ruby (~> 1.0, >= 1.0.2)
18
- i18n (~> 0.7)
18
+ i18n (>= 0.7, < 2)
19
19
  minitest (~> 5.1)
20
20
  tzinfo (~> 1.1)
21
- arel (8.0.0)
22
- coderay (1.1.1)
23
- concurrent-ruby (1.0.5)
21
+ arel (9.0.0)
22
+ coderay (1.1.2)
23
+ concurrent-ruby (1.1.5)
24
24
  diff-lcs (1.3)
25
- ffi (1.9.18)
25
+ ffi (1.10.0)
26
26
  formatador (0.2.5)
27
- guard (2.14.1)
27
+ guard (2.15.0)
28
28
  formatador (>= 0.2.4)
29
29
  listen (>= 2.7, < 4.0)
30
- lumberjack (~> 1.0)
30
+ lumberjack (>= 1.0.12, < 2.0)
31
31
  nenv (~> 0.1)
32
32
  notiffany (~> 0.0)
33
33
  pry (>= 0.9.12)
@@ -38,46 +38,45 @@ GEM
38
38
  guard (~> 2.1)
39
39
  guard-compat (~> 1.1)
40
40
  rspec (>= 2.99.0, < 4.0)
41
- i18n (0.8.4)
41
+ i18n (1.6.0)
42
+ concurrent-ruby (~> 1.0)
42
43
  listen (3.1.5)
43
44
  rb-fsevent (~> 0.9, >= 0.9.4)
44
45
  rb-inotify (~> 0.9, >= 0.9.7)
45
46
  ruby_dep (~> 1.2)
46
- lumberjack (1.0.12)
47
- method_source (0.8.2)
48
- minitest (5.10.2)
47
+ lumberjack (1.0.13)
48
+ method_source (0.9.2)
49
+ minitest (5.11.3)
49
50
  nenv (0.3.0)
50
51
  notiffany (0.1.1)
51
52
  nenv (~> 0.1)
52
53
  shellany (~> 0.0)
53
- pry (0.10.4)
54
+ pry (0.12.2)
54
55
  coderay (~> 1.1.0)
55
- method_source (~> 0.8.1)
56
- slop (~> 3.4)
56
+ method_source (~> 0.9.0)
57
57
  rake (10.5.0)
58
58
  rb-fsevent (0.9.8)
59
- rb-inotify (0.9.10)
60
- ffi (>= 0.5.0, < 2)
61
- rspec (3.6.0)
62
- rspec-core (~> 3.6.0)
63
- rspec-expectations (~> 3.6.0)
64
- rspec-mocks (~> 3.6.0)
65
- rspec-core (3.6.0)
66
- rspec-support (~> 3.6.0)
67
- rspec-expectations (3.6.0)
59
+ rb-inotify (0.10.0)
60
+ ffi (~> 1.0)
61
+ rspec (3.8.0)
62
+ rspec-core (~> 3.8.0)
63
+ rspec-expectations (~> 3.8.0)
64
+ rspec-mocks (~> 3.8.0)
65
+ rspec-core (3.8.0)
66
+ rspec-support (~> 3.8.0)
67
+ rspec-expectations (3.8.3)
68
68
  diff-lcs (>= 1.2.0, < 2.0)
69
- rspec-support (~> 3.6.0)
70
- rspec-mocks (3.6.0)
69
+ rspec-support (~> 3.8.0)
70
+ rspec-mocks (3.8.0)
71
71
  diff-lcs (>= 1.2.0, < 2.0)
72
- rspec-support (~> 3.6.0)
73
- rspec-support (3.6.0)
72
+ rspec-support (~> 3.8.0)
73
+ rspec-support (3.8.0)
74
74
  ruby_dep (1.5.0)
75
75
  shellany (0.0.1)
76
- slop (3.6.0)
77
- sqlite3 (1.3.13)
78
- thor (0.19.4)
76
+ sqlite3 (1.4.1)
77
+ thor (0.20.3)
79
78
  thread_safe (0.3.6)
80
- tzinfo (1.2.3)
79
+ tzinfo (1.2.5)
81
80
  thread_safe (~> 0.1)
82
81
 
83
82
  PLATFORMS
@@ -94,4 +93,4 @@ DEPENDENCIES
94
93
  sqlite3 (~> 1.3, >= 1.3.13)
95
94
 
96
95
  BUNDLED WITH
97
- 1.16.1
96
+ 1.16.2
data/README.md CHANGED
@@ -26,6 +26,37 @@ class Order < ActiveRecord::Base
26
26
  end
27
27
  ```
28
28
 
29
+ Where OrderFilter class looks like:
30
+
31
+ ```ruby
32
+ # app/filters/order_filter.rb
33
+ #
34
+ class OrderFilter < QueryFilter::Base
35
+ scope :customer_id
36
+ scope :service
37
+
38
+ range :total
39
+
40
+ date_range :completed_at
41
+
42
+ def scope_customer_id(value)
43
+ query.where(customer_id: value)
44
+ end
45
+
46
+ def scope_service(value)
47
+ query.where(service_id: value.to_i)
48
+ end
49
+
50
+ def range_total(range)
51
+ query.where(range.query('orders.total'))
52
+ end
53
+
54
+ def date_range_completed_at(period)
55
+ query.where(completed_at: period.range_original)
56
+ end
57
+ end
58
+ ```
59
+
29
60
  ## Installation
30
61
 
31
62
  Add this line to your application's Gemfile:
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Build select query based on params hash
2
4
  #
3
5
  module QueryFilter
@@ -1,42 +1,47 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Parse date range params
2
4
  #
3
5
  # date_range :created_at, keys: [:start_date, :end_date]
4
6
  #
5
7
  # date_range :last_login_date
6
8
  #
7
- module QueryFilter::Rules
8
- class DateRange < Scope
9
- def name
10
- 'date_range'.freeze
11
- end
9
+ module QueryFilter
10
+ module Rules
11
+ class DateRange < Scope
12
+ def name
13
+ 'date_range'
14
+ end
12
15
 
13
- def valid?(values)
14
- period = build_period_from_params(values)
15
- !(period.nil? || period.default?)
16
- end
16
+ def valid?(values)
17
+ period = build_period_from_params(values)
18
+ !(period.nil? || period.default?)
19
+ end
17
20
 
18
- def normalize_params(values)
19
- build_period_from_params(values)
20
- end
21
+ def normalize_params(values)
22
+ build_period_from_params(values)
23
+ end
21
24
 
22
- protected
25
+ protected
23
26
 
24
- def build_period_from_params(params)
25
- if params[key].present?
26
- QueryFilter::Utils::DatePeriod.parse_from_string(params[key], @options[:format])
27
- elsif keys_start_end_dates_exists?(params)
28
- QueryFilter::Utils::DatePeriod.new(*values_start_end_dates(params), @options[:format])
27
+ def build_period_from_params(params)
28
+ if params[key].present?
29
+ QueryFilter::Utils::DatePeriod.parse_from_string(params[key], @options[:format])
30
+ elsif keys_start_end_dates_exists?(params)
31
+ QueryFilter::Utils::DatePeriod.new(*values_start_end_dates(params), @options[:format])
32
+ end
29
33
  end
30
- end
31
34
 
32
- def keys_start_end_dates_exists?(params)
33
- values = values_start_end_dates(params)
34
- !values.nil? && values.size == 2
35
- end
35
+ def keys_start_end_dates_exists?(params)
36
+ values = values_start_end_dates(params)
37
+ !values.nil? && values.size == 2
38
+ end
39
+
40
+ def values_start_end_dates(params)
41
+ return unless @options[:keys]
36
42
 
37
- def values_start_end_dates(params)
38
- return if @options[:keys].nil?
39
- params.values_at(*@options[:keys])
43
+ params.values_at(*@options[:keys])
44
+ end
40
45
  end
41
46
  end
42
47
  end
@@ -1,23 +1,27 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Define order by filter rule
2
4
  #
3
- module QueryFilter::Rules
4
- class OrderBy < Scope
5
- DIRECTIONS = %w[asc desc].freeze
5
+ module QueryFilter
6
+ module Rules
7
+ class OrderBy < Scope
8
+ DIRECTIONS = %w[asc desc].freeze
6
9
 
7
- def name
8
- 'order_by'.freeze
9
- end
10
+ def name
11
+ 'order_by'
12
+ end
10
13
 
11
- def valid?(params)
12
- params[key].present? && DIRECTIONS.include?(params[direction_key].try(:downcase))
13
- end
14
+ def valid?(params)
15
+ params[key].present? && DIRECTIONS.include?(params[direction_key].try(:downcase))
16
+ end
14
17
 
15
- def direction_key
16
- @direction_key ||= (@options[:via] || 'sort_direction').to_sym
17
- end
18
+ def direction_key
19
+ @direction_key ||= (@options[:via] || 'sort_direction').to_sym
20
+ end
18
21
 
19
- def normalize_params(values)
20
- [values[key], values[direction_key]]
22
+ def normalize_params(values)
23
+ [values[key], values[direction_key]]
24
+ end
21
25
  end
22
26
  end
23
27
  end
@@ -1,38 +1,42 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Define range filter rule
2
4
  #
3
- module QueryFilter::Rules
4
- class Range < Scope
5
- def initialize(keys, options = {})
6
- @key = Array(keys).first
7
- @keys = [key_from, key_to]
8
- @options = options
9
- end
5
+ module QueryFilter
6
+ module Rules
7
+ class Range < Scope
8
+ def initialize(keys, options = {})
9
+ @key = Array(keys).first
10
+ @keys = [key_from, key_to]
11
+ @options = options
12
+ end
10
13
 
11
- def name
12
- 'range'.freeze
13
- end
14
+ def name
15
+ 'range'
16
+ end
14
17
 
15
- def valid?(values)
16
- filter = build_range_from_params(values)
17
- filter.valid?
18
- end
18
+ def valid?(values)
19
+ filter = build_range_from_params(values)
20
+ filter.valid?
21
+ end
19
22
 
20
- def normalize_params(values)
21
- build_range_from_params(values)
22
- end
23
+ def normalize_params(values)
24
+ build_range_from_params(values)
25
+ end
23
26
 
24
- protected
27
+ protected
25
28
 
26
- def build_range_from_params(params)
27
- QueryFilter::Utils::ScopeRange.new(key, params)
28
- end
29
+ def build_range_from_params(params)
30
+ QueryFilter::Utils::ScopeRange.new(key, params)
31
+ end
29
32
 
30
- def key_from
31
- @key_from ||= "#{key}_from".to_sym
32
- end
33
+ def key_from
34
+ @key_from ||= "#{key}_from".to_sym
35
+ end
33
36
 
34
- def key_to
35
- @key_to ||= "#{key}_to".to_sym
37
+ def key_to
38
+ @key_to ||= "#{key}_to".to_sym
39
+ end
36
40
  end
37
41
  end
38
42
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Define filter rules
2
4
  #
3
5
  module QueryFilter
@@ -33,7 +35,7 @@ module QueryFilter
33
35
  end
34
36
 
35
37
  def name
36
- 'scope'.freeze
38
+ 'scope'
37
39
  end
38
40
 
39
41
  def key
@@ -1,44 +1,49 @@
1
- module QueryFilter::Rules
2
- class SplitterRange < Scope
3
- class RangeParam
4
- SPLITTER = /[;-]/
1
+ # frozen_string_literal: true
5
2
 
6
- def initialize(value)
7
- @value = value
8
- end
3
+ module QueryFilter
4
+ module Rules
5
+ class SplitterRange < Scope
6
+ class RangeParam
7
+ SPLITTER = /[;-]/.freeze
9
8
 
10
- def valid?
11
- @value.present? && items.size == 2
12
- end
9
+ def initialize(value)
10
+ @value = value
11
+ end
12
+
13
+ def valid?
14
+ @value.present? && items.size == 2
15
+ end
13
16
 
14
- def range
15
- ::Range.new(*items)
17
+ def range
18
+ ::Range.new(*items)
19
+ end
20
+
21
+ def items
22
+ @items ||= @value.split(SPLITTER).map(&:strip).map(&:to_i)
23
+ end
16
24
  end
17
25
 
18
- def items
19
- @items ||= @value.split(SPLITTER).map(&:strip).map(&:to_i)
26
+ def name
27
+ 'splitter_range'
20
28
  end
21
- end
22
29
 
23
- def name
24
- 'splitter_range'.freeze
25
- end
30
+ def valid?(values)
31
+ period = build_period_from_params(values)
32
+ !period.nil?
33
+ end
26
34
 
27
- def valid?(values)
28
- period = build_period_from_params(values)
29
- !period.nil?
30
- end
35
+ def normalize_params(values)
36
+ build_period_from_params(values)
37
+ end
31
38
 
32
- def normalize_params(values)
33
- build_period_from_params(values)
34
- end
39
+ protected
35
40
 
36
- protected
41
+ def build_period_from_params(values)
42
+ param = RangeParam.new(values[key])
43
+ return unless param.valid?
37
44
 
38
- def build_period_from_params(values)
39
- param = RangeParam.new(values[key])
40
- return unless param.valid?
41
- param
45
+ param
46
+ end
42
47
  end
43
48
  end
44
49
  end
@@ -1,20 +1,24 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module QueryFilter
2
4
  module Utils
3
5
  class DateNormalizer
4
- TIME_FORMAT = '%Y-%m-%d %H:%M:%S'
5
6
  PG_MIN_YEAR = -4713
6
- PG_MAX_YEAR = 294276
7
+ PG_MAX_YEAR = 294_276
7
8
 
8
9
  attr_reader :date, :format
9
10
 
10
- def initialize(date, format)
11
+ def initialize(date, format = nil)
11
12
  @date = date
12
13
  @format = format
13
- @parsed_value = parse
14
+ end
15
+
16
+ def parsed_value
17
+ @parsed_value ||= parse
14
18
  end
15
19
 
16
20
  def normalize
17
- valid?(@parsed_value) ? @parsed_value : default_date
21
+ valid?(parsed_value) ? parsed_value : default_date
18
22
  end
19
23
 
20
24
  private
@@ -31,13 +35,22 @@ module QueryFilter
31
35
 
32
36
  def parse
33
37
  return date if date?
38
+ return default_date if date.blank?
39
+
40
+ [@format].concat(QueryFilter.datetime_formats).compact.each do |format|
41
+ value = safe_parse_date(date, format)
42
+ return value if value
43
+ end
34
44
 
35
- time = DateTime.strptime(date, format)
36
- Time.zone.parse(time.strftime(TIME_FORMAT))
37
- rescue StandardError => _e
38
45
  default_date
39
46
  end
40
47
 
48
+ def safe_parse_date(string, format)
49
+ DateTime.strptime(string, format)
50
+ rescue ArgumentError => _e
51
+ nil
52
+ end
53
+
41
54
  def default_date
42
55
  Time.zone.today
43
56
  end
@@ -3,14 +3,12 @@
3
3
  module QueryFilter
4
4
  module Utils
5
5
  class DatePeriod
6
- attr_reader :date_from_raw, :date_to_raw, :format
7
-
8
- TIME_FORMAT = '%Y-%m-%d %H:%M:%S'
6
+ attr_reader :date_from_raw, :date_to_raw
9
7
 
10
8
  def initialize(date_from = nil, date_to = nil, format = nil)
11
- @format = (format.blank? ? QueryFilter.date_period_format : format)
12
9
  @date_from_raw = date_from
13
10
  @date_to_raw = date_to
11
+ @format = format
14
12
  end
15
13
 
16
14
  def range
@@ -42,11 +40,11 @@ module QueryFilter
42
40
  end
43
41
 
44
42
  def datefrom
45
- @datefrom ||= I18n.l(date_from, format: @format)
43
+ @datefrom ||= I18n.l(date_from, format: date_display_format)
46
44
  end
47
45
 
48
46
  def dateto
49
- @dateto ||= I18n.l(date_to, format: @format)
47
+ @dateto ||= I18n.l(date_to, format: date_display_format)
50
48
  end
51
49
 
52
50
  def to_param
@@ -72,15 +70,19 @@ module QueryFilter
72
70
  return value if value.is_a?(DatePeriod)
73
71
 
74
72
  if value.blank?
75
- new(nil, nil, format)
73
+ new
76
74
  else
77
75
  dates = value.to_s.split(QueryFilter.date_period_splitter).map(&:strip)
78
- new(dates[0], dates[1], format)
76
+ new(dates[0], dates[1], format || QueryFilter.date_period_format)
79
77
  end
80
78
  end
81
79
 
82
80
  private
83
81
 
82
+ def date_display_format
83
+ @format || QueryFilter.date_display_format
84
+ end
85
+
84
86
  def normalize_date(date)
85
87
  QueryFilter::Utils::DateNormalizer.new(date, @format).normalize
86
88
  end
@@ -1,42 +1,46 @@
1
- module QueryFilter::Utils
2
- # Usage:
3
- #
4
- # range = Utils::ScopeRange.new(:orders, { orders_from: 1, orders_to: 44 })
5
- # range.query('orders_count')
6
- #
7
- class ScopeRange
8
- def initialize(name, options = {})
9
- @name = name
10
- @options = options
11
- end
1
+ # frozen_string_literal: true
12
2
 
13
- def name_from
14
- @name_from ||= "#{@name}_from".to_sym
15
- end
3
+ module QueryFilter
4
+ module Utils
5
+ # Usage:
6
+ #
7
+ # range = Utils::ScopeRange.new(:orders, { orders_from: 1, orders_to: 44 })
8
+ # range.query('orders_count')
9
+ #
10
+ class ScopeRange
11
+ def initialize(name, options = {})
12
+ @name = name
13
+ @options = options
14
+ end
16
15
 
17
- def name_to
18
- @name_to ||= "#{@name}_to".to_sym
19
- end
16
+ def name_from
17
+ @name_from ||= "#{@name}_from".to_sym
18
+ end
20
19
 
21
- def value_from
22
- @options[name_from]
23
- end
20
+ def name_to
21
+ @name_to ||= "#{@name}_to".to_sym
22
+ end
24
23
 
25
- def value_to
26
- @options[name_to]
27
- end
24
+ def value_from
25
+ @options[name_from]
26
+ end
28
27
 
29
- def valid?
30
- @options && (value_from.present? || value_to.present?)
31
- end
28
+ def value_to
29
+ @options[name_to]
30
+ end
31
+
32
+ def valid?
33
+ @options && (value_from.present? || value_to.present?)
34
+ end
32
35
 
33
- def query(column)
34
- if value_from.present? && value_to.present?
35
- ["#{column} BETWEEN ? AND ?", value_from, value_to]
36
- elsif value_from.present?
37
- ["#{column} >= ?", value_from]
38
- elsif value_to.present?
39
- ["#{column} <= ?", value_to]
36
+ def query(column)
37
+ if value_from.present? && value_to.present?
38
+ ["#{column} BETWEEN ? AND ?", value_from, value_to]
39
+ elsif value_from.present?
40
+ ["#{column} >= ?", value_from]
41
+ elsif value_to.present?
42
+ ["#{column} <= ?", value_to]
43
+ end
40
44
  end
41
45
  end
42
46
  end
@@ -15,8 +15,8 @@ module QueryFilter
15
15
 
16
16
  def passed?
17
17
  return true if empty?
18
- value = target.params
19
18
 
19
+ value = target.params
20
20
  conditions_lambdas.all? { |c| c.call(target, value) }
21
21
  end
22
22
 
@@ -35,8 +35,8 @@ module QueryFilter
35
35
 
36
36
  private
37
37
 
38
- def invert_lambda(l)
39
- ->(*args, &blk) { !l.call(*args, &blk) }
38
+ def invert_lambda(lblock)
39
+ ->(*args, &blk) { !lblock.call(*args, &blk) }
40
40
  end
41
41
 
42
42
  # Filters support:
@@ -61,6 +61,7 @@ module QueryFilter
61
61
  if filter.arity > 1
62
62
  lambda do |target, _, &block|
63
63
  raise ArgumentError unless block
64
+
64
65
  target.instance_exec(target, block, &filter)
65
66
  end
66
67
  elsif filter.arity <= 0
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module QueryFilter
2
- VERSION = '0.1.8'.freeze
4
+ VERSION = '0.2.0'
3
5
  end
data/lib/query_filter.rb CHANGED
@@ -31,6 +31,18 @@ module QueryFilter
31
31
  mattr_accessor :date_period_splitter
32
32
  self.date_period_splitter = 'to'
33
33
 
34
+ mattr_accessor :date_display_format
35
+ self.date_display_format = '%Y-%m-%d %H:%M'
36
+
37
+ mattr_accessor :datetime_formats
38
+ self.datetime_formats = %w[
39
+ %Y-%m-%dT%H:%M:%S.%L%z
40
+ %Y-%m-%dT%H:%M:%S%z
41
+ %Y-%m-%d %H:%M:%S
42
+ %Y-%m-%d %H:%M
43
+ %Y-%m-%d
44
+ ]
45
+
34
46
  # Default way to setup QueryFilter
35
47
  # @example
36
48
  # QueryFilter.setup do |config|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: query_filter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Galeta
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2018-01-10 00:00:00.000000000 Z
12
+ date: 2019-05-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -146,6 +146,7 @@ files:
146
146
  - ".gitignore"
147
147
  - ".rspec"
148
148
  - ".rubocop.yml"
149
+ - ".ruby-version"
149
150
  - ".travis.yml"
150
151
  - Gemfile
151
152
  - Gemfile.lock
@@ -188,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
189
  version: '0'
189
190
  requirements: []
190
191
  rubyforge_project:
191
- rubygems_version: 2.5.2
192
+ rubygems_version: 2.7.6.2
192
193
  signing_key:
193
194
  specification_version: 4
194
195
  summary: ActiveRecord query filter gem