gorillib 0.0.7 → 0.0.8

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 (84) hide show
  1. data/.gitignore +49 -0
  2. data/.rspec +2 -0
  3. data/CHANGELOG.textile +49 -0
  4. data/Gemfile +15 -0
  5. data/Gemfile.lock +36 -0
  6. data/README.textile +6 -1
  7. data/Rakefile +42 -9
  8. data/VERSION +1 -1
  9. data/gorillib.gemspec +110 -73
  10. data/lib/gorillib/array/deep_compact.rb +3 -12
  11. data/lib/gorillib/datetime/#flat.rb# +30 -0
  12. data/lib/gorillib/datetime/flat.rb +2 -10
  13. data/lib/gorillib/datetime/parse.rb +3 -1
  14. data/lib/gorillib/enumerable/sum.rb +37 -35
  15. data/lib/gorillib/hash/deep_compact.rb +3 -13
  16. data/lib/gorillib/logger/log.rb +1 -1
  17. data/lib/gorillib/numeric/clamp.rb +9 -0
  18. data/lib/gorillib/object/try.rb +10 -0
  19. data/lib/gorillib/object/try_dup.rb +44 -0
  20. data/lib/gorillib/string/human.rb +1 -3
  21. data/lib/gorillib/string/truncate.rb +2 -2
  22. data/spec/array/compact_blank_spec.rb +37 -0
  23. data/spec/array/extract_options_spec.rb +47 -0
  24. data/spec/datetime/flat_spec.rb +38 -0
  25. data/spec/datetime/parse_spec.rb +48 -0
  26. data/spec/enumerable/sum_spec.rb +56 -0
  27. data/spec/hash/compact_spec.rb +70 -0
  28. data/spec/hash/deep_compact_spec.rb +37 -0
  29. data/spec/hash/deep_merge_spec.rb +117 -0
  30. data/spec/hash/keys_spec.rb +111 -0
  31. data/spec/hash/reverse_merge_spec.rb +25 -0
  32. data/spec/hash/slice_spec.rb +43 -0
  33. data/spec/hash/zip_spec.rb +31 -0
  34. data/spec/logger/log_spec.rb +31 -0
  35. data/spec/metaprogramming/aliasing_spec.rb +177 -0
  36. data/spec/metaprogramming/cattr_accessor_spec.rb +41 -0
  37. data/spec/metaprogramming/class_attribute_spec.rb +75 -0
  38. data/spec/metaprogramming/delegation_spec.rb +166 -0
  39. data/spec/metaprogramming/mattr_accessor_spec.rb +44 -0
  40. data/spec/metaprogramming/singleton_class_spec.rb +9 -0
  41. data/spec/{numeric_spec.rb → numeric/clamp_spec.rb} +2 -2
  42. data/spec/object/blank_spec.rb +93 -0
  43. data/spec/object/try_dup_spec.rb +47 -0
  44. data/spec/object/try_spec.rb +20 -0
  45. data/spec/spec_helper.rb +13 -8
  46. data/spec/string/constantize_spec.rb +56 -0
  47. data/spec/string/human_spec.rb +66 -0
  48. data/spec/string/inflections_spec.rb +74 -0
  49. data/{test → spec}/string/inflector_test_cases.rb +0 -0
  50. data/spec/string/truncate_spec.rb +42 -0
  51. data/spec/support/kcode_test_helper.rb +16 -0
  52. metadata +209 -96
  53. data/.document +0 -5
  54. data/fiddle/hubahuba.rb +0 -62
  55. data/spec/blank_spec.rb +0 -86
  56. data/spec/deep_compact_spec.rb +0 -36
  57. data/spec/gorillib_spec.rb +0 -7
  58. data/spec/rcov.opts +0 -6
  59. data/spec/spec.opts +0 -4
  60. data/spec/spec_tasks.rake +0 -15
  61. data/test/abstract_unit.rb +0 -25
  62. data/test/array/compact_blank_test.rb +0 -33
  63. data/test/array/extract_options_test.rb +0 -39
  64. data/test/datetime/flat_test.rb +0 -0
  65. data/test/datetime/parse_test.rb +0 -0
  66. data/test/enumerable/sum_test.rb +0 -50
  67. data/test/hash/compact_test.rb +0 -38
  68. data/test/hash/deep_merge_test.rb +0 -30
  69. data/test/hash/keys_test.rb +0 -110
  70. data/test/hash/reverse_merge_test.rb +0 -20
  71. data/test/hash/slice_test.rb +0 -47
  72. data/test/hash/zip_test.rb +0 -0
  73. data/test/logger/log_test.rb +0 -0
  74. data/test/metaprogramming/aliasing_test.rb +0 -188
  75. data/test/metaprogramming/cattr_accessor_test.rb +0 -38
  76. data/test/metaprogramming/class_attribute_test.rb +0 -73
  77. data/test/metaprogramming/delegation_test.rb +0 -166
  78. data/test/metaprogramming/mattr_accessor_test.rb +0 -40
  79. data/test/metaprogramming/singleton_class_test.rb +0 -9
  80. data/test/object/blank_test.rb +0 -22
  81. data/test/string/constantize_test.rb +0 -30
  82. data/test/string/human_test.rb +0 -65
  83. data/test/string/inflections_test.rb +0 -57
  84. data/test/string/truncate_test.rb +0 -37
@@ -1,166 +0,0 @@
1
- require File.dirname(__FILE__)+'/../abstract_unit'
2
- require 'gorillib/delegation'
3
-
4
- module One
5
- Constant1 = "Hello World"
6
- Constant2 = "What\'s up?"
7
- end
8
-
9
- class Ab
10
- include One
11
- Constant1 = "Hello World" # Will have different object id than One::Constant1
12
- Constant3 = "Goodbye World"
13
- end
14
-
15
- module Xy
16
- class Bc
17
- include One
18
- end
19
- end
20
-
21
- module Yz
22
- module Zy
23
- class Cd
24
- include One
25
- end
26
- end
27
- end
28
-
29
- Somewhere = Struct.new(:street, :city)
30
-
31
- Someone = Struct.new(:name, :place) do
32
- delegate :street, :city, :to_f, :to => :place
33
- delegate :upcase, :to => "place.city"
34
- end
35
-
36
- Invoice = Struct.new(:client) do
37
- delegate :street, :city, :name, :to => :client, :prefix => true
38
- delegate :street, :city, :name, :to => :client, :prefix => :customer
39
- end
40
-
41
- Project = Struct.new(:description, :person) do
42
- delegate :name, :to => :person, :allow_nil => true
43
- delegate :to_f, :to => :description, :allow_nil => true
44
- end
45
-
46
- Developer = Struct.new(:client) do
47
- delegate :name, :to => :client, :prefix => nil
48
- end
49
-
50
- Tester = Struct.new(:client) do
51
- delegate :name, :to => :client, :prefix => false
52
- end
53
-
54
- class Name
55
- delegate :upcase, :to => :@full_name
56
-
57
- def initialize(first, last)
58
- @full_name = "#{first} #{last}"
59
- end
60
- end
61
-
62
- class ModuleTest < Test::Unit::TestCase
63
- def setup
64
- @david = Someone.new("David", Somewhere.new("Paulina", "Chicago"))
65
- end
66
-
67
- def test_delegation_to_methods
68
- assert_equal "Paulina", @david.street
69
- assert_equal "Chicago", @david.city
70
- end
71
-
72
- def test_delegation_down_hierarchy
73
- assert_equal "CHICAGO", @david.upcase
74
- end
75
-
76
- def test_delegation_to_instance_variable
77
- david = Name.new("David", "Hansson")
78
- assert_equal "DAVID HANSSON", david.upcase
79
- end
80
-
81
- def test_missing_delegation_target
82
- assert_raise(ArgumentError) do
83
- Name.send :delegate, :nowhere
84
- end
85
- assert_raise(ArgumentError) do
86
- Name.send :delegate, :noplace, :tos => :hollywood
87
- end
88
- end
89
-
90
- def test_delegation_prefix
91
- invoice = Invoice.new(@david)
92
- assert_equal invoice.client_name, "David"
93
- assert_equal invoice.client_street, "Paulina"
94
- assert_equal invoice.client_city, "Chicago"
95
- end
96
-
97
- def test_delegation_custom_prefix
98
- invoice = Invoice.new(@david)
99
- assert_equal invoice.customer_name, "David"
100
- assert_equal invoice.customer_street, "Paulina"
101
- assert_equal invoice.customer_city, "Chicago"
102
- end
103
-
104
- def test_delegation_prefix_with_nil_or_false
105
- assert_equal Developer.new(@david).name, "David"
106
- assert_equal Tester.new(@david).name, "David"
107
- end
108
-
109
- def test_delegation_prefix_with_instance_variable
110
- assert_raise ArgumentError do
111
- Class.new do
112
- def initialize(client)
113
- @client = client
114
- end
115
- delegate :name, :address, :to => :@client, :prefix => true
116
- end
117
- end
118
- end
119
-
120
- def test_delegation_with_allow_nil
121
- rails = Project.new("Rails", Someone.new("David"))
122
- assert_equal rails.name, "David"
123
- end
124
-
125
- def test_delegation_with_allow_nil_and_nil_value
126
- rails = Project.new("Rails")
127
- assert_nil rails.name
128
- end
129
-
130
- def test_delegation_with_allow_nil_and_nil_value_and_prefix
131
- Project.class_eval do
132
- delegate :name, :to => :person, :allow_nil => true, :prefix => true
133
- end
134
- rails = Project.new("Rails")
135
- assert_nil rails.person_name
136
- end
137
-
138
- def test_delegation_without_allow_nil_and_nil_value
139
- david = Someone.new("David")
140
- assert_raise(RuntimeError) { david.street }
141
- end
142
-
143
- def test_delegation_to_method_that_exists_on_nil
144
- nil_person = Someone.new(nil)
145
- assert_equal 0.0, nil_person.to_f
146
- end
147
-
148
- def test_delegation_to_method_that_exists_on_nil_when_allowing_nil
149
- nil_project = Project.new(nil)
150
- assert_equal 0.0, nil_project.to_f
151
- end
152
-
153
- def test_delegation_does_not_raise_error_when_removing_singleton_instance_methods
154
- parent = Class.new do
155
- def self.parent_method; end
156
- end
157
-
158
- assert_nothing_raised do
159
- Class.new(parent) do
160
- class << self
161
- delegate :parent_method, :to => :superclass
162
- end
163
- end
164
- end
165
- end
166
- end
@@ -1,40 +0,0 @@
1
- require File.dirname(__FILE__)+'/../abstract_unit'
2
- require 'gorillib/metaprogramming/cattr_accessor'
3
-
4
- class ModuleAttributeAccessorTest < Test::Unit::TestCase
5
- def setup
6
- m = @module = Module.new do
7
- mattr_accessor :foo
8
- mattr_accessor :bar, :instance_writer => false
9
- mattr_reader :shaq, :instance_reader => false
10
- end
11
- @class = Class.new
12
- @class.instance_eval { include m }
13
- @object = @class.new
14
- end
15
-
16
- def test_should_use_mattr_default
17
- assert_nil @module.foo
18
- assert_nil @object.foo
19
- end
20
-
21
- def test_should_set_mattr_value
22
- @module.foo = :test
23
- assert_equal :test, @object.foo
24
-
25
- @object.foo = :test2
26
- assert_equal :test2, @module.foo
27
- end
28
-
29
- def test_should_not_create_instance_writer
30
- assert_respond_to @module, :foo
31
- assert_respond_to @module, :foo=
32
- assert_respond_to @object, :bar
33
- assert !@object.respond_to?(:bar=)
34
- end
35
-
36
- def test_should_not_create_instance_reader
37
- assert_respond_to @module, :shaq
38
- assert !@object.respond_to?(:shaq)
39
- end
40
- end
@@ -1,9 +0,0 @@
1
- require File.dirname(__FILE__)+'/../abstract_unit'
2
- require 'gorillib/metaprogramming/singleton_class'
3
-
4
- class KernelTest < Test::Unit::TestCase
5
- def test_singleton_class
6
- o = Object.new
7
- assert_equal class << o; self end, o.singleton_class
8
- end
9
- end
@@ -1,22 +0,0 @@
1
- require File.dirname(__FILE__)+'/../abstract_unit'
2
- require 'gorillib/object/blank'
3
-
4
- class BlankTest < Test::Unit::TestCase
5
- BLANK = [ EmptyTrue.new, nil, false, '', ' ', " \n\t \r ", [], {} ]
6
- NOT = [ EmptyFalse.new, Object.new, true, 0, 1, 'a', [nil], { nil => 0 } ]
7
-
8
- def test_blank
9
- BLANK.each { |v| assert v.blank?, "#{v.inspect} should be blank" }
10
- NOT.each { |v| assert !v.blank?, "#{v.inspect} should not be blank" }
11
- end
12
-
13
- def test_present
14
- BLANK.each { |v| assert !v.present?, "#{v.inspect} should not be present" }
15
- NOT.each { |v| assert v.present?, "#{v.inspect} should be present" }
16
- end
17
-
18
- def test_presence
19
- BLANK.each { |v| assert_equal nil, v.presence, "#{v.inspect}.presence should return nil" }
20
- NOT.each { |v| assert_equal v, v.presence, "#{v.inspect}.presence should return self" }
21
- end
22
- end
@@ -1,30 +0,0 @@
1
- require File.dirname(__FILE__)+'/../abstract_unit'
2
- require File.dirname(__FILE__)+'/inflector_test_cases'
3
- require 'gorillib/string/constantize'
4
-
5
- module Ace
6
- module Base
7
- class Case
8
- end
9
- end
10
- end
11
-
12
-
13
- class InflectorTest < Test::Unit::TestCase
14
- include InflectorTestCases
15
-
16
- def test_constantize
17
- assert_nothing_raised{ assert_equal Ace::Base::Case, "Ace::Base::Case".constantize }
18
- assert_nothing_raised{ assert_equal Ace::Base::Case, "::Ace::Base::Case".constantize }
19
- assert_nothing_raised{ assert_equal InflectorTest, "InflectorTest".constantize }
20
- assert_nothing_raised{ assert_equal InflectorTest, "::InflectorTest".constantize }
21
- assert_raise(NameError){ "UnknownClass" .constantize }
22
- assert_raise(NameError){ "An invalid string".constantize }
23
- assert_raise(NameError){ "InvalidClass\n" .constantize }
24
- end
25
-
26
- def test_constantize_does_lexical_lookup
27
- assert_raise(NameError) { "Ace::Base::InflectorTest".constantize }
28
- end
29
-
30
- end
@@ -1,65 +0,0 @@
1
- require File.dirname(__FILE__)+'/../abstract_unit'
2
- require File.dirname(__FILE__)+'/inflector_test_cases'
3
- require 'gorillib/string/human'
4
-
5
- class InflectorTest < Test::Unit::TestCase
6
- include InflectorTestCases
7
-
8
- def test_titleize
9
- MixtureToTitleCase.each do |before, titleized|
10
- assert_equal(titleized, before.titleize)
11
- end
12
- end
13
-
14
- MixtureToTitleCase.each do |before, titleized|
15
- define_method "test_titleize_#{before}" do
16
- assert_equal(titleized, before.titleize )
17
- end
18
- end
19
-
20
- def test_humanize
21
- UnderscoreToHuman.each do |underscored, human|
22
- assert_equal(human, underscored.humanize )
23
- end
24
- end
25
- end
26
-
27
- class ArrayExtToSentenceTests < Test::Unit::TestCase
28
- def test_plain_array_to_sentence
29
- assert_equal "", [].to_sentence
30
- assert_equal "one", ['one'].to_sentence
31
- assert_equal "one and two", ['one', 'two'].to_sentence
32
- assert_equal "one, two, and three", ['one', 'two', 'three'].to_sentence
33
- end
34
-
35
- def test_to_sentence_with_words_connector
36
- assert_equal "one two, and three", ['one', 'two', 'three'].to_sentence(:words_connector => ' ')
37
- assert_equal "one & two, and three", ['one', 'two', 'three'].to_sentence(:words_connector => ' & ')
38
- assert_equal "onetwo, and three", ['one', 'two', 'three'].to_sentence(:words_connector => nil)
39
- end
40
-
41
- def test_to_sentence_with_last_word_connector
42
- assert_equal "one, two, and also three", ['one', 'two', 'three'].to_sentence(:last_word_connector => ', and also ')
43
- assert_equal "one, twothree", ['one', 'two', 'three'].to_sentence(:last_word_connector => nil)
44
- assert_equal "one, two three", ['one', 'two', 'three'].to_sentence(:last_word_connector => ' ')
45
- assert_equal "one, two and three", ['one', 'two', 'three'].to_sentence(:last_word_connector => ' and ')
46
- end
47
-
48
- def test_two_elements
49
- assert_equal "one and two", ['one', 'two'].to_sentence
50
- assert_equal "one two", ['one', 'two'].to_sentence(:two_words_connector => ' ')
51
- end
52
-
53
- def test_one_element
54
- assert_equal "one", ['one'].to_sentence
55
- end
56
-
57
- def test_one_element_not_same_object
58
- elements = ["one"]
59
- assert_not_equal elements[0].object_id, elements.to_sentence.object_id
60
- end
61
-
62
- def test_one_non_string_element
63
- assert_equal '1', [1].to_sentence
64
- end
65
- end
@@ -1,57 +0,0 @@
1
- require File.dirname(__FILE__)+'/../abstract_unit'
2
- require 'gorillib/string/inflections'
3
- require File.dirname(__FILE__)+'/inflector_test_cases'
4
-
5
- class InflectorTest < Test::Unit::TestCase
6
- include InflectorTestCases
7
-
8
- def test_camelize
9
- CamelToUnderscore.each do |cameled, underscored|
10
- assert_equal(cameled, underscored.camelize)
11
- end
12
- end
13
-
14
- def test_camelize_with_lower_downcases_the_first_letter
15
- assert_equal('capital', 'Capital'.camelize(:lower))
16
- end
17
-
18
- def test_snakeize
19
- UnderscoreToLowerCamel.each do |underscored, snaked|
20
- assert_equal(snaked, underscored.snakeize)
21
- end
22
- end
23
-
24
- def test_underscore_to_lower_camel
25
- UnderscoreToLowerCamel.each do |underscored, lower_cameled|
26
- assert_equal(lower_cameled, underscored.camelize(:lower))
27
- end
28
- end
29
-
30
- def test_underscore
31
- CamelToUnderscore.each do |cameled, underscored|
32
- assert_equal(underscored, cameled.underscore)
33
- end
34
- CamelToUnderscoreWithoutReverse.each do |cameled, underscored|
35
- assert_equal(underscored, cameled.underscore)
36
- end
37
- assert_equal "html_tidy", "HTMLTidy".underscore
38
- assert_equal "html_tidy_generator", "HTMLTidyGenerator".underscore
39
- end
40
-
41
- def test_camelize_with_module
42
- CamelWithModuleToUnderscoreWithSlash.each do |cameled, underscored|
43
- assert_equal(cameled, underscored.camelize)
44
- end
45
- end
46
-
47
- def test_underscore_with_slashes
48
- CamelWithModuleToUnderscoreWithSlash.each do |cameled, underscored|
49
- assert_equal(underscored, cameled.underscore)
50
- end
51
- end
52
-
53
- def test_demodulize
54
- assert_equal "Account", "MyApplication::Billing::Account".demodulize
55
- end
56
-
57
- end
@@ -1,37 +0,0 @@
1
- # encoding: utf-8
2
- require File.dirname(__FILE__)+'/../abstract_unit'
3
- require File.dirname(__FILE__)+'/inflector_test_cases'
4
- require 'gorillib/string/truncate'
5
-
6
- class StringInflectionsTest < Test::Unit::TestCase
7
- include InflectorTestCases
8
-
9
- def test_truncate
10
- assert_equal "Hello World!", "Hello World!".truncate(12)
11
- assert_equal "Hello Wor...", "Hello World!!".truncate(12)
12
- end
13
-
14
- def test_truncate_with_omission_and_seperator
15
- assert_equal "Hello[...]", "Hello World!".truncate(10, :omission => "[...]")
16
- assert_equal "Hello[...]", "Hello Big World!".truncate(13, :omission => "[...]", :separator => ' ')
17
- assert_equal "Hello Big[...]", "Hello Big World!".truncate(14, :omission => "[...]", :separator => ' ')
18
- assert_equal "Hello Big[...]", "Hello Big World!".truncate(15, :omission => "[...]", :separator => ' ')
19
- end
20
-
21
- if RUBY_VERSION < '1.9.0'
22
- def test_truncate_multibyte
23
- with_kcode 'none' do
24
- assert_equal "\354\225\210\353\205\225\355...", "\354\225\210\353\205\225\355\225\230\354\204\270\354\232\224".truncate(10)
25
- end
26
- with_kcode 'u' do
27
- assert_equal "\354\225\204\353\246\254\353\236\221 \354\225\204\353\246\254 ...",
28
- "\354\225\204\353\246\254\353\236\221 \354\225\204\353\246\254 \354\225\204\353\235\274\353\246\254\354\230\244".truncate(10)
29
- end
30
- end
31
- else
32
- def test_truncate_multibyte
33
- assert_equal "\354\225\204\353\246\254\353\236\221 \354\225\204\353\246\254 ...".force_encoding('UTF-8'),
34
- "\354\225\204\353\246\254\353\236\221 \354\225\204\353\246\254 \354\225\204\353\235\274\353\246\254\354\230\244".force_encoding('UTF-8').truncate(10)
35
- end
36
- end
37
- end