augeas 0.6.0 → 0.6.1

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.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. data/README.rdoc +2 -0
  3. data/Rakefile +8 -2
  4. data/ext/augeas/_augeas.c +11 -109
  5. data/lib/augeas.rb +33 -23
  6. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 75d2dd413111560ecd6863377650e4f99e1d4be1
4
- data.tar.gz: ac115f04323b69b96aba2a82a4c7f4497d81af3a
3
+ metadata.gz: ba9ebbb3fbea59d2f722866713c6ff12fc52d9ea
4
+ data.tar.gz: 6e09cb5ef788772f2cde0dbf896092f7055cb644
5
5
  SHA512:
6
- metadata.gz: 4f3401fc55b371e25a2a94330ec390c69a24a56537563197086bb8edf0a0b98c0a13120faa266c53905a41fe4f94438ceabf10a43af3e971149ea9a34bf7847b
7
- data.tar.gz: 49268ca68505d4260f1660b8392276f8b66e5faa827185fca4842dd18d2b92879f76dc797b79c1d55ec91c83def55119859ed81b16066aee1d8678ab6a1a7f7e
6
+ metadata.gz: 2171c37b81a34c693adda647b3cc4fdd6342c091cd8ce04078bda5edd672148990b7f2555a48ba007b6904da6019c570c826e251ddfd71b38729df9f127391b9
7
+ data.tar.gz: aa62e622d2456f7813d34dfbcf23a1b8610d826af9dae105cb301192338052480c449d1f605d764027f9a195a80c79749fa51d3adb3ae101b7c03406c0dc890b
@@ -1,5 +1,7 @@
1
1
  = Ruby bindings for augeas
2
2
 
