bogo 0.1.2 → 0.1.4

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