ctypes 0.2.2 → 0.3.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: 681ea3aaaeb56bd02d7c33635bc451ffc13f4203212aa32985cc2050dc1a9b9b
4
- data.tar.gz: 69fb286a98327386d140a8beed6ec7154d34058b4170c1e0897f1ff04d94272a
3
+ metadata.gz: 163f197297a77c54a29ed79cc49fbbd808d1b257db4b0390e6f79b8abeb69333
4
+ data.tar.gz: 4d55b04291ef4646b43a06b3c58fb4fcaf8c20a8b5a6bd9abbe6cf8d88846cdd
5
5
  SHA512:
6
- metadata.gz: 3202637afeb4f634777bac594cc762e84e4f509e0cc71aa3e03faa2fee7d3e39a2b8ff970227f09921368482b7308cade817bc3dfa5c99bd5765965e94755694
7
- data.tar.gz: 51273c125724b0a4cbcd4737ccf93438d91186959579aa5af18c568a6fcc8a5053cc1092c15abb8c2abdb762e8af5fdaedf531116ca973313edea38d46692c9b
6
+ metadata.gz: 7316459bfb1bb3e206eaca6c0bb9af624124b1967974066f0bd47fec3a7ef837c6d79d8e5945224cdb6277767337042994d81bbf1df9ee342a6c87d99e409c85
7
+ data.tar.gz: 28e294af27bad44b966c8b8eee3e8fc7155a739c4a172162e4e997be5cfeb0f5cb115ab806b0fe43e1c9624378db610f8a210787d910f621df7a659e91d8eca6
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -94,7 +94,7 @@ module CTypes
94
94
 
95
95
  # get the size of the bitfield in bytes
96
96
  def self.size
97
- @type.size
97
+ @type&.size
98
98
  end
99
99
 
100
100
  # check if bitfield is a fixed size
data/lib/ctypes/enum.rb CHANGED
@@ -185,15 +185,26 @@ module CTypes
185
185
  Enum.new(@type, @dry_type.mapping, permissive: true)
186
186
  end
187
187
 
188
- # lookup the key for a given Integer value in this Enum
188
+ # Convert a enum key to value, or value to key
189
+ # @param arg [Integer, Symbol] key or value
190
+ # @return [Symbol, Integer, nil] value or key if known, nil if unknown
189
191
  #
190
192
  # @example
191
193
  # e = Enum.new(%i[a b c])
192
194
  # e[1] # => :b
193
195
  # e[5] # => nil
194
- def [](value)
195
- @inverted_mapping ||= @dry_type.mapping.invert
196
- @inverted_mapping[value]
196
+ # e[:b] # => 1
197
+ # e[:x] # => nil
198
+ def [](arg)
199
+ case arg
200
+ when Integer
201
+ @inverted_mapping ||= @dry_type.mapping.invert
202
+ @inverted_mapping[arg]
203
+ when Symbol
204
+ @dry_type.mapping[arg]
205
+ else
206
+ raise ArgumentError, "arg must be Integer or Symbol: %p" % [arg]
207
+ end
197
208
  end
198
209
  end
199
210
  end
@@ -187,4 +187,10 @@ module CTypes
187
187
  end
188
188
  end
189
189
  end
190
+
191
+ # To make CTypes easier to use without including Helpers everywhere, we're
192
+ # going to extend Helpers into the CTypes namespace. This is to support
193
+ # interactive sessions through pry/irb where you need to quickly create types
194
+ # without having to constantly type out `Helpers`.
195
+ CTypes.extend(Helpers)
190
196
  end
data/lib/ctypes/struct.rb CHANGED
@@ -512,7 +512,11 @@ module CTypes
512
512
  "struct {"
513
513
  end
514
514
  q.group(4, open, "}") do
515
- q.seplist(self.class.field_layout, -> { q.breakable("") }) do |name, _|
515
+ # strip out pad fields
516
+ fields = self.class.field_layout.reject do |(_, type)|
517
+ type.is_a?(CTypes::Pad)
518
+ end
519
+ q.seplist(fields, -> { q.breakable("") }) do |name, _|
516
520
  names = name.is_a?(::Array) ? name : [name]
517
521
  names.each do |name|
518
522
  next if name.is_a?(CTypes::Pad)
@@ -4,5 +4,5 @@
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  module CTypes
7
- VERSION = "0.2.2"
7
+ VERSION = "0.3.0"
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ctypes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David M. Lary
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-03-17 00:00:00.000000000 Z
11
+ date: 2025-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-struct
@@ -31,6 +31,7 @@ executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
+ - ".rspec"
34
35
  - ".standard.yml"
35
36
  - CODE_OF_CONDUCT.md
36
37
  - CONTRIBUTING.md