vv 0.0.11 → 0.0.12

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
  SHA256:
3
- metadata.gz: d2d912eb9fcb0485c2139ebe4518ae370ce45125c86d5bb626b3beb056068a7c
4
- data.tar.gz: c0c9004e1998216defa6efc4a7568ef397920bc35754c43f23a6279be596dbf4
3
+ metadata.gz: 5f3bcbbe7ea69583dce95c3b9d9a702fda226a2bb9e63f524c0a76cc18b69142
4
+ data.tar.gz: 36b73375b12feb1240c7361309ad1b346e0893291c1d068eafd2f2eca20d8aac
5
5
  SHA512:
6
- metadata.gz: 65d5efbd8f5b7e2e9da027954375920164b2e0b246b95edeb3b381a139b30d4e76570f77b0fa43c9c45dd55542fabacbd5bd996beb832a8c344fcca0b2740606
7
- data.tar.gz: 31b97ec5a249b43d8419debf89cb59e48fa6c4786684be18eae8d61b9f8c6d4bd5e4dffe1af2617ce22b20d4aae202edff0acbf4110598627f418b764dabbb45
6
+ metadata.gz: '09b06bd73467b0f00bf81fc89ac494b153db055042ddbad586dc332b1ca460cb217728860a311ffb09b7f8ebd464dc1eb7d8153a3ce51d4a6b140cf84ecb9641'
7
+ data.tar.gz: d8401e963170293b4a591f49ef040350d3a6fdb557102b741717bd89ebbd40deb3f7984e5f71a0281cbe6344b6a904c96833a328ff60e59981342c6b811c3d43
data/lib/vv/cli.rb CHANGED
@@ -38,9 +38,9 @@ module VV
38
38
  end
39
39
 
40
40
  def set_default_paths
41
- @config_path ||= File.join File.config_home, name_version
42
- @cache_path ||= File.join File.cache_home, name_version
43
- @data_path ||= File.join File.data_home, name_version
41
+ @config_path ||= File.config_home! name_version
42
+ @cache_path ||= File.cache_home! name_version
43
+ @data_path ||= File.data_home! name_version
44
44
  end
45
45
 
46
46
  def name
@@ -153,29 +153,35 @@ module VV
153
153
  alias_method :move_dir_into, :move_directory_into
154
154
  alias_method :mv_dir_into, :move_directory_into
155
155
 
156
- def config_home
156
+ def config_home sub_directory=nil
157
157
  path = ENV['XDG_CACHE_HOME']
158
- return path unless path.blank?
159
158
  path ||= File.join ENV['HOME'], ".config"
159
+
160
+ return path unless sub_directory
161
+
162
+ File.join path, sub_directory
160
163
  end
161
164
  alias_method :xdg_config_home, :config_home
162
165
 
163
166
  # Where application specific files should be stored
164
- def data_home
167
+ def data_home sub_directory=nil
165
168
  path = ENV['XDG_DATA_HOME']
166
- return path unless path.blank?
167
169
  path ||= File.join ENV['HOME'], ".local", "share"
170
+
171
+ return path unless sub_directory
172
+
173
+ File.join path, sub_directory
168
174
  end
169
175
  alias_method :output_home, :data_home
170
176
  alias_method :xdg_data_home, :data_home
171
177
 
172
178
  def cache_home sub_directory=nil
173
- response = ENV['XDG_CACHE_HOME']
174
- response ||= File.join ENV['HOME'], ".cache"
179
+ path = ENV['XDG_CACHE_HOME']
180
+ path ||= File.join ENV['HOME'], ".cache"
175
181
 
176
- return response unless sub_directory
182
+ return path unless sub_directory
177
183
 
178
- File.join response, sub_directory
184
+ File.join path, sub_directory
179
185
  end
180
186
  alias_method :xdg_cache_home, :cache_home
181
187
 
@@ -186,11 +192,29 @@ module VV
186
192
  end
187
193
  alias_method :xdg_cache_home!, :cache_home!
188
194
 
195
+ def config_home! sub_directory
196
+ path = config_home sub_directory
197
+ File.make_dir_if_not_exists path
198
+ path
199
+ end
200
+ alias_method :xdg_config_home!, :config_home!
201
+
202
+ def data_home! sub_directory
203
+ path = data_home sub_directory
204
+ File.make_dir_if_not_exists path
205
+ path
206
+ end
207
+ alias_method :xdg_data_home!, :data_home!
208
+
189
209
  def make_directory_if_not_exists directory
