golly-utils 0.0.1 → 0.6.0
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.
- data/.corvid/Gemfile +28 -0
- data/.corvid/features.yml +4 -0
- data/.corvid/plugins.yml +4 -0
- data/.corvid/stats_cfg.rb +13 -0
- data/.corvid/todo_cfg.rb +15 -0
- data/.corvid/versions.yml +2 -0
- data/.simplecov +6 -3
- data/CHANGELOG.md +45 -2
- data/Gemfile +6 -3
- data/Gemfile.lock +34 -37
- data/Guardfile +10 -4
- data/RELEASE.md +2 -0
- data/Rakefile +1 -1
- data/golly-utils.gemspec +19 -10
- data/lib/golly-utils/attr_declarative.rb +120 -49
- data/lib/golly-utils/callbacks.rb +211 -19
- data/lib/golly-utils/child_process.rb +28 -8
- data/lib/golly-utils/delegator.rb +14 -3
- data/lib/golly-utils/ruby_ext/classes_and_types.rb +120 -0
- data/lib/golly-utils/ruby_ext/enumerable.rb +16 -0
- data/lib/golly-utils/ruby_ext/env_helpers.rb +17 -0
- data/lib/golly-utils/ruby_ext/kernel.rb +18 -0
- data/lib/golly-utils/ruby_ext/options.rb +28 -0
- data/lib/golly-utils/ruby_ext/pretty_error_messages.rb +1 -1
- data/lib/golly-utils/singleton.rb +130 -0
- data/lib/golly-utils/testing/dynamic_fixtures.rb +268 -0
- data/lib/golly-utils/testing/file_helpers.rb +117 -0
- data/lib/golly-utils/testing/helpers_base.rb +20 -0
- data/lib/golly-utils/testing/rspec/arrays.rb +85 -0
- data/lib/golly-utils/testing/rspec/base.rb +9 -0
- data/lib/golly-utils/testing/rspec/deferrable_specs.rb +111 -0
- data/lib/golly-utils/testing/rspec/files.rb +262 -0
- data/lib/golly-utils/{test/spec → testing/rspec}/within_time.rb +17 -7
- data/lib/golly-utils/version.rb +2 -1
- data/test/bootstrap/all.rb +8 -1
- data/test/bootstrap/spec.rb +1 -1
- data/test/bootstrap/unit.rb +1 -1
- data/test/spec/child_process_spec.rb +1 -1
- data/test/spec/testing/dynamic_fixtures_spec.rb +131 -0
- data/test/spec/testing/rspec/arrays_spec.rb +33 -0
- data/test/spec/testing/rspec/files_spec.rb +300 -0
- data/test/unit/attr_declarative_test.rb +79 -13
- data/test/unit/callbacks_test.rb +103 -5
- data/test/unit/delegator_test.rb +25 -1
- data/test/unit/ruby_ext/classes_and_types_test.rb +103 -0
- data/test/unit/ruby_ext/enumerable_test.rb +12 -0
- data/test/unit/ruby_ext/options_test.rb +29 -0
- data/test/unit/singleton_test.rb +59 -0
- metadata +100 -10
- data/Gemfile.corvid +0 -27
- data/lib/golly-utils/ruby_ext.rb +0 -2
- data/lib/golly-utils/ruby_ext/subclasses.rb +0 -17
- data/lib/golly-utils/test/spec/deferrable_specs.rb +0 -85
- data/test/unit/ruby_ext/subclasses_test.rb +0 -24
@@ -0,0 +1,59 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require_relative '../bootstrap/unit'
|
3
|
+
require 'golly-utils/singleton'
|
4
|
+
|
5
|
+
class SingletonTest < MiniTest::Unit::TestCase
|
6
|
+
|
7
|
+
class SymphonyX
|
8
|
+
include GollyUtils::Singleton
|
9
|
+
attr_accessor :hehe
|
10
|
+
def hi; 123 end
|
11
|
+
|
12
|
+
def class_lvl; false end; def self.class_lvl; true end
|
13
|
+
|
14
|
+
hide_singleton_methods /^ignore/
|
15
|
+
def ignore_me; nil end
|
16
|
+
def me_too; nil end
|
17
|
+
hide_singleton_methods 'me_too'
|
18
|
+
end
|
19
|
+
|
20
|
+
class SomeOtherClass
|
21
|
+
SymphonyX.def_accessor self
|
22
|
+
SymphonyX.def_accessor self, :ahh
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_ruby_singleton
|
26
|
+
mods= SymphonyX.included_modules.map(&:to_s)
|
27
|
+
assert mods.include?('Singleton'), "Doesn't extend Ruby Singleton. #{mods.sort.inspect}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_provides_class_level_access
|
31
|
+
assert_equal 123, SymphonyX.hi
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_doesnt_override_class_methods
|
35
|
+
assert_equal true, SymphonyX.class_lvl, "Should be calling self.class_lvl, not the instance method."
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_hides_methods_by_regex
|
39
|
+
assert_raises(NoMethodError){ SymphonyX.ignore_me }
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_hides_methods_by_string
|
43
|
+
assert_raises(NoMethodError){ SymphonyX.me_too }
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_accessor_with_default_name
|
47
|
+
a= SomeOtherClass.new
|
48
|
+
assert_equal SymphonyX.instance, a.symphony_x
|
49
|
+
a.symphony_x= 123
|
50
|
+
assert_equal 123, a.symphony_x
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_accessor_with_name
|
54
|
+
a= SomeOtherClass.new
|
55
|
+
assert_equal SymphonyX.instance, a.ahh
|
56
|
+
a.ahh= 123
|
57
|
+
assert_equal 123, a.ahh
|
58
|
+
end
|
59
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: golly-utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.6.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,72 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
13
|
-
dependencies:
|
12
|
+
date: 2012-09-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: corvid
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: minitest
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
14
78
|
description: This contains a bunch of shared, utility code that has no external dependencies
|
15
79
|
apart from Ruby stdlib.
|
16
80
|
email:
|
@@ -19,6 +83,12 @@ executables: []
|
|
19
83
|
extensions: []
|
20
84
|
extra_rdoc_files: []
|
21
85
|
files:
|
86
|
+
- .corvid/Gemfile
|
87
|
+
- .corvid/features.yml
|
88
|
+
- .corvid/plugins.yml
|
89
|
+
- .corvid/stats_cfg.rb
|
90
|
+
- .corvid/todo_cfg.rb
|
91
|
+
- .corvid/versions.yml
|
22
92
|
- .gitignore
|
23
93
|
- .rspec
|
24
94
|
- .simplecov
|
@@ -26,7 +96,6 @@ files:
|
|
26
96
|
- .yardopts
|
27
97
|
- CHANGELOG.md
|
28
98
|
- Gemfile
|
29
|
-
- Gemfile.corvid
|
30
99
|
- Gemfile.lock
|
31
100
|
- Guardfile
|
32
101
|
- README.md
|
@@ -45,28 +114,43 @@ files:
|
|
45
114
|
- lib/golly-utils/colourer.rb
|
46
115
|
- lib/golly-utils/delegator.rb
|
47
116
|
- lib/golly-utils/multi_io.rb
|
48
|
-
- lib/golly-utils/ruby_ext.rb
|
49
117
|
- lib/golly-utils/ruby_ext/array_to_hash.rb
|
118
|
+
- lib/golly-utils/ruby_ext/classes_and_types.rb
|
50
119
|
- lib/golly-utils/ruby_ext/deep_dup.rb
|
120
|
+
- lib/golly-utils/ruby_ext/enumerable.rb
|
51
121
|
- lib/golly-utils/ruby_ext/env_helpers.rb
|
52
122
|
- lib/golly-utils/ruby_ext/hash_combinations.rb
|
123
|
+
- lib/golly-utils/ruby_ext/kernel.rb
|
124
|
+
- lib/golly-utils/ruby_ext/options.rb
|
53
125
|
- lib/golly-utils/ruby_ext/pretty_error_messages.rb
|
54
|
-
- lib/golly-utils/
|
55
|
-
- lib/golly-utils/
|
56
|
-
- lib/golly-utils/
|
126
|
+
- lib/golly-utils/singleton.rb
|
127
|
+
- lib/golly-utils/testing/dynamic_fixtures.rb
|
128
|
+
- lib/golly-utils/testing/file_helpers.rb
|
129
|
+
- lib/golly-utils/testing/helpers_base.rb
|
130
|
+
- lib/golly-utils/testing/rspec/arrays.rb
|
131
|
+
- lib/golly-utils/testing/rspec/base.rb
|
132
|
+
- lib/golly-utils/testing/rspec/deferrable_specs.rb
|
133
|
+
- lib/golly-utils/testing/rspec/files.rb
|
134
|
+
- lib/golly-utils/testing/rspec/within_time.rb
|
57
135
|
- lib/golly-utils/version.rb
|
58
136
|
- test/bootstrap/all.rb
|
59
137
|
- test/bootstrap/spec.rb
|
60
138
|
- test/bootstrap/unit.rb
|
61
139
|
- test/spec/child_process_mock_target.rb
|
62
140
|
- test/spec/child_process_spec.rb
|
141
|
+
- test/spec/testing/dynamic_fixtures_spec.rb
|
142
|
+
- test/spec/testing/rspec/arrays_spec.rb
|
143
|
+
- test/spec/testing/rspec/files_spec.rb
|
63
144
|
- test/unit/attr_declarative_test.rb
|
64
145
|
- test/unit/callbacks_test.rb
|
65
146
|
- test/unit/delegator_test.rb
|
66
147
|
- test/unit/multi_io_test.rb
|
148
|
+
- test/unit/ruby_ext/classes_and_types_test.rb
|
149
|
+
- test/unit/ruby_ext/enumerable_test.rb
|
67
150
|
- test/unit/ruby_ext/env_helpers_test.rb
|
68
151
|
- test/unit/ruby_ext/hash_combinations_test.rb
|
69
|
-
- test/unit/ruby_ext/
|
152
|
+
- test/unit/ruby_ext/options_test.rb
|
153
|
+
- test/unit/singleton_test.rb
|
70
154
|
homepage: https://github.com/japgolly/golly-utils
|
71
155
|
licenses: []
|
72
156
|
post_install_message:
|
@@ -97,11 +181,17 @@ test_files:
|
|
97
181
|
- test/bootstrap/unit.rb
|
98
182
|
- test/spec/child_process_mock_target.rb
|
99
183
|
- test/spec/child_process_spec.rb
|
184
|
+
- test/spec/testing/dynamic_fixtures_spec.rb
|
185
|
+
- test/spec/testing/rspec/arrays_spec.rb
|
186
|
+
- test/spec/testing/rspec/files_spec.rb
|
100
187
|
- test/unit/attr_declarative_test.rb
|
101
188
|
- test/unit/callbacks_test.rb
|
102
189
|
- test/unit/delegator_test.rb
|
103
190
|
- test/unit/multi_io_test.rb
|
191
|
+
- test/unit/ruby_ext/classes_and_types_test.rb
|
192
|
+
- test/unit/ruby_ext/enumerable_test.rb
|
104
193
|
- test/unit/ruby_ext/env_helpers_test.rb
|
105
194
|
- test/unit/ruby_ext/hash_combinations_test.rb
|
106
|
-
- test/unit/ruby_ext/
|
195
|
+
- test/unit/ruby_ext/options_test.rb
|
196
|
+
- test/unit/singleton_test.rb
|
107
197
|
has_rdoc:
|
data/Gemfile.corvid
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# This file is generated by corvid update:deps
|
2
|
-
|
3
|
-
gem "corvid", git: 'git://github.com/japgolly/corvid.git'
|
4
|
-
#gem "corvid", path: "/home/golly/projects/corvid"
|
5
|
-
#gem "corvid", ">= 0.0.1"
|
6
|
-
group :debug do
|
7
|
-
gem "debugger", platforms: :mri
|
8
|
-
end
|
9
|
-
group :doc do
|
10
|
-
gem "yard"
|
11
|
-
end
|
12
|
-
group :rake do
|
13
|
-
gem "rake"
|
14
|
-
end
|
15
|
-
group :test do
|
16
|
-
gem "ci_reporter", require: false
|
17
|
-
gem "simplecov", ">= 0.6.4", require: false
|
18
|
-
end
|
19
|
-
group :test_spec do
|
20
|
-
gem "guard-rspec", require: false
|
21
|
-
gem "rspec"
|
22
|
-
end
|
23
|
-
group :test_unit do
|
24
|
-
gem "guard-minitest", ">= 0.5.0", require: false
|
25
|
-
gem "minitest"
|
26
|
-
gem "turn"
|
27
|
-
end
|
data/lib/golly-utils/ruby_ext.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
class Class
|
2
|
-
def inherited other
|
3
|
-
super if defined? super
|
4
|
-
ensure
|
5
|
-
( @subclasses ||= [] ).push(other).uniq!
|
6
|
-
end
|
7
|
-
|
8
|
-
# Returns a list of classes that extend this class, directly or indirectly (as in subclasses of subclasses).
|
9
|
-
#
|
10
|
-
# @return [Array<Class>]
|
11
|
-
def subclasses(include_subclassed_nodes = false)
|
12
|
-
@subclasses ||= []
|
13
|
-
classes= @subclasses.inject( [] ) {|list, subclass| list.push subclass, *subclass.subclasses }
|
14
|
-
classes.reject! {|c| classes.any?{|i| c != i and c.subclasses.include?(i) }} unless include_subclassed_nodes
|
15
|
-
classes
|
16
|
-
end
|
17
|
-
end
|
@@ -1,85 +0,0 @@
|
|
1
|
-
module GollyUtils
|
2
|
-
|
3
|
-
# With this module you can create specs that don't start running until manually started elsewhere in another spec.
|
4
|
-
#
|
5
|
-
# This is only really useful when writing integration tests in spec format, where specs (aka examples) are not
|
6
|
-
# isolated tests but single components of a larger-scale test. This is especially the case when checking
|
7
|
-
# asynchronous events, or managing dependencies on state of an external entity.
|
8
|
-
#
|
9
|
-
# ### Usage:
|
10
|
-
# * Extend `GollyUtils::DeferrableSpecs`
|
11
|
-
# * Create specs/examples using `deferrable_spec`
|
12
|
-
# * In other specs/examples, call `start_deferred_test` to start deferred tests.
|
13
|
-
#
|
14
|
-
# @example
|
15
|
-
# describe 'Integration test #2' do
|
16
|
-
# extend GollyUtils::DeferrableSpecs
|
17
|
-
#
|
18
|
-
# it("Register client, notices and default prefs") do
|
19
|
-
# scenario.register_client
|
20
|
-
# scenario.register_notification_groups
|
21
|
-
# scenario.register_notices
|
22
|
-
# scenario.set_default_preferences
|
23
|
-
#
|
24
|
-
# start_deferred_test :email1
|
25
|
-
# start_deferred_test :email2
|
26
|
-
# start_deferred_test :mq
|
27
|
-
# end
|
28
|
-
#
|
29
|
-
# # Deferred until registration of client, notices and preferences are complete
|
30
|
-
# deferrable_spec(:email1, "Sends emails (to unregistered contacts)") do
|
31
|
-
# assert_sends_email ...
|
32
|
-
# end
|
33
|
-
#
|
34
|
-
# ...
|
35
|
-
#
|
36
|
-
# end
|
37
|
-
module DeferrableSpecs
|
38
|
-
def self.extended(base)
|
39
|
-
base.send :include, InstanceMethods
|
40
|
-
base.extend ClassMethods
|
41
|
-
base.instance_eval{ @deferrable_specs= {} }
|
42
|
-
end
|
43
|
-
|
44
|
-
module ClassMethods
|
45
|
-
attr_reader :deferrable_specs
|
46
|
-
|
47
|
-
def deferrable_spec(key, name, &block)
|
48
|
-
deferrable_specs[key]= {block: block}
|
49
|
-
class_eval <<-EOB
|
50
|
-
it(#{name.inspect}){ deferred_join #{key.inspect} }
|
51
|
-
EOB
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
module InstanceMethods
|
57
|
-
|
58
|
-
def start_deferred_tests(first_key,*other_keys)
|
59
|
-
([first_key]+other_keys).flatten.uniq.each do |key|
|
60
|
-
raise "Unknown defferable test: #{key}" unless d= self.class.deferrable_specs[key]
|
61
|
-
raise "Test already started: #{key}" if d[:thread]
|
62
|
-
raise "Test block missing." unless b= d[:block]
|
63
|
-
s= self.dup
|
64
|
-
d[:thread]= Thread.new{ s.instance_eval &b }
|
65
|
-
end
|
66
|
-
true
|
67
|
-
end
|
68
|
-
|
69
|
-
alias start_deferred_test start_deferred_tests
|
70
|
-
|
71
|
-
def deferred_join(key)
|
72
|
-
raise "Unknown defferable test: #{key}" unless d= self.class.deferrable_specs[key]
|
73
|
-
if t= d[:thread]
|
74
|
-
t.join
|
75
|
-
else
|
76
|
-
#raise "Test hasn't started: #{key}"
|
77
|
-
warn "Deferrable spec #{key.inspect} wasn't deferred. Start it elsewhere with start_deferred_test #{key.inspect}"
|
78
|
-
raise "Test block missing." unless b= d[:block]
|
79
|
-
b.call
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require_relative '../../bootstrap/unit'
|
3
|
-
require 'golly-utils/ruby_ext/subclasses'
|
4
|
-
|
5
|
-
class SubclassesTest < MiniTest::Unit::TestCase
|
6
|
-
class A; end
|
7
|
-
class B < A; end
|
8
|
-
class C < A; end
|
9
|
-
class B1 < B; end
|
10
|
-
class B2 < B; end
|
11
|
-
|
12
|
-
def assert_arrays(exp,act)
|
13
|
-
v= [exp,act].map{|a| a.sort_by(&:to_s) }
|
14
|
-
assert_equal *v
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_all_subclasses
|
18
|
-
assert_arrays [B,C,B1,B2], A.subclasses(true)
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_leaf_nodes_only
|
22
|
-
assert_arrays [C,B1,B2], A.subclasses
|
23
|
-
end
|
24
|
-
end
|