class_spec_helper 1.0.0 → 1.1.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: b8638213951339c30d2d985e7cda10f3857c41575c2ba9409c0d3ef166468b92
4
- data.tar.gz: 64299b1761a7d59974b3582266f7304b968408d204c18406c7c01b550045d244
3
+ metadata.gz: 77fafc1edfe0284bb0071806d91869a50796b28873c6477efaa8479517f85e51
4
+ data.tar.gz: 150badef8cbdd0a239c4d8dd35ccf0c38412111ad1233a75fb6c4a7029280ee4
5
5
  SHA512:
6
- metadata.gz: 6defe9ad81d470ad0a6e0e0d20cbb6cc016b0155a9389ebf386b97b3dd82526d52a37be92431b78a335b14ef1d89adf44a4fda14f98d2b00aaa4aa7c0526c8e0
7
- data.tar.gz: 96db5f7019a128090a84505e0e3a7a8562a02f7cb3f38ba24e1dcd556db01f1546a6c8a94db368c667c2d32be0040a45d0cf7738ade6c73c98f3a89358804b3b
6
+ metadata.gz: fb049001110324fbfc49d65f9289ffd9110c232e7590c5866097b7d50f922d4bb9c7cec447b679d22dbaa482f364244ab5156f957fff78be219ef19c0ead3978
7
+ data.tar.gz: 23c0f42608ef65be9e75a95234ef7ec4a34881a3f34504cba5350138380d251d858706cd7146a635936763fdbd91577660d2004d926e045e2f5f0db8aeb5d93a
data/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.1.1](https://github.com/craigulliott/class_spec_helper/compare/v1.1.0...v1.1.1) (2023-07-17)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * can now correctly build the new requested class if it is namespaced within already existing classes ([505b8c9](https://github.com/craigulliott/class_spec_helper/commit/505b8c9e07b3a326ac646c90ebb3b537df9d0981))
9
+
10
+ ## [1.1.0](https://github.com/craigulliott/class_spec_helper/compare/v1.0.0...v1.1.0) (2023-07-17)
11
+
12
+
13
+ ### Features
14
+
15
+ * manually running the garbage collector to allow for more reliable use of `ObjectSpace` ([87652cb](https://github.com/craigulliott/class_spec_helper/commit/87652cbd601348afbf21f4913483aa558f30d87e))
16
+
3
17
  ## 1.0.0 (2023-07-13)
4
18
 
5
19
 
data/README.md CHANGED
@@ -51,11 +51,22 @@ require "class_spec_helper"
51
51
 
52
52
  RSpec.configure do |config|
53
53
 
54
- # make class_spec_helper conveniently accessable within your test suite
54
+ # make class_spec_helper conveniently accessible within your test suite
55
55
  config.add_setting :class_spec_helper
56
56
  config.class_spec_helper = ClassSpecHelper.new
57
57
 
58
- # destroy these dyanmically created classes after each test
58
+ # Run the garbage collector before each test. As long as there are no
59
+ # references in your code to the classes you created during your tests
60
+ # then this will help ensure that your classes are also completely destroyed.
61
+ #
62
+ # If you do not do this, then your deleted classes may still be available
63
+ # in `ObjectSpace` until the garbage collector runs. Adding this to your
64
+ # rspec is necessary if your code relies on `ObjectSpace`.
65
+ config.before(:each) do
66
+ ObjectSpace.garbage_collect
67
+ end
68
+
69
+ # destroy these dynamically created classes after each test
59
70
  config.after(:each) do
60
71
  config.class_spec_helper.remove_all_dynamically_created_classes
61
72
  end
@@ -36,11 +36,21 @@ class ClassSpecHelper
36
36
  # is this class nested within a namespace?
37
37
  is_namespaced = module_names.any?
38
38
  if is_namespaced
39
+ first_name = module_names.shift
40
+ # keep track of the namespace
41
+ namespace = "::#{first_name}"
42
+ # does this exist, and is it a class
43
+ is_class = Module.const_defined?(namespace) && Module.const_get(namespace).is_a?(Class)
39
44
  # first module is always prepended by a "::" to ensure it is at the top most level
40
- eval_code_lines << "module ::#{module_names.shift}"
45
+ eval_code_lines << "#{is_class ? "class" : "module"} ::#{first_name}"
41
46
  # each remaining module name is just nested within this top most module
42
47
  module_names.each do |module_name|
43
- eval_code_lines << "module #{module_name}"
48
+ # keep building the namespace we we go
49
+ namespace = "#{namespace}::#{module_name}"
50
+ # does this exist, and is it a class
51
+ is_class = is_class = Module.const_defined?(namespace) && Module.const_get(namespace).is_a?(Class)
52
+ # add the next line
53
+ eval_code_lines << "#{is_class ? "class" : "module"} #{module_name}"
44
54
  end
45
55
  end
46
56
  # the class definition
@@ -67,6 +77,16 @@ class ClassSpecHelper
67
77
 
68
78
  # finish building the class
69
79
  klass.class_eval(&block) if block
80
+
81
+ # If we are using this in a test suite and the same class names are being used
82
+ # between each test, then after creation has proven to be a good time to run the
83
+ # garbage collector manually. It is very likely that all references to the old
84
+ # class are gone at this point.
85
+ #
86
+ # We do this because it is possibe that this is being used within a test suite
87
+ # for an application which makes use of `ObjectSpace`, and deleted classes will
88
+ # still be available in `ObjectSpace` until the garbage collector runs.
89
+ ObjectSpace.garbage_collect
70
90
  end
71
91
  end
72
92
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ClassSpecHelper
4
- VERSION = "1.0.0"
4
+ VERSION = "1.1.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: class_spec_helper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Craig Ulliott
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-13 00:00:00.000000000 Z
11
+ date: 2023-07-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Ruby gem to create named classes for use within your specs, and then
14
14
  clear them out automatically between specs.