diru 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.rdoc +4 -0
  3. data/README.rdoc +17 -17
  4. data/bin/diru +96 -61
  5. data/lib/version.rb +1 -1
  6. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fa98c65075bc77ba9cc6236b44d746307be8093f4209fca37012fd5838039182
4
- data.tar.gz: c6a1bb20486d300b6cb8f1f02ca392ccf8d29b69ef7ecce7178e509296012306
3
+ metadata.gz: 52998510ee6ded3ea6fa81a826e82e648cbffb1abf1174a985ee71627bfc2d75
4
+ data.tar.gz: ee3d26f1d9d6668e67e9eabe0b34402a5b5c7e477d20a6cb58f1d51da4449ab3
5
5
  SHA512:
6
- metadata.gz: 1a6380ad8a79db5adce05913b296bebb0e69b578f979ecb745cbc2d1f4a51ad252e163390f358062e37ff1f024dd84ba37a227cf11bad36a43dda0376dee8051
7
- data.tar.gz: fe44d2598ed43e88774fff50ce480b21b8d79dfe773db27e260f2224d468260536f1a1a6a8c9b8609eef5735abedcfcfb21ac9bf1657390dd9630f1ff283010a
6
+ metadata.gz: f4dbaef3dc53c31010493374b2feefd8c15f01a2e1cbfac777ccee14e7488208b3f27c195abd2ce4d51d5ebfe34493bba734551d4ef6ff9b2cbe4bae8ac6a9ff
7
+ data.tar.gz: bb18dc7513830cfbbf4b2b33ef07aa084ccb2b44c4f01ba3b722b81c4d4c60f29b4f82a82d181302acd0847401738542436f08f6eebd62da8e9da87dc49bd3b1
@@ -1,5 +1,9 @@
1
1
  = Version history
2
2
 
3
+ [0.1.1] Prefering string keys for config.
4
+ Prefer json over yaml for options.
5
+ Deprecated DIRU_OPTS_FORMAT env var.
6
+
3
7
  [0.1.0] Fast startup after server start.
4
8
  Support for JSON options format.
5
9
 
@@ -75,10 +75,8 @@ or defined as environment variable. Environment variable DIRU_ROOT has
75
75
  higher precedence than the files. If ".diru_root_dir" file or a
76
76
  ".diru.[json|yml]" file is found from current dir or some dir above,
77
77
  the dir containing either of the files will become the Project
78
- root. Json format is selected by defining the DIRU_OPTS_FORMAT
79
- environment variable as "json". The default is "yml". If no files are
80
- found and DIRU_ROOT environment variable is not used, an error is
81
- issued.
78
+ root. If no files are found and DIRU_ROOT environment variable is not
79
+ used, an error is issued.
82
80
 
83
81
  Client communicates with the Server in order to get and save directory
84
82
  info. As mentioned above, Diru is more or less useless unless user has
@@ -230,7 +228,6 @@ provides thereby backup values for non-specified command line info.
230
228
  * DIRU_OPTS - Options file, if nothing, ~/.diru.[json|yml] is used.
231
229
  * DIRU_ROOT - Project root, used if ".diru_root_dir" and
232
230
  ".diru.[json|yml]" are missing.
233
- * DIRU_OPTS_FORMAT - Options file format: yml or json. Default is yml.
234
231
 
235
232
  If Hub is started without "--hport" option, Diru checks if
236
233
  DIRU_HUB_PORT is defined. If not, port 41114 is used.
@@ -251,6 +248,9 @@ If ".diru_root_dir" or DIRU_ROOT is used to define Project root, then
251
248
  DIRU_OPTS is used to define Options File. However, if not defined,
252
249
  then "~/.diru.[json|yml]" is used for options.
253
250
 
251
+ The "json" format is searched before "yml" format, and hence "json" is
252
+ selected if both exist.
253
+
254
254
  An example Options file can be displayed with:
255
255
 
256
256
  shell> diru -t
