filterameter 0.3.0 → 0.4.0

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: c5ff39d6e3e772f3943678ecc748ca3f9d9234417958fc9254071ee14764ed31
4
- data.tar.gz: 22e0d442436d0cae884e60a60066eea859c7de22251d6471e05c289af50f3da1
3
+ metadata.gz: 83338f9a61d92c1d562a5708a0268e647d52916960b4d750a75f3cd6107bee7a
4
+ data.tar.gz: a3036ffda002e4075a40be6225681bb67ed9b2f5c2534ecf5370aff70e7d375c
5
5
  SHA512:
6
- metadata.gz: 67cd4b48cf4f50e0681e34003f0f9ebe7ae753b703f83121d017daaee7185c846c4e2e467d2b140fc14ced8e11b07f88b155a1dda4b6e0a9104906348f077a53
7
- data.tar.gz: f80c40fcd3a438682bd95c7b3c282dae7cc199c57375372314d0720c234c53aa0b4609c47cccc2dcb85505a023f74e9ba6c6e2125714a5d48710c87bff20a6d5
6
+ metadata.gz: c923a97b54f2da6ed9f2d17743213cde5f16f9525383ef1bbe7081f02ae69ac46553e398a5d5f45b5292f65b84d0a0a681fb198633b06d44eb0ab013a606338c
7
+ data.tar.gz: 5dae50a8f42ad0ac9a83dbe497f948f7dbabba29157daf5549478487f6c973a129ee514d04e40820467d3abb8111bf2430d82cf7495bf599e06225f7cb684a4b
@@ -1,12 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'filterameter/filter_declaration'
4
- require 'filterameter/filter_factory'
5
- require 'filterameter/filter_registry'
6
- require 'filterameter/log_subscriber'
7
- require 'filterameter/parameters_base'
8
- require 'filterameter/query_builder'
9
-
10
3
  module Filterameter
11
4
  module Coordinators
12
5
  # = Coordinators Base
@@ -7,8 +7,6 @@ require 'action_dispatch'
7
7
  require 'action_controller/metal/live'
8
8
  require 'action_controller/metal/strong_parameters'
9
9
 
10
- require 'filterameter/coordinators/base'
11
-
12
10
  module Filterameter
13
11
  module Coordinators
14
12
  # = Controller Filters
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'filterameter/filterable'
4
- require 'filterameter/coordinators/controller_coordinator'
5
-
6
3
  module Filterameter
7
4
  # = Declarative Controller Filters
8
5
  #
@@ -1,9 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'filterameter/coordinators/query_coordinator'
4
- require 'filterameter/filterable'
5
- require 'filterameter/query_builder'
6
-
7
3
  module Filterameter
8
4
  # = Declarative Filters
9
5
  #
@@ -9,8 +9,8 @@ module Filterameter
9
9
  # explicitly by adding a call to `filter_model`.
10
10
  class CannotDetermineModelError < FilterameterError
11
11
  def initialize(name, path)
12
- super "Cannot determine model name from controller name #{value_and_classify(name)} " \
13
- "or path #{value_and_classify(path)}. Declare the model explicitly with filter_model."
12
+ super("Cannot determine model name from controller name #{value_and_classify(name)} " \
13
+ "or path #{value_and_classify(path)}. Declare the model explicitly with filter_model.")
14
14
  end
15
15
 
16
16
  private
@@ -6,7 +6,3 @@ module Filterameter
6
6
  end
7
7
  end
8
8
  end
9
-
10
- require 'filterameter/exceptions/cannot_determine_model_error'
11
- require 'filterameter/exceptions/validation_error'
12
- require 'filterameter/exceptions/undeclared_parameter_error'
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_support/core_ext/array/wrap'
4
- require 'filterameter/options/partial_options'
5
4
 
6
5
  module Filterameter
7
6
  # = Filter Declaration
@@ -1,14 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'filterameter/filters/arel_filter'
4
- require 'filterameter/filters/attribute_filter'
5
- require 'filterameter/filters/conditional_scope_filter'
6
- require 'filterameter/filters/matches_filter'
7
- require 'filterameter/filters/maximum_filter'
8
- require 'filterameter/filters/minimum_filter'
9
- require 'filterameter/filters/nested_filter'
10
- require 'filterameter/filters/scope_filter'
11
-
12
3
  module Filterameter
