enum_help 0.0.16 → 0.0.19

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
- SHA1:
3
- metadata.gz: 5b76ebfec1adf5d496385557f9425e1e1a95554c
4
- data.tar.gz: eb49a08c37113ebf0852cad91e2f774d94493f47
2
+ SHA256:
3
+ metadata.gz: 31095c38410d72dc36b68e0eb2fe538a2bb09246fd2195e80d3441e05fb6a697
4
+ data.tar.gz: 2c62a01900ee464b3de4cca4ebc17de9e8e53a5b3f3e211acbf224f52cc80c49
5
5
  SHA512:
6
- metadata.gz: 80eb30b5f104314e567b1af238a1bb9f5122b4a35701f68788f287c57c84da92178bf6fd3431ba2e40b0a68748c451ecea5500137bc07d9e1bdd332543a89a78
7
- data.tar.gz: 6784941159e554668851e44dfa4e4ad8f28b803d54c55e555a16f148c941bfbbba7958f2d52636375c397b0bf23145f700e08fd326f7b1c33096753cd641e55f
6
+ metadata.gz: b5626546f63adea2e0742ee1adf325f4ee9cf6d6673068d7b239d88f907a5b270e0c02e1b1207896bb5e635b9e4d892b204a6c4b18af14ec8c8bdda848fef136
7
+ data.tar.gz: ebaec0dbcb3423c2ce8c720f385df4091e713a6e06e1516985bba3bbf079f68921ee3dfd99520dde9f4e3d0e26039eb196becf7197d89eaf77016d7b0eeba894
@@ -0,0 +1,44 @@
1
+ name: CI
2
+
3
+ on:
4
+ - push
5
+ - pull_request
6
+
7
+ jobs:
8
+ test:
9
+ runs-on: ubuntu-latest
10
+ strategy:
11
+ fail-fast: false
12
+ matrix:
13
+ ruby-version:
14
+ - head
15
+ - 3.1
16
+ - "3.0"
17
+ - 2.7
18
+ - 2.6
19
+ rails-version:
20
+ - "edge"
21
+ - "~> 7.0.1"
22
+ - "~> 6.1.4"
23
+ - "~> 6.0.4"
24
+ - "~> 5.2.6"
25
+ exclude:
26
+ - ruby-version: head
27
+ rails-version: "~> 5.2.6"
28
+ - ruby-version: 3.1
29
+ rails-version: "~> 5.2.6"
30
+ - ruby-version: "3.0"
31
+ rails-version: "~> 5.2.6"
32
+ - ruby-version: 2.6
33
+ rails-version: "edge"
34
+ - ruby-version: 2.6
35
+ rails-version: "~> 7.0.1"
36
+ env:
37
+ RAILS_VERSION: "${{ matrix.rails-version }}"
38
+ steps:
39
+ - uses: actions/checkout@v2
40
+ - uses: ruby/setup-ruby@v1
41
+ with:
42
+ ruby-version: "${{ matrix.ruby-version }}"
43
+ bundler-cache: true
44
+ - run: bundle exec rspec
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --profile 3
3
+ --format documentation
data/Gemfile CHANGED
@@ -2,3 +2,17 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in enum_help.gemspec
4
4
  gemspec
5
+
6
+ gem 'bundler'
7
+ gem 'rake'
8
+ gem 'rspec'
9
+ gem 'sqlite3'
10
+
11
+ case version = ENV['RAILS_VERSION']
12
+ when nil
13
+ gem 'rails', '~> 7.0'
14
+ when 'edge'
15
+ gem 'rails', github: 'rails/rails'
16
+ else
17
+ gem 'rails', version
18
+ end
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # EnumHelp
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/enum_help.svg)](https://rubygems.org/gems/enum_help)
4
+ [![Build Status](https://github.com/zmbacker/enum_help/actions/workflows/ci.yml/badge.svg)](https://github.com/zmbacker/enum_help/actions/workflows/ci.yml)
5
+
3
6
  Help ActiveRecord::Enum feature to work fine with I18n and simple_form.
4
7
 
5
8
  Make Enum field correctly generate select field.
@@ -17,7 +20,7 @@ Version 0.0.15 changes the behaviour of namespaced modules as per [this commit](
17
20
  abc:
18
21
  lorem: 'Ipsum'
19
22
  foo/bar/bat:
20
- abc:
23
+ def:
21
24
  lorem: 'Ipsum'
22
25
 
23
26
  To
@@ -29,7 +32,7 @@ To
29
32
  abc:
30
33
  lorem: 'Ipsum'
31
34
  bat:
32
- abc:
35
+ def:
33
36
  lorem: 'Ipsum'
34
37
 
35
38
  For different I18n backends, adjust accordingly as namespaced modules are now referenced by `.` rather than `/`.
@@ -58,7 +61,7 @@ In model file:
58
61
  ```ruby
59
62
  class Order < ActiveRecord::Base
60
63
  enum status: { "nopayment" => 0, "finished" => 1, "failed" => 2, "destroyed" => 3 }
61
-
64
+
62
65
  def self.restricted_statuses
63
66
  statuses.except :failed, :destroyed
64
67
  end
@@ -88,7 +91,7 @@ In `_form.html.erb` using `simple_form`:
88
91
  <%= f.input :status %>
89
92
  ```
90
93
 
91
- This will generate select field with translations automaticlly.
94
+ This will generate select field with translations automatically.
92
95
 
93
96
  And if you want to generate select except some values, then you can pass a collection option.
94
97
 
@@ -106,7 +109,7 @@ e.g.
106
109
  <%= f.input :status, as: :string %>
107
110
  ```
108
111
 
109
- From version 0.0.10, enum_help can automaticlly generate radio buttons with i18n labels.
112
+ From version 0.0.10, enum_help can automatically generate radio buttons with i18n labels.
110
113
 
111
114
  e.g.
112
115
  ```erb
@@ -133,7 +136,7 @@ zh-cn:
133
136
 
134
137
  ## Notice
135
138
  If you want to use enum feature, field of your table can't be named with `reference`.
136
- When it is named with 'reference' and define enum in model file, there will be raise an error as below:
139
+ When it is named with 'reference' and define enum in model file, there will be raised an error as below:
137
140
 
138
141
  NoMethodError: super: no superclass method `enum' for...
139
142
 
@@ -146,6 +149,7 @@ Thanks for all the [contributors](https://github.com/zmbacker/enum_help/graphs/c
146
149
 
147
150
  1. Fork it ( http://github.com/zmbacker/enum_help/fork )
148
151
  2. Create your feature branch (`git checkout -b my-new-feature`)
149
- 3. Commit your changes (`git commit -am 'Add some feature'`)
150
- 4. Push to the branch (`git push origin my-new-feature`)
151
- 5. Create new Pull Request
152
+ 3. Run test `rspec`
153
+ 4. Commit your changes (`git commit -am 'Add some feature'`)
154
+ 5. Push to the branch (`git push origin my-new-feature`)
155
+ 6. Create new Pull Request
data/Rakefile CHANGED
@@ -1 +1,2 @@
1
1
  require "bundler/gem_tasks"
2
+ task :default => :spec
data/enum_help.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
2
+ lib = File.expand_path("../lib", __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'enum_help/version'
4
+ require "enum_help/version"
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "enum_help"
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["zm.backer@gmail.com"]
11
11
  spec.summary = %q{ Extends of ActiveRecord::Enum, which can used in simple_form and internationalization }
12
12
  spec.description = %q{ Help ActiveRecord::Enum feature to work fine with I18n and simple_form. }
13
- spec.homepage = ""
13
+ spec.homepage = "https://github.com/zmbacker/enum_help"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
@@ -18,6 +18,5 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.5"
22
- spec.add_development_dependency "rake"
21
+ spec.add_dependency "activesupport", ">= 3.0.0"
23
22
  end
@@ -2,12 +2,29 @@ module EnumHelp
2
2
 
3
3
  module I18n
4
4
 
5
- # overwrite the enum method
6
- def enum( definitions )
7
- super( definitions )
8
- definitions.each do |name, _|
9
- Helper.define_attr_i18n_method(self, name)
10
- Helper.define_collection_i18n_method(self, name)
5
+ if ActiveRecord::VERSION::MAJOR >= 7
6
+ # overwrite the enum method
7
+ def enum(name = nil, values = nil, **options)
8
+ super(name, values, **options)
9
+ if name # For new syntax in Rails7
10
+ Helper.define_attr_i18n_method(self, name)
11
+ Helper.define_collection_i18n_method(self, name)
12
+ else
13
+ definitions = options.slice!(:_prefix, :_suffix, :_scopes, :_default)
14
+ definitions.each do |name, _|
15
+ Helper.define_attr_i18n_method(self, name)
16
+ Helper.define_collection_i18n_method(self, name)
17
+ end
18
+ end
19
+ end
20
+ else
21
+ # overwrite the enum method
22
+ def enum( definitions )
23
+ super( definitions )
24
+ definitions.each do |name, _|
25
+ Helper.define_attr_i18n_method(self, name)
26
+ Helper.define_collection_i18n_method(self, name)
27
+ end
11
28
  end
12
29
  end
13
30
 
@@ -1,7 +1,9 @@
1
1
  module EnumHelp
2
2
  class Railtie < Rails::Railtie
3
3
  initializer "enum_help.i18n" do
4
- ActiveRecord::Base.send :extend, EnumHelp::I18n
4
+ ActiveSupport.on_load(:active_record) do
5
+ extend EnumHelp::I18n
6
+ end
5
7
  end
6
8
  end
7
- end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module EnumHelp
2
- VERSION = "0.0.16"
2
+ VERSION = "0.0.19"
3
3
  end
@@ -0,0 +1,99 @@
1
+ require 'spec_helper'
2
+
3
+ EnumHelp::Railtie.initializers.each(&:run)
4
+
5
+ class User < ActiveRecord::Base
6
+ if ActiveRecord.version < Gem::Version.new('6.1')
7
+ enum gender: [:male, :female]
8
+ elsif ActiveRecord.version < Gem::Version.new('7.0')
9
+ enum gender: [:male, :female], _default: :male
10
+ else # Rails 7.0 or higher
11
+ enum :gender, [:male, :female], default: :male
12
+ end
13
+
14
+ enum status: %i[normal disable]
15
+ end
16
+
17
+ RSpec.describe EnumHelp::I18n do
18
+ describe '#enum' do
19
+ context 'With hash definitions' do
20
+ it 'responds defined _i18n method' do
21
+ expect(User.new).to respond_to("gender_i18n")
22
+ end
23
+
24
+ it 'responds defined genders_i18n method' do
25
+ expect(User).to respond_to("genders_i18n")
26
+ end
27
+ end
28
+
29
+ context 'With array definitions' do
30
+ it 'responds defined _i18n method' do
31
+ expect(User.new).to respond_to("status_i18n")
32
+ end
33
+
34
+ it 'responds defined status_i18n method' do
35
+ expect(User).to respond_to("statuses_i18n")
36
+ end
37
+ end
38
+ end
39
+
40
+ describe '#enum_key_i18n' do
41
+ describe 'user.gender' do
42
+ let(:gender) { "female" }
43
+ let(:user) { User.create(gender: gender) }
44
+
45
+
46
+ subject { user.gender_i18n }
47
+
48
+ context 'lang is zh-CN' do
49
+ before { I18n.locale = :"zh-CN" }
50
+
51
+ it { expect(I18n.locale).to eq :"zh-CN" }
52
+
53
+ context 'gender is male' do
54
+ let(:gender) { 'male' }
55
+ it { is_expected.to eq '男' }
56
+ end
57
+
58
+ context 'gender is female' do
59
+ let(:gender) { 'female' }
60
+ it { is_expected.to eq '女' }
61
+ end
62
+ end
63
+
64
+ context 'lang is en' do
65
+ before { I18n.locale = :en }
66
+
67
+ it { expect(I18n.locale).to eq :en }
68
+
69
+ context 'gender is male' do
70
+ let(:gender) { 'male' }
71
+ it { is_expected.to eq 'Male' }
72
+ end
73
+
74
+ context 'gender is female' do
75
+ let(:gender) { 'female' }
76
+ it { is_expected.to eq 'Female' }
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ describe '#enum_keys_i18n' do
83
+ subject { User.genders_i18n }
84
+
85
+ context 'lang is zh-CN' do
86
+ before { I18n.locale = :"zh-CN" }
87
+
88
+ it { expect(I18n.locale).to eq :"zh-CN" }
89
+ it { is_expected.to eq({"male"=>"男", "female"=>"女"}) }
90
+ end
91
+
92
+ context 'lang is en' do
93
+ before { I18n.locale = :en }
94
+
95
+ it { expect(I18n.locale).to eq :en }
96
+ it { is_expected.to eq({"male"=>"Male", "female"=>"Female"}) }
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,16 @@
1
+ en:
2
+ activerecord:
3
+ models:
4
+ user: "User"
5
+ attributes:
6
+ user:
7
+ id: "ID"
8
+ gender: "Gender"
9
+ enums:
10
+ user:
11
+ gender:
12
+ male: "Male"
13
+ female: "Female"
14
+ status:
15
+ normal: "Normal"
16
+ disable: "Disable"
@@ -0,0 +1,16 @@
1
+ zh-CN:
2
+ activerecord:
3
+ models:
4
+ user: "用户"
5
+ attributes:
6
+ user:
7
+ id: "ID"
8
+ gender: "性别"
9
+ enums:
10
+ user:
11
+ gender:
12
+ male: "男"
13
+ female: "女"
14
+ status:
15
+ normal: "正常"
16
+ disable: "禁用"
@@ -0,0 +1,15 @@
1
+ require "bundler/setup"
2
+
3
+ require "rspec"
4
+
5
+ require "rails"
6
+ require "active_record"
7
+
8
+ Bundler.require
9
+
10
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
11
+
12
+ I18n.load_path += Dir["#{File.dirname(__FILE__)}/fixtures/locales/*.yml"]
13
+ I18n.enforce_available_locales = false
14
+
15
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
@@ -0,0 +1,17 @@
1
+ ActiveRecord::Base.configurations = { "test"=> {"adapter"=>"sqlite3", "database"=>":memory:"} }
2
+ ActiveRecord::Base.establish_connection :test
3
+
4
+ version = "#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}"
5
+ class CreateAllTables < ActiveRecord::Migration[version]
6
+ def change
7
+ create_table :users do |t|
8
+ t.integer :gender, null: false, default: 0, limit: 1
9
+ t.integer :status, null: false, default: 0, limit: 1
10
+
11
+ t.timestamps
12
+ end
13
+ end
14
+ end
15
+
16
+ ActiveRecord::Migration.verbose = false
17
+ CreateAllTables.new.change
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enum_help
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.16
4
+ version: 0.0.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lester Zhao
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-03 00:00:00.000000000 Z
11
+ date: 2022-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.5'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.5'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
14
+ name: activesupport
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - ">="
32
18
  - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
19
+ version: 3.0.0
20
+ type: :runtime
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - ">="
39
25
  - !ruby/object:Gem::Version
40
- version: '0'
26
+ version: 3.0.0
41
27
  description: " Help ActiveRecord::Enum feature to work fine with I18n and simple_form.
42
28
  \ "
43
29
  email:
@@ -46,7 +32,9 @@ executables: []
46
32
  extensions: []
47
33
  extra_rdoc_files: []
48
34
  files:
35
+ - ".github/workflows/ci.yml"
49
36
  - ".gitignore"
37
+ - ".rspec"
50
38
  - Gemfile
51
39
  - LICENSE.txt
52
40
  - README.md
@@ -57,11 +45,16 @@ files:
57
45
  - lib/enum_help/railtie.rb
58
46
  - lib/enum_help/simple_form.rb
59
47
  - lib/enum_help/version.rb
60
- homepage: ''
48
+ - spec/enum_i18n_help_spec.rb
49
+ - spec/fixtures/locales/en.yml
50
+ - spec/fixtures/locales/zh-CN.yml
51
+ - spec/spec_helper.rb
52
+ - spec/support/setup_database.rb
53
+ homepage: https://github.com/zmbacker/enum_help
61
54
  licenses:
62
55
  - MIT
63
56
  metadata: {}
64
- post_install_message:
57
+ post_install_message:
65
58
  rdoc_options: []
66
59
  require_paths:
67
60
  - lib
@@ -76,9 +69,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
76
69
  - !ruby/object:Gem::Version
77
70
  version: '0'
78
71
  requirements: []
79
- rubyforge_project:
80
- rubygems_version: 2.2.2
81
- signing_key:
72
+ rubygems_version: 3.1.6
73
+ signing_key:
82
74
  specification_version: 4
83
75
  summary: Extends of ActiveRecord::Enum, which can used in simple_form and internationalization
84
- test_files: []
76
+ test_files:
77
+ - spec/enum_i18n_help_spec.rb
78
+ - spec/fixtures/locales/en.yml
79
+ - spec/fixtures/locales/zh-CN.yml
80
+ - spec/spec_helper.rb
81
+ - spec/support/setup_database.rb