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.
Files changed (54) hide show
  1. data/.corvid/Gemfile +28 -0
  2. data/.corvid/features.yml +4 -0
  3. data/.corvid/plugins.yml +4 -0
  4. data/.corvid/stats_cfg.rb +13 -0
  5. data/.corvid/todo_cfg.rb +15 -0
  6. data/.corvid/versions.yml +2 -0
  7. data/.simplecov +6 -3
  8. data/CHANGELOG.md +45 -2
  9. data/Gemfile +6 -3
  10. data/Gemfile.lock +34 -37
  11. data/Guardfile +10 -4
  12. data/RELEASE.md +2 -0
  13. data/Rakefile +1 -1
  14. data/golly-utils.gemspec +19 -10
  15. data/lib/golly-utils/attr_declarative.rb +120 -49
  16. data/lib/golly-utils/callbacks.rb +211 -19
  17. data/lib/golly-utils/child_process.rb +28 -8
  18. data/lib/golly-utils/delegator.rb +14 -3
  19. data/lib/golly-utils/ruby_ext/classes_and_types.rb +120 -0
  20. data/lib/golly-utils/ruby_ext/enumerable.rb +16 -0
  21. data/lib/golly-utils/ruby_ext/env_helpers.rb +17 -0
  22. data/lib/golly-utils/ruby_ext/kernel.rb +18 -0
  23. data/lib/golly-utils/ruby_ext/options.rb +28 -0
  24. data/lib/golly-utils/ruby_ext/pretty_error_messages.rb +1 -1
  25. data/lib/golly-utils/singleton.rb +130 -0
  26. data/lib/golly-utils/testing/dynamic_fixtures.rb +268 -0
  27. data/lib/golly-utils/testing/file_helpers.rb +117 -0
  28. data/lib/golly-utils/testing/helpers_base.rb +20 -0
  29. data/lib/golly-utils/testing/rspec/arrays.rb +85 -0
  30. data/lib/golly-utils/testing/rspec/base.rb +9 -0
  31. data/lib/golly-utils/testing/rspec/deferrable_specs.rb +111 -0
  32. data/lib/golly-utils/testing/rspec/files.rb +262 -0
  33. data/lib/golly-utils/{test/spec → testing/rspec}/within_time.rb +17 -7
  34. data/lib/golly-utils/version.rb +2 -1
  35. data/test/bootstrap/all.rb +8 -1
  36. data/test/bootstrap/spec.rb +1 -1
  37. data/test/bootstrap/unit.rb +1 -1
  38. data/test/spec/child_process_spec.rb +1 -1
  39. data/test/spec/testing/dynamic_fixtures_spec.rb +131 -0
  40. data/test/spec/testing/rspec/arrays_spec.rb +33 -0
  41. data/test/spec/testing/rspec/files_spec.rb +300 -0
  42. data/test/unit/attr_declarative_test.rb +79 -13
  43. data/test/unit/callbacks_test.rb +103 -5
  44. data/test/unit/delegator_test.rb +25 -1
  45. data/test/unit/ruby_ext/classes_and_types_test.rb +103 -0
  46. data/test/unit/ruby_ext/enumerable_test.rb +12 -0
  47. data/test/unit/ruby_ext/options_test.rb +29 -0
  48. data/test/unit/singleton_test.rb +59 -0
  49. metadata +100 -10
  50. data/Gemfile.corvid +0 -27
  51. data/lib/golly-utils/ruby_ext.rb +0 -2
  52. data/lib/golly-utils/ruby_ext/subclasses.rb +0 -17
  53. data/lib/golly-utils/test/spec/deferrable_specs.rb +0 -85
  54. 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.1
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-07-16 00:00:00.000000000 Z
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/ruby_ext/subclasses.rb
55
- - lib/golly-utils/test/spec/deferrable_specs.rb
56
- - lib/golly-utils/test/spec/within_time.rb
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/subclasses_test.rb
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/subclasses_test.rb
195
+ - test/unit/ruby_ext/options_test.rb
196
+ - test/unit/singleton_test.rb
107
197
  has_rdoc:
@@ -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
@@ -1,2 +0,0 @@
1
- Dir[File.expand_path("../ruby_ext",__FILE__) + '/**/*.rb'].each {|f| require f}
2
-
@@ -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