@@ -258,20 +258,20 @@ An example Options file can be displayed with:
258
258
 
259
259
  Available options in Options File:
260
260
 
261
- * :sync - Options File and Project directory hierarchy refresh period
262
- in seconds (for Server).
261
+ * sync - Options File and Project directory hierarchy refresh period
262
+ in seconds (for Server).
263
263
 
264
- * :dsync - Project directory hierarchy refresh period. This overrides
265
- ":sync" for Project updates (only). If value is 0, then no
266
- updates are done after initial update when Server
267
- starts. User might want to use 0, if the directory
268
- hierarchy is big and/or does not change (often).
264
+ * dsync - Project directory hierarchy refresh period. This overrides
265
+ "sync" for Project updates (only). If value is 0, then no
266
+ updates are done after initial update when Server
267
+ starts. User might want to use 0, if the directory
268
+ hierarchy is big and/or does not change (often).
269
269
 
270
- * :hist - number of entries in history (max).
270
+ * hist - number of entries in history (max).
271
271
 
272
- * :favs - tagged favorite dirs.
272
+ * favs - tagged favorite dirs.
273
273
 
274
- * :peers - <regexp>,<str> pairs for peer matching (String#sub method).
274
+ * peers - <regexp>,<str> pairs for peer matching (String#sub method).
275
275
 
276
276
 
277
277
  = Practical usage tips
@@ -313,7 +313,7 @@ in order to easily reference the popular source code directories. For
313
313
  less permanent favorites, user can use Bookmarks.
314
314
 
315
315
  Options File can be edited while Server is running. Server reads the
316
- Options File every 5 seconds (configurable with ":sync") and refreshes
316
+ Options File every 5 seconds (configurable with "sync") and refreshes
317
317
  its internal state. Server also updates its internal cache of Project
318
- directory content at each refresh cycle (by default). If ":dsync"
318
+ directory content at each refresh cycle (by default). If "dsync"
319
319
  Option is specified, it defines the "dsync" rate.
data/bin/diru CHANGED
@@ -145,14 +145,40 @@ module Diru
145
145
  end
146
146
 
147
147
 
148
- # Find file entry from directory hierarchy upwards, exit if not found.
149
- def Diru.must_find_upper_file( file, dir = Dir.pwd )
150
- begin
151
- Diru.find_upper_file( file, dir )
152
- rescue RuntimeError
153
- STDERR.puts "Could not find file \"#{file}\"!"
154
- exit( false )
148
+ # Find file entry from directory hierarchy upwards.
149
+ def Diru.find_an_upper_file( files, dir = Dir.pwd )
150
+ found = nil
151
+
152
+ # Process all directory levels.
153
+ while true
154
+
155
+ # Process directory level.
156
+ while true
157
+ # Process all files per directory level.
158
+ idx = 0
159
+ files.each do |file|
160
+ match = Dir.glob( "#{dir}/#{file}" )
161
+ unless match.empty?
162
+ found = match[0]
163
+ break
164
+ end
165
+ end
166
+
167
+ break if found
168
+
169
+ end
170
+
171
+ break if found
172
+
173
+ if dir == "/"
174
+ raise RuntimeError, "Could not find file(s): \"#{files.join("\", \"")}\"!"
175
+ end
176
+
177
+ dir = File.dirname( dir )
178
+
155
179
  end
180
+
181
+ found
156
182
  end
157
183
 
158
184
 
@@ -170,32 +196,18 @@ end
170
196
  # Diru configuration file.
171
197
  class DiruConf
172
198
 
