Class: Specwrk::Store

Inherits:
Object
  • Object
show all
Defined in:
lib/specwrk/store/base.rb,
lib/specwrk/store/serializer.rb,
lib/specwrk/store/base_adapter.rb,
lib/specwrk/store/file_adapter.rb,
lib/specwrk/store/memory_adapter.rb

Defined Under Namespace

Modules: Serializer, Serializers Classes: BaseAdapter, FileAdapter, MemoryAdapter

Constant Summary collapse

LockUnavailableError =
Class.new(StandardError)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(uri_string, scope) ⇒ Store

Returns a new instance of Store.



37
38
39
40
# File 'lib/specwrk/store/base.rb', line 37

def initialize(uri_string, scope)
  @uri = URI(uri_string)
  @scope = scope
end

Class Method Details

.adapter_klass(uri) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/specwrk/store/base.rb', line 14

def adapter_klass(uri)
  case uri.scheme
  when "memory"
    require "specwrk/store/memory_adapter" unless defined?(MemoryAdapter)

    MemoryAdapter
  when "file"
    require "specwrk/store/file_adapter" unless defined?(FileAdapter)

    FileAdapter
  when /redis/
    begin
      require "specwrk/store/redis_adapter" unless defined?(RedisAdapter)
    rescue LoadError
      warn "Unable use RedisAdapter with #{uri}, gem not found. Add `gem 'specwrk-store-redis_adapter'` to your Gemfile and bundle install."
      exit(1)
    end

    RedisAdapter
  end
end

.with_lock(uri, key) ⇒ Object



10
11
12
# File 'lib/specwrk/store/base.rb', line 10

def with_lock(uri, key)
  adapter_klass(uri).with_lock(uri, key) { yield }
end

Instance Method Details

#[](key) ⇒ Object



42
43
44
# File 'lib/specwrk/store/base.rb', line 42

def [](key)
  adapter[key.to_s]
end

#[]=(key, value) ⇒ Object



50
51
52
# File 'lib/specwrk/store/base.rb', line 50

def []=(key, value)
  adapter[key.to_s] = value
end

#any?Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/specwrk/store/base.rb', line 64

def any?
  !empty?
end

#clearObject



81
82
83
# File 'lib/specwrk/store/base.rb', line 81

def clear
  adapter.clear
end

#delete(*keys) ⇒ Object



72
73
74
# File 'lib/specwrk/store/base.rb', line 72

def delete(*keys)
  adapter.delete(*keys)
end

#empty?Boolean

Returns:

  • (Boolean)


68
69
70
# File 'lib/specwrk/store/base.rb', line 68

def empty?
  adapter.empty?
end

#inspectObject



89
90
91
# File 'lib/specwrk/store/base.rb', line 89

def inspect
  reload.to_h.dup
end

#keysObject



54
55
56
57
58
# File 'lib/specwrk/store/base.rb', line 54

def keys
  all_keys = adapter.keys

  all_keys.reject { |k| k.start_with? "____" }
end

#lengthObject



60
61
62
# File 'lib/specwrk/store/base.rb', line 60

def length
  keys.length
end

#merge!(h2) ⇒ Object



76
77
78
79
# File 'lib/specwrk/store/base.rb', line 76

def merge!(h2)
  h2.transform_keys!(&:to_s)
  adapter.merge!(h2)
end

#multi_read(*keys) ⇒ Object



46
47
48
# File 'lib/specwrk/store/base.rb', line 46

def multi_read(*keys)
  adapter.multi_read(*keys)
end

#reloadObject

Bypass any cached values. Helpful when you have two instances of the same store where one mutates data and the other needs to check on the status of that data (i.e. endpoint tests)



96
97
98
99
# File 'lib/specwrk/store/base.rb', line 96

def reload
  @adapter = nil
  self
end

#to_hObject



85
86
87
# File 'lib/specwrk/store/base.rb', line 85

def to_h
  multi_read(*keys).transform_keys!(&:to_sym)
end