fixtury 0.1.0.alpha → 0.1.0.alpha2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 73b1b15d6ac9941d265b535f8510cc2896eb4c3fc711af20339b045228e8a888
4
- data.tar.gz: ca6171cdfc7c721a88dc6e4055db600e10897894295b40022e45e7a55c5c5497
3
+ metadata.gz: 75498846db5af5a720586eee8dbd16a231b326ccbd3e11867235d048dd161aa1
4
+ data.tar.gz: 9205f55fed52ac282da960130416db10d8cf52c8a528e5b28b3ef2b94eccbc1a
5
5
  SHA512:
6
- metadata.gz: d892685cc0b8a4f54c09c188d1afc0dcc8928008f072c76bf18f0fed7ace0c49d194070d61b65dc4653c528b321f08e4ba3adb59cd2d33a192b4e3f984c09776
7
- data.tar.gz: cceeab65fe5c416067a7be5ae8fd3c9dc65d73fcf5c812ffc89ba695d60fcae5790414baeea1e43d9c098279e8dddc8a87eede66f275eeb02bfaf11fb1c447f3
6
+ metadata.gz: 0bb9a8d6f1cad6e929679f004e806d6160c25b195608cdaed9e3083120bb91ade8e3452710602f3311c5980b7a4d94f7179d8b411ca5a37bf7631c256e665690
7
+ data.tar.gz: da048dd34fc8e4d665bdf2c7b4fd5029ef15a2251a370aa014ae38799f9a15e9ff84ec65713ce5398d3f21dbebaa0f14884cea2185f0af7fddd3e25c0a237e48
@@ -5,7 +5,7 @@ module Fixtury
5
5
  class CircularDependencyError < ::StandardError
6
6
 
7
7
  def initialize(name)
8
- super("One of the depdencies of #{name} is dependent on #{name}.")
8
+ super("One of the dependencies of #{name} is dependent on #{name}.")
9
9
  end
10
10
 
11
11
  end
@@ -1,6 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Fixtury
2
4
  class Reference
3
5
 
6
+ HOLDER_VALUE = "__BUILDING_FIXTURE__"
7
+
8
+ def self.holder(name)
9
+ new(name, HOLDER_VALUE)
10
+ end
11
+
4
12
  attr_reader :name, :value, :created_at
5
13
 
6
14
  def initialize(name, value)
@@ -9,5 +17,13 @@ module Fixtury
9
17
  @created_at = Time.now.to_i
10
18
  end
11
19
 
20
+ def holder?
21
+ value == HOLDER_VALUE
22
+ end
23
+
24
+ def real?
25
+ !holder?
26
+ end
27
+
12
28
  end
13
29
  end
data/lib/fixtury/store.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "fileutils"
3
4
  require "singleton"
4
5
  require "yaml"
5
6
  require "fixtury/locator"
@@ -12,8 +13,6 @@ module Fixtury
12
13
 
13
14
  cattr_accessor :instance
14
15
 
15
- HOLDER = "__BUILDING_FIXTURE__"
16
-
17
16
  attr_reader :filepath, :references, :ttl, :auto_refresh_expired
18
17
  attr_reader :schema, :locator
19
18
  attr_reader :verbose
@@ -41,7 +40,13 @@ module Fixtury
41
40
  def dump_to_file
42
41
  return unless filepath
43
42
 
44
- ::File.open(filepath, "wb") { |io| io.write(references.to_yaml) }
43
+ ::FileUtils.mkdir_p(File.dirname(filepath))
44
+
45
+ writable = references.each_with_object({}) do |(full_name, ref), h|
46
+ h[full_name] = ref if ref.real?
47
+ end
48
+
49
+ ::File.open(filepath, "wb") { |io| io.write(writable.to_yaml) }
45
50
  end
46
51
 
47
52
  def clear_expired_references!
@@ -59,7 +64,7 @@ module Fixtury
59
64
  get(dfn.name)
60
65
  end
61
66
 
62
- schema.schemas.each_pair do |_key, ns|
67
+ schema.children.each_pair do |_key, ns|
63
68
  load_all(ns)
64
69
  end
65
70
  end
@@ -89,7 +94,7 @@ module Fixtury
89
94
  dfn = schema.get_definition!(name)
90
95
  full_name = dfn.name
91
96
  ref = references[full_name]
92
- result = ref && ref != HOLDER
97
+ result = ref&.real?
93
98
  log { result ? "hit #{full_name}" : "miss #{full_name}" }
94
99
  result
95
100
  end
@@ -99,13 +104,13 @@ module Fixtury
99
104
  full_name = dfn.name
100
105
  ref = references[full_name]
101
106
 
102
- if ref == HOLDER
107
+ if ref&.holder?
103
108
  raise ::Fixtury::Errors::CircularDependencyError, full_name
104
109
  end
105
110
 
106
111
  if ref && auto_refresh_expired && ref_expired?(ref)
107
112
  log { "refreshing #{full_name}" }
108
- clear_ref(ref)
113
+ clear_ref(full_name)
109
114
  ref = nil
110
115
  end
111
116
 
@@ -114,15 +119,15 @@ module Fixtury
114
119
  if ref
115
120
  log { "hit #{full_name}" }
116
121
  value = load_ref(ref.value)
117
- unless value
122
+ if value.nil?
118
123
  clear_ref(full_name)
119
124
  log { "missing #{full_name}" }
120
125
  end
121
126
  end
122
127
 
123
128
  if value.nil?
124
- # set the references to HOLDER so any recursive behavior ends up hitting a circular dependency error if the same fixture load is attempted
125
- references[full_name] = HOLDER
129
+ # set the references to a holder value so any recursive behavior ends up hitting a circular dependency error if the same fixture load is attempted
130
+ references[full_name] = ::Fixtury::Reference.holder(full_name)
126
131
 
127
132
  value = dfn.call(store: self, execution_context: execution_context)
128
133
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Fixtury
4
4
 
5
- VERSION = "0.1.0.alpha"
5
+ VERSION = "0.1.0.alpha2"
6
6
 
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fixtury
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.alpha
4
+ version: 0.1.0.alpha2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Nelson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-07 00:00:00.000000000 Z
11
+ date: 2020-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: autotest