idna 0.1.0 → 1.1.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
- SHA1:
3
- metadata.gz: a86fa25e9289266e5d9957a883e65b360843ab50
4
- data.tar.gz: 1c009cdcadd22ce01e267090607daba2d6f63f10
2
+ SHA256:
3
+ metadata.gz: 722a8d9bdf8bb0e45b7e12c7b3e8bdcedf6a051a66712f009e534569e5eaa9c7
4
+ data.tar.gz: '08cb5e72935927c5a88057a8f61c07652e77f169b7d5ad09eb1a9d73e7b81e1b'
5
5
  SHA512:
6
- metadata.gz: '07318ee9ac99a91d5b7a115f3277dab82f1b9afcd573cf7bc2c6ec27ef8813339c64d306663b25e119b82f16684285ca0ef61f64b971105efde2479998219b4e'
7
- data.tar.gz: '0785722a65c129de6dfebd412259ad18d428e92f317a33f93eae7e35177a0da845574d779fefd7de01ae7f3805af58a9083a1bec6289321d5fb9f905fb44a60a'
6
+ metadata.gz: d6072346c275344fadf16141aaa90731743d009eaf2ea7ead5094be41e2e8937afcfffdc6e938874a03f97ebb59e928c16c0b3f11b763a8eb91d7c492549669b
7
+ data.tar.gz: 596f8915f73f2780d29938d54e7a418f95091fa4ef473bebe526c72ea013dba29ddf55aa956ea1629af3ff291e5318ee2356d9bbbc256445fc902cb9fac11c57
@@ -0,0 +1,32 @@
1
+ name: Ruby
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ - feature/libidn2
8
+
9
+ pull_request:
10
+ branches:
11
+ - master
12
+ - feature/libidn2
13
+
14
+ jobs:
15
+ build:
16
+ runs-on: ubuntu-latest
17
+ strategy:
18
+ matrix:
19
+ ruby: ['3.2']
20
+
21
+ steps:
22
+ - uses: actions/checkout@v3
23
+ - name: Set up Ruby ${{ matrix.ruby }}
24
+ uses: ruby/setup-ruby@v1
25
+ with:
26
+ ruby-version: ${{ matrix.ruby }}
27
+ - name: Install dependencies
28
+ run: |
29
+ bundle install
30
+ sudo apt-get -yqq install libidn2-0-dev
31
+ - name: Run tests
32
+ run: bundle exec rspec
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.2.0
data/CHANGELOG.md ADDED
@@ -0,0 +1,19 @@
1
+ # Change Log
2
+
3
+ ## v1.1.0 (2022-01-16)
4
+
5
+ - Ensured compatibility with Ruby v3.2.0.
6
+
7
+ ## v1.0.1 (2021-07-12)
8
+
9
+ - Made compatible with Ruby v3.
10
+
11
+ ## v1.0.0 (2020-10-15)
12
+
13
+ - Now uses [libidn2](https://www.gnu.org/software/libidn/#libidn2).
14
+ - The gem main API is identical, but custom exception classes differ from V1 since the V2 library's error codes have changed. The old classes are maintained via backwards compatibility mappings. You can keep using the V1 exception classes, but ought to update code for the V2 exceptions if you can. See the [C definitions](https://gitlab.com/libidn/libidn2/-/blob/master/lib/idn2.h.in) for details, or look in `lib/idna/error.rb`.
15
+ - Local development uses Ruby 2.4.10 (was 2.4.1).
16
+
17
+ ## v0.1.0 (2017-09-24)
18
+
19
+ - First release.
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
- # Idna
1
+ # IDNA
2
2
 
3
- The [IDN Library](http://www.gnu.org/software/libidn/manual/libidn.html) to use by the [Ruby-FFI](https://github.com/ffi/ffi).
3
+ [Ruby FFI](https://github.com/ffi/ffi) bindings for the [libidn2](https://www.gnu.org/software/libidn/#libidn2) library, providing some simple methods to handle internationalised domain names backed by the GNU library's complete IDNA2008 / TR46 implementation.
4
+
5
+ The gem is tested with "latest at last test run" patch versions of Ruby 3.2. It is *believed* to work on Ruby 2.4 or later, but this is no longer automatically tested.
4
6
 
5
7
  ## Installation
6
8
 
@@ -22,17 +24,19 @@ Or install it yourself as:
22
24
  $ gem install idna
23
25
  ```
24
26
 
27
+ You will need to install [libidn2](https://www.gnu.org/software/libidn/#libidn2) separately, if it is not already installed on your system. For example, macOS users with [Homebrew](https://brew.sh) can run `brew install libidn2`.
28
+
25
29
  ## Usage
26
30
 
27
31
  ### Transform
28
32
 
29
- * Attach function to `idna_to_ascii_8z`:
33
+ * Attach function to `idn2_to_ascii_8z`:
30
34
 
31
35
  ```
32
36
  Idna.to_ascii('あいうえお') #xn--l8jegik
33
37
  ```
34
38
 
35
- * Attach function to `idna_to_unicode_8z8z`:
39
+ * Attach function to `idn2_to_unicode_8z8z`:
36
40
 
37
41
  ```
38
42
  Idna.to_unicode('xn--l8jegik') #あいうえお
@@ -40,11 +44,11 @@ Idna.to_unicode('xn--l8jegik') #あいうえお
40
44
 
41
45
  ### Configure
42
46
 
43
- * Custome libidn name:
47
+ * Custom `libidn2` name:
44
48
 
45
49
  ```
46
50
  Idna.configure do |config|
47
- config.ffi_lib = 'idn.so.11'
51
+ config.ffi_lib = 'idn2.so.11'
48
52
  end
49
53
 
50
54
  Idna.reload!
data/idna.gemspec CHANGED
@@ -6,11 +6,11 @@ require "idna/version"
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "idna"
8
8
  spec.version = Idna::VERSION
9
- spec.authors = ["ogom"]
10
- spec.email = ["ogom@outlook.com"]
9
+ spec.authors = ["ogom", "RIP Global"]
10
+ spec.email = ["ogom@outlook.com", "dev@ripglobal.com"]
11
11
 
12
- spec.summary = %q{The IDN Library to use by the Ruby-FFI.}
13
- spec.description = %q{The IDN Library to use by the Ruby-FFI.}
12
+ spec.summary = %q{Ruby FFI bindings for Libidn2.}
13
+ spec.description = %q{Ruby FFI bindings for Libidn2.}
14
14
  spec.homepage = "https://github.com/ogom/ruby-idna"
15
15
  spec.license = "MIT"
16
16
 
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  spec.add_dependency "ffi"
25
25
 
26
- spec.add_development_dependency "bundler", "~> 1.15"
27
- spec.add_development_dependency "rake", "~> 10.0"
28
- spec.add_development_dependency "rspec", "~> 3.0"
26
+ spec.add_development_dependency "bundler", "~> 2.1"
27
+ spec.add_development_dependency "rake", "~> 13.0"
28
+ spec.add_development_dependency "rspec", "~> 3.12"
29
29
  end
data/lib/idna/client.rb CHANGED
@@ -2,13 +2,28 @@ require 'ffi'
2
2
 
3
3
  module Idna
4
4
  class Client
5
+
6
+ # Simple domain matching regexps, validating basic structure:
7
+ #
8
+ # * 1-63 ASCII alphanumeric characters, dots, or hyphens, followed by a
9
+ # TLD specifier consisting of a dot, then 1 or more of any alphabetic
10
+ # ASCII characters - for full domains (e.g. "subdomain.example.com").
11
+ #
12
+ # * As above, but for single domain parts only (e.g. "example") and not
13
+ # intended for TLDs such as ".com" (character match is too permissive).
14
+ #
15
+ # Convert Unicode domains to ASCII before using these. See also #valid?.
16
+ #
17
+ ASCII_DOMAIN_FULL_REGEXP = /^[A-Za-z0-9\-\.]{1,63}?\.[A-Za-z]+$/
18
+ ASCII_DOMAIN_LIGHT_REGEXP = /^[A-Za-z0-9\-]{1,63}?$/
19
+
5
20
  extend FFI::Library
6
21
  class << self
7
22
  def lib_load!
8
23
  ffi_lib Idna::Configure.ffi_lib
9
24
 
10
- attach_function :idna_to_ascii_8z, %i[string pointer int], :int
11
- attach_function :idna_to_unicode_8z8z, %i[string pointer int], :int
25
+ attach_function :idn2_to_ascii_8z, %i[string pointer int], :int
26
+ attach_function :idn2_to_unicode_8z8z, %i[string pointer int], :int
12
27
  end
13
28
  end
14
29
 
@@ -17,7 +32,7 @@ module Idna
17
32
  return string if skip_useless && string.ascii_only?
18
33
 
19
34
  pointer = FFI::MemoryPointer.new :pointer
20
- int = idna_to_ascii_8z(string, pointer, 0x0001)
35
+ int = idn2_to_ascii_8z(string, pointer, 0x0001)
21
36
  Idna::Error.handling(int) unless int == 0
22
37
  result = pointer.read_pointer.read_string
23
38
  pointer.free
@@ -30,12 +45,49 @@ module Idna
30
45
  return string if skip_useless && !string.ascii_only?
31
46
 
32
47
  pointer = FFI::MemoryPointer.new :pointer
33
- int = idna_to_unicode_8z8z(string, pointer, 0x0001)
48
+ int = idn2_to_unicode_8z8z(string, pointer, 0x0001)
34
49
  Idna::Error.handling(int) unless int == 0
35
50
  result = pointer.read_pointer.read_string
36
51
  pointer.free
37
52
 
38
53
  result.force_encoding('UTF-8')
39
54
  end
55
+
56
+ # Perform simple validation of the given domain, converting to ASCII first.
57
+ # Returns +true+ if the basic structure looks valid, else +false+. Does not
58
+ # check to see if e.g. a given TLD is actually a currently defined, allowed
59
+ # value such as ".com" rather than ".asdfghjk"; it just makes sure the
60
+ # character ranges used are permitted.
61
+ #
62
+ # +string+:: Domain - Unicode or ASCII.
63
+ #
64
+ # Options are:
65
+ #
66
+ # +components+:: Incorporates multiple components (e.g. "example.com" or
67
+ # "subdomain.example.com"), in which case the last domain
68
+ # (in both of these examples, that's ".com") must follow
69
+ # TLD rules and use alphabetic characters only. Default is
70
+ # +false+.
71
+ #
72
+ def valid?(string, components: false)
73
+ return false unless string
74
+
75
+ # Force conversion to/from UTF-8 (whether or not already in UTF-8 or just
76
+ # ASCII) to check validity for those operations, then process the ASCII
77
+ # result through an appropriate regular expression.
78
+
79
+ string = to_unicode(string, skip_useless: false)
80
+ string = to_ascii(string, skip_useless: false)
81
+ regexp = components ? ASCII_DOMAIN_FULL_REGEXP : ASCII_DOMAIN_LIGHT_REGEXP
82
+
83
+ return string.match?(regexp)
84
+
85
+ # Although some error conditions might not indicate a lack of valid input,
86
+ # e.g. "out of memory", most do; this 'rescue' just keeps it simple.
87
+ #
88
+ rescue Idna::Error
89
+ return false
90
+
91
+ end
40
92
  end
41
93
  end
data/lib/idna/default.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Idna
2
2
  module Default
3
- FFI_LIB = 'idn'.freeze
3
+ FFI_LIB = 'idn2'.freeze
4
4
 
5
5
  class << self
6
6
  def ffi_lib
data/lib/idna/error.rb CHANGED
@@ -1,19 +1,43 @@
1
1
  module Idna
2
+
3
+ # Source:
4
+ #
5
+ # https://gitlab.com/libidn/libidn2/-/blob/master/lib/idn2.h.in#L227
6
+ #
2
7
  class Error < StandardError
3
8
  class << self
4
9
  def handling(int)
5
10
  klass = case int
6
- when 1 then Idna::Error::IDNA_STRINGPREP_ERROR
7
- when 2 then Idna::Error::IDNA_PUNYCODE_ERROR
8
- when 3 then Idna::Error::IDNA_CONTAINS_NON_LDH
9
- when 4 then Idna::Error::IDNA_CONTAINS_MINUS
10
- when 5 then Idna::Error::IDNA_INVALID_LENGTH
11
- when 6 then Idna::Error::IDNA_NO_ACE_PREFIX
12
- when 7 then Idna::Error::IDNA_ROUNDTRIP_VERIFY_ERROR
13
- when 8 then Idna::Error::IDNA_CONTAINS_ACE_PREFIX
14
- when 9 then Idna::Error::IDNA_ICONV_ERROR
15
- when 201 then Idna::Error::IDNA_MALLOC_ERROR
16
- when 202 then Idna::Error::IDNA_DLOPEN_ERROR
11
+ when 0 then Idna::Error::IDN2_OK
12
+ when -100 then Idna::Error::IDN2_MALLOC
13
+ when -101 then Idna::Error::IDN2_NO_CODESET
14
+ when -102 then Idna::Error::IDN2_ICONV_FAIL
15
+ when -200 then Idna::Error::IDN2_ENCODING_ERROR
16
+ when -201 then Idna::Error::IDN2_NFC
17
+ when -202 then Idna::Error::IDN2_PUNYCODE_BAD_INPUT
18
+ when -203 then Idna::Error::IDN2_PUNYCODE_BIG_OUTPUT
19
+ when -204 then Idna::Error::IDN2_PUNYCODE_OVERFLOW
20
+ when -205 then Idna::Error::IDN2_TOO_BIG_DOMAIN
21
+ when -206 then Idna::Error::IDN2_TOO_BIG_LABEL
22
+ when -207 then Idna::Error::IDN2_INVALID_ALABEL
23
+ when -208 then Idna::Error::IDN2_UALABEL_MISMATCH
24
+ when -209 then Idna::Error::IDN2_INVALID_FLAGS
25
+ when -300 then Idna::Error::IDN2_NOT_NFC
26
+ when -301 then Idna::Error::IDN2_2HYPHEN
27
+ when -302 then Idna::Error::IDN2_HYPHEN_STARTEND
28
+ when -303 then Idna::Error::IDN2_LEADING_COMBINING
29
+ when -304 then Idna::Error::IDN2_DISALLOWED
30
+ when -305 then Idna::Error::IDN2_CONTEXTJ
31
+ when -306 then Idna::Error::IDN2_CONTEXTJ_NO_RULE
32
+ when -307 then Idna::Error::IDN2_CONTEXTO
33
+ when -308 then Idna::Error::IDN2_CONTEXTO_NO_RULE
34
+ when -309 then Idna::Error::IDN2_UNASSIGNED
35
+ when -310 then Idna::Error::IDN2_BIDI
36
+ when -311 then Idna::Error::IDN2_DOT_IN_LABEL
37
+ when -312 then Idna::Error::IDN2_INVALID_TRANSITIONAL
38
+ when -313 then Idna::Error::IDN2_INVALID_NONTRANSITIONAL
39
+ when -314 then Idna::Error::IDN2_ALABEL_ROUNDTRIP_FAILED
40
+ else Idna::Error::UNKNOWN
17
41
  end
18
42
  raise klass.new message(int)
19
43
  end
@@ -22,31 +46,94 @@ module Idna
22
46
 
23
47
  def message(int)
24
48
  case int
25
- when 1 then 'Error during string preparation.'
26
- when 2 then 'Error during punycode operation.'
27
- when 3 then 'For IDNA_USE_STD3_ASCII_RULES, indicate that the string contains non-LDH ASCII characters.'
28
- when 4 then 'For IDNA_USE_STD3_ASCII_RULES, indicate that the string contains a leading or trailing hyphen-minus (U+002D).'
29
- when 5 then 'The final output string is not within the (inclusive) range 1 to 63 characters.'
30
- when 6 then 'The string does not contain the ACE prefix (for ToUnicode).'
31
- when 7 then 'The ToASCII operation on output string does not equal the input.'
32
- when 8 then 'The input contains the ACE prefix (for ToASCII).'
33
- when 9 then 'Could not convert string in locale encoding.'
34
- when 201 then 'Could not allocate buffer (this is typically a fatal error).'
35
- when 202 then 'Could not dlopen the libcidn DSO (only used internally in libc).'
49
+ when 0 then 'OK'
50
+ when -100 then 'Memory allocation error.'
51
+ when -101 then 'Could not determine locale string encoding format.'
52
+ when -102 then 'Could not transcode locale string to UTF-8.'
53
+ when -200 then 'Unicode data encoding error.'
54
+ when -201 then 'Error normalizing string.'
55
+ when -202 then 'Punycode invalid input.'
56
+ when -203 then 'Punycode output buffer too small.'
57
+ when -204 then 'Punycode conversion would overflow.'
58
+ when -205 then 'Domain name longer than 255 characters.'
59
+ when -206 then 'Domain label longer than 63 characters.'
60
+ when -207 then 'Input A-label is not valid.'
61
+ when -208 then 'Input A-label and U-label does not match.'
62
+ when -209 then 'Invalid combination of flags.'
63
+ when -300 then 'String is not NFC.'
64
+ when -301 then 'String has forbidden two hyphens.'
65
+ when -302 then 'String has forbidden starting/ending hyphen.'
66
+ when -303 then 'String has forbidden leading combining character.'
67
+ when -304 then 'String has disallowed character.'
68
+ when -305 then 'String has forbidden context-j character.'
69
+ when -306 then 'String has context-j character with no rull.'
70
+ when -307 then 'String has forbidden context-o character.'
71
+ when -308 then 'String has context-o character with no rull.'
72
+ when -309 then 'String has forbidden unassigned character.'
73
+ when -310 then 'String has forbidden bi-directional properties.'
74
+ when -311 then 'Label has forbidden dot (TR46).'
75
+ when -312 then 'Label has character forbidden in transitional mode (TR46).'
76
+ when -313 then 'Label has character forbidden in non-transitional mode (TR46).'
77
+ when -314 then 'ALabel -> Ulabel -> ALabel result differs from input.'
78
+ else "Unrecognised Libidn2 error code '#{int}'."
36
79
  end
37
80
  end
38
81
  end
39
82
  end
40
83
 
41
- class Error::IDNA_STRINGPREP_ERROR < Idna::Error; end
42
- class Error::IDNA_PUNYCODE_ERROR < Idna::Error; end
43
- class Error::IDNA_CONTAINS_NON_LDH < Idna::Error; end
44
- class Error::IDNA_CONTAINS_MINUS < Idna::Error; end
45
- class Error::IDNA_INVALID_LENGTH < Idna::Error; end
46
- class Error::IDNA_NO_ACE_PREFIX < Idna::Error; end
47
- class Error::IDNA_ROUNDTRIP_VERIFY_ERROR < Idna::Error; end
48
- class Error::IDNA_CONTAINS_ACE_PREFIX < Idna::Error; end
49
- class Error::IDNA_ICONV_ERROR < Idna::Error; end
50
- class Error::IDNA_MALLOC_ERROR < Idna::Error; end
51
- class Error::IDNA_DLOPEN_ERROR < Idna::Error; end
84
+ class Error::IDN2_OK < Idna::Error; end
85
+ class Error::IDN2_MALLOC < Idna::Error; end
86
+ class Error::IDN2_NO_CODESET < Idna::Error; end
87
+ class Error::IDN2_ICONV_FAIL < Idna::Error; end
88
+ class Error::IDN2_ENCODING_ERROR < Idna::Error; end
89
+ class Error::IDN2_NFC < Idna::Error; end
90
+ class Error::IDN2_PUNYCODE_BAD_INPUT < Idna::Error; end
91
+ class Error::IDN2_PUNYCODE_BIG_OUTPUT < Idna::Error; end
92
+ class Error::IDN2_PUNYCODE_OVERFLOW < Idna::Error; end
93
+ class Error::IDN2_TOO_BIG_DOMAIN < Idna::Error; end
94
+ class Error::IDN2_TOO_BIG_LABEL < Idna::Error; end
95
+ class Error::IDN2_INVALID_ALABEL < Idna::Error; end
96
+ class Error::IDN2_UALABEL_MISMATCH < Idna::Error; end
97
+ class Error::IDN2_INVALID_FLAGS < Idna::Error; end
98
+ class Error::IDN2_NOT_NFC < Idna::Error; end
99
+ class Error::IDN2_2HYPHEN < Idna::Error; end
100
+ class Error::IDN2_HYPHEN_STARTEND < Idna::Error; end
101
+ class Error::IDN2_LEADING_COMBINING < Idna::Error; end
102
+ class Error::IDN2_DISALLOWED < Idna::Error; end
103
+ class Error::IDN2_CONTEXTJ < Idna::Error; end
104
+ class Error::IDN2_CONTEXTJ_NO_RULE < Idna::Error; end
105
+ class Error::IDN2_CONTEXTO < Idna::Error; end
106
+ class Error::IDN2_CONTEXTO_NO_RULE < Idna::Error; end
107
+ class Error::IDN2_UNASSIGNED < Idna::Error; end
108
+ class Error::IDN2_BIDI < Idna::Error; end
109
+ class Error::IDN2_DOT_IN_LABEL < Idna::Error; end
110
+ class Error::IDN2_INVALID_TRANSITIONAL < Idna::Error; end
111
+ class Error::IDN2_INVALID_NONTRANSITIONAL < Idna::Error; end
112
+ class Error::IDN2_ALABEL_ROUNDTRIP_FAILED < Idna::Error; end
113
+ class Error::UNKNOWN < Idna::Error; end
114
+
115
+ # V1 mappings, from:
116
+ #
117
+ # https://gitlab.com/libidn/libidn2/-/blob/master/lib/idn2.h.in#L340
118
+ #
119
+ # ...with some adjustments to match observed behaviour - e.g. "too long"
120
+ # should be "too big domain" or "too big input", but the above maps it to
121
+ # "string has disallowed character", which seems to be incorrect (a bug).
122
+ #
123
+ Error::IDNA_STRINGPREP_ERROR = Error::IDN2_ENCODING_ERROR
124
+ Error::IDNA_PUNYCODE_ERROR = Error::IDN2_PUNYCODE_BAD_INPUT
125
+ Error::IDNA_CONTAINS_NON_LDH = Error::IDN2_ENCODING_ERROR
126
+ Error::IDNA_CONTAINS_LDH = Error::IDNA_CONTAINS_NON_LDH
127
+ Error::IDNA_CONTAINS_MINUS = Error::IDN2_DISALLOWED
128
+ Error::IDNA_INVALID_LENGTH = Error::IDN2_TOO_BIG_LABEL
129
+ Error::IDNA_NO_ACE_PREFIX = Error::IDN2_ENCODING_ERROR
130
+ Error::IDNA_ROUNDTRIP_VERIFY_ERROR = Error::IDN2_ENCODING_ERROR
131
+ Error::IDNA_CONTAINS_ACE_PREFIX = Error::IDN2_ENCODING_ERROR
132
+ Error::IDNA_ICONV_ERROR = Error::IDN2_ENCODING_ERROR
133
+ Error::IDNA_MALLOC_ERROR = Error::IDN2_MALLOC
134
+
135
+ # Unmappable V1 error classes.
136
+ #
137
+ Error::IDNA_DLOPEN_ERROR = Error::UNKNOWN
138
+
52
139
  end
data/lib/idna/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Idna
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '1.1.0'.freeze
3
3
  end
data/lib/idna.rb CHANGED
@@ -26,9 +26,9 @@ module Idna
26
26
  true
27
27
  end
28
28
 
29
- def method_missing(method, *args, &block)
29
+ def method_missing(method, *args, **kwargs, &block)
30
30
  return super unless client.respond_to?(method)
31
- client.send(method, *args, &block)
31
+ client.send(method, *args, **kwargs, &block)
32
32
  end
33
33
  end
34
34
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: idna
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ogom
8
- autorequire:
8
+ - RIP Global
9
+ autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2017-09-24 00:00:00.000000000 Z
12
+ date: 2023-01-17 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: ffi
@@ -30,52 +31,55 @@ dependencies:
30
31
  requirements:
31
32
  - - "~>"
32
33
  - !ruby/object:Gem::Version
33
- version: '1.15'
34
+ version: '2.1'
34
35
  type: :development
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
39
  - - "~>"
39
40
  - !ruby/object:Gem::Version
40
- version: '1.15'
41
+ version: '2.1'
41
42
  - !ruby/object:Gem::Dependency
42
43
  name: rake
43
44
  requirement: !ruby/object:Gem::Requirement
44
45
  requirements:
45
46
  - - "~>"
46
47
  - !ruby/object:Gem::Version
47
- version: '10.0'
48
+ version: '13.0'
48
49
  type: :development
49
50
  prerelease: false
50
51
  version_requirements: !ruby/object:Gem::Requirement
51
52
  requirements:
52
53
  - - "~>"
53
54
  - !ruby/object:Gem::Version
54
- version: '10.0'
55
+ version: '13.0'
55
56
  - !ruby/object:Gem::Dependency
56
57
  name: rspec
57
58
  requirement: !ruby/object:Gem::Requirement
58
59
  requirements:
59
60
  - - "~>"
60
61
  - !ruby/object:Gem::Version
61
- version: '3.0'
62
+ version: '3.12'
62
63
  type: :development
63
64
  prerelease: false
64
65
  version_requirements: !ruby/object:Gem::Requirement
65
66
  requirements:
66
67
  - - "~>"
67
68
  - !ruby/object:Gem::Version
68
- version: '3.0'
69
- description: The IDN Library to use by the Ruby-FFI.
69
+ version: '3.12'
70
+ description: Ruby FFI bindings for Libidn2.
70
71
  email:
71
72
  - ogom@outlook.com
73
+ - dev@ripglobal.com
72
74
  executables: []
73
75
  extensions: []
74
76
  extra_rdoc_files: []
75
77
  files:
78
+ - ".github/workflows/main.yml"
76
79
  - ".gitignore"
77
80
  - ".rspec"
78
- - ".travis.yml"
81
+ - ".ruby-version"
82
+ - CHANGELOG.md
79
83
  - Gemfile
80
84
  - LICENSE.txt
81
85
  - README.md
@@ -93,7 +97,7 @@ homepage: https://github.com/ogom/ruby-idna
93
97
  licenses:
94
98
  - MIT
95
99
  metadata: {}
96
- post_install_message:
100
+ post_install_message:
97
101
  rdoc_options: []
98
102
  require_paths:
99
103
  - lib
@@ -108,9 +112,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
112
  - !ruby/object:Gem::Version
109
113
  version: '0'
110
114
  requirements: []
111
- rubyforge_project:
112
- rubygems_version: 2.6.13
113
- signing_key:
115
+ rubygems_version: 3.4.1
116
+ signing_key:
114
117
  specification_version: 4
115
- summary: The IDN Library to use by the Ruby-FFI.
118
+ summary: Ruby FFI bindings for Libidn2.
116
119
  test_files: []
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.4.1
5
- before_install: gem install bundler -v 1.15.4