fattureincloud_ruby_sdk 2.1.3 → 2.1.4

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.
@@ -0,0 +1,492 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # = ostruct.rb: OpenStruct implementation
4
+ #
5
+ # Author:: Yukihiro Matsumoto
6
+ # Documentation:: Gavin Sinclair
7
+ #
8
+ # OpenStruct allows the creation of data objects with arbitrary attributes.
9
+ # See OpenStruct for an example.
10
+ #
11
+
12
+ #
13
+ # An OpenStruct is a data structure, similar to a Hash, that allows the
14
+ # definition of arbitrary attributes with their accompanying values. This is
15
+ # accomplished by using Ruby's metaprogramming to define methods on the class
16
+ # itself.
17
+ #
18
+ # == Examples
19
+ #
20
+ # require "ostruct"
21
+ #
22
+ # person = OpenStruct.new
23
+ # person.name = "John Smith"
24
+ # person.age = 70
25
+ #
26
+ # person.name # => "John Smith"
27
+ # person.age # => 70
28
+ # person.address # => nil
29
+ #
30
+ # An OpenStruct employs a Hash internally to store the attributes and values
31
+ # and can even be initialized with one:
32
+ #
33
+ # australia = OpenStruct.new(:country => "Australia", :capital => "Canberra")
34
+ # # => #<OpenStruct country="Australia", capital="Canberra">
35
+ #
36
+ # Hash keys with spaces or characters that could normally not be used for
37
+ # method calls (e.g. <code>()[]*</code>) will not be immediately available
38
+ # on the OpenStruct object as a method for retrieval or assignment, but can
39
+ # still be reached through the Object#send method or using [].
40
+ #
41
+ # measurements = OpenStruct.new("length (in inches)" => 24)
42
+ # measurements[:"length (in inches)"] # => 24
43
+ # measurements.send("length (in inches)") # => 24
44
+ #
45
+ # message = OpenStruct.new(:queued? => true)
46
+ # message.queued? # => true
47
+ # message.send("queued?=", false)
48
+ # message.queued? # => false
49
+ #
50
+ # Removing the presence of an attribute requires the execution of the
51
+ # delete_field method as setting the property value to +nil+ will not
52
+ # remove the attribute.
53
+ #
54
+ # first_pet = OpenStruct.new(:name => "Rowdy", :owner => "John Smith")
55
+ # second_pet = OpenStruct.new(:name => "Rowdy")
56
+ #
57
+ # first_pet.owner = nil
58
+ # first_pet # => #<OpenStruct name="Rowdy", owner=nil>
59
+ # first_pet == second_pet # => false
60
+ #
61
+ # first_pet.delete_field(:owner)
62
+ # first_pet # => #<OpenStruct name="Rowdy">
63
+ # first_pet == second_pet # => true
64
+ #
65
+ # Ractor compatibility: A frozen OpenStruct with shareable values is itself shareable.
66
+ #
67
+ # == Caveats
68
+ #
69
+ # An OpenStruct utilizes Ruby's method lookup structure to find and define the
70
+ # necessary methods for properties. This is accomplished through the methods
71
+ # method_missing and define_singleton_method.
72
+ #
73
+ # This should be a consideration if there is a concern about the performance of
74
+ # the objects that are created, as there is much more overhead in the setting
75
+ # of these properties compared to using a Hash or a Struct.
76
+ # Creating an open struct from a small Hash and accessing a few of the
77
+ # entries can be 200 times slower than accessing the hash directly.
78
+ #
79
+ # This is a potential security issue; building OpenStruct from untrusted user data
80
+ # (e.g. JSON web request) may be susceptible to a "symbol denial of service" attack
81
+ # since the keys create methods and names of methods are never garbage collected.
82
+ #
83
+ # This may also be the source of incompatibilities between Ruby versions:
84
+ #
85
+ # o = OpenStruct.new
86
+ # o.then # => nil in Ruby < 2.6, enumerator for Ruby >= 2.6
87
+ #
88
+ # Builtin methods may be overwritten this way, which may be a source of bugs
89
+ # or security issues:
90
+ #
91
+ # o = OpenStruct.new
92
+ # o.methods # => [:to_h, :marshal_load, :marshal_dump, :each_pair, ...
93
+ # o.methods = [:foo, :bar]
94
+ # o.methods # => [:foo, :bar]
95
+ #
96
+ # To help remedy clashes, OpenStruct uses only protected/private methods ending with <code>!</code>
97
+ # and defines aliases for builtin public methods by adding a <code>!</code>:
98
+ #
99
+ # o = OpenStruct.new(make: 'Bentley', class: :luxury)
100
+ # o.class # => :luxury
101
+ # o.class! # => OpenStruct
102
+ #
103
+ # It is recommended (but not enforced) to not use fields ending in <code>!</code>;
104
+ # Note that a subclass' methods may not be overwritten, nor can OpenStruct's own methods
105
+ # ending with <code>!</code>.
106
+ #
107
+ # For all these reasons, consider not using OpenStruct at all.
108
+ #
109
+ class OpenStruct
110
+ VERSION = "0.6.3"
111
+
112
+ HAS_PERFORMANCE_WARNINGS = begin
113
+ Warning[:performance]
114
+ true
115
+ rescue NoMethodError, ArgumentError
116
+ false
117
+ end
118
+ private_constant :HAS_PERFORMANCE_WARNINGS
119
+
120
+ #
121
+ # Creates a new OpenStruct object. By default, the resulting OpenStruct
122
+ # object will have no attributes.
123
+ #
124
+ # The optional +hash+, if given, will generate attributes and values
125
+ # (can be a Hash, an OpenStruct or a Struct).
126
+ # For example:
127
+ #
128
+ # require "ostruct"
129
+ # hash = { "country" => "Australia", :capital => "Canberra" }
130
+ # data = OpenStruct.new(hash)
131
+ #
132
+ # data # => #<OpenStruct country="Australia", capital="Canberra">
133
+ #
134
+ def initialize(hash=nil)
135
+ if HAS_PERFORMANCE_WARNINGS && Warning[:performance]
136
+ warn "OpenStruct use is discouraged for performance reasons", uplevel: 1, category: :performance
137
+ end
138
+
139
+ if hash
140
+ update_to_values!(hash)
141
+ else
142
+ @table = {}
143
+ end
144
+ end
145
+
146
+ # Duplicates an OpenStruct object's Hash table.
147
+ private def initialize_clone(orig) # :nodoc:
148
+ super # clones the singleton class for us
149
+ @table = @table.dup unless @table.frozen?
150
+ end
151
+
152
+ private def initialize_dup(orig) # :nodoc:
153
+ super
154
+ update_to_values!(@table)
155
+ end
156
+
157
+ private def update_to_values!(hash) # :nodoc:
158
+ @table = {}
159
+ hash.each_pair do |k, v|
160
+ set_ostruct_member_value!(k, v)
161
+ end
162
+ end
163
+
164
+ #
165
+ # call-seq:
166
+ # ostruct.to_h -> hash
167
+ # ostruct.to_h {|name, value| block } -> hash
168
+ #
169
+ # Converts the OpenStruct to a hash with keys representing
170
+ # each attribute (as symbols) and their corresponding values.
171
+ #
172
+ # If a block is given, the results of the block on each pair of
173
+ # the receiver will be used as pairs.
174
+ #
175
+ # require "ostruct"
176
+ # data = OpenStruct.new("country" => "Australia", :capital => "Canberra")
177
+ # data.to_h # => {:country => "Australia", :capital => "Canberra" }
178
+ # data.to_h {|name, value| [name.to_s, value.upcase] }
179
+ # # => {"country" => "AUSTRALIA", "capital" => "CANBERRA" }
180
+ #
181
+ if {test: :to_h}.to_h{ [:works, true] }[:works] # RUBY_VERSION < 2.6 compatibility
182
+ def to_h(&block)
183
+ if block
184
+ @table.to_h(&block)
185
+ else
186
+ @table.dup
187
+ end
188
+ end
189
+ else
190
+ def to_h(&block)
191
+ if block
192
+ @table.map(&block).to_h
193
+ else
194
+ @table.dup
195
+ end
196
+ end
197
+ end
198
+
199
+ #
200
+ # :call-seq:
201
+ # ostruct.each_pair {|name, value| block } -> ostruct
202
+ # ostruct.each_pair -> Enumerator
203
+ #
204
+ # Yields all attributes (as symbols) along with the corresponding values
205
+ # or returns an enumerator if no block is given.
206
+ #
207
+ # require "ostruct"
208
+ # data = OpenStruct.new("country" => "Australia", :capital => "Canberra")
209
+ # data.each_pair.to_a # => [[:country, "Australia"], [:capital, "Canberra"]]
210
+ #
211
+ def each_pair
212
+ return to_enum(__method__) { @table.size } unless defined?(yield)
213
+ @table.each_pair{|p| yield p}
214
+ self
215
+ end
216
+
217
+ #
218
+ # Provides marshalling support for use by the Marshal library.
219
+ #
220
+ def marshal_dump # :nodoc:
221
+ @table
222
+ end
223
+
224
+ #
225
+ # Provides marshalling support for use by the Marshal library.
226
+ #
227
+ alias_method :marshal_load, :update_to_values! # :nodoc:
228
+
229
+ #
230
+ # Used internally to defined properties on the
231
+ # OpenStruct. It does this by using the metaprogramming function
232
+ # define_singleton_method for both the getter method and the setter method.
233
+ #
234
+ def new_ostruct_member!(name) # :nodoc:
235
+ unless @table.key?(name) || is_method_protected!(name)
236
+ if defined?(::Ractor.shareable_proc)
237
+ getter_proc = Ractor.shareable_proc { @table[name] }
238
+ setter_proc = Ractor.shareable_proc {|x| @table[name] = x}
239
+ elsif defined?(::Ractor)
240
+ getter_proc = nil.instance_eval{ Proc.new { @table[name] } }
241
+ setter_proc = nil.instance_eval{ Proc.new {|x| @table[name] = x} }
242
+ ::Ractor.make_shareable(getter_proc)
243
+ ::Ractor.make_shareable(setter_proc)
244
+ else
245
+ getter_proc = Proc.new { @table[name] }
246
+ setter_proc = Proc.new {|x| @table[name] = x}
247
+ end
248
+ define_singleton_method!(name, &getter_proc)
249
+ define_singleton_method!("#{name}=", &setter_proc)
250
+ end
251
+ end
252
+ private :new_ostruct_member!
253
+
254
+ private def is_method_protected!(name) # :nodoc:
255
+ if !respond_to?(name, true)
256
+ false
257
+ elsif name.match?(/!$/)
258
+ true
259
+ else
260
+ owner = method!(name).owner
261
+ if owner.class == ::Class
262
+ owner < ::OpenStruct
263
+ else
264
+ self.class!.ancestors.any? do |mod|
265
+ return false if mod == ::OpenStruct
266
+ mod == owner
267
+ end
268
+ end
269
+ end
270
+ end
271
+
272
+ def freeze
273
+ @table.freeze
274
+ super
275
+ end
276
+
277
+ private def method_missing(mid, *args) # :nodoc:
278
+ len = args.length
279
+ if mname = mid[/.*(?==\z)/m]
280
+ if len != 1
281
+ raise! ArgumentError, "wrong number of arguments (given #{len}, expected 1)", caller(1)
282
+ end
283
+ set_ostruct_member_value!(mname, args[0])
284
+ elsif len == 0
285
+ @table[mid]
286
+ else
287
+ begin
288
+ super
289
+ rescue NoMethodError => err
290
+ err.backtrace.shift
291
+ raise!
292
+ end
293
+ end
294
+ end
295
+
296
+ #
297
+ # :call-seq:
298
+ # ostruct[name] -> object
299
+ #
300
+ # Returns the value of an attribute, or +nil+ if there is no such attribute.
301
+ #
302
+ # require "ostruct"
303
+ # person = OpenStruct.new("name" => "John Smith", "age" => 70)
304
+ # person[:age] # => 70, same as person.age
305
+ #
306
+ def [](name)
307
+ @table[name.to_sym]
308
+ end
309
+
310
+ #
311
+ # :call-seq:
312
+ # ostruct[name] = obj -> obj
313
+ #
314
+ # Sets the value of an attribute.
315
+ #
316
+ # require "ostruct"
317
+ # person = OpenStruct.new("name" => "John Smith", "age" => 70)
318
+ # person[:age] = 42 # equivalent to person.age = 42
319
+ # person.age # => 42
320
+ #
321
+ def []=(name, value)
322
+ name = name.to_sym
323
+ new_ostruct_member!(name)
324
+ @table[name] = value
325
+ end
326
+ alias_method :set_ostruct_member_value!, :[]=
327
+ private :set_ostruct_member_value!
328
+
329
+ # :call-seq:
330
+ # ostruct.dig(name, *identifiers) -> object
331
+ #
332
+ # Finds and returns the object in nested objects
333
+ # that is specified by +name+ and +identifiers+.
334
+ # The nested objects may be instances of various classes.
335
+ # See {Dig Methods}[rdoc-ref:dig_methods.rdoc].
336
+ #
337
+ # Examples:
338
+ # require "ostruct"
339
+ # address = OpenStruct.new("city" => "Anytown NC", "zip" => 12345)
340
+ # person = OpenStruct.new("name" => "John Smith", "address" => address)
341
+ # person.dig(:address, "zip") # => 12345
342
+ # person.dig(:business_address, "zip") # => nil
343
+ def dig(name, *names)
344
+ begin
345
+ name = name.to_sym
346
+ rescue NoMethodError
347
+ raise! TypeError, "#{name} is not a symbol nor a string"
348
+ end
349
+ @table.dig(name, *names)
350
+ end
351
+
352
+ #
353
+ # Removes the named field from the object and returns the value the field
354
+ # contained if it was defined. You may optionally provide a block.
355
+ # If the field is not defined, the result of the block is returned,
356
+ # or a NameError is raised if no block was given.
357
+ #
358
+ # require "ostruct"
359
+ #
360
+ # person = OpenStruct.new(name: "John", age: 70, pension: 300)
361
+ #
362
+ # person.delete_field!("age") # => 70
363
+ # person # => #<OpenStruct name="John", pension=300>
364
+ #
365
+ # Setting the value to +nil+ will not remove the attribute:
366
+ #
367
+ # person.pension = nil
368
+ # person # => #<OpenStruct name="John", pension=nil>
369
+ #
370
+ # person.delete_field('number') # => NameError
371
+ #
372
+ # person.delete_field('number') { 8675_309 } # => 8675309
373
+ #
374
+ def delete_field(name, &block)
375
+ sym = name.to_sym
376
+ begin
377
+ singleton_class.remove_method(sym, "#{sym}=")
378
+ rescue NameError
379
+ end
380
+ @table.delete(sym) do
381
+ return yield if block
382
+ raise! NameError.new("no field '#{sym}' in #{self}", sym)
383
+ end
384
+ end
385
+
386
+ InspectKey = :__inspect_key__ # :nodoc:
387
+
388
+ #
389
+ # Returns a string containing a detailed summary of the keys and values.
390
+ #
391
+ def inspect
392
+ ids = (Thread.current[InspectKey] ||= [])
393
+ if ids.include?(object_id)
394
+ detail = ' ...'
395
+ else
396
+ ids << object_id
397
+ begin
398
+ detail = @table.map do |key, value|
399
+ " #{key}=#{value.inspect}"
400
+ end.join(',')
401
+ ensure
402
+ ids.pop
403
+ end
404
+ end
405
+ ['#<', self.class!, detail, '>'].join
406
+ end
407
+ alias :to_s :inspect
408
+
409
+ attr_reader :table # :nodoc:
410
+ alias table! table
411
+ protected :table!
412
+
413
+ #
414
+ # Compares this object and +other+ for equality. An OpenStruct is equal to
415
+ # +other+ when +other+ is an OpenStruct and the two objects' Hash tables are
416
+ # equal.
417
+ #
418
+ # require "ostruct"
419
+ # first_pet = OpenStruct.new("name" => "Rowdy")
420
+ # second_pet = OpenStruct.new(:name => "Rowdy")
421
+ # third_pet = OpenStruct.new("name" => "Rowdy", :age => nil)
422
+ #
423
+ # first_pet == second_pet # => true
424
+ # first_pet == third_pet # => false
425
+ #
426
+ def ==(other)
427
+ return false unless other.kind_of?(OpenStruct)
428
+ @table == other.table!
429
+ end
430
+
431
+ #
432
+ # Compares this object and +other+ for equality. An OpenStruct is eql? to
433
+ # +other+ when +other+ is an OpenStruct and the two objects' Hash tables are
434
+ # eql?.
435
+ #
436
+ def eql?(other)
437
+ return false unless other.kind_of?(OpenStruct)
438
+ @table.eql?(other.table!)
439
+ end
440
+
441
+ # Computes a hash code for this OpenStruct.
442
+ def hash # :nodoc:
443
+ @table.hash
444
+ end
445
+
446
+ #
447
+ # Provides marshalling support for use by the YAML library.
448
+ #
449
+ def encode_with(coder) # :nodoc:
450
+ @table.each_pair do |key, value|
451
+ coder[key.to_s] = value
452
+ end
453
+ if @table.size == 1 && @table.key?(:table) # support for legacy format
454
+ # in the very unlikely case of a single entry called 'table'
455
+ coder['legacy_support!'] = true # add a bogus second entry
456
+ end
457
+ end
458
+
459
+ #
460
+ # Provides marshalling support for use by the YAML library.
461
+ #
462
+ def init_with(coder) # :nodoc:
463
+ h = coder.map
464
+ if h.size == 1 # support for legacy format
465
+ key, val = h.first
466
+ if key == 'table'
467
+ h = val
468
+ end
469
+ end
470
+ update_to_values!(h)
471
+ end
472
+
473
+ # Make all public methods (builtin or our own) accessible with <code>!</code>:
474
+ give_access = instance_methods
475
+ # See https://github.com/ruby/ostruct/issues/30
476
+ give_access -= %i[instance_exec instance_eval eval] if RUBY_ENGINE == 'jruby'
477
+ give_access.each do |method|
478
+ next if method.match(/\W$/)
479
+
480
+ new_name = "#{method}!"
481
+ alias_method new_name, method
482
+ end
483
+ # Other builtin private methods we use:
484
+ alias_method :raise!, :raise
485
+ private :raise!
486
+
487
+ # See https://github.com/ruby/ostruct/issues/40
488
+ if RUBY_ENGINE != 'jruby'
489
+ alias_method :block_given!, :block_given?
490
+ private :block_given!
491
+ end
492
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ name = File.basename(__FILE__, ".gemspec")
4
+ version = ["lib", Array.new(name.count("-")+1, ".").join("/")].find do |dir|
5
+ break File.foreach(File.join(__dir__, dir, "#{name.tr('-', '/')}.rb")) do |line|
6
+ /^\s*VERSION\s*=\s*"(.*)"/ =~ line and break $1
7
+ end rescue nil
8
+ end
9
+
10
+ Gem::Specification.new do |spec|
11
+ spec.name = name
12
+ spec.version = version
13
+ spec.authors = ["Marc-Andre Lafortune"]
14
+ spec.email = ["ruby-core@marc-andre.ca"]
15
+
16
+ spec.summary = %q{Class to build custom data structures, similar to a Hash.}
17
+ spec.description = %q{Class to build custom data structures, similar to a Hash.}
18
+ spec.homepage = "https://github.com/ruby/ostruct"
19
+ spec.licenses = ["Ruby", "BSD-2-Clause"]
20
+ spec.required_ruby_version = ">= 2.5.0"
21
+
22
+ spec.files = [".gitignore", "Gemfile", "COPYING", "BSDL", "README.md", "Rakefile", "bin/console", "bin/setup", "lib/ostruct.rb", "ostruct.gemspec"]
23
+ spec.require_paths = ["lib"]
24
+
25
+ spec.metadata["changelog_uri"] = spec.homepage + "/releases"
26
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # stub: ostruct 0.6.3 ruby lib
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "ostruct".freeze
6
+ s.version = "0.6.3"
7
+
8
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
+ s.metadata = { "changelog_uri" => "https://github.com/ruby/ostruct/releases" } if s.respond_to? :metadata=
10
+ s.require_paths = ["lib".freeze]
11
+ s.authors = ["Marc-Andre Lafortune".freeze]
12
+ s.date = "2025-07-17"
13
+ s.description = "Class to build custom data structures, similar to a Hash.".freeze
14
+ s.email = ["ruby-core@marc-andre.ca".freeze]
15
+ s.homepage = "https://github.com/ruby/ostruct".freeze
16
+ s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
17
+ s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
18
+ s.rubygems_version = "3.3.3".freeze
19
+ s.summary = "Class to build custom data structures, similar to a Hash.".freeze
20
+
21
+ s.installed_by_version = "3.3.3" if s.respond_to? :installed_by_version
22
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fattureincloud_ruby_sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.3
4
+ version: 2.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fatture in Cloud API Team
@@ -30,6 +30,20 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.0.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: ostruct
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
33
47
  - !ruby/object:Gem::Dependency
