whatlang 0.1.8 → 0.2.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: 69c49c403761528be76daea679fbf38b5c7fbf2f508a819d9bef3e5b6bf14b48
4
- data.tar.gz: 748275ab31ce880de74a32c92ebd680f3b05af4303cf29e3985cfb774076d0e9
3
+ metadata.gz: e5b245173c946709df258efa77b2e253d062ecd79087cde657919f488d3f08b8
4
+ data.tar.gz: ec4cd29f02a29bfd44c66b31ee8cd5e2aec9b5be6db126897dbf7214ccb7ad73
5
5
  SHA512:
6
- metadata.gz: 8c7acef11c2721c3ea347f4c64d199114c22ebd3258cef88acbb8cd81633d9ec1a0843f8fa3543c667b1c416ffa22631a71fe0e0ddbb5b7803a7bc0d581f729d
7
- data.tar.gz: 381ad3386f4bae91ed497e1a49f5bf60df9346457f775f0fe7f6df335cb05d2b5ca5123a30f4e2fcae518c81d2a0e9da12aa1c69841b3a192b3349909d96e618
6
+ metadata.gz: e13e54ad577c1949673739ab8a02dab3405dd19f7ac3602d47232cf5f746576be8c0d23de36efc02ac1837e8bbaeb41a21fff9a7eecf6170bf0a6b782fbb246f
7
+ data.tar.gz: 89832e91d3b3be94a019416f95627c5fe8e46981a0066a85a0b3a758bae333a72572dba8a31197ef3665c0ec8fe61a5b601792beb18367c306ad17f07c6ac37c
data/.gitignore CHANGED
@@ -7,5 +7,6 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  Gemfile.lock
10
- /lib/whatlang-rb/whatlang_rb.bundle
11
- /whatlang-rb/
10
+ /lib/whatlang.bundle
11
+ /whatlang.bundle
12
+ /ext/target/
data/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
1
+ 0.2.0
2
+ =====
3
+
4
+ * Implement all lib code in Rust
5
+ * Add rb-sys/stable-api-compiled-fallback for some environment
6
+ * Implement `Whatlang::Lang.all`
7
+
8
+ 0.1.9
9
+ =====
10
+
11
+ * Fix install problem
12
+ * Update Whatlang version to 0.18.0, which includes Welsh support
13
+
1
14
  0.1.8
2
15
  =====
3
16
 
data/Gemfile CHANGED
@@ -4,5 +4,3 @@ source "https://rubygems.org"
4
4
 
5
5
  # Specify your gem's dependencies in whatlang.gemspec
6
6
  gemspec
7
-
8
- gem "fiddle", "~> 1.1"
data/README.md CHANGED
@@ -64,6 +64,20 @@ Usage
64
64
  Whatlang.detect(text, allowlist: list).lang.code # => "ita"
65
65
  Whatlang.detect(text, denylist: list).lang.code # => "epo"
66
66
 
67
+ If you need available languages, use `Whatlang::Lang.all`:
68
+
69
+ puts Whatlang::Lang.all.collect {|lang| "#{lang.code}: #{lang.eng_name}"}
70
+ # epo: Esperanto
71
+ # eng: English
72
+ # rus: Russian
73
+ # cmn: Mandarin
74
+ # spa: Spanish
75
+ # por: Portuguese
76
+ # :
77
+ # :
78
+
79
+ Use `Whatlang::Lang#code` for allow and deny list.
80
+
67
81
  If you're interested in only language information, use `detect_lang` function:
68
82
 
69
83
  lang = Whatlang.detect_lang(text)
data/Rakefile CHANGED
@@ -1,23 +1,40 @@
1
- # frozen_string_literal: true
2
-
3
1
  require "rake/clean"
4
2
  require "rubygems/ext"
5
3
  require "rubygems/tasks"
6
4
  require "rake/testtask"
7
5
  require "yard"
6
+ require "shellwords"
8
7
 
9
8
  task default: :test
10
9
 
11
- Gem::Tasks.new
12
- YARD::Rake::YardocTask.new
10
+ GEMSPEC = Gem::Specification.load("whatlang.gemspec")
11
+ MANIFEST = GEMSPEC.extensions.first
12
+
13
+ CARGO_LOCK = "ext/Cargo.lock"
14
+ file CARGO_LOCK => MANIFEST do |t|
15
+ pkgid = `cargo pkgid --manifest-path=#{t.source.shellescape}`.chomp
16
+ system "cargo", "update", "--manifest-path", t.source, pkgid, exception: true
17
+ end
13
18
 