3
+ {<img src="https://badge.fury.io/rb/augeas.png" alt="Gem Version" />}[http://badge.fury.io/rb/augeas]
4
+
3
5
  The class Augeas provides bindings to augeas [http://augeas.net] library.
4
6
 
5
7
  == Usage: Setting Data
data/Rakefile CHANGED
@@ -1,4 +1,10 @@
1
1
  # -*- ruby -*-
2
+ # Rakefile: build ruby augeas bindings
3
+ #
4
+ # See AUTHORS for the list of authors
5
+ #
6
+ # Distributed under the GNU Lesser General Public License v2.1 or later.
7
+ # See COPYING for details
2
8
 
3
9
  require 'rake/clean'
4
10
  require 'rdoc/task'
@@ -6,7 +12,7 @@ require 'rake/testtask'
6
12
  require 'rubygems/package_task'
7
13
 
8
14
  GEM_NAME='augeas'
9
- GEM_VERSION='0.6.0'
15
+ GEM_VERSION='0.6.1'
10
16
  EXT_CONF='ext/augeas/extconf.rb'
11
17
  MAKEFILE="ext/augeas/Makefile"
12
18
  AUGEAS_MODULE="ext/augeas/_augeas.so"
@@ -80,7 +86,7 @@ SPEC = Gem::Specification.new do |s|
80
86
  s.summary = "Ruby bindings for augeas"
81
87
  s.authors = [ "Bryan Kearney", "David Lutterkort", "Ionut Artarisi", "Artem Sheremet" ]
82
88
  s.files = PKG_FILES
83
- s.licenses = ['LGPLv2']
89
+ s.licenses = ['LGPLv2']
84
90
  s.required_ruby_version = '>= 1.8.7'
85
91
  s.extensions = "ext/augeas/extconf.rb"
86
92
  s.description = "Provides bindings for augeas."
@@ -25,6 +25,7 @@
25
25
 
26
26
  #include <ruby.h>
27
27
  #include <augeas.h>
28
+ #include <errno.h>
28
29
 
29
30
  static VALUE c_augeas;
30
31
 
@@ -54,12 +55,12 @@ VALUE augeas_get(VALUE s, VALUE path) {
54
55
  const char *cpath = StringValueCStr(path);
55
56
  const char *value = NULL;
56
57
 
57
- int retval = aug_get(aug, cpath, &value);
58
+ int retval = aug_get(aug, cpath, &value);
58
59
 
59
60
  if (retval == 1 && value != NULL) {
60
- return rb_str_new(value, strlen(value));
61
+ return rb_str_new(value, strlen(value));
61
62
  } else {
62
- return Qnil;
63
+ return Qnil;
63
64
  }
64
65
  }
65
66
 
@@ -94,30 +95,6 @@ VALUE augeas_set(VALUE s, VALUE path, VALUE value) {
94
95
  return INT2FIX(callValue);
95
96
  }
96
97
 
97
- /*
98
- * call-seq:
99
- * set(PATH, VALUE) -> boolean
100
- *
101
- * Set the value associated with PATH to VALUE. VALUE is copied into the
102
- * internal data structure. Intermediate entries are created if they don't
103
- * exist.
104
- */
105
- VALUE augeas_set_old(VALUE s, VALUE path, VALUE value) {
106
- augeas *aug = aug_handle(s);
107
- const char *cpath = StringValueCStr(path) ;
108
- const char *cvalue = StringValueCStrOrNull(value) ;
109
-
110
- int callValue = aug_set(aug, cpath, cvalue) ;
111
- VALUE returnValue ;
112
-
113
- if (callValue == 0)
114
- returnValue = Qtrue ;
115
- else
116
- returnValue = Qfalse ;
117
-
118
- return returnValue ;
119
- }
120
-
121
98
  /*
122
99
  * call-seq:
123
100
  * setm(BASE, SUB, VALUE) -> boolean
@@ -214,35 +191,6 @@ VALUE augeas_match(VALUE s, VALUE p) {
214
191
  return result ;
215
192
  }
216
193
 
217
- /*
218
- * call-seq:
219
- * match(PATH) -> an_array
220
- *
221
- * Return all the paths that match the path expression PATH as an aray of
222
- * strings.
223
- * Raises an error if no paths were found.
224
- */
225
- VALUE augeas_match_old(VALUE s, VALUE p) {
226
- augeas *aug = aug_handle(s);
227
- const char *path = StringValueCStr(p);
228
- char **matches = NULL;
229
- int cnt, i;
230
-
231
- cnt = aug_match(aug, path, &matches) ;
232
- if (cnt < 0)
233
- rb_raise(rb_eSystemCallError, "Matching path expression '%s' failed",
234
- path);
235
-
236
- VALUE result = rb_ary_new();
237
- for (i = 0; i < cnt; i++) {
238
- rb_ary_push(result, rb_str_new(matches[i], strlen(matches[i])));
239
- free(matches[i]) ;
240
- }
241
- free (matches) ;
242
-
243
- return result ;
244
- }
245
-
246
194
  /*
247
195
  * call-seq:
248
196
  * save() -> int
@@ -255,25 +203,6 @@ VALUE augeas_save(VALUE s) {
255
203
  return INT2FIX(callValue);
256
204
  }
257
205
 
258
- /*
259
- * call-seq:
260
- * save() -> boolean
261
- *
262
- * Write all pending changes to disk
263
- */
264
- VALUE augeas_save_old(VALUE s) {
265
- augeas *aug = aug_handle(s);
266
- int callValue = aug_save(aug) ;
267
- VALUE returnValue ;
268
-
269
- if (callValue == 0)
270
- returnValue = Qtrue ;
271
- else
272
- returnValue = Qfalse ;
273
-
274
- return returnValue ;
275
- }
276
-
277
206
  /*
278
207
  * call-seq:
279
208
  * load() -> int
@@ -286,25 +215,6 @@ VALUE augeas_load(VALUE s) {
286
215
  return INT2FIX(callValue);
287
216
  }
288
217
 
289
- /*
290
- * call-seq:
291
- * load() -> boolean
292
- *
293
- * Load files from disk according to the transforms under +/augeas/load+
294
- */
295
- VALUE augeas_load_old(VALUE s) {
296
- augeas *aug = aug_handle(s);
297
- int callValue = aug_load(aug);
298
- VALUE returnValue ;
299
-
300
- if (callValue == 0)
301
- returnValue = Qtrue ;
302
- else
303
- returnValue = Qfalse ;
304
-
305
- return returnValue ;
306
- }
307
-
308
218
  /*
309
219
  * call-seq:
310
220
  * defvar(NAME, EXPR) -> boolean
@@ -355,10 +265,7 @@ VALUE augeas_defnode(VALUE s, VALUE name, VALUE expr, VALUE value) {
355
265
  return (r < 0) ? Qfalse : INT2NUM(r);
356
266
  }
357
267
 
358
- /* This function returns different names for different augeas API */
359
- /* version specified in the +version+ argument. See augeas_init_old and */
360
- /* augeas_init. */
361
- VALUE augeas_init_split(VALUE m, VALUE r, VALUE l, VALUE f, char version) {
268
+ VALUE augeas_init(VALUE m, VALUE r, VALUE l, VALUE f) {
362
269
  unsigned int flags = NUM2UINT(f);
363
270
  const char *root = StringValueCStrOrNull(r);
364
271
  const char *loadpath = StringValueCStrOrNull(l);
@@ -366,19 +273,11 @@ VALUE augeas_init_split(VALUE m, VALUE r, VALUE l, VALUE f, char version) {
366
273
 
367
274
  aug = aug_init(root, loadpath, flags);
368
275
  if (aug == NULL) {
369
- rb_raise(rb_eSystemCallError, "Failed to initialize Augeas");
276
+ rb_raise(rb_eSystemCallError, "Failed to initialize Augeas (%d)", errno);
370
277
  }
371
278
  return Data_Wrap_Struct(c_augeas, NULL, augeas_free, aug);
372
279
  }
373
280
 
374
- VALUE augeas_init_old(VALUE m, VALUE r, VALUE l, VALUE f) {
375
- return augeas_init_split(m, r, l, f, 0);
376
- }
377
- VALUE augeas_init(VALUE m, VALUE r, VALUE l, VALUE f) {
378
- return augeas_init_split(m, r, l, f, 1);
379
- }
380
-
381
-
382
281
  VALUE augeas_close (VALUE s) {
383
282
  augeas *aug = aug_handle(s);
384
283
 
@@ -590,6 +489,7 @@ void Init__augeas() {
590
489
  DEF_AUG_FLAG(NO_LOAD);
591
490
  DEF_AUG_FLAG(NO_MODL_AUTOLOAD);
592
491
  DEF_AUG_FLAG(ENABLE_SPAN);
492
+ DEF_AUG_FLAG(NO_ERR_CLOSE);
593
493
  #undef DEF_AUG_FLAG
594
494
 
595
495
  /* Constants for enum aug_errcode_t */
@@ -607,8 +507,10 @@ void Init__augeas() {
607
507
  DEF_AUG_ERR(ENOSPAN);
608
508
  DEF_AUG_ERR(EMVDESC);
609
509
  DEF_AUG_ERR(ECMDRUN);
610
- DEF_AUG_ERR(EBADARG);
611
- DEF_AUG_ERR(ELABEL);
510
+ DEF_AUG_ERR(EBADARG);
511
+ #ifdef AUG_ELABEL
512
+ DEF_AUG_ERR(ELABEL);
513
+ #endif
612
514
  #undef DEF_AUG_ERR
613
515
 
614
516
  /* Define the methods */
@@ -43,23 +43,23 @@ class Augeas
43
43
  class CommandExecutionError < Error; end
44
44
  class InvalidArgumentError < Error; end
45
45
  class InvalidLabelError < Error; end
46
- @@error_hash = {
46
+ ERRORS_HASH = Hash[{
47
47
  # the cryptic error names come from the C library, we just make
48
48
  # them more ruby and more human
49
- ENOMEM => NoMemoryError,
50
- EINTERNAL => InternalError,
51
- EPATHX => InvalidPathError,
52
- ENOMATCH => NoMatchError,
53
- EMMATCH => MultipleMatchesError,
54
- ESYNTAX => LensSyntaxError,
55
- ENOLENS => LensNotFoundError,
56
- EMXFM => MultipleTransformsError,
57
- ENOSPAN => NoSpanInfoError,
58
- EMVDESC => DescendantError,
59
- ECMDRUN => CommandExecutionError,
60
- EBADARG => InvalidArgumentError,
61
- ELABEL => InvalidLabelError,
62
- }
49
+ :ENOMEM => NoMemoryError,
50
+ :EINTERNAL => InternalError,
51
+ :EPATHX => InvalidPathError,
52
+ :ENOMATCH => NoMatchError,
53
+ :EMMATCH => MultipleMatchesError,
54
+ :ESYNTAX => LensSyntaxError,
55
+ :ENOLENS => LensNotFoundError,
56
+ :EMXFM => MultipleTransformsError,
57
+ :ENOSPAN => NoSpanInfoError,
58
+ :EMVDESC => DescendantError,
59
+ :ECMDRUN => CommandExecutionError,
60
+ :EBADARG => InvalidArgumentError,
61
+ :ELABEL => InvalidLabelError,
62
+ }.map { |k, v| [(const_get(k) rescue nil), v] }].freeze
63
63
 
64
64
  # Create a new Augeas instance and return it.
65
65
  #
@@ -101,7 +101,7 @@ class Augeas
101
101
  # aug_flags is a bitmask in the underlying library, we add all the
102
102
  # values of the flags which were set to true to the default value
103
103
  # Augeas::NONE (which is 0)
104
- aug_flags = Augeas::NONE
104
+ aug_flags = defined?(Augeas::NO_ERR_CLOSE) ? Augeas::NO_ERR_CLOSE : Augeas::NONE
105
105
 
106
106
  flags = {
107
107
  :type_check => Augeas::TYPE_CHECK,
@@ -117,10 +117,10 @@ class Augeas
117
117
  }
118
118
  opts.each_key do |key|
119
119
  if flags.key? key
120
- aug_flags += flags[key]
120
+ aug_flags |= flags[key]
121
121
  elsif key == :save_mode
122
122
  if save_modes[opts[:save_mode]]
123
- aug_flags += save_modes[opts[:save_mode]]
123
+ aug_flags |= save_modes[opts[:save_mode]]
124
124
  else
125
125
  raise ArgumentError, "Invalid save mode #{opts[:save_mode]}."
126
126
  end
@@ -131,6 +131,13 @@ class Augeas
131
131
 
132
132
  aug = Augeas::open3(opts[:root], opts[:loadpath], aug_flags)
133
133
 
134
+ begin
135
+ aug.send(:raise_last_error)
136
+ rescue
137
+ aug.close
138
+ raise
139
+ end
140
+
134
141
  if block_given?
135
142
  begin
136
143
  yield aug
@@ -366,11 +373,7 @@ class Augeas
366
373
  def run_command(cmd, *params)
367
374
  result = self.send cmd, *params
368
375
 
369
- errcode = error[:code]
370
- unless errcode.zero?
371
- raise @@error_hash[errcode],
372
- "#{error[:message]} #{error[:details]}"
373
- end
376
+ raise_last_error
374
377
 
375
378
  if result.kind_of? Fixnum and result < 0
376
379
  # we raise CommandExecutionError here, because this is the error that
@@ -380,4 +383,11 @@ class Augeas
380
383
 
381
384
  return result
382
385
  end
386
+
387
+ def raise_last_error
388
+ error_cache = error
389
+ unless error_cache[:code].zero?
390
+ raise ERRORS_HASH[error_cache[:code]], "#{error_cache[:message]} #{error_cache[:details]}"
391
+ end
392
+ end
383
393
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: augeas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan Kearney
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2014-01-18 00:00:00.000000000 Z
14
+ date: 2014-01-19 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rake