fixtury 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 43cad01d0dda49953fb41782235cb0786d60a0b84eb3d8e9f4145d6fa4268f04
4
- data.tar.gz: 5f4347bcf7a8ef5b7c72d42802e260f7ecc1b0e8d3772f4681bbef2aa7e9a963
3
+ metadata.gz: 9090092db55914068c6478939047d638ee8bb678ee53a41f0d36380bf2df7dea
4
+ data.tar.gz: 4e58164635a72d63e059a5622b1c867556235ba09537e127b5498f94a3bf8e60
5
5
  SHA512:
6
- metadata.gz: adc92b02ad90ae0afd4f4b10d146e26663d3dfd0d428f9739d9cfcf147dde7d2e09b05f84e956f116af62123477bc453f343ca3bda0a3bf17ae6d7edf61d7f35
7
- data.tar.gz: 4a5720793e764bc4f366512b8d172b31d64b68c89abd86862d2d199f68bd36b590e706bba56c8fa5471d071c5d84e370c30de0b7bf93109df3476d75caf22dca
6
+ metadata.gz: 05e1ddd158beafe83cbe9e9d32abf10a49dcdb59709cc372f31a29a1a52c3eafe0b802eba8015ccdb429444678d94941db42dedb6202396b958c8d53d2e6f9d2
7
+ data.tar.gz: 70e2abc1abc6324e3523631a6f2caf936d0b0859eeb14b41fec843b766bf648d047b1e09e9d9bb6da60131f06be23e7e02c1adcf86be30910387581b7e191d3e
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fixtury (0.1.0)
4
+ fixtury (0.2.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -80,7 +80,7 @@ module Fixtury
80
80
  def clear_cache!(pattern: nil)
81
81
  pattern ||= "*"
82
82
  pattern = "/" + pattern unless pattern.start_with?("/")
83
- glob = pattern.ends_with?("*")
83
+ glob = pattern.end_with?("*")
84
84
  pattern = pattern[0...-1] if glob
85
85
  references.delete_if do |key, _value|
86
86
  hit = glob ? key.start_with?(pattern) : key == pattern
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "fixtury/store"
4
+ require "active_support/core_ext/class/attribute"
4
5
 
5
6
  module Fixtury
6
7
  module TestHooks
@@ -14,36 +15,64 @@ module Fixtury
14
15
 
15
16
  module ClassMethods
16
17
 
17
- def fixtury(*names)
18
- self.fixtury_dependencies += names.flatten.compact.map(&:to_s)
19
- end
18
+ def fixtury(*names, &definition)
19
+ opts = names.extract_options!
20
+
21
+ # define fixtures if blocks are given
22
+ if block_given?
23
+ raise ArgumentError, "A fixture cannot be defined in an anonymous class" if name.nil?
24
+
25
+ namespace = name.underscore
20
26
 
21
- def define_fixture(name, &block)
22
- fixture_name = name
23
- namespace_names = self.name.underscore.split("/")
27
+ ns = ::Fixtury.schema
24
28
 
25
- ns = ::Fixtury.schema
29
+ namespace.split("/").each do |ns_name|
30
+ ns = ns.namespace(ns_name){}
31
+ end
26
32
 
27
- namespace_names.each do |ns_name|
28
- ns = ns.namespace(ns_name){}
33
+ names.each do |fixture_name|
34
+ ns.fixture(fixture_name, &definition)
35
+ self.fixtury_dependencies += ["#{namespace}/#{fixture_name}"]
36
+ end
37
+
38
+ # otherwise, just record the dependency
39
+ else
40
+ self.fixtury_dependencies += names.flatten.compact.map(&:to_s)
29
41
  end
30
42
 
31
- ns.fixture(fixture_name, &block)
43
+ if opts[:accessor]
44
+
45
+ if opts[:accessor] != true && names.length > 1
46
+ raise ArgumentError, "A named :accessor option is only available when providing one fixture"
47
+ end
32
48
 
33
- fixtury("#{namespace_names.join("/")}/#{fixture_name}")
49
+ names.each do |fixture_name|
50
+ method_name = opts[:accessor] == true ? fixture_name.split("/").last : opts[:accessor]
51
+ ivar = :"@#{method_name}"
52
+
53
+ class_eval <<-EV, __FILE__, __LINE__ + 1
54
+ def #{method_name}
55
+ return #{ivar} if defined?(#{ivar})
56
+
57
+ value = fixtury("#{fixture_name}")
58
+ #{ivar} = value
59
+ end
60
+ EV
61
+ end
62
+ end
34
63
  end
35
64
 
36
65
  end
37
66
 
38
67
  def fixtury(name)
39
- return nil unless ::Fixtury::Store.instance
68
+ return nil unless fixtury_store
40
69
 
41
70
  name = name.to_s
42
71
 
43
72
  unless name.include?("/")
44
73
  local_name = "#{self.class.name.underscore}/#{name}"
45
74
  if self.fixtury_dependencies.include?(local_name)
46
- return ::Fixtury::Store.instance.get(local_name)
75
+ return fixtury_store.get(local_name)
47
76
  end
48
77
  end
49
78
 
@@ -51,13 +80,17 @@ module Fixtury
51
80
  raise ArgumentError, "Unrecognized fixtury dependency `#{name}` for #{self.class}"
52
81
  end
53
82
 
54
- ::Fixtury::Store.instance.get(name)
83
+ fixtury_store.get(name)
84
+ end
85
+
86
+ def fixtury_store
87
+ ::Fixtury::Store.instance
55
88
  end
56
89
 
57
90
  def fixtury_loaded?(name)
58
- return false unless ::Fixtury::Store.instance
91
+ return false unless fixtury_store
59
92
 
60
- ::Fixtury::Store.instance.loaded?(name)
93
+ fixtury_store.loaded?(name)
61
94
  end
62
95
 
63
96
  def fixtury_database_connections
@@ -100,9 +133,9 @@ module Fixtury
100
133
  end
101
134
 
102
135
  def clear_expired_fixtury_fixtures!
103
- return unless ::Fixtury::Store.instance
136
+ return unless fixtury_store
104
137
 
105
- ::Fixtury::Store.instance.clear_expired_references!
138
+ fixtury_store.clear_expired_references!
106
139
  end
107
140
 
108
141
  def load_all_fixtury_fixtures!
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Fixtury
4
4
 
5
- VERSION = "0.2.0"
5
+ VERSION = "0.2.1"
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.2.0
4
+ version: 0.2.1
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-10-08 00:00:00.000000000 Z
11
+ date: 2020-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: autotest