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 +7 -0
- data/lib/ransack_builders/filter_builder_base.rb +59 -0
- data/lib/ransack_builders.rb +5 -0
- data/ransack_builders.gemspec +31 -0
- metadata +91 -0
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,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: []
|