ransack-enum 0.1.0 → 0.3.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: 97f30e49879d033fe4c565d88b0684425231f15f587e8aec3c172733f93933c1
4
- data.tar.gz: ca2b830be92aa094cff2582b3bba3564a39c13a00470c220f2fe74be470491d6
3
+ metadata.gz: e7d29a6d9f1aeb5b49f746c0c16e41b4690ebe4070f90fa5186572927b8ac2ee
4
+ data.tar.gz: a2358d2de52e1297aa65ef24c8a3a4529ff484e657716b7777d670483f9608b9
5
5
  SHA512:
6
- metadata.gz: 8c66bafa64fe674569f78b7221ecd2090d311423e69fe937623aff056134536650bed8283a724ff5cb952e4793578772b330085750b72bf331dd2746f21ecb26
7
- data.tar.gz: f516648b499dbab637d630b237501fc1a357f8d0994e507dcdd7f7ebb49f83b52307580bff7908675ad0c860fcde7ae8ed779337b3105139785ba97735cd7fea
6
+ metadata.gz: 64372e91b20d14ccf56ee0567f2aecc9940e2d39c83ca505173a49cea70dc6083fdc6586882c9608e2225d55ac46e8c9009e9e689bb2c5ec6ced8d9934cf7ea1
7
+ data.tar.gz: a3d1790361f9886debedc89d336cab5fea1eb4e17a4faa216c76262dcdc32535666b213bf1b1a60e62db9e53635b47f08a6f7977a1324275a8306767991d6708
data/.gitignore CHANGED
@@ -9,7 +9,6 @@
9
9
  /vendor
10
10
  .DS_Store
11
11
  Gemfile.lock
12
- .rspec
13
12
 
14
13
  # rspec failure tracking
15
14
  .rspec_status
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -1,14 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.6.5
3
- Exclude:
4
- - Gemfile
5
- - Gemfile.lock
6
- - ransack-enum.gemspec
7
- - vendor/bundle/**/*
8
- - vendor/bundler/**/*
2
+ NewCops: enable
9
3
  Metrics/BlockLength:
10
4
  Exclude:
11
- - spec/**/*
12
- Metrics/LineLength:
13
- Max: 80
14
- IgnoredPatterns: ['(\A|\s+)#']
5
+ - spec/**/*_spec.rb
@@ -1,5 +1,27 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.3.0 / 2020-09-28
4
+ ### New features
5
+ - Support boolean enum value
6
+ ### Hotfix
7
+ - Change other than #enum to private
8
+
9
+ ## 0.2.1 / 2020-03-17
10
+ ### Hotfix
11
+ - Generating an automated security update (rake)
12
+
13
+ ## 0.2.0 / 2019-12-02
14
+ ### New features
15
+ - Enable / Disable in ransack configuration
16
+
17
+ ## 0.1.2 / 2019-12-01
18
+ ### Hotfix
19
+ - Fix dependencies
20
+
21
+ ## 0.1.1 / 2019-11-30
22
+ ### Hotfix
23
+ - Fix dependencies
24
+
3
25
  ## 0.1.0 / 2019-11-30
4
26
  ### New features
5
27
  - create gem
