Class: Universa::StoredContractBase

Inherits:
Object
  • Object
show all
Defined in:
lib/universa/stored_contract.rb

Overview

under construction, pls don’t use.

this is a base class for a contract stored in some contract chain. The implementation must inherit and implement its #load and #save methods at least. To do it, inherit and implement ChainStore to work with it.

Notable features:

  • contract could be assigned only once, no matter how, so its fields could be cached.

  • origin, hash_id and parent are cached. So other contract parameters should be.

Direct Known Subclasses

FSStore::Entry

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(chain_store) ⇒ StoredContractBase

Construct implementation connected to a given store

Parameters:



35
36
37
38
39
# File 'lib/universa/stored_contract.rb', line 35

def initialize(chain_store)
  @chain_store = chain_store
  @chain_store.is_a?(ChainStore) or raise ArgumentError, "ChainStore instance required"
  @chain_store = chain_store
end

Instance Attribute Details

#chain_storeObject (readonly)

ChainStore instance to which it is connected



17
18
19
# File 'lib/universa/stored_contract.rb', line 17

def chain_store
  @chain_store
end

#contractObject

Contract instance stored in it. Can be lazy-loaded



19
20
21
# File 'lib/universa/stored_contract.rb', line 19

def contract
  @contract
end

#hash_idObject (readonly)

HashId of the #contract



21
22
23
# File 'lib/universa/stored_contract.rb', line 21

def hash_id
  @hash_id
end

Instance Method Details

#has_contract?Boolean

For implementation logic, in particular, to make lazy loads.

Returns:

  • (Boolean)

    true if the stored contract is loaded into this instance



43
44
45
# File 'lib/universa/stored_contract.rb', line 43

def has_contract?
  !@contract.nil?
end

#load(hash_id) ⇒ Object

override it to load the contract from the connected contract chain.

Raises:



59
60
61
# File 'lib/universa/stored_contract.rb', line 59

def load hash_id
  raise NotFoundError
end

#originHashId

Returns #contract.origin. See Contract#origin.

Returns:



24
25
26
# File 'lib/universa/stored_contract.rb', line 24

def origin
  @origin ||= @contract.origin
end

#packed_contractString

Shortcut for ‘contract.packed`. See Contract#packed

Returns:

  • (String)

    binary string with contained contract packed transaction.



49
50
51
# File 'lib/universa/stored_contract.rb', line 49

def packed_contract
  @contract.packed
end

#packed_contract=(new_packed_contract) ⇒ Object

Convenience method. Unoacks and stores the contract.



73
74
75
# File 'lib/universa/stored_contract.rb', line 73

def packed_contract=(new_packed_contract)
  self.contract = Contract.from_packed(new_packed_contract)
end

#parentHashId

Returns #contract.origin. See Contract#parent.

Returns:



29
30
31
# File 'lib/universa/stored_contract.rb', line 29

def parent
  @parent ||= @contract.parent
end

#saveObject

override it to save the contract in the connected contract chain.

Raises:



54
55
56
# File 'lib/universa/stored_contract.rb', line 54

def save
  raise NotFoundError
end