34
48
  name: rspec
35
49
  requirement: !ruby/object:Gem::Requirement
@@ -990,6 +1004,7 @@ files:
990
1004
  - vendor/bundle/ruby/3.1.0/cache/ffi-1.17.4.gem
991
1005
  - vendor/bundle/ruby/3.1.0/cache/logger-1.7.0.gem
992
1006
  - vendor/bundle/ruby/3.1.0/cache/method_source-1.1.0.gem
1007
+ - vendor/bundle/ruby/3.1.0/cache/ostruct-0.6.3.gem
993
1008
  - vendor/bundle/ruby/3.1.0/cache/parallel-1.28.0.gem
994
1009
  - vendor/bundle/ruby/3.1.0/cache/parser-3.3.11.1.gem
995
1010
  - vendor/bundle/ruby/3.1.0/cache/prism-1.9.0.gem
@@ -1854,6 +1869,16 @@ files:
1854
1869
  - vendor/bundle/ruby/3.1.0/gems/method_source-1.1.0/spec/method_source/code_helpers_spec.rb
1855
1870
  - vendor/bundle/ruby/3.1.0/gems/method_source-1.1.0/spec/method_source_spec.rb
1856
1871
  - vendor/bundle/ruby/3.1.0/gems/method_source-1.1.0/spec/spec_helper.rb
1872
+ - vendor/bundle/ruby/3.1.0/gems/ostruct-0.6.3/.gitignore
1873
+ - vendor/bundle/ruby/3.1.0/gems/ostruct-0.6.3/BSDL
1874
+ - vendor/bundle/ruby/3.1.0/gems/ostruct-0.6.3/COPYING
1875
+ - vendor/bundle/ruby/3.1.0/gems/ostruct-0.6.3/Gemfile
1876
+ - vendor/bundle/ruby/3.1.0/gems/ostruct-0.6.3/README.md
1877
+ - vendor/bundle/ruby/3.1.0/gems/ostruct-0.6.3/Rakefile
1878
+ - vendor/bundle/ruby/3.1.0/gems/ostruct-0.6.3/bin/console
1879
+ - vendor/bundle/ruby/3.1.0/gems/ostruct-0.6.3/bin/setup
1880
+ - vendor/bundle/ruby/3.1.0/gems/ostruct-0.6.3/lib/ostruct.rb
1881
+ - vendor/bundle/ruby/3.1.0/gems/ostruct-0.6.3/ostruct.gemspec
1857
1882
  - vendor/bundle/ruby/3.1.0/gems/parallel-1.28.0/MIT-LICENSE.txt
1858
1883
  - vendor/bundle/ruby/3.1.0/gems/parallel-1.28.0/lib/parallel.rb
1859
1884
  - vendor/bundle/ruby/3.1.0/gems/parallel-1.28.0/lib/parallel/version.rb
@@ -3658,6 +3683,7 @@ files:
3658
3683
  - vendor/bundle/ruby/3.1.0/specifications/ffi-1.17.4.gemspec
3659
3684
  - vendor/bundle/ruby/3.1.0/specifications/logger-1.7.0.gemspec
3660
3685
  - vendor/bundle/ruby/3.1.0/specifications/method_source-1.1.0.gemspec
3686
+ - vendor/bundle/ruby/3.1.0/specifications/ostruct-0.6.3.gemspec
3661
3687
  - vendor/bundle/ruby/3.1.0/specifications/parallel-1.28.0.gemspec
3662
3688
  - vendor/bundle/ruby/3.1.0/specifications/parser-3.3.11.1.gemspec
3663
3689
  - vendor/bundle/ruby/3.1.0/specifications/prism-1.9.0.gemspec