ransack_builders 0.1.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 3412dff76afd0270644ab919b37172491339781566991f55300baca80ad71770
4
+ data.tar.gz: e32edf225545e12266260ac8977a4b96e839f257c2b6887f23cf8f4807115686
5
+ SHA512:
6
+ metadata.gz: 130c6c13b49439f7cd1bac7ba19b46ed448de033e8bf7c03e4e889245da84cba067ad14f82f578a7b2b2540ab1d52d2049f1dfc92ca019a3d305f246b55b7358
7
+ data.tar.gz: 69d40be0c83b72bb52d797d6949b0b8c785be8fdf8ba30cfc67d2bf8f871c0ca95dfe39aab420b760649b4f698fba83cd9be995c17f123c0e379b9fa6066b490
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RansackBuilders
4
+ class FilterBuilderBase
5
+ class << self
6
+ # @param path [Array<Symbol>]
7
+ # @param block [Proc]
8
+ def filter_for(path, &block)
9
+ filter_builders[path] = block
10
+ end
11
+
12
+ # @return [Hash]
13
+ def filter_builders
14
+ @_filter_builders ||= {}
15
+ end
16
+ end
17
+
18
+ # @!attribute [r] params
19
+ # @return [Hash]
20
+ attr_reader :params
21
+
22
+ # @param raw_params [Hash]
23
+ def initialize(raw_params)
24
+ @params = raw_params.deep_dup
25
+ @params[:filter] ||= {}
26
+ end
27
+
28
+ def call
29
+ self.class.filter_builders.each do |path, transformer|
30
+ parent, key = traverse_to_key(params, path)
31
+
32
+ if parent && parent[key]
33
+ new_key_name = transformer.call(key)
34
+ params[:filter][new_key_name] = parent.delete(key)
35
+ end
36
+ end
37
+
38
+ params
39
+ end
40
+
41
+ private
42
+
43
+ # @param hash [Hash] - The hash we are traversing
44
+ # @param path [Array<Symbol>] - The array representing the path to the key
45
+ # @return [Array] - The parent hash and the final key
46
+ def traverse_to_key(hash, path)
47
+ *initial_keys, final_key = path
48
+
49
+ parent =
50
+ if initial_keys.any?
51
+ hash.dig(*initial_keys)
52
+ else
53
+ hash
54
+ end
55
+
56
+ [parent, final_key]
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RansackBuilders
4
+ VERSION = '0.1.1'
5
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path("lib", __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ require_relative 'lib/ransack_builders'
7
+
8
+ Gem::Specification.new do |spec|
9
+ spec.name = "ransack_builders"
10
+ spec.authors = ["Nikita Sidorov"]
11
+ spec.email = ["nik.prohor@gmail.com"]
12
+ spec.license = "MIT"
13
+ spec.version = RansackBuilders::VERSION.dup
14
+
15
+ spec.summary = "DSL for complex ransack filters builders"
16
+ spec.description = spec.summary
17
+ spec.files = Dir["README.md", "ransack_builders.gemspec", "lib/**/*"]
18
+ spec.bindir = "bin"
19
+ spec.executables = []
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
23
+ spec.metadata["changelog_uri"] = "https://github.com/KebabJoy/ransack_builders"
24
+ spec.metadata["source_code_uri"] = "https://github.com/KebabJoy/ransack_builders"
25
+
26
+ spec.required_ruby_version = ">= 3.0"
27
+
28
+ spec.add_development_dependency "bundler"
29
+ spec.add_development_dependency "rake"
30
+ spec.add_development_dependency "rspec"
31
+ end
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ransack_builders
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Nikita Sidorov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-10-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: DSL for complex ransack filters builders
56
+ email:
57
+ - nik.prohor@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - lib/ransack_builders.rb
63
+ - lib/ransack_builders/filter_builder_base.rb
64
+ - ransack_builders.gemspec
65
+ homepage:
66
+ licenses:
67
+ - MIT
68
+ metadata:
69
+ allowed_push_host: https://rubygems.org
70
+ changelog_uri: https://github.com/KebabJoy/ransack_builders
71
+ source_code_uri: https://github.com/KebabJoy/ransack_builders
72
+ post_install_message:
73
+ rdoc_options: []
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '3.0'
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ requirements: []
87
+ rubygems_version: 3.5.3
88
+ signing_key:
89
+ specification_version: 4
90
+ summary: DSL for complex ransack filters builders
91
+ test_files: []