gorillib 0.1.11 → 0.4.0pre

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 (143) hide show
  1. data/.gitignore +1 -0
  2. data/.rspec +1 -2
  3. data/.yardopts +9 -0
  4. data/{CHANGELOG.textile → CHANGELOG.md} +35 -9
  5. data/Gemfile +21 -14
  6. data/Guardfile +19 -0
  7. data/{LICENSE.textile → LICENSE.md} +43 -29
  8. data/README.md +47 -52
  9. data/Rakefile +31 -30
  10. data/TODO.md +32 -0
  11. data/VERSION +1 -1
  12. data/examples/builder/ironfan.rb +133 -0
  13. data/examples/model/simple.rb +17 -0
  14. data/gorillib.gemspec +106 -86
  15. data/lib/alt/kernel/call_stack.rb +56 -0
  16. data/lib/gorillib/array/wrap.rb +53 -0
  17. data/lib/gorillib/base.rb +3 -3
  18. data/lib/gorillib/builder/field.rb +5 -0
  19. data/lib/gorillib/builder.rb +260 -0
  20. data/lib/gorillib/collection/has_collection.rb +31 -0
  21. data/lib/gorillib/collection.rb +129 -0
  22. data/lib/gorillib/configurable.rb +28 -0
  23. data/lib/gorillib/datetime/{flat.rb → to_flat.rb} +0 -0
  24. data/lib/gorillib/exception/confidence.rb +17 -0
  25. data/lib/gorillib/exception/raisers.rb +78 -0
  26. data/lib/gorillib/hash/mash.rb +202 -0
  27. data/lib/gorillib/hashlike/slice.rb +53 -19
  28. data/lib/gorillib/hashlike.rb +5 -3
  29. data/lib/gorillib/io/system_helpers.rb +30 -0
  30. data/lib/gorillib/logger/log.rb +18 -0
  31. data/lib/gorillib/metaprogramming/concern.rb +124 -0
  32. data/lib/gorillib/model/active_model_conversion.rb +68 -0
  33. data/lib/gorillib/model/active_model_naming.rb +87 -0
  34. data/lib/gorillib/model/active_model_shim.rb +33 -0
  35. data/lib/gorillib/model/base.rb +341 -0
  36. data/lib/gorillib/model/defaults.rb +71 -0
  37. data/lib/gorillib/model/errors.rb +14 -0
  38. data/lib/gorillib/model/factories.rb +372 -0
  39. data/lib/gorillib/model/field.rb +146 -0
  40. data/lib/gorillib/model/named_schema.rb +53 -0
  41. data/lib/gorillib/{struct/hashlike_iteration.rb → model/overlay.rb} +0 -0
  42. data/lib/gorillib/model/record_schema.rb +9 -0
  43. data/lib/gorillib/model/serialization.rb +23 -0
  44. data/lib/gorillib/model/validate.rb +22 -0
  45. data/lib/gorillib/model.rb +23 -0
  46. data/lib/gorillib/pathname.rb +78 -0
  47. data/lib/gorillib/{serialization.rb → serialization/to_wire.rb} +0 -0
  48. data/lib/gorillib/some.rb +11 -9
  49. data/lib/gorillib/string/constantize.rb +21 -14
  50. data/lib/gorillib/string/inflections.rb +6 -76
  51. data/lib/gorillib/string/inflector.rb +192 -0
  52. data/lib/gorillib/string/simple_inflector.rb +267 -0
  53. data/lib/gorillib/type/extended.rb +52 -0
  54. data/lib/gorillib/utils/capture_output.rb +28 -0
  55. data/lib/gorillib/utils/console.rb +131 -0
  56. data/lib/gorillib/utils/nuke_constants.rb +9 -0
  57. data/lib/gorillib/utils/stub_module.rb +33 -0
  58. data/spec/examples/builder/ironfan_spec.rb +37 -0
  59. data/spec/extlib/hash_spec.rb +64 -0
  60. data/spec/extlib/mash_spec.rb +312 -0
  61. data/spec/{array → gorillib/array}/compact_blank_spec.rb +2 -2
  62. data/spec/{array → gorillib/array}/extract_options_spec.rb +2 -2
  63. data/spec/gorillib/builder_spec.rb +187 -0
  64. data/spec/gorillib/collection_spec.rb +20 -0
  65. data/spec/gorillib/configurable_spec.rb +62 -0
  66. data/spec/{datetime → gorillib/datetime}/parse_spec.rb +3 -3
  67. data/spec/{datetime/flat_spec.rb → gorillib/datetime/to_flat_spec.rb} +4 -4
  68. data/spec/{enumerable → gorillib/enumerable}/sum_spec.rb +5 -5
  69. data/spec/gorillib/exception/raisers_spec.rb +60 -0
  70. data/spec/{hash → gorillib/hash}/compact_spec.rb +2 -2
  71. data/spec/{hash → gorillib/hash}/deep_compact_spec.rb +3 -3
  72. data/spec/{hash → gorillib/hash}/deep_merge_spec.rb +2 -2
  73. data/spec/{hash → gorillib/hash}/keys_spec.rb +2 -2
  74. data/spec/{hash → gorillib/hash}/reverse_merge_spec.rb +2 -2
  75. data/spec/{hash → gorillib/hash}/slice_spec.rb +2 -2
  76. data/spec/{hash → gorillib/hash}/zip_spec.rb +2 -2
  77. data/spec/{hashlike → gorillib/hashlike}/behave_same_as_hash_spec.rb +6 -3
  78. data/spec/{hashlike → gorillib/hashlike}/deep_hash_spec.rb +2 -2
  79. data/spec/{hashlike → gorillib/hashlike}/hashlike_behavior_spec.rb +32 -30
  80. data/spec/{hashlike → gorillib/hashlike}/hashlike_via_accessors_spec.rb +3 -3
  81. data/spec/{hashlike_spec.rb → gorillib/hashlike_spec.rb} +3 -3
  82. data/spec/{logger → gorillib/logger}/log_spec.rb +2 -2
  83. data/spec/{metaprogramming → gorillib/metaprogramming}/aliasing_spec.rb +3 -3
  84. data/spec/{metaprogramming → gorillib/metaprogramming}/class_attribute_spec.rb +3 -3
  85. data/spec/{metaprogramming → gorillib/metaprogramming}/delegation_spec.rb +3 -3
  86. data/spec/{metaprogramming → gorillib/metaprogramming}/singleton_class_spec.rb +3 -3
  87. data/spec/gorillib/model/record/defaults_spec.rb +108 -0
  88. data/spec/gorillib/model/record/factories_spec.rb +321 -0
  89. data/spec/gorillib/model/record/overlay_spec.rb +46 -0
  90. data/spec/gorillib/model/serialization_spec.rb +48 -0
  91. data/spec/gorillib/model_spec.rb +281 -0
  92. data/spec/{numeric → gorillib/numeric}/clamp_spec.rb +2 -2
  93. data/spec/{object → gorillib/object}/blank_spec.rb +2 -2
  94. data/spec/{object → gorillib/object}/try_dup_spec.rb +2 -2
  95. data/spec/{object → gorillib/object}/try_spec.rb +3 -2
  96. data/spec/gorillib/pathname_spec.rb +114 -0
  97. data/spec/{string → gorillib/string}/constantize_spec.rb +2 -2
  98. data/spec/{string → gorillib/string}/human_spec.rb +2 -2
  99. data/spec/{string → gorillib/string}/inflections_spec.rb +4 -3
  100. data/spec/{string → gorillib/string}/inflector_test_cases.rb +0 -0
  101. data/spec/{string → gorillib/string}/truncate_spec.rb +4 -10
  102. data/spec/gorillib/type/extended_spec.rb +120 -0
  103. data/spec/gorillib/utils/capture_output_spec.rb +71 -0
  104. data/spec/spec_helper.rb +8 -11
  105. data/spec/support/gorillib_test_helpers.rb +66 -0
  106. data/spec/support/hashlike_fuzzing_helper.rb +31 -33
  107. data/spec/support/hashlike_helper.rb +3 -3
  108. data/spec/support/model_test_helpers.rb +81 -0
  109. data/spec/support/shared_examples/included_module.rb +20 -0
  110. metadata +177 -158
  111. data/lib/gorillib/array/average.rb +0 -13
  112. data/lib/gorillib/array/sorted_median.rb +0 -11
  113. data/lib/gorillib/array/sorted_percentile.rb +0 -11
  114. data/lib/gorillib/array/sorted_sample.rb +0 -12
  115. data/lib/gorillib/dsl_object.rb +0 -64
  116. data/lib/gorillib/hash/indifferent_access.rb +0 -207
  117. data/lib/gorillib/hash/tree_merge.rb +0 -4
  118. data/lib/gorillib/hashlike/tree_merge.rb +0 -49
  119. data/lib/gorillib/metaprogramming/cattr_accessor.rb +0 -79
  120. data/lib/gorillib/metaprogramming/mattr_accessor.rb +0 -61
  121. data/lib/gorillib/receiver/active_model_shim.rb +0 -32
  122. data/lib/gorillib/receiver/acts_as_hash.rb +0 -195
  123. data/lib/gorillib/receiver/acts_as_loadable.rb +0 -42
  124. data/lib/gorillib/receiver/locale/en.yml +0 -27
  125. data/lib/gorillib/receiver/tree_diff.rb +0 -74
  126. data/lib/gorillib/receiver/validations.rb +0 -30
  127. data/lib/gorillib/receiver.rb +0 -402
  128. data/lib/gorillib/receiver_model.rb +0 -21
  129. data/lib/gorillib/struct/acts_as_hash.rb +0 -108
  130. data/notes/fancy_hashes_and_receivers.textile +0 -120
  131. data/notes/hash_rdocs.textile +0 -97
  132. data/spec/array/average_spec.rb +0 -24
  133. data/spec/array/sorted_median_spec.rb +0 -18
  134. data/spec/array/sorted_percentile_spec.rb +0 -24
  135. data/spec/array/sorted_sample_spec.rb +0 -28
  136. data/spec/dsl_object_spec.rb +0 -99
  137. data/spec/hash/indifferent_access_spec.rb +0 -391
  138. data/spec/metaprogramming/cattr_accessor_spec.rb +0 -43
  139. data/spec/metaprogramming/mattr_accessor_spec.rb +0 -45
  140. data/spec/receiver/acts_as_hash_spec.rb +0 -295
  141. data/spec/receiver_spec.rb +0 -551
  142. data/spec/struct/acts_as_hash_fuzz_spec.rb +0 -71
  143. data/spec/struct/acts_as_hash_spec.rb +0 -422