13
4
  # = Filter Factory
14
5
  #
@@ -1,82 +1,84 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Options
4
- # = Partial Options
5
- #
6
- # Class PartialOptions parses the options passed in as partial, then exposes those. Here are the options along with
7
- # their valid values:
8
- # - match: anywhere (default), from_start, dynamic
9
- # - case_sensitive: true, false (default)
10
- #
11
- # Options may be specified by passing a hash with the option keys:
12
- #
13
- # partial: { match: :from_start, case_sensitive: true }
14
- #
15
- # There are two shortcuts: the partial option can be declared with `true`, which just uses the defaults; or the
16
- # partial option can be declared with the match option directly, such as partial: :from_start.
17
- class PartialOptions
18
- VALID_OPTIONS = %i[match case_sensitive].freeze
19
- VALID_MATCH_OPTIONS = %w[anywhere from_start dynamic].freeze
3
+ module Filterameter
4
+ module Options
5
+ # = Partial Options
6
+ #
7
+ # Class PartialOptions parses the options passed in as partial, then exposes those. Here are the options along with
8
+ # their valid values:
9
+ # - match: anywhere (default), from_start, dynamic
10
+ # - case_sensitive: true, false (default)
11
+ #
12
+ # Options may be specified by passing a hash with the option keys:
13
+ #
14
+ # partial: { match: :from_start, case_sensitive: true }
15
+ #
16
+ # There are two shortcuts: the partial option can be declared with `true`, which just uses the defaults; or the
17
+ # partial option can be declared with the match option directly, such as partial: :from_start.
18
+ class PartialOptions
19
+ VALID_OPTIONS = %i[match case_sensitive].freeze
20
+ VALID_MATCH_OPTIONS = %w[anywhere from_start dynamic].freeze
20
21
 
21
- def initialize(options)
22
- @match = 'anywhere'
23
- @case_sensitive = false
22
+ def initialize(options)
23
+ @match = 'anywhere'
24
+ @case_sensitive = false
24
25
 
25
- case options
26
- when TrueClass
27
- nil
28
- when Hash
29
- evaluate_hash(options)
30
- when String, Symbol
31
- assign_match(options)
26
+ case options
27
+ when TrueClass
28
+ nil
29
+ when Hash
30
+ evaluate_hash(options)
31
+ when String, Symbol
32
+ assign_match(options)
33
+ end
32
34
  end
33
- end
34
35
 
35
- def case_sensitive?
36
- @case_sensitive
37
- end
36
+ def case_sensitive?
37
+ @case_sensitive
38
+ end
38
39
 
39
- def match_anywhere?
40
- @match == 'anywhere'
41
- end
40
+ def match_anywhere?
41
+ @match == 'anywhere'
42
+ end
42
43
 
43
- def match_from_start?
44
- @match == 'from_start'
45
- end
44
+ def match_from_start?
45
+ @match == 'from_start'
46
+ end
46
47
 
47
- def match_dynamically?
48
- @match == 'dynamic'
49
- end
48
+ def match_dynamically?
49
+ @match == 'dynamic'
50
+ end
50
51
 
51
- private
52
+ private
52
53
 
53
- def evaluate_hash(options)
54
- options.assert_valid_keys(:match, :case_sensitive)
55
- assign_match(options[:match]) if options.key?(:match)
56
- assign_case_sensitive(options[:case_sensitive]) if options.key?(:case_sensitive)
57
- end
54
+ def evaluate_hash(options)
55
+ options.assert_valid_keys(:match, :case_sensitive)
56
+ assign_match(options[:match]) if options.key?(:match)
57
+ assign_case_sensitive(options[:case_sensitive]) if options.key?(:case_sensitive)
58
+ end
58
59
 
59
- def assign_match(value)
60
- validate_match(value)
61
- @match = value.to_s
62
- end
60
+ def assign_match(value)
61
+ validate_match(value)
62
+ @match = value.to_s
63
+ end
63
64
 
