Module: Stellar::ClaimPredicate::FactoryMethods

Included in:
Stellar::ClaimPredicate
Defined in:
lib/stellar/claim_predicate.rb

Instance Method Summary collapse

Instance Method Details

#after(time) ⇒ ClaimPredicate

Constructs a negated predicate from either relative or absolute time based on the type of the input.

Parameters:

  • duration since ledger close time or absolute time value

Returns:

  • before_relative_time or before_absolute_time claim predicate.

See Also:



73
74
75
# File 'lib/stellar/claim_predicate.rb', line 73

def after(time)
  ~before(time)
end

#before(time) ⇒ ClaimPredicate

Constructs either relative or absolute time predicate based on the type of the input.

If input is an instance of ActiveSupport::Duration class it will be handled as a relative time (seconds since close time of the ledger), otherwise it will be treated as an absolute time.

It is intended to work with time helpers provided by ActiveSupport, like 1.day (relative) or 2.weeks.from_now (absolute).

Examples:

relative time

ClaimPredicate.before(2.days + 15.seconds)

absolute time

ClaimPredicate.before(5.hours.from_now)

Parameters:

  • duration since ledger close time or absolute time value

Returns:

  • before_relative_time or before_absolute_time claim predicate.



64
65
66
# File 'lib/stellar/claim_predicate.rb', line 64

def before(time)
  ActiveSupport::Duration === time ? before_relative_time(time.to_i) : before_absolute_time(time)
end

#before_absolute_time(timestamp) ⇒ ClaimPredicate

Constructs an before_absolute_time claim predicate.

This predicate will be fulfilled if the closing time of the ledger that includes the Stellar::CreateClaimableBalance operation is less than provided timestamp.

Parameters:

  • time value or timestamp

Returns:

  • before_absolute_time claim predicate.



41
42
43
44
45
# File 'lib/stellar/claim_predicate.rb', line 41

def before_absolute_time(timestamp)
  timestamp = timestamp.to_time if timestamp.respond_to?(:to_time)

  ClaimPredicate.new(ClaimPredicateType::BEFORE_ABSOLUTE_TIME, Integer(timestamp))
end

#before_relative_time(seconds) ⇒ ClaimPredicate

Constructs a before_relative_time claim predicate.

This predicate will be fulfilled if the closing time of the ledger that includes the Stellar::CreateClaimableBalance operation plus this relative time delta (in seconds) is less than the current time.

Parameters:

  • seconds since closeTime of the ledger in which the ClaimableBalanceEntry was created.

Returns:

  • before_relative_time claim predicate



29
30
31
# File 'lib/stellar/claim_predicate.rb', line 29

def before_relative_time(seconds)
  ClaimPredicate.new(ClaimPredicateType::BEFORE_RELATIVE_TIME, Integer(seconds))
end

#compose(&block) ⇒ ClaimPredicate

Compose a complex predicate by calling DSL methods from the block.

Examples:

ClaimPredicate.compose {
  after(15.minutes) & before(1.day) | after(1.week.from_now) & before(1.week.from_now + 1.day)
}

Yield Returns:

Returns:

  • ‘not(before_relative_time)` or `not(before_absolute_time)` claim predicate.



86
87
88
89
# File 'lib/stellar/claim_predicate.rb', line 86

def compose(&block)
  result = instance_eval(&block)
  result.nil? ? unconditional : result
end

#unconditionalClaimPredicate

Constructs an unconditional claim predicate.

This predicate will be always fulfilled.

Returns:

  • unconditional claim predicate



16
17
18
# File 'lib/stellar/claim_predicate.rb', line 16

def unconditional
  ClaimPredicate.new(ClaimPredicateType::UNCONDITIONAL)
end