@@ -0,0 +1,133 @@
1
+ module Gorillib::Test
2
+ def self.cluster(name=nil, attrs={}, &block)
3
+ @example_cluster ||= Cluster.new(attrs.merge(:name => name))
4
+ @example_cluster.instance_exec(&block) if block
5
+ @example_cluster
6
+ end
7
+
8
+ class IronfanBuilder
9
+ include Gorillib::FancyBuilder
10
+ field :name, Symbol
11
+
12
+ end
13
+ class ComputeBuilder < IronfanBuilder; end
14
+
15
+ class Organization < IronfanBuilder ; end
16
+ class Provider < IronfanBuilder ; end
17
+ class Cluster < ComputeBuilder ; end
18
+ class Facet < ComputeBuilder ; end
19
+ class Server < ComputeBuilder ; end
20
+ class Volume < IronfanBuilder ; end
21
+ class Cloud < IronfanBuilder ; end
22
+ class SecurityGroup < IronfanBuilder ; end
23
+ class Component < IronfanBuilder ; end
24
+ class Aspect < IronfanBuilder ; end
25
+ class Machine < IronfanBuilder ; end
26
+ class ChefNode < IronfanBuilder ; def save() ; end ; end
27
+ class ChefClient < IronfanBuilder ; def save() ; end ; end
28
+ class ChefRole < IronfanBuilder ; def save() ; end ; end
29
+
30
+ module Ironfan
31
+ class << self
32
+ attr_reader :dry_run
33
+ attr_reader :config
34
+ end
35
+ @dry_run = false
36
+ @config = {}
37
+ end
38
+
39
+
40
+ class ComputeBuilder < IronfanBuilder
41
+ field :environment, Symbol
42
+ collection :clouds, Cloud
43
+ collection :volumes, Volume
44
+ collection :components, Component
45
+
46
+ def run_list() ; end
47
+ end
48
+
49
+ class Cluster < ComputeBuilder
50
+ collection :facets, Facet
51
+ belongs_to :organization, Organization
52
+
53
+ def servers() organization.servers.where(:cluster_name => self.name) ; end
54
+ end
55
+
56
+ module ComputeBuilder::Deprecated
57
+ def bogosity() ; end
58
+ def bogus?() ; end
59
+ def raid_group() ; end
60
+ def root_volume() ; end
61
+ def role() ; end
62
+ def recipe() ; end
63
+ def role_implication() ; end
64
+ end
65
+ module Cluster::Deprecated
66
+ attr_accessor :chef_roles
67
+ def find_facet(facet_name)
68
+ facets.fetch(facet_name){ raise("Facet '#{facet_name}' is not defined in cluster '#{self.name}'") }
69
+ end
70
+ end
71
+
72
+ class Facet < ComputeBuilder
73
+ belongs_to :cluster, Cluster
74
+ collection :servers, Server
75
+ field :instances, Integer, :doc => 'number of servers to instantiate for this machine'
76
+ end
77
+
78
+ class Server < ComputeBuilder
79
+ belongs_to :cluster, Cluster
80
+ belongs_to :facet, Facet
81
+ member :machine, Machine
82
+ member :chef_node, ChefNode
83
+ end
84
+
85
+ class Volume < IronfanBuilder
86
+ end
87
+
88
+ class Cloud < IronfanBuilder
89
+ end
90
+
91
+ class Component < IronfanBuilder
92
+ field :discovers, Array, :of => :whatever, :doc => 'components this one discovers. Can be used to intelligently generate security groups, add client components, etc'
93
+ end
94
+
95
+ class SecurityGroup < IronfanBuilder
96
+ end
97
+
98
+ class Universe < IronfanBuilder
99
+ collection :organizations, Organization
100
+ collection :providers, Provider
101
+ end
102
+
103
+ class Organization < IronfanBuilder
104
+ collection :chef_nodes, ChefNode
105
+ end
106
+
107
+ class Provider < IronfanBuilder
108
+ collection :limbo_servers, Server
109
+ collection :clusters, Cluster
110
+ collection :machines, Machine
111
+ end
112
+
113
+ cluster(:yellowhat) do
114
+ environment :prod
115
+
116
+ facet(:webnode) do
117
+ instances 12
118
+ volume(:logs) do
119
+ end
120
+ server(:a)
121
+
122
+ servers # <Gorillib::Collection { :a => <Server name=:a ... > } >
123
+ server(:a) # <Server name=:a ... > } >
124
+ end
125
+
126
+ facet(:dbnode) do
127
+ environment nil
128
+ end
129
+
130
+ facet(:esnode) do
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,17 @@
1
+ class Place
2
+ include Gorillib::Record
3
+ # fields can be simple...
4
+ field :name, String
5
+ field :country_id, String, :doc => 'Country code (2-letter alpha) containing the place'
6
+ # ... or complext
7
+ field :geo, GeoCoordinates, :doc => 'geographic location of the place'
8
+ end
9
+ class GeoCoordinates
10
+ include Gorillib::Record
11
+ field :latitude, Float, :doc => 'latitude in decimal degrees; negative numbers are south of the equator'
12
+ field :longitude, Float, :doc => 'longitude in decimal degrees; negative numbers are west of Greenwich'
13
+ end
14
+
15
+ # It's simple to instantiate complex nested data structures
16
+ lunch_spot = Place.receive({ :name => "Torchy's Tacos", :country_id => "us",
17
+ :geo => { :latitude => "30.295", :longitude => "-97.745" }})
data/gorillib.gemspec CHANGED
@@ -5,50 +5,58 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "gorillib"
8
- s.version = "0.1.11"
8
+ s.version = "0.4.0pre"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Infochimps"]
12
- s.date = "2012-06-22"
12
+ s.date = "2012-08-16"
13
13
  s.description = "Gorillib: infochimps lightweight subset of ruby convenience methods"
