ransack-enum 0.1.0 → 0.3.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: 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