gir_ffi 0.16.0 → 0.17.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: bfd3130c297141938f61b59a4e4be4ec2e76832cf38341533f18a5598ac6cd30
4
- data.tar.gz: 2e94de2c70d365baa1fc1fd506e5cadbaf5d3b9aaa36dbde69e7813f742ce357
3
+ metadata.gz: 5d9166ab1e26f13ddc3aa9c5695fb67d4530491f56c01d1e78ad7648f5ea8583
4
+ data.tar.gz: 5a2e96556fcd892f0cd143c51a21df6c18475950a166c90a994b38a33777281e
5
5
  SHA512:
6
- metadata.gz: 94de6fa54920e6c878d271f57c9c737aa5b6ca6025fe5d1d395e26e146208e8dafb9c43dc679984dcaa4216d373f658f25e8cdd676f96724cd7d8cbf7aae6012
7
- data.tar.gz: d4f06ba95a49d8ad6476cda459dc93d3630533b9dc48f1fc48917c86d7124965700771a71084925f5382836352fe9b203536c0df686fb2a554530fb27e203cbb
6
+ metadata.gz: f9252568631fc6355af2ee913e73fd363ccf04714c9702d93c6fc26119180046f4345232c66d47a93dcc872024f6a855a1d268b3eff23b49f18fd136d9ef5ef4
7
+ data.tar.gz: e289ed1d545a09f5bb2d67a91101fd6cd7510a1a69e721f07f85fd82a352f4922316a3cf92b67a57216e8e203ec5f3232d60e7634e4c9509e6a65819f42a0dcb
data/Changelog.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.17.0 / 2023-12-31
4
+
5
+ * Support Ruby 3.0 and up, dropping support for Ruby 2.7 ([#356] by [mvz])
6
+
7
+ [#356]: https://github.com/mvz/gir_ffi/pull/356
8
+
9
+ ## 0.16.1 / 2023-10-07
10
+
11
+ * Support Ruby 3.2 ([#331] by [mvz])
12
+ * Require at least ffi 1.16.3 to avoid 'Can't modify frozen Hash' error ([#350]
13
+ by [mvz])
14
+
15
+ [mvz]: https://github.com/mvz
16
+
17
+ [#331]: https://github.com/mvz/gir_ffi/pull/331
18
+ [#350]: https://github.com/mvz/gir_ffi/pull/350
19
+
3
20
  ## 0.16.0 / 2022-05-21
4
21
 
5
22
  * Support Ruby 3.1
data/README.md CHANGED
@@ -23,35 +23,41 @@ Ruby bindings for GNOME using the GObject Introspection Repository.
23
23
 
24
24
  ## Usage
25
25
 
26
- require 'gir_ffi'
26
+ ```ruby
27
+ require 'gir_ffi'
27
28
 
28
- # Set up the namespace you wish to use
29
- GirFFI.setup :Gio
29
+ # Set up the namespace you wish to use
30
+ GirFFI.setup :Gio
30
31
 
31
- # Create an object
32
- inet_address = Gio::InetAddress.new_from_string "127.0.0.1"
32
+ # Create an object
33
+ inet_address = Gio::InetAddress.new_from_string "127.0.0.1"
33
34
 
34
- # Call some methods on the object
35
- inet_address.is_loopback # => true
36
- inet_address.is_multicast # => false
35
+ # Call some methods on the object
36
+ inet_address.is_loopback # => true
37
+ inet_address.is_multicast # => false
37
38
 
38
- # Call a function in the namespace
39
- Gio.dbus_is_name "foo" # => false
39
+ # Call a function in the namespace
40
+ Gio.dbus_is_name "foo" # => false
41
+ ```
40
42
 
41
43
  See the [documentation](docs/Documentation.md) for more usage information.
42
44
 
43
45
  ## Examples
44
46
 
45
47
  Have a look in the `examples/` directory for some simple examples. More
46
- examples can be found in `gir_ffi-gtk` and `gir_ffi-gst`.
48
+ examples can be found in the repositories for
49
+ [`gir_ffi-gtk`](https://github.com/mvz/gir_ffi-gtk) and
50
+ [`gir_ffi-gst`](https://github.com/mvz/gir_ffi-gst/).
47
51
 
48
52
  ## Install
49
53
 
50
- gem install gir_ffi
54
+ ```bash
55
+ gem install gir_ffi
56
+ ```
51
57
 
52
58
  ## Requirements
53
59
 
54
- GirFFI is supported on CRuby 2.6, 2.7, 3.0 and 3.1.
60
+ GirFFI is supported on CRuby 2.7, 3.0 and 3.1.
55
61
 
56
62
  You will also need gobject-introspection installed with some
57
63
  introspection data.
@@ -104,7 +110,7 @@ The following people have contributed to GirFFI over the years:
104
110
 
105
111
  ## License
106
112
 
107
- Copyright © 2009–2021 [Matijs van Zuijlen](http://www.matijs.net)
113
+ Copyright © 2009–2022 [Matijs van Zuijlen](http://www.matijs.net)
108
114
 
109
115
  GirFFI is free software, distributed under the terms of the GNU Lesser
110
116
  General Public License, version 2.1 or later. See the file COPYING.LIB for
@@ -52,7 +52,7 @@ module GLib
52
52
  Lib.g_array_get_element_size self
53
53
  end
54
54
 
55
- alias element_size get_element_size
55
+ alias_method :element_size, :get_element_size
56
56
 
57
57
  def ==(other)
58
58
  to_a == other.to_a
@@ -58,8 +58,8 @@ module GLib
58
58
  current_loop.quit
59
59
  end
60
60
 
61
- alias run_without_thread_enabler run
62
- alias run run_with_thread_enabler
61
+ alias_method :run_without_thread_enabler, :run
62
+ alias_method :run, :run_with_thread_enabler
63
63
  end
64
64
  end
65
65
 
@@ -11,8 +11,8 @@ module GLib
11
11
  get_string_without_override.first
12
12
  end
13
13
 
14
- alias get_string_without_override get_string
15
- alias get_string get_string_with_override
14
+ alias_method :get_string_without_override, :get_string
15
+ alias_method :get_string, :get_string_with_override
16
16
 
17
17
  # Initializing method used in constructors. For Variant the constructing
18
18
  # functions all return floating references, so this is need to take full
@@ -11,9 +11,9 @@ module GObject
11
11
  [:size_t, :uint32, :pointer, :pointer],
12
12
  :pointer)
13
13
 
14
- def self.new_with_properties(*args, &block)
14
+ def self.new_with_properties(...)
15
15
  obj = allocate
16
- obj.__send__ :initialize_with_properties, *args, &block
16
+ obj.__send__(:initialize_with_properties, ...)
17
17
  obj
18
18
  end
19
19
 
@@ -33,17 +33,17 @@ module GObject
33
33
  store_pointer ptr
34
34
  end
35
35
 
36
- alias old_initialze initialize
37
- alias initialize initialize_with_properties
36
+ alias_method :old_initialze, :initialize
37
+ alias_method :initialize, :initialize_with_properties
38
38
  remove_method :old_initialze
39
39
 
40
- def self.new(*args, &block)
40
+ def self.new(...)
41
41
  obj = allocate
42
- obj.__send__ :initialize, *args, &block
42
+ obj.__send__(:initialize, ...)
43
43
  obj
44
44
  end
45
45
 
46
- alias base_initialize initialize
46
+ alias_method :base_initialize, :initialize
47
47
 
48
48
  private :base_initialize
49
49
 
@@ -82,7 +82,7 @@ module GObject
82
82
  setup_instance_method! "get_property"
83
83
  setup_instance_method! "set_property"
84
84
  setup_instance_method! "is_floating"
85
- alias floating? is_floating
85
+ alias_method :floating?, :is_floating
86
86
 
87
87
  private
88
88
 
@@ -81,7 +81,7 @@ module GObject
81
81
  send set_method, val
82
82
  end
83
83
 
84
- alias value= set_value
84
+ alias_method :value=, :set_value
85
85
 
86
86
  def current_gtype
87
87
  struct[:g_type]
@@ -16,6 +16,6 @@ module GObjectIntrospection
16
16
  Lib.g_registered_type_info_get_g_type self
17
17
  end
18
18
 
19
- alias gtype g_type
19
+ alias_method :gtype, :g_type
20
20
  end
21
21
  end
@@ -258,7 +258,7 @@ module GObjectIntrospection
258
258
 
259
259
  # Union type representing an argument value
260
260
  class GIArgument < FFI::Union
261
- signed_size_t = "int#{FFI.type_size(:size_t) * 8}".to_sym
261
+ signed_size_t = :"int#{FFI.type_size(:size_t) * 8}"
262
262
 
263
263
  layout :v_boolean, :int,
264
264
  :v_int8, :int8,
@@ -32,7 +32,7 @@ module GirFFI
32
32
  when Module
33
33
  value_ffi_type.get_value_from_pointer(pointer, 0)
34
34
  when Symbol
35
- pointer.send("get_#{value_ffi_type}", 0)
35
+ pointer.send(:"get_#{value_ffi_type}", 0)
36
36
  else
37
37
  raise NotImplementedError
38
38
  end
@@ -172,7 +172,7 @@ module GirFFI
172
172
  end
173
173
 
174
174
  def has_ingoing_component?
175
- (direction == :inout || direction == :in)
175
+ direction == :inout || direction == :in
176
176
  end
177
177
 
178
178
  def array_length_assignment
@@ -28,7 +28,7 @@ module GirFFI
28
28
  # Methods used by MethodTemplate
29
29
 
30
30
  def invocation
31
- "#{lib_name}.#{@info.symbol} #{function_call_arguments.join(', ')}".strip
31
+ "#{lib_name}.#{@info.symbol} #{function_call_arguments.join(", ")}".strip
32
32
  end
33
33
 
34
34
  def method_arguments
@@ -45,7 +45,7 @@ module GirFFI
45
45
  end
46
46
 
47
47
  def invocation
48
- "obj.__send__ #{initializer_name.to_sym.inspect}, #{method_arguments.join(', ')}"
48
+ "obj.__send__ #{initializer_name.to_sym.inspect}, #{method_arguments.join(", ")}"
49
49
  end
50
50
 
51
51
  def result
@@ -18,7 +18,7 @@ module GirFFI
18
18
 
19
19
  def result
20
20
  if argument_builder_collection.has_return_values?
21
- ["return #{argument_builder_collection.return_value_names.join(', ')}"]
21
+ ["return #{argument_builder_collection.return_value_names.join(", ")}"]
22
22
  else
23
23
  []
24
24
  end
@@ -39,7 +39,7 @@ module GirFFI
39
39
  if param_names.size == 1
40
40
  ["#{param_names.first} = param_values.first.get_value_plain"]
41
41
  else
42
- ["#{param_names.join(', ')} = param_values.map(&:get_value_plain)"]
42
+ ["#{param_names.join(", ")} = param_values.map(&:get_value_plain)"]
43
43
  end
44
44
  end
45
45
 
@@ -19,7 +19,7 @@ module GirFFI
19
19
 
20
20
  def method_definition
21
21
  code = +"def #{qualified_method_name}"
22
- code << "(#{method_arguments.join(', ')})" if method_arguments.any?
22
+ code << "(#{method_arguments.join(", ")})" if method_arguments.any?
23
23
  method_lines.each { |line| code << "\n #{line}" }
24
24
  code << "\nend\n"
25
25
  end
@@ -27,7 +27,7 @@ module GirFFI
27
27
  private
28
28
 
29
29
  def qualified_method_name
30
- "#{@builder.singleton_method? ? 'self.' : ''}#{@builder.method_name}"
30
+ "#{@builder.singleton_method? ? "self." : ""}#{@builder.method_name}"
31
31
  end
32
32
 
33
33
  def method_arguments
@@ -23,7 +23,7 @@ module GirFFI
23
23
  when Module
24
24
  args = [value_exp, ptr_exp]
25
25
  args << offset unless offset == 0
26
- "#{ffi_type_spec}.copy_value_to_pointer(#{args.join(', ')})"
26
+ "#{ffi_type_spec}.copy_value_to_pointer(#{args.join(", ")})"
27
27
  when Symbol
28
28
  "#{ptr_exp}.put_#{ffi_type_spec} #{offset}, #{value_exp}"
29
29
  end
@@ -128,7 +128,7 @@ module GirFFI
128
128
 
129
129
  def property_setter_func
130
130
  setter = proc do |object, _property_id, value, pspec|
131
- object.send("#{pspec.accessor_name}=", value.get_value)
131
+ object.send(:"#{pspec.accessor_name}=", value.get_value)
132
132
  end
133
133
  GObject::ObjectSetPropertyFunc.from setter
134
134
  end
@@ -4,6 +4,25 @@ module GirFFI
4
4
  module FFIExt
5
5
  # Extensions to FFI::Pointer
6
6
  module Pointer
7
+ def self.prepended(base)
8
+ base.class_eval do
9
+ size_t_getter =
10
+ case (size = FFI.type_size(:size_t))
11
+ when 4
12
+ :get_uint32
13
+ when 8
14
+ :get_uint64
15
+ else
16
+ raise NotImplementedError,
17
+ "Don't know how to handle size_t types of size #{size}"
18
+ end
19
+
20
+ alias_method :get_size_t, size_t_getter
21
+
22
+ alias_method :get_gtype, :get_size_t
23
+ end
24
+ end
25
+
7
26
  def to_ptr
8
27
  self
9
28
  end
@@ -23,16 +42,7 @@ module GirFFI
23
42
  end
24
43
  end
25
44
 
26
- FFI::Pointer.prepend GirFFI::FFIExt::Pointer
27
-
28
- FFI::Pointer.class_eval do
29
- size_t_getter = case FFI.type_size(:size_t)
30
- when 4
31
- :get_uint32
32
- when 8
33
- :get_uint64
34
- end
35
-
36
- alias_method :get_size_t, size_t_getter
37
- alias_method :get_gtype, :get_size_t
45
+ # @api private
46
+ class FFI::Pointer # rubocop:disable Style/ClassAndModuleChildren
47
+ prepend GirFFI::FFIExt::Pointer
38
48
  end
@@ -57,7 +57,7 @@ module GirFFI
57
57
  ffi_type = TypeMap.type_specification_to_ffi_type type
58
58
  FFI::MemoryPointer.new(ffi_type).tap do |block|
59
59
  block.autorelease = false
60
- block.send "put_#{ffi_type}", 0, value
60
+ block.send :"put_#{ffi_type}", 0, value
61
61
  end
62
62
  end
63
63
 
@@ -137,7 +137,7 @@ module GirFFI
137
137
  type_size = FFI.type_size(ffi_type)
138
138
  FFI::MemoryPointer.new(type_size * (ary.length + 1)).tap do |block|
139
139
  block.autorelease = false
140
- block.send "put_array_of_#{ffi_type}", 0, ary
140
+ block.send :"put_array_of_#{ffi_type}", 0, ary
141
141
  end
142
142
  end
143
143
  end
@@ -20,7 +20,7 @@ module GirFFI
20
20
 
21
21
  def find_instance_method(method)
22
22
  info = find_method method
23
- return info if info&.method?
23
+ info if info&.method?
24
24
  end
25
25
 
26
26
  def find_method(_method)
@@ -10,7 +10,7 @@ module GirFFI
10
10
 
11
11
  def method_stub
12
12
  <<~STUB
13
- def #{@info.method? ? '' : 'self.'}#{@info.safe_name} *args, &block
13
+ def #{@info.method? ? "" : "self."}#{@info.safe_name} *args, &block
14
14
  setup_and_call "#{@info.name}", args, &block
15
15
  end
16
16
  STUB
@@ -7,11 +7,11 @@ module GirFFI
7
7
  module ModuleBase
8
8
  include MethodSetup
9
9
 
10
- def method_missing(method, *arguments, &block)
10
+ def method_missing(method, ...)
11
11
  result = setup_method method.to_s
12
12
  return super unless result
13
13
 
14
- send method, *arguments, &block
14
+ send(method, ...)
15
15
  end
16
16
 
17
17
  def respond_to_missing?(method, *)
@@ -7,7 +7,7 @@ module GirFFI
7
7
  # Maps GObject type tags and type specification to types FFI can handle.
8
8
  module TypeMap
9
9
  sz = FFI.type_size(:size_t) * 8
10
- gsize_type = "uint#{sz}".to_sym
10
+ gsize_type = :"uint#{sz}"
11
11
 
12
12
  TAG_TYPE_MAP = {
13
13
  enum: :int32,
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Current GirFFI version
4
4
  module GirFFI
5
- VERSION = "0.16.0"
5
+ VERSION = "0.17.0"
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gir_ffi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.0
4
+ version: 0.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matijs van Zuijlen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-21 00:00:00.000000000 Z
11
+ date: 2023-12-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -16,14 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.8'
19
+ version: '1.16'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.16.3
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: '1.8'
29
+ version: '1.16'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.16.3
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: ffi-bit_masks
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -148,70 +154,70 @@ dependencies:
148
154
  requirements:
149
155
  - - "~>"
150
156
  - !ruby/object:Gem::Version
151
- version: '1.25'
157
+ version: '1.59'
152
158
  type: :development
153
159
  prerelease: false
154
160
  version_requirements: !ruby/object:Gem::Requirement
155
161
  requirements:
156
162
  - - "~>"
157
163
  - !ruby/object:Gem::Version
158
- version: '1.25'
164
+ version: '1.59'
159
165
  - !ruby/object:Gem::Dependency
160
166
  name: rubocop-minitest
161
167
  requirement: !ruby/object:Gem::Requirement
162
168
  requirements:
163
169
  - - "~>"
164
170
  - !ruby/object:Gem::Version
165
- version: 0.19.0
171
+ version: 0.34.1
166
172
  type: :development
167
173
  prerelease: false
168
174
  version_requirements: !ruby/object:Gem::Requirement
169
175
  requirements:
170
176
  - - "~>"
171
177
  - !ruby/object:Gem::Version
172
- version: 0.19.0
178
+ version: 0.34.1
173
179
  - !ruby/object:Gem::Dependency
174
180
  name: rubocop-packaging
175
181
  requirement: !ruby/object:Gem::Requirement
176
182
  requirements:
177
183
  - - "~>"
178
184
  - !ruby/object:Gem::Version
179
- version: 0.5.0
185
+ version: 0.5.2
180
186
  type: :development
181
187
  prerelease: false
182
188
  version_requirements: !ruby/object:Gem::Requirement
183
189
  requirements:
184
190
  - - "~>"
185
191
  - !ruby/object:Gem::Version
186
- version: 0.5.0
192
+ version: 0.5.2
187
193
  - !ruby/object:Gem::Dependency
188
194
  name: rubocop-performance
189
195
  requirement: !ruby/object:Gem::Requirement
190
196
  requirements:
191
197
  - - "~>"
192
198
  - !ruby/object:Gem::Version
193
- version: '1.13'
199
+ version: '1.20'
194
200
  type: :development
195
201
  prerelease: false
196
202
  version_requirements: !ruby/object:Gem::Requirement
197
203
  requirements:
198
204
  - - "~>"
199
205
  - !ruby/object:Gem::Version
200
- version: '1.13'
206
+ version: '1.20'
201
207
  - !ruby/object:Gem::Dependency
202
208
  name: simplecov
203
209
  requirement: !ruby/object:Gem::Requirement
204
210
  requirements:
205
211
  - - "~>"
206
212
  - !ruby/object:Gem::Version
207
- version: 0.21.0
213
+ version: 0.22.0
208
214
  type: :development
209
215
  prerelease: false
210
216
  version_requirements: !ruby/object:Gem::Requirement
211
217
  requirements:
212
218
  - - "~>"
213
219
  - !ruby/object:Gem::Version
214
- version: 0.21.0
220
+ version: 0.22.0
215
221
  description: |
216
222
  GirFFI creates bindings for GObject-based libraries at runtime based on introspection
217
223
  data provided by the GObject Introspection Repository (GIR) system. Bindings are created
@@ -427,14 +433,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
427
433
  requirements:
428
434
  - - ">="
429
435
  - !ruby/object:Gem::Version
430
- version: 2.7.0
436
+ version: 3.0.0
431
437
  required_rubygems_version: !ruby/object:Gem::Requirement
432
438
  requirements:
433
439
  - - ">="
434
440
  - !ruby/object:Gem::Version
435
441
  version: '0'
436
442
  requirements: []
437
- rubygems_version: 3.3.7
443
+ rubygems_version: 3.5.3
438
444
  signing_key:
439
445
  specification_version: 4
440
446
  summary: FFI-based GObject binding using the GObject Introspection Repository