14
14
  s.email = "coders@infochimps.org"
15
15
  s.extra_rdoc_files = [
16
- "LICENSE.textile",
16
+ "LICENSE.md",
17
17
  "README.md"
18
18
  ]
19
19
  s.files = [
20
20
  ".gitignore",
21
21
  ".rspec",
22
- "CHANGELOG.textile",
22
+ ".yardopts",
23
+ "CHANGELOG.md",
23
24
  "Gemfile",
24
- "LICENSE.textile",
25
+ "Guardfile",
26
+ "LICENSE.md",
25
27
  "README.md",
26
28
  "Rakefile",
29
+ "TODO.md",
27
30
  "VERSION",
31
+ "examples/builder/ironfan.rb",
32
+ "examples/model/simple.rb",
28
33
  "gorillib.gemspec",
34
+ "lib/alt/kernel/call_stack.rb",
29
35
  "lib/gorillib.rb",
30
- "lib/gorillib/array/average.rb",
31
36
  "lib/gorillib/array/compact_blank.rb",
32
37
  "lib/gorillib/array/deep_compact.rb",
33
38
  "lib/gorillib/array/extract_options.rb",
34
39
  "lib/gorillib/array/random.rb",
35
- "lib/gorillib/array/sorted_median.rb",
36
- "lib/gorillib/array/sorted_percentile.rb",
37
- "lib/gorillib/array/sorted_sample.rb",
40
+ "lib/gorillib/array/wrap.rb",
38
41
  "lib/gorillib/base.rb",
39
- "lib/gorillib/datetime/flat.rb",
42
+ "lib/gorillib/builder.rb",
43
+ "lib/gorillib/builder/field.rb",
44
+ "lib/gorillib/collection.rb",
45
+ "lib/gorillib/collection/has_collection.rb",
46
+ "lib/gorillib/configurable.rb",
40
47
  "lib/gorillib/datetime/parse.rb",
41
- "lib/gorillib/dsl_object.rb",
48
+ "lib/gorillib/datetime/to_flat.rb",
42
49
  "lib/gorillib/enumerable/sum.rb",
50
+ "lib/gorillib/exception/confidence.rb",
51
+ "lib/gorillib/exception/raisers.rb",
43
52
  "lib/gorillib/hash/compact.rb",
44
53
  "lib/gorillib/hash/deep_compact.rb",
45
54
  "lib/gorillib/hash/deep_dup.rb",
46
55
  "lib/gorillib/hash/deep_merge.rb",
47
- "lib/gorillib/hash/indifferent_access.rb",
48
56
  "lib/gorillib/hash/keys.rb",
57
+ "lib/gorillib/hash/mash.rb",
49
58
  "lib/gorillib/hash/reverse_merge.rb",
50
59
  "lib/gorillib/hash/slice.rb",
51
- "lib/gorillib/hash/tree_merge.rb",
52
60
  "lib/gorillib/hash/zip.rb",
53
61
  "lib/gorillib/hashlike.rb",
54
62
  "lib/gorillib/hashlike/compact.rb",
@@ -60,81 +68,94 @@ Gem::Specification.new do |s|
60
68
  "lib/gorillib/hashlike/keys.rb",
61
69
  "lib/gorillib/hashlike/reverse_merge.rb",
62
70
  "lib/gorillib/hashlike/slice.rb",
63
- "lib/gorillib/hashlike/tree_merge.rb",
71
+ "lib/gorillib/io/system_helpers.rb",
64
72
  "lib/gorillib/logger/log.rb",
65
73
  "lib/gorillib/metaprogramming/aliasing.rb",
66
- "lib/gorillib/metaprogramming/cattr_accessor.rb",
67
74
  "lib/gorillib/metaprogramming/class_attribute.rb",
75
+ "lib/gorillib/metaprogramming/concern.rb",
68
76
  "lib/gorillib/metaprogramming/delegation.rb",
69
- "lib/gorillib/metaprogramming/mattr_accessor.rb",
70
77
  "lib/gorillib/metaprogramming/remove_method.rb",
71
78
  "lib/gorillib/metaprogramming/singleton_class.rb",
79
+ "lib/gorillib/model.rb",
80
+ "lib/gorillib/model/active_model_conversion.rb",
81
+ "lib/gorillib/model/active_model_naming.rb",
82
+ "lib/gorillib/model/active_model_shim.rb",
83
+ "lib/gorillib/model/base.rb",
84
+ "lib/gorillib/model/defaults.rb",
85
+ "lib/gorillib/model/errors.rb",
86
+ "lib/gorillib/model/factories.rb",
87
+ "lib/gorillib/model/field.rb",
88
+ "lib/gorillib/model/named_schema.rb",
89
+ "lib/gorillib/model/overlay.rb",
90
+ "lib/gorillib/model/record_schema.rb",
91
+ "lib/gorillib/model/serialization.rb",
92
+ "lib/gorillib/model/validate.rb",
72
93
  "lib/gorillib/numeric/clamp.rb",
73
94
  "lib/gorillib/object/blank.rb",
74
95
  "lib/gorillib/object/try.rb",
75
96
  "lib/gorillib/object/try_dup.rb",
76
- "lib/gorillib/receiver.rb",
77
- "lib/gorillib/receiver/active_model_shim.rb",
78
- "lib/gorillib/receiver/acts_as_hash.rb",
79
- "lib/gorillib/receiver/acts_as_loadable.rb",
80
- "lib/gorillib/receiver/locale/en.yml",
81
- "lib/gorillib/receiver/tree_diff.rb",
82
- "lib/gorillib/receiver/validations.rb",
83
- "lib/gorillib/receiver_model.rb",
84
- "lib/gorillib/serialization.rb",
97
+ "lib/gorillib/pathname.rb",
98
+ "lib/gorillib/serialization/to_wire.rb",
85
99
  "lib/gorillib/some.rb",
86
100
  "lib/gorillib/string/constantize.rb",
87
101
  "lib/gorillib/string/human.rb",
88
102
  "lib/gorillib/string/inflections.rb",
103
+ "lib/gorillib/string/inflector.rb",
104
+ "lib/gorillib/string/simple_inflector.rb",
89
105
  "lib/gorillib/string/truncate.rb",
90
- "lib/gorillib/struct/acts_as_hash.rb",
91
- "lib/gorillib/struct/hashlike_iteration.rb",
92
- "notes/fancy_hashes_and_receivers.textile",
93
- "notes/hash_rdocs.textile",
94
- "spec/array/average_spec.rb",
95
- "spec/array/compact_blank_spec.rb",
96
- "spec/array/extract_options_spec.rb",
97
- "spec/array/sorted_median_spec.rb",
98
- "spec/array/sorted_percentile_spec.rb",
99
- "spec/array/sorted_sample_spec.rb",
100
- "spec/datetime/flat_spec.rb",
101
- "spec/datetime/parse_spec.rb",
102
- "spec/dsl_object_spec.rb",
103
- "spec/enumerable/sum_spec.rb",
104
- "spec/hash/compact_spec.rb",
105
- "spec/hash/deep_compact_spec.rb",
106
- "spec/hash/deep_merge_spec.rb",
107
- "spec/hash/indifferent_access_spec.rb",
108
- "spec/hash/keys_spec.rb",
109
- "spec/hash/reverse_merge_spec.rb",
110
- "spec/hash/slice_spec.rb",
111
- "spec/hash/zip_spec.rb",
112
- "spec/hashlike/behave_same_as_hash_spec.rb",
113
- "spec/hashlike/deep_hash_spec.rb",
114
- "spec/hashlike/hashlike_behavior_spec.rb",
115
- "spec/hashlike/hashlike_via_accessors_spec.rb",
116
- "spec/hashlike_spec.rb",
117
- "spec/logger/log_spec.rb",
118
- "spec/metaprogramming/aliasing_spec.rb",
119
- "spec/metaprogramming/cattr_accessor_spec.rb",
120
- "spec/metaprogramming/class_attribute_spec.rb",
121
- "spec/metaprogramming/delegation_spec.rb",
122
- "spec/metaprogramming/mattr_accessor_spec.rb",
123
- "spec/metaprogramming/singleton_class_spec.rb",
124
- "spec/numeric/clamp_spec.rb",
125
- "spec/object/blank_spec.rb",
126
- "spec/object/try_dup_spec.rb",
127
- "spec/object/try_spec.rb",
128
- "spec/receiver/acts_as_hash_spec.rb",
129
- "spec/receiver_spec.rb",
106
+ "lib/gorillib/type/extended.rb",
107
+ "lib/gorillib/utils/capture_output.rb",
108
+ "lib/gorillib/utils/console.rb",
109
+ "lib/gorillib/utils/nuke_constants.rb",
110
+ "lib/gorillib/utils/stub_module.rb",
111
+ "spec/examples/builder/ironfan_spec.rb",
112
+ "spec/extlib/hash_spec.rb",
113
+ "spec/extlib/mash_spec.rb",
114
+ "spec/gorillib/array/compact_blank_spec.rb",
115
+ "spec/gorillib/array/extract_options_spec.rb",
116
+ "spec/gorillib/builder_spec.rb",
117
+ "spec/gorillib/collection_spec.rb",
118
+ "spec/gorillib/configurable_spec.rb",
119
+ "spec/gorillib/datetime/parse_spec.rb",
120
+ "spec/gorillib/datetime/to_flat_spec.rb",
121
+ "spec/gorillib/enumerable/sum_spec.rb",
122
+ "spec/gorillib/exception/raisers_spec.rb",
123
+ "spec/gorillib/hash/compact_spec.rb",
124
+ "spec/gorillib/hash/deep_compact_spec.rb",
125
+ "spec/gorillib/hash/deep_merge_spec.rb",
126
+ "spec/gorillib/hash/keys_spec.rb",
127
+ "spec/gorillib/hash/reverse_merge_spec.rb",
128
+ "spec/gorillib/hash/slice_spec.rb",
129
+ "spec/gorillib/hash/zip_spec.rb",
130
+ "spec/gorillib/hashlike/behave_same_as_hash_spec.rb",
131
+ "spec/gorillib/hashlike/deep_hash_spec.rb",
132
+ "spec/gorillib/hashlike/hashlike_behavior_spec.rb",
133
+ "spec/gorillib/hashlike/hashlike_via_accessors_spec.rb",
134
+ "spec/gorillib/hashlike_spec.rb",
135
+ "spec/gorillib/logger/log_spec.rb",
136
+ "spec/gorillib/metaprogramming/aliasing_spec.rb",
137
+ "spec/gorillib/metaprogramming/class_attribute_spec.rb",
138
+ "spec/gorillib/metaprogramming/delegation_spec.rb",
139
+ "spec/gorillib/metaprogramming/singleton_class_spec.rb",
140
+ "spec/gorillib/model/record/defaults_spec.rb",
141
+ "spec/gorillib/model/record/factories_spec.rb",
142
+ "spec/gorillib/model/record/overlay_spec.rb",
143
+ "spec/gorillib/model/serialization_spec.rb",
144
+ "spec/gorillib/model_spec.rb",
145
+ "spec/gorillib/numeric/clamp_spec.rb",
146
+ "spec/gorillib/object/blank_spec.rb",
147
+ "spec/gorillib/object/try_dup_spec.rb",
148
+ "spec/gorillib/object/try_spec.rb",
149
+ "spec/gorillib/pathname_spec.rb",
150
+ "spec/gorillib/string/constantize_spec.rb",
151
+ "spec/gorillib/string/human_spec.rb",
152
+ "spec/gorillib/string/inflections_spec.rb",
153
+ "spec/gorillib/string/inflector_test_cases.rb",
154
+ "spec/gorillib/string/truncate_spec.rb",
155
+ "spec/gorillib/type/extended_spec.rb",
156
+ "spec/gorillib/utils/capture_output_spec.rb",
130
157
  "spec/spec_helper.rb",
131
- "spec/string/constantize_spec.rb",
132
- "spec/string/human_spec.rb",
133
- "spec/string/inflections_spec.rb",
134
- "spec/string/inflector_test_cases.rb",
135
- "spec/string/truncate_spec.rb",
136
- "spec/struct/acts_as_hash_fuzz_spec.rb",
137
- "spec/struct/acts_as_hash_spec.rb",
158
+ "spec/support/gorillib_test_helpers.rb",
138
159
  "spec/support/hashlike_fuzzing_helper.rb",
139
160
  "spec/support/hashlike_helper.rb",
140
161
  "spec/support/hashlike_struct_helper.rb",
@@ -143,43 +164,42 @@ Gem::Specification.new do |s|
143
164
  "spec/support/matchers/be_array_eql.rb",
144
165
  "spec/support/matchers/be_hash_eql.rb",
145
166
  "spec/support/matchers/enumerate_method.rb",
146
- "spec/support/matchers/evaluate_to_true.rb"
167
+ "spec/support/matchers/evaluate_to_true.rb",
168
+ "spec/support/model_test_helpers.rb",
169
+ "spec/support/shared_examples/included_module.rb"
147
170
  ]