14
- EXTENSION = "lib/whatlang-rb/whatlang_rb.#{RbConfig::CONFIG["DLEXT"]}"
15
- file EXTENSION do
19
+ SO_NAME = "#{GEMSPEC.name}.#{RbConfig::CONFIG["DLEXT"]}"
20
+ SO_PATH = File.join("lib", SO_NAME)
21
+ SRC = FileList["ext/src/**/*.rs"]
22
+ file SO_PATH => [CARGO_LOCK] + SRC do
16
23
  results = Rake.verbose == true ? $stdout : []
17
- Gem::Ext::CargoBuilder.new.build "ext/whatlang-rb/Cargo.toml", ".", results, [], "lib", File.expand_path("ext/whatlang-rb")
24
+ Gem::Ext::CargoBuilder.new.build MANIFEST, ".", results, [], "lib", File.expand_path("ext")
18
25
  end
19
- CLEAN.include "whatlang-rb"
20
- CLOBBER.include EXTENSION
26
+ CLEAN.include SO_NAME
27
+ CLOBBER.include SO_PATH
28
+
29
+ Gem::Tasks.new
30
+ task build: CARGO_LOCK
31
+ CLOBBER.include("pkg/#{GEMSPEC.file_name}")
21
32
 
22
33
  Rake::TestTask.new
23
- task test: EXTENSION
34
+ task test: SO_PATH
35
+
36
+ YARD::Rake::YardocTask.new
37
+ desc "Generate Ruby and Rust documentation"
38
+ task doc: :yard do
39
+ system "cargo", "doc", "--manifest-path", MANIFEST, exception: true
40
+ end
@@ -2,18 +2,6 @@
2
2
  # It is not intended for manual editing.
3
3
  version = 4
4
4
 
5
- [[package]]
6
- name = "ahash"
7
- version = "0.8.12"
8
- source = "registry+https://github.com/rust-lang/crates.io-index"
9
- checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
10
- dependencies = [
11
- "cfg-if",
12
- "once_cell",
13
- "version_check",
14
- "zerocopy",
15
- ]
16
-
17
5
  [[package]]
18
6
  name = "aho-corasick"
19
7
  version = "1.1.3"
@@ -87,6 +75,18 @@ version = "1.15.0"
87
75
  source = "registry+https://github.com/rust-lang/crates.io-index"
88
76
  checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
89
77
 
78
+ [[package]]
79
+ name = "equivalent"
80
+ version = "1.0.2"
81
+ source = "registry+https://github.com/rust-lang/crates.io-index"
82
+ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
83
+
84
+ [[package]]
85
+ name = "foldhash"
86
+ version = "0.1.5"
87
+ source = "registry+https://github.com/rust-lang/crates.io-index"
88
+ checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
89
+
90
90
  [[package]]
91
91
  name = "glob"
92
92
  version = "0.3.3"
@@ -95,12 +95,13 @@ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
95
95
 
96
96
  [[package]]
97
97
  name = "hashbrown"
98
- version = "0.14.5"
98
+ version = "0.15.5"
99
99
  source = "registry+https://github.com/rust-lang/crates.io-index"
100
- checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
100
+ checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
101
101
  dependencies = [
102
- "ahash",
103
102
  "allocator-api2",
103
+ "equivalent",
104
+ "foldhash",
104
105
  ]
105
106
 
106
107
  [[package]]
@@ -185,12 +186,6 @@ dependencies = [
185
186
  "minimal-lexical",
186
187
  ]
187
188
 
188
- [[package]]
189
- name = "once_cell"
190
- version = "1.21.3"
191
- source = "registry+https://github.com/rust-lang/crates.io-index"
192
- checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
193
-
194
189
  [[package]]
195
190
  name = "proc-macro2"
196
191
  version = "1.0.101"
@@ -309,28 +304,22 @@ version = "1.0.20"
309
304
  source = "registry+https://github.com/rust-lang/crates.io-index"
310
305
  checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06"
311
306
 
312
- [[package]]
313
- name = "version_check"
314
- version = "0.9.5"
315
- source = "registry+https://github.com/rust-lang/crates.io-index"
316
- checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
317
-
318
307
  [[package]]
319
308
  name = "whatlang"
320
- version = "0.16.4"
321
- source = "registry+https://github.com/rust-lang/crates.io-index"
322
- checksum = "471d1c1645d361eb782a1650b1786a8fb58dd625e681a04c09f5ff7c8764a7b0"
309
+ version = "0.2.0"
323
310
  dependencies = [
324
- "hashbrown",
325
- "once_cell",
311
+ "magnus",
312
+ "rb-sys",
313
+ "whatlang 0.18.0",
326
314
  ]
327
315
 
328
316
  [[package]]