data/Gemfile CHANGED
@@ -1,4 +1,10 @@
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 'rspec'
10
+ gem 'sqlite3'
data/README.md CHANGED
@@ -7,9 +7,7 @@ Allow Enum values to be used in [Ransack](https://github.com/activerecord-hacker
7
7
  Add this line to your application's Gemfile:
8
8
 
9
9
  ```ruby
10
- gem 'ransack-enum',
11
- git: 'https://github.com/shoma07/ransack-enum.git',
12
- branch: 'master'
10
+ gem 'ransack-enum', '~> 0.3'
13
11
  ```
14
12
 
15
13
  And then execute:
@@ -45,16 +43,36 @@ Post.ransack(status_in: [0, 1]).result.to_sql
45
43
  # SELECT "posts".* FROM "posts" WHERE "posts"."status" IN (0, 1)
46
44
  ```
47
45
 
46
+ ### Configuration
47
+
48
+ Enable / Disable enum value search in the configuration.
49
+ Default is enabled.
50
+
51
+ ```ruby
52
+ # config/initializers/ransack.rb
53
+
54
+ Ransack.configure do |config|
55
+ # ...
56
+ end
57
+
58
+ Ransack::Enum.configure do |config|
59
+ # enabled
60
+ config.enabled = true
61
+
62
+ # disabled
63
+ # config.enabled = false
64
+ end
65
+ ```
66
+
48
67
  ## Feature
49
68
 
50
- - Enable / Disable in ransack configuration
51
69
  - Enable to convert enum i18n value to search value
52
70
 
53
71
  ## Development
54
72
 
55
73
  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.
56
74
 
57
- 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).
75
+ To install this gem onto your local machine, run `bundle exec rake install`.
58
76
 
59
77
  ## Contributing
60
78
 
@@ -1,12 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_support/core_ext'
4
+ require 'ransack'
4
5
  require 'ransack/enum/version'
5
- require 'ransack/enum/adapters'
6
+ require 'ransack/enum/configuration'
7
+ require 'ransack/enum/adapters/active_record'
6
8
 
7
9
  module Ransack
10
+ # Ransack::Enum
8
11
  module Enum
9
- class Error < StandardError; end
10
- # Your code goes here...
12
+ extend Configuration
11
13
  end
12
14
  end
@@ -2,16 +2,6 @@
2
2
 
3
3
  require 'ransack/enum/adapters/active_record/base'
4
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
5
  ActiveSupport.on_load(:active_record) do
16
6
  extend Ransack::Enum::Adapters::ActiveRecord::Base
17
7
  end
@@ -8,44 +8,35 @@ module Ransack
8
8
  module Base
9
9
  # @see https://github.com/rails/rails/blob/66cabeda2c46c582d19738e1318be8d59584cc5b/activerecord/lib/active_record/enum.rb#L150
10
10
  # @param [Hash] definitions
11
+ # @return [Hash]
11
12
  def enum(definitions)
13
+ enum_ransacker(*definitions.to_a.first) if respond_to?(:ransacker)
12
14
  super
13
- enum_ransacker(definitions)
14
15
  end
15
16
 
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]
17
+ private
22
18
 
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
19
+ # @param [Symbol] name
20
+ # @param [Hash] values
21
+ # @return [Hash]
22
+ def enum_ransacker(name, values)
23
+ converter = enum_ransack_value_converter(name.to_s, values)
24
+ ransacker name, formatter: lambda { |value|
25
+ value.is_a?(Array) ? value.map(&converter) : converter.call(value)
26
+ }
27
+ end
36
28
 
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
29
+ # @param [String] name
30
+ # @param [Hash] values
31
+ # @return [Proc]
32
+ def enum_ransack_value_converter(name, values)
33
+ lambda do |value|
34
+ val = values[value.to_sym]
35
+ return val if Ransack::Enum.enabled? && !val.nil?
44
36
 
45
- ransacker name.to_sym, formatter: formatter
37
+ Ransack::Nodes::Value.new(nil, value).cast(attribute_types[name]&.type)
46
38
  end
47
39
  end
48
- # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
49
40
  end
50
41
  end
51
42
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ransack
4
+ module Enum
5
+ # Ransack::Enum::Configuration
6
+ module Configuration
7
+ mattr_accessor :options
8
+
9
+ self.options = { enabled: true }
10
+
11
+ def configure
12
+ yield self
13
+ end
14
+
15
+ # @param [TrueClass, FalseClass] enabled
16
+ # @return [TrueClass, FalseClass]
17
+ def enabled=(enabled)
18
+ options[:enabled] = enabled
19
+ end
20
+
21
+ # @return [TrueClass, FalseClass]
22
+ def enabled?
23
+ options[:enabled]
24
+ end
25
+ end
26
+ end
27
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Ransack
4
4
  module Enum
5
- VERSION = '0.1.0'
5
+ VERSION = '0.3.0'
6
6
  end
7
7
  end
@@ -1,36 +1,31 @@
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"
6
+ spec.name = 'ransack-enum'
7
7
  spec.version = Ransack::Enum::VERSION
8
- spec.authors = ["shoma07"]
9
- spec.email = ["23730734+shoma07@users.noreply.github.com"]
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.license = "MIT"
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.license = 'MIT'
15
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
15
16
 
16
- spec.metadata["homepage_uri"] = spec.homepage
17
- spec.metadata["source_code_uri"] = spec.homepage
18
- spec.metadata["changelog_uri"] = "https://github.com/shoma07/ransack-enum/blob/master/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"
19
20
 
20
21
  # Specify which files should be added to the gem when it is released.
21
22
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
22
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
23
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
23
24
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
24
25
  end
25
- spec.bindir = "exe"
26
+ spec.bindir = 'exe'
26
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
- spec.require_paths = ["lib"]
28
-
29
- spec.add_dependency "ransack", "~> 2.3"
30
- spec.add_dependency "activesupport", ">= 5.2.1"
28
+ spec.require_paths = %w[lib]
31
29
 
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"
30
+ spec.add_dependency 'ransack', '~> 2.0'
36
31
  end
metadata CHANGED
@@ -1,99 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ransack-enum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - shoma07
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-30 00:00:00.000000000 Z
11
+ date: 2020-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ransack
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '2.3'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '2.3'
27
- - !ruby/object:Gem::Dependency
28
- name: activesupport
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 5.2.1
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: 5.2.1
41
- - !ruby/object:Gem::Dependency
42
- name: bundler
43
15
  requirement: !ruby/object:Gem::Requirement
44
16
  requirements:
45
17
  - - "~>"
46
18
  - !ruby/object:Gem::Version
47
19
  version: '2.0'
48
- type: :development
20
+ type: :runtime
49
21
  prerelease: false
50
22
  version_requirements: !ruby/object:Gem::Requirement
51
23
  requirements:
52
24
  - - "~>"
53
25
  - !ruby/object:Gem::Version
54
26
  version: '2.0'
55
- - !ruby/object:Gem::Dependency
56
- name: rake
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '10.0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '10.0'
69
- - !ruby/object:Gem::Dependency
70
- name: rspec
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '3.0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '3.0'
83
- - !ruby/object:Gem::Dependency
84
- name: sqlite3
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '1.4'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '1.4'
97
27
  description: Allow Enum values to be used in Ransack searches
98
28
  email:
99
29
  - 23730734+shoma07@users.noreply.github.com
@@ -104,7 +34,6 @@ files:
104
34
  - ".gitignore"
105
35
  - ".rspec"
106
36
  - ".rubocop.yml"
107
- - ".travis.yml"
108
37
  - CHANGELOG.md
109
38
  - Gemfile
110
39
  - LICENSE.txt
@@ -113,9 +42,9 @@ files:
113
42
  - bin/console
114
43
  - bin/setup
115
44
  - lib/ransack/enum.rb
116
- - lib/ransack/enum/adapters.rb
117
45
  - lib/ransack/enum/adapters/active_record.rb
118
46
  - lib/ransack/enum/adapters/active_record/base.rb
47
+ - lib/ransack/enum/configuration.rb
119
48
  - lib/ransack/enum/version.rb
120
49
  - ransack-enum.gemspec
121
50
  homepage: https://github.com/shoma07/ransack-enum
@@ -124,7 +53,7 @@ licenses:
124
53
  metadata:
125
54
  homepage_uri: https://github.com/shoma07/ransack-enum
126
55
  source_code_uri: https://github.com/shoma07/ransack-enum
127
- changelog_uri: https://github.com/shoma07/ransack-enum/blob/master/CHANGELOG.md
56
+ changelog_uri: https://github.com/shoma07/ransack-enum/blob/v0.3.0/CHANGELOG.md
128
57
  post_install_message:
129
58
  rdoc_options: []
130
59
  require_paths:
@@ -133,14 +62,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
133
62
  requirements:
134
63
  - - ">="
135
64
  - !ruby/object:Gem::Version
136
- version: '0'
65
+ version: 2.3.0
137
66
  required_rubygems_version: !ruby/object:Gem::Requirement
138
67
  requirements:
139
68
  - - ">="
140
69
  - !ruby/object:Gem::Version
141
70
  version: '0'
142
71
  requirements: []
143
- rubygems_version: 3.0.3
72
+ rubygems_version: 3.1.2
144
73
  signing_key:
145
74
  specification_version: 4
146
75
  summary: Allow Enum values to be used in Ransack searches
@@ -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,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