148
171
  s.homepage = "http://infochimps.com/labs"
149
172
  s.licenses = ["MIT"]
150
173
  s.require_paths = ["lib"]
151
174
  s.rubygems_version = "1.8.15"
152
175
  s.summary = "include only what you need. No dependencies, no creep"
153
- s.test_files = ["spec/array/average_spec.rb", "spec/array/compact_blank_spec.rb", "spec/array/extract_options_spec.rb", "spec/array/sorted_median_spec.rb", "spec/array/sorted_percentile_spec.rb", "spec/array/sorted_sample_spec.rb", "spec/datetime/flat_spec.rb", "spec/datetime/parse_spec.rb", "spec/dsl_object_spec.rb", "spec/enumerable/sum_spec.rb", "spec/hash/compact_spec.rb", "spec/hash/deep_compact_spec.rb", "spec/hash/deep_merge_spec.rb", "spec/hash/indifferent_access_spec.rb", "spec/hash/keys_spec.rb", "spec/hash/reverse_merge_spec.rb", "spec/hash/slice_spec.rb", "spec/hash/zip_spec.rb", "spec/hashlike/behave_same_as_hash_spec.rb", "spec/hashlike/deep_hash_spec.rb", "spec/hashlike/hashlike_behavior_spec.rb", "spec/hashlike/hashlike_via_accessors_spec.rb", "spec/hashlike_spec.rb", "spec/logger/log_spec.rb", "spec/metaprogramming/aliasing_spec.rb", "spec/metaprogramming/cattr_accessor_spec.rb", "spec/metaprogramming/class_attribute_spec.rb", "spec/metaprogramming/delegation_spec.rb", "spec/metaprogramming/mattr_accessor_spec.rb", "spec/metaprogramming/singleton_class_spec.rb", "spec/numeric/clamp_spec.rb", "spec/object/blank_spec.rb", "spec/object/try_dup_spec.rb", "spec/object/try_spec.rb", "spec/receiver/acts_as_hash_spec.rb", "spec/receiver_spec.rb", "spec/spec_helper.rb", "spec/string/constantize_spec.rb", "spec/string/human_spec.rb", "spec/string/inflections_spec.rb", "spec/string/inflector_test_cases.rb", "spec/string/truncate_spec.rb", "spec/struct/acts_as_hash_fuzz_spec.rb", "spec/struct/acts_as_hash_spec.rb", "spec/support/hashlike_fuzzing_helper.rb", "spec/support/hashlike_helper.rb", "spec/support/hashlike_struct_helper.rb", "spec/support/hashlike_via_delegation.rb", "spec/support/kcode_test_helper.rb", "spec/support/matchers/be_array_eql.rb", "spec/support/matchers/be_hash_eql.rb", "spec/support/matchers/enumerate_method.rb", "spec/support/matchers/evaluate_to_true.rb"]
176
+ s.test_files = ["spec/examples/builder/ironfan_spec.rb", "spec/extlib/hash_spec.rb", "spec/extlib/mash_spec.rb", "spec/gorillib/array/compact_blank_spec.rb", "spec/gorillib/array/extract_options_spec.rb", "spec/gorillib/builder_spec.rb", "spec/gorillib/collection_spec.rb", "spec/gorillib/configurable_spec.rb", "spec/gorillib/datetime/parse_spec.rb", "spec/gorillib/datetime/to_flat_spec.rb", "spec/gorillib/enumerable/sum_spec.rb", "spec/gorillib/exception/raisers_spec.rb", "spec/gorillib/hash/compact_spec.rb", "spec/gorillib/hash/deep_compact_spec.rb", "spec/gorillib/hash/deep_merge_spec.rb", "spec/gorillib/hash/keys_spec.rb", "spec/gorillib/hash/reverse_merge_spec.rb", "spec/gorillib/hash/slice_spec.rb", "spec/gorillib/hash/zip_spec.rb", "spec/gorillib/hashlike/behave_same_as_hash_spec.rb", "spec/gorillib/hashlike/deep_hash_spec.rb", "spec/gorillib/hashlike/hashlike_behavior_spec.rb", "spec/gorillib/hashlike/hashlike_via_accessors_spec.rb", "spec/gorillib/hashlike_spec.rb", "spec/gorillib/logger/log_spec.rb", "spec/gorillib/metaprogramming/aliasing_spec.rb", "spec/gorillib/metaprogramming/class_attribute_spec.rb", "spec/gorillib/metaprogramming/delegation_spec.rb", "spec/gorillib/metaprogramming/singleton_class_spec.rb", "spec/gorillib/model/record/defaults_spec.rb", "spec/gorillib/model/record/factories_spec.rb", "spec/gorillib/model/record/overlay_spec.rb", "spec/gorillib/model/serialization_spec.rb", "spec/gorillib/model_spec.rb", "spec/gorillib/numeric/clamp_spec.rb", "spec/gorillib/object/blank_spec.rb", "spec/gorillib/object/try_dup_spec.rb", "spec/gorillib/object/try_spec.rb", "spec/gorillib/pathname_spec.rb", "spec/gorillib/string/constantize_spec.rb", "spec/gorillib/string/human_spec.rb", "spec/gorillib/string/inflections_spec.rb", "spec/gorillib/string/inflector_test_cases.rb", "spec/gorillib/string/truncate_spec.rb", "spec/gorillib/type/extended_spec.rb", "spec/gorillib/utils/capture_output_spec.rb", "spec/spec_helper.rb", "spec/support/gorillib_test_helpers.rb", "spec/support/hashlike_fuzzing_helper.rb", "spec/support/hashlike_helper.rb", "spec/support/hashlike_struct_helper.rb", "spec/support/hashlike_via_delegation.rb", "spec/support/kcode_test_helper.rb", "spec/support/matchers/be_array_eql.rb", "spec/support/matchers/be_hash_eql.rb", "spec/support/matchers/enumerate_method.rb", "spec/support/matchers/evaluate_to_true.rb", "spec/support/model_test_helpers.rb", "spec/support/shared_examples/included_module.rb"]
154
177
 