190
210
  FileUtils.mkdir_p(directory).first
191
211
  end
192
212
  alias_method :make_dir_if_not_exists,
193
213
  :make_directory_if_not_exists
214
+ alias_method :create_directory_if_not_exists,
215
+ :make_directory_if_not_exists
216
+ alias_method :create_dir_if_not_exists,
217
+ :make_directory_if_not_exists
194
218
 
195
219
  def make_directory directory
196
220
  FileUtils.mkdir(directory).first
@@ -208,6 +232,16 @@ module VV
208
232
  alias_method :remove_dir, :remove_directory
209
233
  alias_method :rm_dir, :remove_directory
210
234
 
235
+ def remove filepath, force: false
236
+ message = \
237
+ "Cowardly refusing to remove directory (see `remove_directory`)"
238
+ fail message if filepath.is_directory_path?
239
+
240
+ force ? FileUtils.rm_f(filepath) : FileUtils.rm(filepath)
241
+ end
242
+ alias_method :remove_file, :remove
243
+ alias_method :rm, :remove
244
+
211
245
  end
212
246
 
213
247
  def vv_readlines
@@ -0,0 +1,47 @@
1
+ module VV
2
+ module FloatMethods
3
+
4
+ def self.included(base)
5
+ base.extend(ClassMethods)
6
+ end
7
+
8
+ module ClassMethods
9
+
10
+ def vv_included?
11
+ true
12
+ end
13
+
14
+ end
15
+
16
+ def vv_json nan_coerces: false,
17
+ infinity_coerces: false,
18
+ max: nil,
19
+ min: nil
20
+
21
+ fail "Expecting numeric value for `max`" if max.is_a? String
22
+ fail "Expecting numeric value for `min`" if min.is_a? String
23
+
24
+ message = \
25
+ "Infinite not convertable sans `infinity_coerces: true`. "
26
+ message += "Set `max` and `min` for non-null coercion."
27
+ fail message if infinite? unless infinity_coerces
28
+
29
+ message = \
30
+ "NaN not convertable sans `nan_coerces: true`."
31
+ fail message if self.nan? unless nan_coerces
32
+
33
+ return nil.to_json if nan?
34
+
35
+ use_max = ( max.present? and self > max )
36
+ use_max ||= ( infinite? and self > 0 )
37
+ return max.to_json if use_max
38
+
39
+ use_min = ( min.present? and self < min )
40
+ use_min ||= ( infinite? and self < 0 )
41
+ return min.to_json if use_min
42
+
43
+ JSON.dump(self)
44
+ end
45
+
46
+ end
47
+ end
@@ -13,6 +13,21 @@ module VV
13
13
 
14
14
  end
15
15
 
16
+ # See Float#vv_json.
17
+ # Intended for common sense json doc generation with reasonable
18
+ # length, depth, and size limits.
19
+ def vv_json
20
+ raise NotImplementedError
21
+ end
22
+
23
+ def symbolize_keys
24
+ transform_keys{ |key| key.to_sym }
25
+ end
26
+
27
+ def symbolize_keys!
28
+ transform_keys!{ |key| key.to_sym }
29
+ end
30
+
16
31
  def stringify_keys
17
32
  transform_keys{ |key| key.to_s }
18
33
  end
@@ -1,25 +1,39 @@
1
- class Integer
1
+ module VV
2
+ module IntegerMethods
2
3
 
3
- def spaces
4
- characters String.space
5
- end
4
+ def self.included(base)
5
+ base.extend(ClassMethods)
6
+ end
6
7
 
7
- def dashes
8
- characters String.dash
9
- end
8
+ module ClassMethods
10
9
 
11
- def characters character, fail_on_negative: false
12
- message = "Expected single character, not #{character}."
13
- fail ArgumentError, message if character.length > 1
10
+ def vv_included?
11
+ true
12
+ end
14
13
 
15
- message = "Expected non-negative integer, not `#{self}`."
16
- fail message if self < 0 and fail_on_negative
14
+ end
17
15
 
18
- ( self > 0 ) ? ( character * self ) : String.empty_string
19
- end
16
+ def spaces
17
+ characters String.space
18
+ end
20
19
 