64
- def validate_match(value)
65
- return if VALID_MATCH_OPTIONS.include? value.to_s
65
+ def validate_match(value)
66
+ return if VALID_MATCH_OPTIONS.include? value.to_s
66
67
 
67
- raise ArgumentError,
68
- "Invalid match option for partial: #{value}. Valid options are #{VALID_MATCH_OPTIONS.to_sentence}"
69
- end
68
+ raise ArgumentError,
69
+ "Invalid match option for partial: #{value}. Valid options are #{VALID_MATCH_OPTIONS.to_sentence}"
70
+ end
70
71
 
71
- def assign_case_sensitive(value)
72
- validate_case_sensitive(value)
73
- @case_sensitive = value
74
- end
72
+ def assign_case_sensitive(value)
73
+ validate_case_sensitive(value)
74
+ @case_sensitive = value
75
+ end
75
76
 
76
- def validate_case_sensitive(value)
77
- return if value.is_a?(TrueClass) || value.is_a?(FalseClass)
77
+ def validate_case_sensitive(value)
78
+ return if value.is_a?(TrueClass) || value.is_a?(FalseClass)
78
79
 
79
- raise ArgumentError, "Invalid case_sensitive option for partial: #{value}. Valid options are true and false."
80
+ raise ArgumentError, "Invalid case_sensitive option for partial: #{value}. Valid options are true and false."
81
+ end
80
82
  end
81
83
  end
82
84
  end
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'active_model/attribute_assignment'
4
4
  require 'active_model/validations'
5
- require 'filterameter/validators/inclusion_validator'
6
5
 
7
6
  module Filterameter
8
7
  # = Parameters
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Filterameter
4
- VERSION = '0.3.0'
4
+ VERSION = '0.4.0'
5
5
  end
data/lib/filterameter.rb CHANGED
@@ -1,17 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'filterameter/configuration'
4
- require 'filterameter/declarative_controller_filters'
5
- require 'filterameter/declarative_filters'
6
- require 'filterameter/exceptions'
3
+ require 'zeitwerk'
4
+
5
+ loader = Zeitwerk::Loader.for_gem
6
+ loader.setup # ready!
7
7
 
8
8
  # = Filterameter
9
- #
10
- # Module Filterameter can be mixed into a controller to provide the DSL to describe each controller's filters.
11
- #
12
- # The model class must be declared if it cannot be derived. It can be derived if (A) the model is not namespaced and its
13
- # name matches the controller name (for example BrandsController -> Brand) or (B) both the controller and model share
14
- # the same namespace and name.
15
9
  module Filterameter
16
10
  class << self
17
11
  attr_writer :configuration
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: filterameter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Todd Kummer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-30 00:00:00.000000000 Z
11
+ date: 2024-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 5.2.2
19
+ version: '6.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 5.2.2
26
+ version: '6.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: appraisal
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 2.4.1
33
+ version: 2.5.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 2.4.1
40
+ version: 2.5.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: guard
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -86,56 +86,70 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 1.1.4
89
+ version: 1.5.4
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 1.1.4
96
+ version: 1.5.4
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rspec-rails
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '3.9'
103
+ version: '4.0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '3.9'
110
+ version: '4.0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rubocop
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 1.31.1
117
+ version: 1.60.2
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 1.31.1
124
+ version: 1.60.2
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop-packaging
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 0.5.2
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 0.5.2
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: rubocop-rails
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - "~>"
130
144
  - !ruby/object:Gem::Version
131
- version: 2.15.1
145
+ version: 2.23.1
132
146
  type: :development
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
150
  - - "~>"
137
151
  - !ruby/object:Gem::Version
138
- version: 2.15.1
152
+ version: 2.23.1
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: simplecov
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -208,7 +222,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
208
222
  - !ruby/object:Gem::Version
209
223
  version: '0'
210
224
  requirements: []
211
- rubygems_version: 3.1.6
225
+ rubygems_version: 3.4.10
212
226
  signing_key:
213
227
  specification_version: 4
214
228
  summary: Declarative Filter Parameters