Class: Marshalsea::Chains::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/marshalsea/chains/base.rb

Direct Known Subclasses

ErbDefMethod, ErbDefModule, PsychInitWith

Constant Summary collapse

SUBCLASS_MUST_DEFINE =
"chain must define"
KIND_PRIMITIVE =
:primitive
KIND_CHAIN =
:chain
HEADER_BYTES =
2
HASH_WITH_ONE_ENTRY =
"{\x06"
NIL_VALUE =
"0"
"the payload graph contains an object link, whose index would shift " \
"when spliced behind a hash node; build it without repeated objects"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.affected_requirementsObject



68
69
70
# File 'lib/marshalsea/chains/base.rb', line 68

def affected_requirements
  .fetch(:affected).map { |constraint| Gem::Requirement.new(constraint) }
end

.affects?(version) ⇒ Boolean

Returns:

  • (Boolean)


72
73
74
75
# File 'lib/marshalsea/chains/base.rb', line 72

def affects?(version)
  candidate = Gem::Version.new(version.to_s)
  affected_requirements.any? { |requirement| requirement.satisfied_by?(candidate) }
end

.chain?Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/marshalsea/chains/base.rb', line 56

def chain?
  kind == KIND_CHAIN
end

.chain_nameObject



36
37
38
# File 'lib/marshalsea/chains/base.rb', line 36

def chain_name
  .fetch(:name)
end

.cveObject



44
45
46
# File 'lib/marshalsea/chains/base.rb', line 44

def cve
  .fetch(:cve)
end

.inherited(subclass) ⇒ Object



27
28
29
30
# File 'lib/marshalsea/chains/base.rb', line 27

def inherited(subclass)
  super
  Chains.register(subclass)
end

.kindObject



52
53
54
# File 'lib/marshalsea/chains/base.rb', line 52

def kind
  .fetch(:kind)
end

.metadataObject



32
33
34
# File 'lib/marshalsea/chains/base.rb', line 32

def 
  raise NotImplementedByChainError, "#{SUBCLASS_MUST_DEFINE} metadata"
end

.primitive?Boolean

Returns:

  • (Boolean)


60
61
62
# File 'lib/marshalsea/chains/base.rb', line 60

def primitive?
  kind == KIND_PRIMITIVE
end

.required_gemsObject



64
65
66
# File 'lib/marshalsea/chains/base.rb', line 64

def required_gems
  .fetch(:requires, [])
end

.target_gemObject



48
49
50
# File 'lib/marshalsea/chains/base.rb', line 48

def target_gem
  .fetch(:gem)
end

.vectorObject



40
41
42
# File 'lib/marshalsea/chains/base.rb', line 40

def vector
  .fetch(:vector)
end

Instance Method Details

#generateObject



78
79
80
# File 'lib/marshalsea/chains/base.rb', line 78

def generate
  raise NotImplementedByChainError, "#{SUBCLASS_MUST_DEFINE} generate"
end

#serializeObject



82
83
84
# File 'lib/marshalsea/chains/base.rb', line 82

def serialize
  ::Marshal.dump(generate)
end