173
- def DiruConf.deploy( filename = nil )
174
- dc_file = DiruConf.find( filename )
175
- DiruConf.use( dc_file )
176
- end
177
-
178
- def DiruConf.find( filename = nil )
179
- opts_file = nil
180
- if Opt['options'].given
181
- opts_file = Opt['options'].value
182
- elsif filename
183
- opts_file = filename
184
- elsif ENV['DIRU_OPTS']
185
- opts_file = ENV['DIRU_OPTS']
186
- else
187
- opts_file = "#{ENV['HOME']}/#{Diru.opts_filename}"
188
- end
189
-
190
- opts_file
191
- end
192
-
193
- def DiruConf.use( filename )
194
- case File.extname( filename )
195
- when ".json"; DiruConfJson.new( filename )
196
- when ".yml"; DiruConfYaml.new( filename )
197
- else raise RuntimeError, "Wrong Diru configuration file format (i.e. not json or yaml)!"
199
+ # Convert YAML config to hash with String keys at highest level.
200
+ def DiruConf.stringify_yaml_keys( entry )
201
+ ret = {}
202
+ entry.each do |k,v|
203
+ if k.is_a? String
204
+ key = k
205
+ else
206
+ key = k.to_s
207
+ end
208
+ ret[ key ] = v
198
209
  end
210
+ ret
199
211
  end
200
212
 
201
213
  def initialize( filename )
@@ -210,7 +222,7 @@ class DiruConfJson < DiruConf
210
222
 
211
223
  def load
212
224
  if File.exist?( @filename )
213
- JSON.parse( File.read( @filename ), :symbolize_names => true )
225
+ JSON.parse( File.read( @filename ) )
214
226
  else
215
227
  STDERR.puts "Diru Error: Broken JSON, please fix: \"#{@filename}\"..."
216
228
  nil
@@ -225,7 +237,7 @@ class DiruConfYaml < DiruConf
225
237
 
226
238
  def load
227
239
  if File.exist?( @filename )
228
- YAML.load( File.read( @filename ) )
240
+ DiruConf.stringify_yaml_keys( YAML.load( File.read( @filename ) ) )
229
241
  else
230
242
  STDERR.puts "Diru Error: Broken YAML, please fix: \"#{@filename}\"..."
231
243
  nil
@@ -421,12 +433,12 @@ class Search
421
433
 
422
434
  return unless load_conf( @opts_file )
423
435
 
424
- if @conf[:dsync] && @conf[:dsync] >= 0
425
- @dsync = @conf[:dsync]
436
+ if @conf[ "dsync" ] && @conf[ "dsync" ] >= 0
437
+ @dsync = @conf[ "dsync" ]
426
438
  end
427
439
 
428
- if @conf[:sync] && @conf[:sync] >= 1
429
- @sync = @conf[:sync]
440
+ if @conf[ "sync" ] && @conf[ "sync" ] >= 1
441
+ @sync = @conf[ "sync" ]
430
442
  @dsync = @sync unless @dsync
431
443
  end
432
444
 
@@ -438,14 +450,14 @@ class Search
438
450
  end
439
451
  end
440
452
 
441
- if @conf[:hist] && ( @conf[:hist] >= 2 )
442
- @histlimit = @conf[:hist]
453
+ if @conf[ "hist" ] && ( @conf[ "hist" ] >= 2 )
454
+ @histlimit = @conf[ "hist" ]
443
455
  else
444
456
  @histlimit = 20
445
457
  end
446
458
 
447
- if @conf[ :favs ]
448
- @fav = @conf[ :favs ]
459
+ if @conf[ "favs" ]
460
+ @fav = @conf[ "favs" ]
449
461
  end
450
462
 
451
463
  end
@@ -846,13 +858,13 @@ end
846
858
 
847
859
  if Opt['template'].given
