bogo 0.1.2 → 0.1.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 03ed553a2ed1b83be48e18aeb962196071a2bb5d
4
- data.tar.gz: b1466ec5ade9a0317e57a4e9999d1f8448051bd4
3
+ metadata.gz: 495624d0b24d9c6511abe8044be96c32506c473d
4
+ data.tar.gz: b3e80eeaf01de11a50e34c723ff574affdcba142
5
5
  SHA512:
6
- metadata.gz: 230d6b4ca8471a43489d7abe9f1bc883c6a71f20ca1b451103b54b72e1e881fba012a6b2239468c0b6a1005e155aabae0d98886f8d2187a199c9e9cde0bb4774
7
- data.tar.gz: 850f441d6b9e1a42f066149dbd06cd70208b3405f040a4f30939e22d9c6e54bdb284bb68f0ad8039733372310a19e364773fbf082aa993652defbc2573e9da22
6
+ metadata.gz: 3e57145c2f42b320bb64b2324ad407ad3362e98038d17bf28f4764432c0da0679fc456bcd2cd4cde994db89a5358c7749b611d8788a01542f413b52076a5abc1
7
+ data.tar.gz: d1109277e24b9ac77f74366c925f8136755371f321bbd04bb427ce13f3d4dfe5f31275575ecc793f32640c4fc4f633097828389105daeb8509c99de9b679c4a1
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## v0.1.4
2
+ * Add constant helpers
3
+ * Add support for freezing Smashes
4
+
1
5
  ## v0.1.2
2
6
  * Add initial spec coverage
3
7
  * Always load `Bogo::Smash`
data/README.md CHANGED
@@ -109,6 +109,50 @@ puts Smash.new(:a => 1, :b => 2, :c => 3).checksum
109
109
  puts Smash.new(:c => 3, :b => 2, :a => 1).checksum
110
110
  ```
111
111
 
112
+ ### Freezing
113
+
114
+ Freeze entire smash structure:
115
+
116
+ ```ruby
117
+ require 'bogo'
118
+
119
+ inst = {:a => 'hi', :b => {:c => 'bye'}}.to_smash(:freeze)
120
+ puts inst[:a].frozen? 'Frozen' : 'Thawed'
121
+ puts inst[:b].frozen? 'Frozen' : 'Thawed'
122
+ puts inst[:b][:c].frozen? 'Frozen' : 'Thawed'
123
+ ```
124
+
125
+ ### Arrays
126
+
127
+ The `#to_smash` helper is also attached to `Array` to
128
+ fully convert an Arrays internals to Smashes
129
+
130
+ ```ruby
131
+ require 'bogo'
132
+
133
+ puts [{:a => 1}].to_smash.first.class.name
134
+ ```
135
+
136
+ ## Constants
137
+
138
+ Turn a string into a constant:
139
+
140
+ ```ruby
141
+ require 'bogo'
142
+
143
+ const = Object.new.extend(Bogo::Constants)
144
+ p const.constantize('Bogo::Constants')
145
+ ```
146
+
147
+ Get the namespace of a constant:
148
+
149
+ ```ruby
150
+ require 'bogo'
151
+
152
+ const = Object.new.extend(Bogo::Constants)
153
+ p const.namespace('Bogo::Constants')
154
+ ```
155
+
112
156
  ## Memoization
113
157
 
114
158
  Memoization helpers for thread and object local, thread local,
@@ -150,6 +194,7 @@ puts obj2.object_value('fubar')
150
194
  puts obj2.thread_value('fubar')
151
195
  puts obj2.global_value('fubar')
152
196
  puts '--- obj2 end'
