chef_stash 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/repl.rb ADDED
@@ -0,0 +1,147 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ require 'chef_stash'
7
+ require 'inifile'
8
+ require 'securerandom'
9
+ require 'tempfile'
10
+ require 'open-uri'
11
+
12
+ # Return a cleanly join URI/URL segments into a cleanly normalized URL that
13
+ # the libraries can use when constructing URIs. URI.join is pure evil.
14
+ #
15
+ # @param [Array<String>] paths the list of parts to join
16
+ #
17
+ # @return [String<URI>] nicely joined URI/URL, squeaky clean and normalized
18
+ def uri_join(*paths)
19
+ return nil if paths.length == 0
20
+ leadingslash = paths[0][0] == '/' ? '/' : ''
21
+ trailingslash = paths[-1][-1] == '/' ? '/' : ''
22
+ paths.map! { |path| path.sub(/^\/+/, '').sub(/\/+$/, '') }
23
+ leadingslash + paths.join('/') + trailingslash
24
+ end
25
+
26
+ # Return a hash from an INI file with normalized keys (down-case
27
+ # and symbolized).
28
+ #
29
+ # @param [URI] file
30
+ # the ini file
31
+ #
32
+ # @return [Hash]
33
+ def inihash(file)
34
+ require 'inifile' unless defined?(IniFile)
35
+ Tempfile.open(SecureRandom.hex(3)) do |f|
36
+ f.write(URI.parse(file).read)
37
+ f.close
38
+ regkeys_fix IniFile.load(f.path).to_h.compact.recursively_normalize_keys
39
+ end
40
+ end
41
+
42
+ # Initializes a new repository hash or load an existing one.
43
+ #
44
+ # @param [String, Symbol] key
45
+ # name of the key
46
+ #
47
+ # @return [Hoodie::ChefStash]
48
+ def rash(url = 'http://winini.mudbox.dev', path = 'packages_3.0')
49
+ require 'chef_stash' unless defined?(ChefStash)
50
+ @rash ||= ChefStash::Rash.new(url, path)
51
+ end
52
+
53
+ # Shortcut to return cache path, if you pass in a file it will return the
54
+ # file with the cache path.
55
+ #
56
+ # @example
57
+ # file_cache_path
58
+ # => "/var/chef/cache/"
59
+ #
60
+ # file_cache_path 'patch.tar.gz'
61
+ # => "/var/chef/cache/patch.tar.gz"
62
+ #
63
+ # file_cache_path "#{node[:name]}-backup.tar.gz"
64
+ # => "/var/chef/cache/c20d24209cc8-backup.tar.gz"
65
+ #
66
+ # @param [String] args
67
+ # name of file to return path with file
68
+ #
69
+ # @return [String]
70
+ def file_cache_path(*args)
71
+ if args.nil?
72
+ Chef::Config[:file_cache_path]
73
+ else
74
+ ::File.join(Chef::Config[:file_cache_path], args)
75
+ end
76
+ end
77
+
78
+ # Initializes a new key store or loads an existing one. Data will persist
79
+ # between Chef invocations.
80
+ #
81
+ # @param key [Symbol, String] representing the key
82
+ #
83
+ # @return [Hash, Array, String] value for key
84
+ def stash
85
+ require 'chef_stash' unless defined?(ChefStash)
86
+ @stash ||= ChefStash.new
87
+ end
88
+
89
+ # Returns a new inihash hash replacing :regkeys hash section, and returning
90
+ # an array of hashes, with key/value pairs.
91
+ #
92
+ # @example replace the regkeys hash and return a new regkeys array of hashes
93
+ # inihash = {
94
+ # regkeys: {
95
+ # key1: 'a_path[my_key]',
96
+ # key2: 'the_path[to_key]',
97
+ # value1: 'cool_value',
98
+ # value2: 'cooler_value'
99
+ # }
100
+ # }
101
+ # regkeys_fix(inihash) Like a good neighbor regkey_fix has your back
102
+ # => { regkeys = [
103
+ # {
104
+ # data: 'cool_value',
105
+ # name: 'my_key',
106
+ # path: 'HKLM/SOFTWARE/KaiserPermanente/a_path',
107
+ # type: :string
108
+ # },
109
+ # {
110
+ # data: 'cooler_value',
111
+ # name: 'to_key',
112
+ # path: 'HKLM/SOFTWARE/KaiserPermanente/the_path',
113
+ # type: :string
114
+ # }
115
+ # ]
116
+ # }
117
+ #
118
+ # @param [Hash]
119
+ # replaces the value of :regkeys
120
+ #
121
+ # @return [Array<Hash{Symbol => String}>]
122
+ # new inihash hash, replacing the regkeys hash with an array of hashes
123
+ # with key/value pairs, all other key/value pairs are unchanged
124
+ def regkeys_fix(hash)
125
+ return hash unless hash.has_key?(:regkeys)
126
+ regkeys = []
127
+ hash[:regkeys].each do |key|
128
+ char, i = key[0].to_s.scan(/\d+|\D+/)
129
+ next unless char == 'key'
130
+ path, name = key[1].scan(/([^\[]+)/)
131
+ data = hash[:regkeys]["value#{i}".to_sym]
132
+ nowtime = Time.now.strftime('%Y:%m:%d:%I:%M:%S')
133
+ regkeys << {
134
+ path: 'HKLM\SOFTWARE\KaiserPermanente\\' + path[0],
135
+ type: :string,
136
+ name: name[0].gsub(']', ''),
137
+ data: (data == 'tstamp') ? nowtime : data
138
+ }
139
+ end
140
+ hash[:regkeys] = regkeys
141
+ hash
142
+ end
143
+
144
+ require 'pry'
145
+ binding.pry
146
+
147
+
metadata ADDED
@@ -0,0 +1,220 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: chef_stash
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Stefano Harding
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-04-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: anemone
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.7.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 0.7.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: hitimes
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.4'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.4'
55
+ - !ruby/object:Gem::Dependency
56
+ name: yard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.8'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.8'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.2'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.2'
97
+ - !ruby/object:Gem::Dependency
98
+ name: fuubar
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: simplecov
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.9'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.9'
125
+ - !ruby/object:Gem::Dependency
126
+ name: inch
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: yardstick
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ description: Chef Key/value stash cache hash objects store.
168
+ email:
169
+ - riddopic@gmail.com
170
+ executables: []
171
+ extensions: []
172
+ extra_rdoc_files:
173
+ - LICENSE
174
+ - README.md
175
+ files:
176
+ - ".gitattributes"
177
+ - ".gitignore"
178
+ - Gemfile
179
+ - LICENSE
180
+ - README.md
181
+ - Rakefile
182
+ - chef_stash.gemspec
183
+ - lib/chef_stash.rb
184
+ - lib/chef_stash/core_ext/hash.rb
185
+ - lib/chef_stash/core_ext/numeric.rb
186
+ - lib/chef_stash/disk_store.rb
187
+ - lib/chef_stash/memoizable.rb
188
+ - lib/chef_stash/os.rb
189
+ - lib/chef_stash/rash.rb
190
+ - lib/chef_stash/time_cache.rb
191
+ - lib/chef_stash/utils.rb
192
+ - lib/chef_stash/version.rb
193
+ - rash.rb
194
+ - repl.rb
195
+ homepage: https://github.com/riddopic/chef_stash
196
+ licenses:
197
+ - Apache 2.0
198
+ metadata: {}
199
+ post_install_message:
200
+ rdoc_options: []
201
+ require_paths:
202
+ - lib
203
+ required_ruby_version: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ required_rubygems_version: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: '0'
213
+ requirements: []
214
+ rubyforge_project:
215
+ rubygems_version: 2.4.4
216
+ signing_key:
217
+ specification_version: 4
218
+ summary: Chef Key/value stash cache hash objects store.
219
+ test_files: []
220
+ has_rdoc: