gorillib 0.0.7 → 0.0.8

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