155
178
  if s.respond_to? :specification_version then
156
179
  s.specification_version = 3
157
180
 
158
181
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
182
+ s.add_runtime_dependency(%q<multi_json>, ["~> 1.1"])
159
183
  s.add_runtime_dependency(%q<json>, [">= 0"])
184
+ s.add_runtime_dependency(%q<configliere>, [">= 0.4.13"])
160
185
  s.add_development_dependency(%q<bundler>, ["~> 1"])
186
+ s.add_development_dependency(%q<pry>, [">= 0"])
161
187
  s.add_development_dependency(%q<jeweler>, ["~> 1.6"])
162
- s.add_development_dependency(%q<rspec>, ["~> 2.5"])
163
- s.add_development_dependency(%q<yard>, ["~> 0.6"])
164
- s.add_development_dependency(%q<cucumber>, ["~> 1"])
165
- s.add_development_dependency(%q<aruba>, ["~> 0.4"])
166
188
  else
189
+ s.add_dependency(%q<multi_json>, ["~> 1.1"])
167
190
  s.add_dependency(%q<json>, [">= 0"])
191
+ s.add_dependency(%q<configliere>, [">= 0.4.13"])
168
192
  s.add_dependency(%q<bundler>, ["~> 1"])
193
+ s.add_dependency(%q<pry>, [">= 0"])
169
194
  s.add_dependency(%q<jeweler>, ["~> 1.6"])
