ransack-enum 0.1.2 → 1.0.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
  SHA256:
3
- metadata.gz: 7549f0d615e6836ad8d5c1ecbeb5da477c53cab979f47fe797b577fe7563d3e3
4
- data.tar.gz: 3cf5ba60975e996fc3e2589c3fd4f0de56069c0f0333fa83ef2f207055fa78b0
3
+ metadata.gz: f1afbcd408f71081fbc447ce1eaf591e6e902978969e802a0c3bf96448e93d48
4
+ data.tar.gz: 10aa583067d1b8704027191cad180353af7675178baf1e3b28dbaecfd5965306
5
5
  SHA512:
6
- metadata.gz: 6e079c505e13f75b63896be2d0339bf74e9df8a85d358094067231513202234e1b332fd62fef230099401c6619b74c9757ca45b71a4e5a45f355309378e40672
7
- data.tar.gz: cc9a1e2c3bf288ab36e3e7dd3f26a35d194e9f4a85ea69cd65fc8ac7af02f25846dd3b0c290710e79a189de19e3908988700a6430849235054ec8a04749cbfc8
6
+ metadata.gz: 43734b3d37556813d8a4a5837270342a90ddf7ee3f1d9f0a607846313b415ae57ed58dfd9b86c269e5b10cb571c2e3d825ef625e5cba3320ce2c9bdbe20088ea
7
+ data.tar.gz: 5efb2f770b16591b7ca3e382f845802de16bab83c30bbd8c5f65ffac600bbfeae64bc60935a1d587d12583ef7239a8fa4795677cbf7984308fff773dc7c12e06
data/.gitignore CHANGED
@@ -9,7 +9,8 @@
9
9
  /vendor
10
10
  .DS_Store
11
11
  Gemfile.lock
12
- .rspec
13
12
 
14
13
  # rspec failure tracking
15
14
  .rspec_status
15
+
16
+ .ruby-version
data/.rubocop.yml CHANGED
@@ -1,14 +1,16 @@
1
+ require:
2
+ - rubocop-performance
3
+ - rubocop-rake
4
+ - rubocop-rspec
5
+
1
6
  AllCops:
2
- TargetRubyVersion: 2.6.5
3
- Exclude:
4
- - Gemfile
5
- - Gemfile.lock
6
- - ransack-enum.gemspec
7
- - vendor/bundle/**/*
8
- - vendor/bundler/**/*
7
+ NewCops: enable
8
+ TargetRubyVersion: 2.6
9
+
9
10
  Metrics/BlockLength:
10
11
  Exclude:
11
- - spec/**/*
12
- Metrics/LineLength:
13
- Max: 80
14
- IgnoredPatterns: ['(\A|\s+)#']
12
+ - spec/**/*_spec.rb
13
+
14
+ Naming/FileName:
15
+ Exclude:
16
+ - lib/ransack-enum.rb
data/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 1.0.0 / 2021-12-31
4
+ ### New features
5
+ - Supported version 7 of ActiveRecord.
6
+ ### Incompatible changes
7
+ - Require name of gem has changed from `ransack/enum` to `ransack-enum`.
8
+ - Module of gem has changed from `Ransack::Enum` to `RansackEnum`.
9
+
10
+ ## 0.3.0 / 2020-09-28
11
+ ### New features
12
+ - Support boolean enum value
13
+ ### Hotfix
14
+ - Change other than #enum to private
15
+
16
+ ## 0.2.1 / 2020-03-17
17
+ ### Hotfix
18
+ - Generating an automated security update (rake)
19
+
20
+ ## 0.2.0 / 2019-12-02
21
+ ### New features
22
+ - Enable / Disable in ransack configuration
23
+
3
24
  ## 0.1.2 / 2019-12-01
4
25
  ### Hotfix
5
26
  - Fix dependencies
data/Gemfile CHANGED
@@ -1,4 +1,16 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in ransack-enum.gemspec
4
6
  gemspec