21
- def to_i!
22
- self
23
- end
20
+ def dashes
21
+ characters String.dash
22
+ end
23
+
24
+ def characters character, fail_on_negative: false
25
+ message = "Expected single character, not #{character}."
26
+ fail ArgumentError, message if character.length > 1
24
27
 
28
+ message = "Expected non-negative integer, not `#{self}`."
29
+ fail message if self < 0 and fail_on_negative
30
+
31
+ ( self > 0 ) ? ( character * self ) : String.empty_string
32
+ end
33
+
34
+ def to_i!
35
+ self
36
+ end
37
+
38
+ end
25
39
  end
@@ -296,10 +296,6 @@ module VV
296
296
  raise
297
297
  end
298
298
 
299
- def to_i!
300
- Integer(self)
301
- end
302
-
303
299
  def to_boolean
304
300
  _true = self == "true"
305
301
  return true if _true
@@ -313,6 +309,36 @@ module VV
313
309
  raise RuntimeError, message
314
310
  end
315
311
 
312
+ def parse notation: :json
313
+ message = "Only JSON support at this time."
314
+ fail NotImplementedError, message unless notation == :json
315
+
316
+ JSON.parse self
317
+ end
318
+
319
+ def parse_json
320
+ self.parse notation: :json
321
+ end
322
+
323
+ def to_h parse: :json, symbolize_keys: false
324
+ message = "Only JSON support at this time."
325
+ fail NotImplementedError, message unless parse == :json
326
+
327
+ response = self.parse_json
328
+
329
+ response.symbolize_keys! if symbolize_keys
330
+
331
+ return response if response.to_h == response
332
+
333
+ message = \
334
+ "Parse string was #{response.class}, instead of Hash."
335
+ fail message
336
+ end
337
+
338
+ def to_i!
339
+ Integer(self)
340
+ end
341
+
316
342
  def readable_to_i
317
343
  return self.to_i if self.number?
318
344
 
@@ -1,4 +1,9 @@
1
1
  module VV
2
+
3
+ # Automate runs standalone from the rest of the repo, so
4
+ # the code here intentionally avoids using helpers that
5
+ # VV adds to ruby classes.
6
+
2
7
  module Automate
3
8
 
4
9
  def version path:
@@ -55,7 +60,10 @@ module VV
55
60
  end
56
61
  module_function :version
57
62
 
58
- def build( name: )
63
+ def build( name: , argv: nil )
64
+ simple = %w[ simple force ].include? argv.first
65
+ return build_simple name: name if simple
66
+
59
67
  puts %x{ find lib/ | \\
60
68
  xargs git ls-files --error-unmatch > /dev/null 2>&1 \\
61
69
  || ( echo && \\
@@ -71,6 +79,15 @@ module VV
71
79
  end
72
80
  module_function :build
73
81
 
82
+ def build_simple( name: )
83
+ puts %x{ rm #{name}-*.gem
84
+ gem uninstall --ignore-dependencies #{name} > /dev/null
85
+ gem build --force #{name}.gemspec
86
+ gem install --force --local $(readlink -f #{name}-*.gem | sort | tail -n 1 ) --pre
87
+ }
88
+ end
89
+ module_function :build_simple
90
+
74
91
  def push( name: )
75
92
  puts %x{ TAG_VERSION=$(./bin/version)
76
93
  git push origin HEAD && \\
data/lib/vv/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module VV
2
- VERSION = '0.0.11'
2
+ VERSION = '0.0.12'
3
3
  end
data/lib/vv.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require "json"
1
2
  require "securerandom"
2
3
  require "readline"
3
4
  require "set"
@@ -48,6 +49,14 @@ class NilClass
48
49
  include VV::NilMethods
49
50
  end
50
51
 
52
+ class Integer
53
+ include VV::IntegerMethods
54
+ end
55
+
56
+ class Float
57
+ include VV::FloatMethods
58
+ end
59
+
51
60
  class Random
52
61
  include VV::RandomMethods
53
62
  extend VV::RandomClassSettings
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zach Aysan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-21 00:00:00.000000000 Z
11
+ date: 2019-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -66,6 +66,7 @@ files:
66
66
  - lib/vv/cli.rb
67
67
  - lib/vv/false_methods.rb
68
68
  - lib/vv/file_methods.rb
69
+ - lib/vv/float_methods.rb
69
70
  - lib/vv/gem_methods.rb
70
71
  - lib/vv/hash_methods.rb
71
72
  - lib/vv/integer_methods.rb