329
- name = "whatlang-rb"
330
- version = "0.1.7"
317
+ name = "whatlang"
318
+ version = "0.18.0"
319
+ source = "registry+https://github.com/rust-lang/crates.io-index"
320
+ checksum = "f5e8f38b596e2a359b755342473520a99421e43658548c79489ee221b728c107"
331
321
  dependencies = [
332
- "magnus",
333
- "whatlang",
322
+ "hashbrown",
334
323
  ]
335
324
 
336
325
  [[package]]
@@ -338,23 +327,3 @@ name = "windows-link"
338
327
  version = "0.2.1"
339
328
  source = "registry+https://github.com/rust-lang/crates.io-index"
340
329
  checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
341
-
342
- [[package]]
343
- name = "zerocopy"
344
- version = "0.8.27"
345
- source = "registry+https://github.com/rust-lang/crates.io-index"
346
- checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
347
- dependencies = [
348
- "zerocopy-derive",
349
- ]
350
-
351
- [[package]]
352
- name = "zerocopy-derive"
353
- version = "0.8.27"
354
- source = "registry+https://github.com/rust-lang/crates.io-index"
355
- checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
356
- dependencies = [
357
- "proc-macro2",
358
- "quote",
359
- "syn",
360
- ]
data/ext/Cargo.toml ADDED
@@ -0,0 +1,14 @@
1
+ [package]
2
+ name = "whatlang"
3
+ version = "0.2.0"
4
+ authors = ["Kitaiti Makoto <KitaitiMakoto@gmail.com>"]
5
+ edition = "2024"
6
+ publish = false
7
+
8
+ [dependencies]
9
+ magnus = "0.8"
10
+ whatlang-rs = { package = "whatlang", version = "0.18.0", registry = "crates-io" }
11
+ rb-sys = { version = "*", features = ["stable-api-compiled-fallback"] }
12
+
13
+ [lib]
14
+ crate-type = ["cdylib"]
@@ -1,14 +1,19 @@
1
1
  use magnus::{
2
- Error, Ruby, Value, function, method,
2
+ Error, RArray, Ruby, Value, function, method,
3
3
  prelude::*,
4
4
  scan_args::{get_kwargs, scan_args},
5
5
  };
6
- use whatlang as wl;
6
+ use whatlang_rs as wl;
7
7
 
8
8
  #[magnus::wrap(class = "Whatlang::Lang")]
9
9
  struct Lang(wl::Lang);
10
10
 
11
11
  impl Lang {
12
+ fn all(ruby: &Ruby) -> RArray {
13
+ let langs = wl::Lang::all();
14
+ ruby.ary_from_iter(langs.iter().map(|&lang| Lang(lang)))
15
+ }
16
+
12
17
  fn code(&self) -> &str {
13
18
  self.0.code()
14
19
  }
@@ -75,17 +80,21 @@ fn detect_without_options(text: String) -> Option<Info> {
75
80
  }
76
81
 
77
82
  fn detect_with_allowlist(text: String, allowlist: Vec<String>) -> Option<Info> {
78
- wl::Detector::with_allowlist(allowlist.iter().filter_map(wl::Lang::from_code).collect())
83
+ wl::Detector::with_allowlist(lang_list(allowlist))
79
84
  .detect(&text)
80
85
  .map(Info)
81
86
  }
82
87
 
83
88
  fn detect_with_denylist(text: String, denylist: Vec<String>) -> Option<Info> {
84
- wl::Detector::with_denylist(denylist.iter().filter_map(wl::Lang::from_code).collect())
89
+ wl::Detector::with_denylist(lang_list(denylist))
85
90
  .detect(&text)
86
91
  .map(Info)
87
92
  }
88
93
 
94
+ fn lang_list(list: Vec<String>) -> Vec<wl::Lang> {
95
+ list.iter().filter_map(wl::Lang::from_code).collect()
96
+ }
97
+
89
98
  fn detect_lang(text: String) -> Option<Lang> {
90
99
  wl::detect_lang(&text).map(Lang)
91
100
  }
@@ -108,6 +117,7 @@ fn init(ruby: &Ruby) -> Result<(), Error> {
108
117
  module.define_singleton_method("detect_script", function!(detect_script, 1))?;
109
118
 
110
119
  let lang = module.define_class("Lang", ruby.class_object())?;
120
+ lang.define_singleton_method("all", function!(Lang::all, 0))?;
111
121
  lang.define_method("code", method!(Lang::code, 0))?;
112
122
  lang.define_method("name", method!(Lang::name, 0))?;
113
123
  lang.define_method("eng_name", method!(Lang::eng_name, 0))?;
data/test/test_package.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "test/unit"
2
+ require "test/unit/notify"
2
3
  require 'tempfile'
3
4
  require 'tmpdir'
4
5
  require 'shellwords'
@@ -32,7 +33,7 @@ class TestPackage < Test::Unit::TestCase
32
33
  private
33
34
 
34
35
  def assert_installed(dir, version)
35
- assert_path_exist File.join(dir, "gems/whatlang-#{version}/lib/whatlang-rb", "whatlang_rb.#{RbConfig::CONFIG["DLEXT"]}")
36
+ assert_path_exist File.join(dir, "gems/whatlang-#{version}/lib", "whatlang.#{RbConfig::CONFIG["DLEXT"]}")
36
37
  end
37
38
  end
38
39
  end
@@ -1,6 +1,6 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "helper"
1
+ require "test/unit"
2
+ require "test/unit/notify"
3
+ require "whatlang"
4
4
 
5
5
  class TestWhatlang < Test::Unit::TestCase
6
6
  def test_detect
@@ -62,4 +62,10 @@ class TestWhatlang < Test::Unit::TestCase
62
62
  def test_numeric
63
63
  assert_nil Whatlang.detect(1234)
64
64
  end
65
+
66
+ def test_lang_all
67
+ all_langs = Whatlang::Lang.all
68
+ assert_equal 70, all_langs.length
69
+ assert_all(all_langs) {|lang| lang.instance_of? Whatlang::Lang}
70
+ end
65
71
  end
data/whatlang.gemspec CHANGED
@@ -2,7 +2,7 @@ require "json"
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "whatlang"
5
- spec.version = JSON.parse(`cargo metadata --no-deps --format-version=1 --manifest-path=ext/whatlang-rb/Cargo.toml`)["packages"][0]["version"]
5
+ spec.version = JSON.parse(`cargo metadata --no-deps --format-version=1 --manifest-path=ext/Cargo.toml`)["packages"][0]["version"]
6
6
  spec.license = "Ruby"
7
7
  spec.authors = ["Kitaiti Makoto"]
8
8
  spec.email = ["KitaitiMakoto@gmail.com"]
@@ -18,10 +18,12 @@ Gem::Specification.new do |spec|
18
18
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
19
19
  `git ls-files -z`.split("\x0")
20
20
  end
21
- spec.extensions = ["ext/whatlang-rb/Cargo.toml"]
21
+ spec.extensions = ["ext/Cargo.toml"]
22
22
 
23
23
  spec.add_development_dependency "test-unit"
24
+ spec.add_development_dependency "test-unit-notify"
24
25
  spec.add_development_dependency "rake"
25
26
  spec.add_development_dependency "yard"
26
27
  spec.add_development_dependency "rubygems-tasks"
28
+ spec.add_development_dependency "terminal-notifier"
27
29
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whatlang
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kitaiti Makoto
@@ -23,6 +23,20 @@ dependencies:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
25
  version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: test-unit-notify
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
26
40
  - !ruby/object:Gem::Dependency
27
41
  name: rake
28
42
  requirement: !ruby/object:Gem::Requirement
@@ -65,12 +79,26 @@ dependencies:
65
79
  - - ">="
66
80
  - !ruby/object:Gem::Version
67
81
  version: '0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: terminal-notifier
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
68
96
  description: Ruby bindings for Whatlang, a natural language detection for Rust.
69
97
  email:
70
98
  - KitaitiMakoto@gmail.com
71
99
  executables: []
72
100
  extensions:
73
- - ext/whatlang-rb/Cargo.toml
101
+ - ext/Cargo.toml
74
102
  extra_rdoc_files: []
75
103
  files:
76
104
  - ".gitignore"
@@ -82,11 +110,9 @@ files:
82
110
  - Gemfile
83
111
  - README.md
84
112
  - Rakefile
85
- - ext/whatlang-rb/Cargo.lock
86
- - ext/whatlang-rb/Cargo.toml
87
- - ext/whatlang-rb/src/lib.rs
88
- - lib/whatlang.rb
89
- - test/helper.rb
113
+ - ext/Cargo.lock
114
+ - ext/Cargo.toml
115
+ - ext/src/lib.rs
90
116
  - test/test_package.rb
91
117
  - test/test_whatlang.rb
92
118
  - whatlang.gemspec
@@ -1,12 +0,0 @@
1
- [package]
2
- name = "whatlang-rb"
3
- version = "0.1.8"
4
- authors = ["Kitaiti Makoto <KitaitiMakoto@gmail.com>"]
5
- edition = "2024"
6
-
7
- [dependencies]
8
- magnus = "0.8"
9
- whatlang = "0.16.4"
10
-
11
- [lib]
12
- crate-type = ["cdylib"]
data/lib/whatlang.rb DELETED
@@ -1 +0,0 @@
1
- require "whatlang-rb/whatlang_rb"
data/test/helper.rb DELETED
@@ -1,2 +0,0 @@
1
- require "test/unit"
2
- require "whatlang"