golly-utils 0.0.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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