170
- s.add_dependency(%q<rspec>, ["~> 2.5"])
171
- s.add_dependency(%q<yard>, ["~> 0.6"])
172
- s.add_dependency(%q<cucumber>, ["~> 1"])
173
- s.add_dependency(%q<aruba>, ["~> 0.4"])
174
195
  end
175
196
  else
197
+ s.add_dependency(%q<multi_json>, ["~> 1.1"])
176
198
  s.add_dependency(%q<json>, [">= 0"])
199
+ s.add_dependency(%q<configliere>, [">= 0.4.13"])
177
200
  s.add_dependency(%q<bundler>, ["~> 1"])
201
+ s.add_dependency(%q<pry>, [">= 0"])
178
202
  s.add_dependency(%q<jeweler>, ["~> 1.6"])
179
- s.add_dependency(%q<rspec>, ["~> 2.5"])
180
- s.add_dependency(%q<yard>, ["~> 0.6"])
181
- s.add_dependency(%q<cucumber>, ["~> 1"])
182
- s.add_dependency(%q<aruba>, ["~> 0.4"])
183
203
  end
184
204
  end
185
205
 
@@ -0,0 +1,56 @@
1
+ module Kernel
2
+
3
+ alias_method :pp_callstack, :caller
4
+ alias_method :pp_call_stack, :caller
5
+
6
+ # Parse a caller string and break it into its components,
7
+ # returning an array composed of:
8
+ #
9
+ # * file (String)
10
+ # * lineno (Integer)
11
+ # * method (Symbol)
12
+ #
13
+ # For example, from irb
14
+ #
15
+ # call_stack(1)
16
+ #
17
+ # _produces_ ...
18
+ #
19
+ # [["(irb)", 2, :irb_binding],
20
+ # ["/usr/lib/ruby/1.8/irb/workspace.rb", 52, :irb_binding],
21
+ # ["/usr/lib/ruby/1.8/irb/workspace.rb", 52, nil]]
22
+ #
23
+ # Note: If the user decides to redefine caller() to output data
24
+ # in a different format, _prior_ to requiring this, then the
25
+ # results will be indeterminate.
26
+ #
27
+ # CREDIT: Trans
28
+
29
+ def call_stack(level = 1)
30
+ call_str_array = pp_call_stack(level)
31
+ stack = []
32
+ call_str_array.each{ |call_str|
33
+ file, lineno, method = call_str.split(':')
34
+ if method =~ /in `(.*)'/ then
35
+ method = $1.intern()
36
+ end
37
+ stack << [file, lineno.to_i, method]
38
+ }
39
+ stack
40
+ end
41
+
42
+ alias_method :callstack, :call_stack
43
+
44
+ end
45
+
46
+
47
+ class Binding
48
+
49
+ # Returns the call stack, in array format.
50
+ def call_stack(level=1)
51
+ eval( "callstack( #{level} )" )
52
+ end
53
+
54
+ alias_method :callstack, :call_stack
55
+ end
56
+
@@ -0,0 +1,53 @@
1
+ class Array
2
+ # Wraps its argument in an array unless it is already an array (or array-like).
3
+ #
4
+ # Specifically:
5
+ #
6
+ # * If the argument is +nil+ an empty list is returned.
7
+ # * Otherwise, if the argument responds to +to_ary+ it is invoked, and its result returned.
8
+ # * Otherwise, returns an array with the argument as its single element.
9
+ #
10
+ # @example nil: an empty list
11
+ # Array.wrap(nil) # => []
12
+ # @example an array: itself
13
+ # Array.wrap([1, 2, 3]) # => [1, 2, 3]
14
+ # @example an atom: array of length 1
15
+ # Array.wrap(0) # => [0]
16
+ #
17
+ # This method is similar in purpose to `Kernel#Array`, but there are some differences:
18
+ #
19
+ # * If the argument responds to +to_ary+ the method is invoked. `Kernel#Array`
20
+ # moves on to try +to_a+ if the returned value is +nil+, but `Array.wrap` returns
21
+ # such a +nil+ right away.
22
+ # * If the returned value from +to_ary+ is neither +nil+ nor an +Array+ object, `Kernel#Array`
23
+ # raises an exception, while `Array.wrap` does not, it just returns the value.
24
+ # * It does not call +to_a+ on the argument, though special-cases +nil+ to return an empty array.
25
+ #
26
+ # The last point is particularly worth comparing for some enumerables:
27
+ #
28
+ # @example It does not molest hashes
29
+ # Array(:foo => :bar) # => [[:foo, :bar]]
30
+ # Array.wrap(:foo => :bar) # => [{:foo => :bar}]
31
+ #
32
+ # @example It does not do insane things to strings
33
+ # Array("foo\nbar") # => ["foo\n", "bar"], in Ruby 1.8
34
+ # Array.wrap("foo\nbar") # => ["foo\nbar"]
35
+ #
36
+ # There's also a related idiom that uses the splat operator:
37
+ #
38
+ # [*object]
39
+ #
40
+ # which returns `[nil]` for +nil+, and calls to `Array(object)` otherwise.
41
+ #
42
+ # Thus, in this case the behavior is different for +nil+, and the differences with
43
+ # `Kernel#Array` explained above apply to the rest of +object+s.
44
+ def self.wrap(object)
45
+ if object.nil?
46
+ []
47
+ elsif object.respond_to?(:to_ary)
48
+ object.to_ary || [object]
49
+ else
50
+ [object]
51
+ end
52
+ end
53
+ end
data/lib/gorillib/base.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  require 'gorillib/object/blank'
2
+ require 'gorillib/object/try'
2
3
  require 'gorillib/array/extract_options'
4
+ require 'gorillib/array/compact_blank'
3
5
  require 'gorillib/hash/reverse_merge'
4
6
  require 'gorillib/hash/compact'
7
+ require 'gorillib/hash/keys'
5
8
  require 'gorillib/metaprogramming/class_attribute'
6
- require 'gorillib/metaprogramming/cattr_accessor'
7
- require 'gorillib/hash/deep_compact'
8
- require 'gorillib/array/deep_compact'
@@ -0,0 +1,5 @@
1
+ module Gorillib
2
+ module Builder
3
+
4
+ end
5
+ end