7
+
8
+ gem 'rake'
9
+ gem 'ransack', require: false
10
+ gem 'rspec', require: false
11
+ gem 'rubocop', require: false
12
+ gem 'rubocop-performance', require: false
13
+ gem 'rubocop-rake', require: false
14
+ gem 'rubocop-rspec', require: false
15
+ gem 'sqlite3', require: false
16
+ gem 'yard', require: false
data/README.md CHANGED
@@ -1,18 +1,21 @@
1
- # Ransack::Enum
1
+ # RansackEnum
2
2
 
3
- Allow Enum values to be used in [Ransack](https://github.com/activerecord-hackery/ransack) searches.
3
+ Enable enum values in [Ransack](https://github.com/activerecord-hackery/ransack) search.
4
4
 
5
5
  ## Installation
6
6
 
7
7
  Add this line to your application's Gemfile:
8
8
 
9
9
  ```ruby
10
- gem 'ransack-enum'
10
+ gem 'ransack', '~> 2.0'
11
+ gem 'ransack-enum', '~> 1.0'
11
12
  ```
12
13
 
13
14
  And then execute:
14
15
 
15
- $ bundle
16
+ ```sh
17
+ $ bundle install
18
+ ```
16
19
 
17
20
  ## Usage
18
21
 
@@ -22,6 +25,9 @@ There is no need to add any special code.
22
25
  ```ruby
23
26
  class Post < ActiveRecord::Base
24
27
  enum status: { unpublished: 0, published: 1 }
28
+
29
+ # after ActiveRecord 7, the following is also possible.
30
+ # enum :status, { unpublished: 0, published: 1 }
25
31
  end
26
32
  ```
27
33
 
@@ -43,16 +49,36 @@ Post.ransack(status_in: [0, 1]).result.to_sql
43
49
  # SELECT "posts".* FROM "posts" WHERE "posts"."status" IN (0, 1)
44
50
  ```
45
51
 
52
+ ### Configuration
53
+
54
+ Enable / Disable enum value search in the configuration.
55
+ Default is enabled.
56
+
57
+ ```ruby
58
+ # config/initializers/ransack.rb
59
+
60
+ Ransack.configure do |config|
61
+ # ...
62
+ end
63
+
64
+ RansackEnum.configure do |config|
65
+ # enabled (default)
66
+ config.enabled = true
67
+
68
+ # disabled
69
+ # config.enabled = false
70
+ end
71
+ ```
72
+
46
73
  ## Feature
47
74
 
48
- - Enable / Disable in ransack configuration
49
75
  - Enable to convert enum i18n value to search value
50
76
 
51
77
  ## Development
52
78
 
53
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
79
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bundle exec rake` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
54
80
 
55
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
81
+ To install this gem onto your local machine, run `bundle exec rake install`.
56
82
 
57
83
  ## Contributing
58
84
 
data/Rakefile CHANGED
@@ -1,8 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'bundler/gem_tasks'
4
- require 'rspec/core/rake_task'
5
4
 
5
+ require 'rspec/core/rake_task'
6
6
  RSpec::Core::RakeTask.new(:spec)
7
7
 
8
- task default: :spec
8
+ require 'rubocop/rake_task'
9
+ RuboCop::RakeTask.new(:lint) do |t|
10
+ t.options = %w[--parallel]
11
+ end
12
+ namespace :lint do
13
+ desc 'Lint fix (Rubocop)'
14
+ task fix: :auto_correct
15
+ end
16
+
17
+ require 'yard'
18
+ desc 'document'
19
+ task :doc do
20
+ YARD::CLI::CommandParser.run
21
+ end
22
+
23
+ task default: %i[lint spec]
data/bin/console CHANGED
@@ -2,7 +2,7 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require 'bundler/setup'
5
- require 'ransack/enum'
5
+ require 'ransack-enum'
6
6
 
7
7
  # You can add fixtures and/or initialization code here to make experimenting
8
8
  # with your gem easier. You can also use a different console, if you like.
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'ransack_enum'
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RansackEnum
4
+ module Adapters
5
+ # RansackEnum::Adapters::ActiveRecord6
6
+ module ActiveRecord6
7
+ # @param definitions [Hash]
8
+ # @return [void]
9
+ def enum(definitions)
10
+ ::RansackEnum::Ransacker.new(self, nil, nil, **definitions.to_h.deep_dup).then do |enum_ransacker|
11
+ super.tap { enum_ransacker.call }
12
+ end
13
+ end
14
+ end
15
+
16
+ private_constant :ActiveRecord6
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RansackEnum
4
+ module Adapters
5
+ # RansackEnum::Adapters::ActiveRecord7
6
+ module ActiveRecord7
7
+ # @param name [Symbol, nil]
8
+ # @param values [Hash, nil]
9
+ # @param options [Hash]
10
+ # @return [void]
11
+ def enum(name = nil, values = nil, **options)
12
+ ::RansackEnum::Ransacker.new(self, name, values.deep_dup, **options.deep_dup).then do |enum_ransacker|
13
+ super.tap { enum_ransacker.call }
14
+ end
15
+ end
16
+ end
17
+
18
+ private_constant :ActiveRecord7
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'adapters/active_record_6'
4
+ require_relative 'adapters/active_record_7'
5
+
6
+ module RansackEnum
7
+ # RansackEnum::Adapters
8
+ module Adapters
9
+ ::ActiveSupport.on_load(:active_record) do
10
+ if Integer(::ActiveRecord::VERSION::STRING.split('.').first) >= 7
11
+ extend ActiveRecord7
12
+ else
13
+ extend ActiveRecord6
14
+ end
15
+ end
16
+ end
17
+
18
+ private_constant :Adapters
19
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RansackEnum
4
+ # RansackEnum::Configuration
5
+ class Configuration
6
+ # @return [void]
7
+ def initialize
8
+ @enabled = true
9
+ end
10
+
11
+ # @param enabled [Boolean]
12
+ # @return [void]
13
+ # @raise [ArgumentError]
14
+ def enabled=(enabled)
15
+ raise ArgumentError if !enabled.is_a?(::TrueClass) && !enabled.is_a?(::FalseClass)
16
+
17
+ @enabled = enabled
18
+ end
19
+
20
+ # @return [Boolean]
21
+ def enabled?
22
+ enabled
23
+ end
24
+
25
+ private
26
+
27
+ # @!attribute [r] enabled
28
+ # @return [Boolean]
29
+ attr_reader :enabled
30
+ end
31
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RansackEnum
4
+ # RansackEnum::Formatter
5
+ class Formatter
6
+ # @param model_class [Class]
7
+ # @param name [String]
8
+ # @param values [Array, Hash]
9
+ # @return [void]
10
+ def initialize(model_class, name, values)
11
+ @model_class = model_class
12
+ @name = name
13
+ @normalized_values = normalize_values(values)
14
+ end
15
+
16
+ # @param value [Object]
17
+ # @return [Object]
18
+ def call(value)
19
+ value.is_a?(::Array) ? (value.map { |val| normalize_value(val) }) : normalize_value(value)
20
+ end
21
+
22
+ private
23
+
24
+ # @!attribute [r] model_class
25
+ # @return [Class]
26
+ attr_reader :model_class
27
+ # @!attribute [r] name
28
+ # @return [String]
29
+ attr_reader :name
30
+ # @!attribute [r] normalized_values
31
+ # @return [Hash]
32
+ attr_reader :normalized_values
33
+
34
+ # @param values [Array, Hash]
35
+ # @return [Hash]
36
+ def normalize_values(values)
37
+ (values.is_a?(::Hash) ? values : [values, ::Array.new(values.size, &:itself)].transpose.to_h).symbolize_keys
38
+ end
39
+
40
+ # @param value [Object]
41
+ # @return [Object]
42
+ def normalize_value(value)
43
+ enum_value(value).then { |val| cast_value(val.nil? ? value : val) }
44
+ end
45
+
46
+ # @param value [Object]
47
+ # @return [Object]
48
+ def enum_value(value)
49
+ normalized_values[value.to_sym] if ::RansackEnum.config.enabled? && value.respond_to?(:to_sym)
50
+ end
51
+
52
+ # @param value [Object]
53
+ # @return [Object]
54
+ def cast_value(value)
55
+ ::Ransack::Nodes::Value.new(nil, value).cast(model_class.attribute_types[name]&.type)
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RansackEnum
4
+ # RansackEnum::Ransacker
5
+ class Ransacker
6
+ # @param model_class [Class]
7
+ # @param name [Symbol, nil]
8
+ # @param values [Hash, nil]
9
+ # @param options [Hash]
10
+ # @return [void]
11
+ def initialize(model_class, name = nil, values = nil, **options)
12
+ @model_class = model_class
13
+ if name
14
+ @name = name
15
+ @values = values || options
16
+ else
17
+ @name, @values = options.slice!(:_prefix, :_suffix, :_scopes, :_default).to_a.first
18
+ end
19
+ end
20
+
21
+ # @return [void]
22
+ def call
23
+ return if !model_class.respond_to?(:ransacker) || !name || !values
24
+
25
+ model_class.ransacker(name.to_sym, formatter: ::RansackEnum::Formatter.new(model_class, name.to_s, values))
26
+ end
27
+
28
+ private
29
+
30
+ # @!attribute [r] model_class
31
+ # @return [Class]
32
+ attr_reader :model_class
33
+ # @!attribute [r] name
34
+ # @return [Symbol, nil]
35
+ attr_reader :name
36
+ # @!attribute [r] values
37
+ # @return [Hash, nil]
38
+ attr_reader :values
39
+ end
40
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RansackEnum
4
+ # @return [String]
5
+ VERSION = '1.0.0'
6
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support'
4
+ require_relative 'ransack_enum/version'
5
+ require_relative 'ransack_enum/configuration'
6
+ require_relative 'ransack_enum/formatter'
7
+ require_relative 'ransack_enum/ransacker'
8
+ require_relative 'ransack_enum/adapters'
9
+
10
+ # RansackEnum
11
+ module RansackEnum
12
+ # RansackEnum::Error
13
+ class Error < StandardError; end
14
+
15
+ class << self
16
+ # @return [RansackEnum::Configuration]
17
+ def config
18
+ @config ||= ::RansackEnum::Configuration.new
19
+ end
20
+
21
+ # @yieldparam config [RansackEnum::Configuration]
22
+ # @yieldreturn [void]
23
+ # @return [void]
24
+ def configure
25
+ raise ::RansackEnum::Error, 'No block is given!' unless block_given?
26
+
27
+ yield config
28
+ end
29
+ end
30
+ end
data/ransack-enum.gemspec CHANGED
@@ -1,36 +1,30 @@
1
- lib = File.expand_path("lib", __dir__)
2
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require "ransack/enum/version"
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/ransack_enum/version'
4
4
 
5
5
  Gem::Specification.new do |spec|
6
- spec.name = "ransack-enum"
7
- spec.version = Ransack::Enum::VERSION
8
- spec.authors = ["shoma07"]
9
- spec.email = ["23730734+shoma07@users.noreply.github.com"]
6
+ spec.name = 'ransack-enum'
7
+ spec.version = RansackEnum::VERSION
8
+ spec.authors = %w[shoma07]
9
+ spec.email = %w[23730734+shoma07@users.noreply.github.com]
10
10
 
11
- spec.summary = "Allow Enum values to be used in Ransack searches"
12
- spec.description = "Allow Enum values to be used in Ransack searches"
13
- spec.homepage = "https://github.com/shoma07/ransack-enum"
14
- spec.required_ruby_version = ">= 2.3"
15
- spec.license = "MIT"
11
+ spec.summary = 'Enable enum values in Ransack search'
12
+ spec.description = 'Enable enum values in Ransack search'
13
+ spec.homepage = 'https://github.com/shoma07/ransack-enum'
14
+ spec.license = 'MIT'
15
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.6.0')
16
16
 
17
- spec.metadata["homepage_uri"] = spec.homepage
18
- spec.metadata["source_code_uri"] = spec.homepage
19
- spec.metadata["changelog_uri"] = "https://github.com/shoma07/ransack-enum/blob/v#{spec.version}/CHANGELOG.md"
17
+ spec.metadata['homepage_uri'] = spec.homepage
18
+ spec.metadata['source_code_uri'] = spec.homepage
19
+ spec.metadata['changelog_uri'] = "#{spec.homepage}/blob/v#{spec.version}/CHANGELOG.md"
20
20
 
21
21
  # Specify which files should be added to the gem when it is released.
22
22
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
23
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
23
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
24
24
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
25
  end
26
- spec.bindir = "exe"
26
+ spec.bindir = 'exe'
27
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
- spec.require_paths = ["lib"]
29
-
30
- spec.add_dependency "ransack", "~> 2.0"
31
-
32
- spec.add_development_dependency "bundler", "~> 2.0"
33
- spec.add_development_dependency "rake", "~> 10.0"
34
- spec.add_development_dependency "rspec", "~> 3.0"
35
- spec.add_development_dependency "sqlite3", "~> 1.4"
28
+ spec.require_paths = %w[lib]
29
+ spec.metadata = { 'rubygems_mfa_required' => 'true' }
36
30
  end
metadata CHANGED
@@ -1,86 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ransack-enum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - shoma07
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-30 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: ransack
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '2.0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '2.0'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '2.0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '2.0'
41
- - !ruby/object:Gem::Dependency
42
- name: rake
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '10.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '10.0'
55
- - !ruby/object:Gem::Dependency
56
- name: rspec
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '3.0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '3.0'
69
- - !ruby/object:Gem::Dependency
70
- name: sqlite3
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '1.4'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '1.4'
83
- description: Allow Enum values to be used in Ransack searches
11
+ date: 2021-12-31 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Enable enum values in Ransack search
84
14
  email:
85
15
  - 23730734+shoma07@users.noreply.github.com
86
16
  executables: []
@@ -90,7 +20,6 @@ files:
90
20
  - ".gitignore"
91
21
  - ".rspec"
92
22
  - ".rubocop.yml"
93
- - ".travis.yml"
94
23
  - CHANGELOG.md
95
24
  - Gemfile
96
25
  - LICENSE.txt
@@ -98,20 +27,22 @@ files:
98
27
  - Rakefile
99
28
  - bin/console
100
29
  - bin/setup
101
- - lib/ransack/enum.rb
102
- - lib/ransack/enum/adapters.rb
103
- - lib/ransack/enum/adapters/active_record.rb
104
- - lib/ransack/enum/adapters/active_record/base.rb
105
- - lib/ransack/enum/version.rb
30
+ - lib/ransack-enum.rb
31
+ - lib/ransack_enum.rb
32
+ - lib/ransack_enum/adapters.rb
33
+ - lib/ransack_enum/adapters/active_record_6.rb
34
+ - lib/ransack_enum/adapters/active_record_7.rb
35
+ - lib/ransack_enum/configuration.rb
36
+ - lib/ransack_enum/formatter.rb
37
+ - lib/ransack_enum/ransacker.rb
38
+ - lib/ransack_enum/version.rb
106
39
  - ransack-enum.gemspec
107
40
  homepage: https://github.com/shoma07/ransack-enum
108
41
  licenses:
109
42
  - MIT
110
43
  metadata:
111
- homepage_uri: https://github.com/shoma07/ransack-enum
112
- source_code_uri: https://github.com/shoma07/ransack-enum
113
- changelog_uri: https://github.com/shoma07/ransack-enum/blob/v0.1.2/CHANGELOG.md
114
- post_install_message:
44
+ rubygems_mfa_required: 'true'
45
+ post_install_message:
115
46
  rdoc_options: []
116
47
  require_paths:
117
48
  - lib
@@ -119,15 +50,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
50
  requirements:
120
51
  - - ">="
121
52
  - !ruby/object:Gem::Version
122
- version: '2.3'
53
+ version: 2.6.0
123
54
  required_rubygems_version: !ruby/object:Gem::Requirement
124
55
  requirements:
125
56
  - - ">="
126
57
  - !ruby/object:Gem::Version
127
58
  version: '0'
128
59
  requirements: []
129
- rubygems_version: 3.0.3
130
- signing_key:
60
+ rubygems_version: 3.2.3
61
+ signing_key:
131
62
  specification_version: 4
132
- summary: Allow Enum values to be used in Ransack searches
63
+ summary: Enable enum values in Ransack search
133
64
  test_files: []
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- sudo: false
3
- language: ruby
4
- cache: bundler
5
- rvm:
6
- - 2.6.5
7
- before_install: gem install bundler -v 2.0.2
@@ -1,53 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Ransack
4
- module Enum
5
- module Adapters
6
- module ActiveRecord
7
- # Ransack::Enum::Adapters::ActiveRecord::Base
8
- module Base
9
- # @see https://github.com/rails/rails/blob/66cabeda2c46c582d19738e1318be8d59584cc5b/activerecord/lib/active_record/enum.rb#L150
10
- # @param [Hash] definitions
11
- def enum(definitions)
12
- super
13
- enum_ransacker(definitions) if respond_to?(:ransacker)
14
- end
15
-
16
- # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
17
- # @param [Hash] definitions
18
- def enum_ransacker(definitions)
19
- definitions.each do |name, values|
20
- fmt = lambda do |v|
21
- return values[v.to_sym] if values[v.to_sym]
22
-
23
- case columns_hash[name.to_s]&.type
24
- when :integer
25
- v.to_i
26
- when :boolean
27
- if ActiveRecord::VERSION::MAJOR >= 5
28
- ActiveRecord::Type::Boolean.new.cast(v)
29
- else
30
- ActiveRecord::Type::Boolean.new.type_cast_from_database(v)
31
- end
32
- else
33
- v
34
- end
35
- end
36
-
37
- formatter = proc do |val|
38
- if val.is_a?(Array)
39
- val.map { |v| fmt.call(v) }
40
- else
41
- fmt.call(val)
42
- end
43
- end
44
-
45
- ransacker name.to_sym, formatter: formatter
46
- end
47
- end
48
- # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
49
- end
50
- end
51
- end
52
- end
53
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'ransack/enum/adapters/active_record/base'
4
-
5
- module Ransack
6
- module Enum
7
- module Adapters
8
- # Ransack::Enum::Adapters::ActiveRecord
9
- module ActiveRecord
10
- end
11
- end
12
- end
13
- end
14
-
15
- ActiveSupport.on_load(:active_record) do
16
- extend Ransack::Enum::Adapters::ActiveRecord::Base
17
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'ransack/enum/adapters/active_record'
4
-
5
- module Ransack
6
- module Enum
7
- # Ransack::Enum::Adapters
8
- module Adapters
9
- end
10
- end
11
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Ransack
4
- module Enum
5
- VERSION = '0.1.2'
6
- end
7
- end
data/lib/ransack/enum.rb DELETED
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_support/core_ext'
4
- require 'ransack/enum/version'
5
- require 'ransack/enum/adapters'
6
-
7
- module Ransack
8
- module Enum
9
- class Error < StandardError; end
10
- # Your code goes here...
11
- end
12
- end