848
860
  puts %q{---
849
- :hist: 20
850
- :sync: 10
851
- :dsync: 0
852
- :favs:
861
+ hist: 20
862
+ sync: 10
863
+ dsync: 0
864
+ favs:
853
865
  f: dir_0/dir_0_4/dir_0_4_0
854
866
  g: dir_1/dir_1_2
855
- :peers:
867
+ peers:
856
868
  - - "(.*/dir_0/.*)/dir_0_2_0"
857
869
  - "\\1"
858
870
  - - "(.*/dir_0/.*)/dir_0_1_0"
@@ -969,8 +981,8 @@ if Opt['server'].given
969
981
  hub = DRbObject.new( nil, "druby://localhost:#{hport}" )
970
982
 
971
983
  root = nil
972
- opts_file = nil
973
984
 
985
+ # Define project root, if it is explicitly defined.
974
986
  if ENV['DIRU_ROOT']
975
987
  root = ENV['DIRU_ROOT']
976
988
  else
@@ -980,22 +992,46 @@ if Opt['server'].given
980
992
  rescue
981
993
  root = nil
982
994
  end
995
+ end
983
996
 
984
- unless root
997
+ opts_json = ".diru.json"
998
+ opts_yaml = ".diru.yml"
985
999
 
986
- # Next search for .diru.[json|yml] file.
987
- begin
988
- file = Diru.find_upper_file( Diru.opts_filename )
989
- root = File.dirname( file )
990
- opts_file = file
991
- rescue
992
- Diru.error "Could not find user directory root!"
993
- end
1000
+ opts_filename = nil
1001
+ opts_file = nil
1002
+
1003
+ if root
1004
+ if Opt['options'].given
1005
+ opts_filename = Opt['options'].value
1006
+ elsif ENV['DIRU_OPTS']
1007
+ opts_filename = ENV['DIRU_OPTS']
1008
+ elsif File.exists? "#{ENV['HOME']}/#{opts_json}"
1009
+ opts_filename = "#{ENV['HOME']}/#{opts_json}"
1010
+ elsif File.exists? "#{ENV['HOME']}/#{opts_yaml}"
1011
+ opts_filename = "#{ENV['HOME']}/#{opts_yaml}"
1012
+ else
1013
+ opts_filename = nil
1014
+ end
1015
+ else
1016
+ # No explicit root, hence derive from options file (if any).
1017
+ begin
1018
+ file = Diru.find_an_upper_file( [ opts_json, opts_yaml ] )
1019
+ root = File.dirname( file )
1020
+ opts_filename = file
1021
+ rescue
1022
+ Diru.error "Could not find user directory root!"
994
1023
  end
995
1024
  end
996
1025
 
997
- # opts_file = Diru.get_opts_file( opts_file )
998
- opts_file = DiruConf.deploy( opts_file )
1026
+ if opts_filename
1027
+ case File.extname( opts_filename )
1028
+ when ".json"; opts_file = DiruConfJson.new( opts_filename )
1029
+ when ".yml"; opts_file = DiruConfYaml.new( opts_filename )
1030
+ else raise RuntimeError, "Wrong Diru configuration file format (i.e. not json or yaml)!"
1031
+ end
1032
+ else
1033
+ raise RuntimeError, "Missing configuration file!"
1034
+ end
999
1035
 
1000
1036
  if Opt['server'].value.any?
1001
1037
  user = Opt['server'].value[0]
@@ -1012,7 +1048,6 @@ if Opt['server'].given
1012
1048
  if s_port == 0
1013
1049
  Diru.error "Could not start server!"
1014
1050
  else
1015
- # File.write( port_file, s_port.to_s ) if port_file
1016
1051
  puts "Using server port: #{s_port}..."
1017
1052
  end
1018
1053
 
@@ -1318,7 +1353,7 @@ class Client
1318
1353
  def peer
1319
1354
  # cur = Dir.pwd
1320
1355
  cur = @pwd
1321
- peers = @conf[ :peers ]
1356
+ peers = @conf[ "peers" ]
1322
1357
  peers.each do |pair|
1323
1358
  re = Regexp.new( pair[0] )
1324
1359
  if ( re.match( cur ) )
@@ -1,5 +1,5 @@
1
1
  module Diru
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  def Diru.version
4
4
  Diru::VERSION
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diru
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tero Isannainen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-16 00:00:00.000000000 Z
11
+ date: 2019-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: como