Class: Blacklight::OpenStructWithHashAccess

Inherits:
OpenStruct
  • Object
show all
Defined in:
lib/blacklight/open_struct_with_hash_access.rb

Overview

An OpenStruct that responds to common Hash methods

Instance Method Summary collapse

Instance Method Details

#deep_dupObject



51
52
53
# File 'lib/blacklight/open_struct_with_hash_access.rb', line 51

def deep_dup
  self.class.new @table.deep_dup
end

#merge(other_hash) ⇒ OpenStructWithHashAccess

Merge the values of this OpenStruct with another OpenStruct or Hash

Parameters:

  • other_hash (Hash, #to_h)

Returns:



35
36
37
# File 'lib/blacklight/open_struct_with_hash_access.rb', line 35

def merge other_hash
  self.class.new to_h.merge((other_hash if other_hash.is_a? Hash) || other_hash.to_h)
end

#merge!(other_hash) ⇒ OpenStructWithHashAccess

Merge the values of another OpenStruct or Hash into this object

Parameters:

  • other_hash (Hash, #to_h)

Returns:



43
44
45
# File 'lib/blacklight/open_struct_with_hash_access.rb', line 43

def merge! other_hash
  @table.merge!((other_hash if other_hash.is_a? Hash) || other_hash.to_h)
end

#reverse_merge(other_hash) ⇒ Object



47
48
49
# File 'lib/blacklight/open_struct_with_hash_access.rb', line 47

def reverse_merge(other_hash)
  self.class.new to_h.reverse_merge((other_hash if other_hash.is_a? Hash) || other_hash.to_h)
end

#select(*args, &block) ⇒ Object



18
19
20
# File 'lib/blacklight/open_struct_with_hash_access.rb', line 18

def select *args, &block
  self.class.new to_h.select(*args, &block)
end

#sort_by(*args, &block) ⇒ Object



22
23
24
# File 'lib/blacklight/open_struct_with_hash_access.rb', line 22

def sort_by *args, &block
  self.class.new Hash[to_h.sort_by(*args, &block)]
end

#sort_by!(*args, &block) ⇒ Object



26
27
28
29
# File 'lib/blacklight/open_struct_with_hash_access.rb', line 26

def sort_by! *args, &block
  replace Hash[to_h.sort_by(*args, &block)]
  self
end

#to_hHash

Expose the internal hash

Returns:

  • (Hash)


14
15
16
# File 'lib/blacklight/open_struct_with_hash_access.rb', line 14

def to_h
  @table
end

#try(method_name = nil, *args, &block) ⇒ Object

Ported from Rails 6 to fix an incompatibility with ostruct



57
58
59
60
61
62
63
64
65
66
67
# File 'lib/blacklight/open_struct_with_hash_access.rb', line 57

def try(method_name = nil, *args, &block)
  if method_name.nil? && block_given?
    if b.arity.zero?
      instance_eval(&block)
    else
      yield self
    end
  elsif respond_to?(method_name)
    public_send(method_name, *args, &b)
  end
end