ffi-aspell 1.0.1 → 1.0.2

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: d04d81f2d51d61e43e32ac2212789bb04bd2db60
4
- data.tar.gz: 9a92c7b85b9f079ea4f2c033cab554be7272c1e7
3
+ metadata.gz: 9de124725c6b91091475f71adab06a9fd3ab3895
4
+ data.tar.gz: afa6929f7f48223e2ae5f9f2baac4fc70217776e
5
5
  SHA512:
6
- metadata.gz: f88c9093936ceab1e8b4da735890b4e47b99d2741dc1b43c2d133b54ebdc23a8e261c1f4e5c08e284554bc42ca3dda7d01886d7197ea3b21a34e1313af1ccad3
7
- data.tar.gz: 2b6c55c9e9e30cdb03e858d795b5828cf1e19a4a21c3e72c1eca3932e793763f17c92b6b39f74af2e6290bb1a35837cf53c95e73a0c889047154d5608eb76f71
6
+ metadata.gz: 96f4d2869585cbe7ed271ec0e746f86a0b610cb2c5376e584b1fc0d599bbf674495cad396d7474c898d8f0a452b600191fc6ee7d71d60703768a1c6c4eeca6ef
7
+ data.tar.gz: 907f703554fe23a837c966e0e879379e4b9c964fe656e11a4d21f10d2ce337110791b9ec6933ba7ae858c9ba8f4d1b0eaaa56d1170f659502ea0373136b5602d
@@ -1,6 +1,12 @@
1
1
  # Changelog
2
2
 
3
- ## 1.0.1 - 201411-05
3
+ ## 1.0.2 - 2014-11-13
4
+
5
+ The Speller class now checks if a dictionary is installed upon initialization or
6
+ when updating a speller (instead of just crashing). See
7
+ <https://github.com/YorickPeterse/ffi-aspell/pull/20> for more information.
8
+
9
+ ## 1.0.1 - 2014-11-05
4
10
 
5
11
  An alternative library name for Aspell was added so that this Gem now works on
6
12
  Ubuntu systems.
@@ -16,6 +16,13 @@ module FFI
16
16
  extend FFI::Library
17
17
  ffi_lib ['aspell', 'libaspell.so.15']
18
18
 
19
+ ##
20
+ # Structure for storing dictionary information.
21
+ #
22
+ class DictInfo < FFI::Struct
23
+ layout :code, :string
24
+ end
25
+
19
26
  ##
20
27
  # Creates a pointer for a configuration struct.
21
28
  #
@@ -247,5 +254,63 @@ module FFI
247
254
  'aspell_string_enumeration_next',
248
255
  [:pointer],
249
256
  :string
257
+
258
+ ##
259
+ # Gets a list of all installed aspell dictionaries.
260
+ #
261
+ # @method dict_info_list(config)
262
+ # @scope class
263
+ # @param [FFI::Pointer] config
264
+ # @return [FFI::Pointer] list A list of dictionaries which can be used
265
+ # by {FFI::Aspell.dict_info_list_elements}.
266
+ #
267
+ attach_function 'dict_info_list',
268
+ 'get_aspell_dict_info_list',
269
+ [:pointer],
270
+ :pointer
271
+
272
+ ##
273
+ # Gets all elements from the dictionary list.
274
+ #
275
+ # @method dict_info_list_elements(list)
276
+ # @scope class
277
+ # @param [FFI::Pointer] list A list of dictionaries as returned
278
+ # by {FFI::Aspell.dict_info_list}.
279
+ # @return [FFI::Pointer] dictionary Returns an enumeration of
280
+ # {FFI::Aspell::DictInfo} structs.
281
+ #
282
+ attach_function 'dict_info_list_elements',
283
+ 'aspell_dict_info_list_elements',
284
+ [:pointer],
285
+ :pointer
286
+
287
+ ##
288
+ # Deletes an enumeration of dictionaries.
289
+ #
290
+ # @method delete_dict_info_enumeration(enumeration)
291
+ # @scope class
292
+ # @param [FFI::Pointer] enumeration An enumeration of dictionaries returned
293
+ # by {FFI::Aspell.dict_info_list_elements}.
294
+ #
295
+ attach_function 'delete_dict_info_enumeration',
296
+ 'delete_aspell_dict_info_enumeration',
297
+ [:pointer],
298
+ :void
299
+
300
+ ##
301
+ # Retrieves the next element in the list of dictionaries.
302
+ #
303
+ # @method dict_info_enumeration_next(elements)
304
+ # @scope class
305
+ # @param [FFI::Pointer] elements Pointer to a dictionary enumeration as returned
306
+ # by {FFI::Aspell.dict_info_list_elements}.
307
+ # @return [DictInfo|NilClass] dictInfo Returns an object of {FFI::Aspell::DictInfo}
308
+ # information, which contains dictionary information.
309
+ #
310
+ attach_function 'dict_info_enumeration_next',
311
+ 'aspell_dict_info_enumeration_next',
312
+ [:pointer],
313
+ DictInfo
314
+
250
315
  end # Aspell
251
316
  end # FFI
@@ -193,6 +193,15 @@ module FFI
193
193
  return @config.nil?
194
194
  end
195
195
 
196
+ ##
197
+ # Checks if a dictionary is available or not
198
+ #
199
+ # @return [TrueClass|FalseClass]
200
+ #
201
+ def dictionary_available?(dictionary)
202
+ return available_dictionaries.include?(dictionary)
203
+ end
204
+
196
205
  ##
197
206
  # Checks if the given word is correct or not.
198
207
  #
@@ -399,6 +408,19 @@ module FFI
399
408
  end
400
409
  end
401
410
 
411
+ ##
412
+ # Raises error if used dictionary is not installed.
413
+ #
414
+ # @raise [ArgumentError] Raised if dictionary does not exist.
415
+ # @return [nil]
416
+ #
417
+ def check_dictionary
418
+ dictionary = get('lang')
419
+ if !dictionary_available?(dictionary)
420
+ raise(ArgumentError, "The used dictionary #{dictionary.inspect} is not available")
421
+ end
422
+ end
423
+
402
424
  ##
403
425
  # Updates the internal speller object to use the current config.
404
426
  #
@@ -413,7 +435,31 @@ module FFI
413
435
  self,
414
436
  self.class.finalizer(@config, @speller)
415
437
  )
438
+
439
+ check_dictionary
440
+ end
441
+
442
+ ##
443
+ # Get all availbale aspell dictionary codes
444
+ #
445
+ # @return [Array]
446
+ #
447
+ def available_dictionaries
448
+ list = Aspell.dict_info_list(@config)
449
+ elements = Aspell.dict_info_list_elements(list)
450
+ dicts = []
451
+
452
+ while element = Aspell.dict_info_enumeration_next(elements)
453
+ break if element == FFI::Pointer::NULL
454
+ dict_info = Aspell::DictInfo.new(element)
455
+ dicts << handle_output(dict_info[:code])
456
+ end
457
+
458
+ Aspell.delete_dict_info_enumeration(elements)
459
+
460
+ return dicts
416
461
  end
462
+
417
463
  end # Speller
418
464
  end # Aspell
419
465
  end # FFI
@@ -1,5 +1,5 @@
1
1
  module FFI
2
2
  module Aspell
3
- VERSION = '1.0.1'
3
+ VERSION = '1.0.2'
4
4
  end # Aspell
5
5
  end # FFI
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffi-aspell
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yorick Peterse
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-05 00:00:00.000000000 Z
11
+ date: 2014-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi