ng_word 0.1.0 → 0.2.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: b0a2b392753e735250209d1c7f72beb7a76bb8ec0c66dfaa3225e7e1e2bae0bc
4
- data.tar.gz: 0402e29327e647d1f676cec0aa41499304c99f9872e023933d712feca484837e
3
+ metadata.gz: 76a4a48f1db69953deb1234d5fa2a2a3f8808e04eb1e556527502fcbd4e57ba3
4
+ data.tar.gz: 6507a13384276aa2bfe178b82cbdc57c45446e25ddaf3c0a5ecf8d7473506787
5
5
  SHA512:
6
- metadata.gz: e517d878be9d7ac30093263ea32207fa1715835be111908e1a071f4509b138bef95b4d3e239720e3bcd6b797f86f564578f08e9f279cab8a3cceb6b6a9fa1e29
7
- data.tar.gz: 7ebb7744daf9e861f4cee1c05cd4d0fe34ee96cc9711ba5a4576441be7940472c48b8fb5ddb89d4506cb31ebe9de8bb5c587cfb3db2b245fab5ea605c27366a3
6
+ metadata.gz: de03cfd062eda421483e7501fcf1fa39cfad60a2cf969db0d5ac26842c7d0af77543a751328ad0d0db26afab1fe0e90a626b55ace30236237317dd54fb964b8a
7
+ data.tar.gz: 6fcc439a877ce8cf99bee925de7e013391c4bd235f1f89d21d2359eb1d7413ad084b5042c1bbfe11cc60cda57f66ea6c9c5eb7cba60923df5a88167852404740
@@ -0,0 +1,21 @@
1
+ name: Release gem
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ rubygems-otp-code:
7
+ description: RubyGems OTP code
8
+ required: true
9
+
10
+ permissions:
11
+ contents: write
12
+
13
+ jobs:
14
+ release-gem:
15
+ uses: taka0125/rubygems_release_workflow/.github/workflows/release.yml@v1
16
+ with:
17
+ rubygems-otp-code: ${{ github.event.inputs.rubygems-otp-code }}
18
+ user-email: taka0125@gmail.com
19
+ user-name: Takahiro Ooishi
20
+ secrets:
21
+ RUBYGEMS_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
@@ -0,0 +1,31 @@
1
+ name: Ruby
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+
8
+ pull_request:
9
+ branches:
10
+ - main
11
+
12
+ jobs:
13
+ test:
14
+ runs-on: ubuntu-latest
15
+
16
+ strategy:
17
+ matrix:
18
+ ruby:
19
+ - '3.1'
20
+ - '3.2'
21
+ - '3.3'
22
+
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+
26
+ - uses: ruby/setup-ruby@v1
27
+ with:
28
+ ruby-version: ${{ matrix.ruby }}
29
+ bundler-cache: true
30
+
31
+ - run: bundle exec rspec
data/Makefile ADDED
@@ -0,0 +1,28 @@
1
+ DOCKER_COMPOSE = docker compose
2
+
3
+ help:
4
+ @grep "^[a-zA-Z][a-zA-Z0-9\-\/\_]*:" -o Makefile | grep -v "grep" | sed -e 's/^/make /' | sed -e 's/://'
5
+ build:
6
+ $(DOCKER_COMPOSE) build
7
+ up:
8
+ $(DOCKER_COMPOSE) up -d
9
+ down:
10
+ $(DOCKER_COMPOSE) stop
11
+ restart:
12
+ $(MAKE) down
13
+ $(MAKE) up
14
+ ps:
15
+ $(DOCKER_COMPOSE) ps
16
+ convert:
17
+ $(DOCKER_COMPOSE) convert
18
+ bundle/install: up
19
+ $(DOCKER_COMPOSE) exec ruby bash -c 'bundle install'
20
+ ruby/bash: up
21
+ $(DOCKER_COMPOSE) exec ruby bash
22
+ ruby/rspec: up
23
+ $(DOCKER_COMPOSE) exec ruby bash -c 'bundle exec rspec'
24
+ gem/release:
25
+ @read -p "Enter OTP code: " otp_code; \
26
+ gh workflow run release.yml -f rubygems-otp-code="$$otp_code"
27
+ console: up
28
+ $(DOCKER_COMPOSE) exec ruby bash -c './bin/console'
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # NgWord
2
2
 
3
+ [![Latest Version](https://img.shields.io/gem/v/ng_word.svg)](https://rubygems.org/gems/ng_word)
4
+ [![Build Status](https://github.com/taka0125/ng_word/workflows/Ruby/badge.svg)](https://github.com/taka0125/ng_word/actions)
5
+
3
6
  Verify NG words.
4
7
 
5
8
  ## Installation
@@ -38,10 +41,6 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
38
41
 
39
42
  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).
40
43
 
41
- ## Code Status
42
-
43
- [![CircleCI](https://circleci.com/gh/taka0125/ng_word/tree/master.svg?style=svg)](https://circleci.com/gh/taka0125/ng_word/tree/master)
44
-
45
44
  ## Contributing
46
45
 
47
46
  Bug reports and pull requests are welcome on GitHub at https://github.com/taka0125/ng_word.
data/compose.yaml ADDED
@@ -0,0 +1,15 @@
1
+ services:
2
+ ruby:
3
+ image: ruby:3.3
4
+ command: sleep infinity
5
+ working_dir: /app
6
+ volumes:
7
+ - .:/app:cached
8
+ - bundle:/bundle
9
+ environment:
10
+ - HISTFILE=/app/.bash_history
11
+ - BUNDLE_PATH=/bundle
12
+ - BUNDLE_JOBS=4
13
+
14
+ volumes:
15
+ bundle:
@@ -3,24 +3,20 @@ module NgWord
3
3
  def initialize(downcased_ng_word, exclude_word)
4
4
  @downcased_ng_word = downcased_ng_word
5
5
  @exclude_word = exclude_word
6
+ @downcased_exclude_word = exclude_word.downcase
7
+
8
+ @index = @downcased_exclude_word.index(@downcased_ng_word)
9
+ @length = @downcased_exclude_word.length
10
+
11
+ freeze
6
12
  end
7
13
 
8
14
  def match?(downcased_text, matched_index)
9
- downcased_text.slice(matched_index - index, length) == @downcased_exclude_word
15
+ downcased_text.slice(matched_index - index, length) == downcased_exclude_word
10
16
  end
11
17
 
12
18
  private
13
19
 
14
- def downcased_exclude_word
15
- @downcased_exclude_word ||= @exclude_word.downcase
16
- end
17
-
18
- def index
19
- @index ||= downcased_exclude_word.index(@downcased_ng_word)
20
- end
21
-
22
- def length
23
- @length ||= downcased_exclude_word.length
24
- end
20
+ attr_reader :downcased_ng_word, :exclude_word, :downcased_exclude_word, :index, :length
25
21
  end
26
22
  end
data/lib/ng_word/rule.rb CHANGED
@@ -5,6 +5,11 @@ module NgWord
5
5
  def initialize(ng_word, exclude_words: [])
6
6
  @ng_word = ng_word
7
7
  @exclude_words = exclude_words
8
+
9
+ @downcased_ng_word = @ng_word.downcase
10
+ @exclude_word_rules = Array(@exclude_words).map { |w| ExcludeWordRule.new(@downcased_ng_word, w) }
11
+
12
+ freeze
8
13
  end
9
14
 
10
15
  def verify(downcased_text, offset: 0)
@@ -15,7 +20,7 @@ module NgWord
15
20
  return verify(downcased_text, offset: index + 1) if rule.match?(downcased_text, index)
16
21
  end
17
22
 
18
- VerificationResult.new(false, ng_word: @ng_word)
23
+ VerificationResult.new(false, ng_word: ng_word)
19
24
  end
20
25
 
21
26
  def masked_text(text, replace_text: '***', for_monitoring: false)
@@ -33,7 +38,7 @@ module NgWord
33
38
  end
34
39
  words << text.slice(current_index, text.length - current_index)
35
40
 
36
- replaced_text = for_monitoring ? "#{replace_text}(#{@ng_word})" : replace_text
41
+ replaced_text = for_monitoring ? "#{replace_text}(#{ng_word})" : replace_text
37
42
  words.join(replaced_text)
38
43
  end
39
44
 
@@ -44,13 +49,7 @@ module NgWord
44
49
 
45
50
  private
46
51
 
47
- def downcased_ng_word
48
- @downcased_ng_word ||= @ng_word.downcase
49
- end
50
-
51
- def exclude_word_rules
52
- @exclude_word_rules ||= Array(@exclude_words).map { |w| ExcludeWordRule.new(downcased_ng_word, w) }
53
- end
52
+ attr_reader :downcased_ng_word
54
53
 
55
54
  def split(downcased_text, offset: 0, index_list: [])
56
55
  index = downcased_text.index(downcased_ng_word, offset)
@@ -6,19 +6,20 @@ module NgWord
6
6
  @rules[rule.ng_word.downcase] = rule
7
7
  end
8
8
 
9
- @ng_words = @rules.keys
10
9
  @regexp = Regexp.union(@rules.keys.map { |s| /#{s}/i })
10
+
11
+ freeze
11
12
  end
12
13
 
13
14
  def verify(text)
14
15
  return VerificationResult.new(true) if text.blank?
15
16
 
16
- candidate_ng_words = text.scan(@regexp)
17
+ candidate_ng_words = text.scan(regexp)
17
18
  return VerificationResult.new(true) if candidate_ng_words.blank?
18
19
 
19
20
  downcased_text = text.downcase
20
21
  candidate_ng_words.each do |ng_word|
21
- rule = @rules[ng_word.downcase]
22
+ rule = rules[ng_word.downcase]
22
23
  next if rule.blank?
23
24
 
24
25
  return VerificationResult.new(false, ng_word: rule.ng_word) if rule.match?(downcased_text)
@@ -30,11 +31,11 @@ module NgWord
30
31
  def masked_text(text, replace_text: '***', for_monitoring: false)
31
32
  return text if text.blank?
32
33
 
33
- candidate_ng_words = text.scan(@regexp)
34
+ candidate_ng_words = text.scan(regexp)
34
35
  return text if candidate_ng_words.blank?
35
36
 
36
37
  candidate_ng_words.each do |ng_word|
37
- rule = @rules[ng_word.downcase]
38
+ rule = rules[ng_word.downcase]
38
39
  next if rule.blank?
39
40
 
40
41
  text = rule.masked_text(text, replace_text: replace_text, for_monitoring: for_monitoring)
@@ -47,5 +48,9 @@ module NgWord
47
48
  result = verify(text)
48
49
  !result.valid?
49
50
  end
51
+
52
+ private
53
+
54
+ attr_reader :rules, :regexp
50
55
  end
51
56
  end
@@ -5,10 +5,16 @@ module NgWord
5
5
  def initialize(is_valid, ng_word: nil)
6
6
  @is_valid = is_valid
7
7
  @ng_word = ng_word
8
+
9
+ freeze
8
10
  end
9
11
 
10
12
  def valid?
11
- @is_valid
13
+ is_valid
12
14
  end
15
+
16
+ private
17
+
18
+ attr_reader :is_valid
13
19
  end
14
20
  end
@@ -1,3 +1,3 @@
1
1
  module NgWord
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/ng_word.gemspec CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.require_paths = ["lib"]
24
24
 
25
25
  spec.add_dependency "activesupport"
26
- spec.add_development_dependency "bundler", "~> 1.16"
27
- spec.add_development_dependency "rake", "~> 10.0"
28
- spec.add_development_dependency "rspec", "~> 3.0"
26
+ spec.add_development_dependency "bundler"
27
+ spec.add_development_dependency "rake"
28
+ spec.add_development_dependency "rspec"
29
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ng_word
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takahiro Ooishi
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-27 00:00:00.000000000 Z
11
+ date: 2025-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -28,44 +28,44 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.16'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.16'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '3.0'
61
+ version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '3.0'
68
+ version: '0'
69
69
  description: Verify NG words.
70
70
  email:
71
71
  - taka0125@gmail.com
@@ -73,17 +73,18 @@ executables: []
73
73
  extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
- - ".circleci/config.yml"
76
+ - ".github/workflows/release.yml"
77
+ - ".github/workflows/ruby.yml"
77
78
  - ".gitignore"
78
79
  - ".rspec"
79
- - ".travis.yml"
80
80
  - Gemfile
81
81
  - LICENSE
82
+ - Makefile
82
83
  - README.md
83
84
  - Rakefile
84
- - aaa
85
85
  - bin/console
86
86
  - bin/setup
87
+ - compose.yaml
87
88
  - lib/ng_word.rb
88
89
  - lib/ng_word/exclude_word_rule.rb
89
90
  - lib/ng_word/rule.rb
@@ -94,7 +95,7 @@ files:
94
95
  homepage: https://github.com/taka0125/ng_word
95
96
  licenses: []
96
97
  metadata: {}
97
- post_install_message:
98
+ post_install_message:
98
99
  rdoc_options: []
99
100
  require_paths:
100
101
  - lib
@@ -109,9 +110,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
110
  - !ruby/object:Gem::Version
110
111
  version: '0'
111
112
  requirements: []
112
- rubyforge_project:
113
- rubygems_version: 2.7.6
114
- signing_key:
113
+ rubygems_version: 3.4.19
114
+ signing_key:
115
115
  specification_version: 4
116
116
  summary: Verify NG words.
117
117
  test_files: []
data/.circleci/config.yml DELETED
@@ -1,30 +0,0 @@
1
- version: 2
2
-
3
- jobs:
4
- build: &build
5
- docker:
6
- - image: circleci/ruby:latest
7
- steps:
8
- - checkout
9
- - run:
10
- name: Install gems
11
- command: bundle install
12
- - run:
13
- name: RSpec
14
- command: rspec
15
- ruby-2.4:
16
- <<: *build
17
- docker:
18
- - image: circleci/ruby:2.4
19
-
20
- ruby-2.5:
21
- <<: *build
22
- docker:
23
- - image: circleci/ruby:2.5
24
-
25
- workflows:
26
- version: 2
27
- build-multiple-rubies:
28
- jobs:
29
- - ruby-2.4
30
- - ruby-2.5
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- sudo: false
3
- language: ruby
4
- cache: bundler
5
- rvm:
6
- - 2.5.1
7
- before_install: gem install bundler -v 1.16.4
data/aaa DELETED
File without changes