197
+ ```
153
198
 
154
199
  ## Lazy
155
200
 
data/lib/bogo.rb CHANGED
@@ -2,6 +2,7 @@ require 'bogo/version'
2
2
 
3
3
  module Bogo
4
4
  autoload :AnimalStrings, 'bogo/animal_strings'
5
+ autoload :Constants, 'bogo/constants'
5
6
  autoload :Lazy, 'bogo/lazy'
6
7
  autoload :Memoization, 'bogo/memoization'
7
8
  autoload :Smash, 'bogo/smash'
@@ -0,0 +1,43 @@
1
+ require 'bogo'
2
+
3
+ module Bogo
4
+
5
+ # Constant helper
6
+ module Constants
7
+
8
+ # Convert string to constant
9
+ #
10
+ # @param string [String] full constant name
11
+ # @return [Object]
12
+ def constantize(string)
13
+ string.split('::').inject(ObjectSpace) do |memo, key|
14
+ break unless memo.const_defined?(key)
15
+ memo.const_get(key)
16
+ end
17
+ end
18
+
19
+ # Return constant value localized to calling instance class
20
+ #
21
+ # @param name [String, Symbol] constant name
22
+ # @return [Object]
23
+ def const_val(name)
24
+ self.class.const_get(name)
25
+ end
26
+
27
+ # Provides namespace constant
28
+ #
29
+ # @param inst [Object]
30
+ # @return [Class, Module]
31
+ def namespace(inst = self)
32
+ klass = inst.class.name.split('::')
33
+ klass.pop
34
+ if(klass.empty?)
35
+ ObjectSpace
36
+ else
37
+ constantize(klass.join('::'))
38
+ end
39
+ end
40
+
41
+ end
42
+
43
+ end
data/lib/bogo/smash.rb CHANGED
@@ -112,7 +112,7 @@ class Hash
112
112
  # @param convert_call [Symbol] builtin hash convert
113
113
  # @return [Smash]
114
114
  def to_type_converter(type, convert_call, *args)
115
- type.new.tap do |smash|
115
+ result = type.new.tap do |smash|
116
116
  if(args.include?(:sorted))
117
117
  process = self.sort_by do |entry|
118
118
  entry.first.to_s
@@ -124,6 +124,12 @@ class Hash
124
124
  smash[k.is_a?(Symbol) ? k.to_s : k] = smash_conversion(v, convert_call, *args)
125
125
  end
126
126
  end
127
+ if(args.include?(:freeze))
128
+ result.values.map(&:freeze)
129
+ result.freeze
130
+ else
131
+ result
132
+ end
127
133
  end
128
134
 
129
135
  # Convert object to smash if applicable
@@ -137,10 +143,28 @@ class Hash
137
143
  obj.send(convert_call, *args)
138
144
  when Array
139
145
  obj.map do |i|
140
- smash_conversion(i, convert_call, *args)
146
+ result = smash_conversion(i, convert_call, *args)
147
+ args.include?(:freeze) ? result.freeze : result
141
148
  end
142
149
  else
143
- obj
150
+ args.include?(:freeze) ? obj.freeze : obj
151
+ end
152
+ end
153
+
154
+ end
155
+
156
+ class Array
157
+
158
+ # Iterates searching for Hash types to auto convert
159
+ #
160
+ # @return [Array]
161
+ def to_smash(*args)
162
+ self.map do |item|
163
+ if(item.respond_to?(:to_smash))
164
+ item.to_smash(*args)
165
+ else
166
+ args.include?(:freeze) ? item.freeze : item
167
+ end
144
168
  end
145
169
  end
146
170
 
data/lib/bogo/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Bogo
2
2
  # Current library version
3
- VERSION = Gem::Version.new('0.1.2')
3
+ VERSION = Gem::Version.new('0.1.4')
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bogo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Roberts
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-31 00:00:00.000000000 Z
11
+ date: 2015-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie
@@ -51,6 +51,7 @@ files:
51
51
  - bogo.gemspec
52
52
  - lib/bogo.rb
53
53
  - lib/bogo/animal_strings.rb
54
+ - lib/bogo/constants.rb
54
55
  - lib/bogo/lazy.rb
55
56
  - lib/bogo/memoization.rb
56
57
  - lib/bogo/smash.rb