mspack_rb 0.1.3 → 0.1.4

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
  SHA1:
3
- metadata.gz: 2af809ce2eac8fe9b2d7564c9814b1cf29caae58
4
- data.tar.gz: 69413e2b6f3313e74396996ef99431043667b383
3
+ metadata.gz: 1568ae7d72717343ee02824b749cd95d4f753d52
4
+ data.tar.gz: 2eb7e0c19332a52dc5fbee34041806319009ee45
5
5
  SHA512:
6
- metadata.gz: 29b156e4229b22437e6e6ffa5e0f2511cddf023ec5c1cc122c6dff5cb1c418304bae541f15569dca5d0229d279208a13ad5d9bd815b681af3c8795d895ce10d0
7
- data.tar.gz: 1a4efa8a8ecaab3e863c7c7ee45b014da080d2a81ee1e7a1b89de3300db69bad9da04502b93d0f770588670c1a4eba2ab6cb48a4b6f351ec04bdd5d068d0da8d
6
+ metadata.gz: 23ad79da53211a12bedd97e9ced8516c2b39f795b9e417f0221871060164f7e62446953ddfebba690626f68d27d83169d0cfd4026633625f72f2b89aeeac88ac
7
+ data.tar.gz: e4752a1bf9ff5e68a521fe5bcf858f71324b5fde7aedc8eb3dd963b095946904721be5c8a7cd0b4faa94b09b893d9afeb0855523e1403cabdfbf2b67db2ab980
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ### A simple Ruby native extension gem wrapper for [libmspack](https://www.cabextract.org.uk/libmspack/)
4
4
 
5
- Requires libmspack to be installed, and currently, only (very) basic CHM
5
+ Requires libmspack to be installed, and currently, only basic CHM
6
6
  extraction has been implemented.
7
7
 
8
8
  The gem is available over at [https://rubygems.org/gems/mspack_rb](https://rubygems.org/gems/mspack_rb).
@@ -10,13 +10,14 @@ The gem is available over at [https://rubygems.org/gems/mspack_rb](https://rubyg
10
10
  ### Usage:
11
11
  require 'mspack'
12
12
 
13
+ OUT_DIR = 'some/output/directory'
14
+
13
15
  dcom = Mspack::ChmDecompressor.new
14
16
  header = dcom.open('path/to/a/chm/file')
15
- file = header.files
16
- out_dir = 'some/output/directory'
17
17
 
18
- while !file.nil?
19
- out_path = "#{out_dir}/#{file.filename}"
18
+ header.each_file do |file|
19
+ out_path = "#{OUT_DIR}/#{file.filename}"
20
20
  dcom.extract(file, out_path)
21
- file = file.next
22
21
  end
22
+
23
+ dcom.close(header)
@@ -0,0 +1,104 @@
1
+ #include "chm_decompressor.h"
2
+
3
+ #include <mspack.h>
4
+
5
+ VALUE ChmDecom = Qnil;
6
+ VALUE ChmDHeader = Qnil;
7
+ VALUE ChmDFile = Qnil;
8
+
9
+ void chmd_deallocate(void *decom) {
10
+ mspack_destroy_chm_decompressor(decom);
11
+ }
12
+
13
+ VALUE chmd_allocate(VALUE self) {
14
+ struct mschm_decompressor *decom = mspack_create_chm_decompressor(NULL);
15
+ return Data_Wrap_Struct(self, NULL, chmd_deallocate, decom);
16
+ }
17
+
18
+ VALUE chmd_open(VALUE self, VALUE path) {
19
+ struct mschm_decompressor *decom;
20
+ Data_Get_Struct(self, struct mschm_decompressor, decom);
21
+ struct mschmd_header *header = decom->open(decom, StringValueCStr(path));
22
+
23
+ if (!header) {
24
+ return Qnil;
25
+ }
26
+
27
+ VALUE headerObj = rb_obj_alloc(ChmDHeader);
28
+ rb_obj_call_init(headerObj, 0, NULL);
29
+ return Data_Wrap_Struct(ChmDHeader, NULL, NULL, header);
30
+ }
31
+
32
+ VALUE chmd_close(VALUE self, VALUE header) {
33
+ struct mschm_decompressor *decom;
34
+ Data_Get_Struct(self, struct mschm_decompressor, decom);
35
+
36
+ struct mschmd_header *headerPtr;
37
+ Data_Get_Struct(header, struct mschmd_header, headerPtr);
38
+
39
+ decom->close(decom, headerPtr);
40
+ return Qnil;
41
+ }
42
+
43
+ VALUE chmd_extract_to_path(VALUE self, VALUE file, VALUE outputPath) {
44
+ struct mschm_decompressor *decom;
45
+ Data_Get_Struct(self, struct mschm_decompressor, decom);
46
+
47
+ struct mschmd_file *filePtr;
48
+ Data_Get_Struct(file, struct mschmd_file, filePtr);
49
+
50
+ const char *pathStr = StringValueCStr(outputPath);
51
+ return decom->extract(decom, filePtr, pathStr) == MSPACK_ERR_OK ?
52
+ Qtrue : Qfalse;
53
+ }
54
+
55
+ VALUE chmd_header_filename(VALUE self) {
56
+ struct mschmd_header *header;
57
+ Data_Get_Struct(self, struct mschmd_header, header);
58
+ return rb_str_new2(header->filename);
59
+ }
60
+
61
+ VALUE chmd_header_files(VALUE self) {
62
+ struct mschmd_header *header;
63
+ Data_Get_Struct(self, struct mschmd_header, header);
64
+
65
+ VALUE fileObj = rb_obj_alloc(ChmDFile);
66
+ rb_obj_call_init(fileObj, 0, NULL);
67
+ return Data_Wrap_Struct(ChmDFile, NULL, NULL, header->files);
68
+ }
69
+
70
+ VALUE chmd_file_filename(VALUE self) {
71
+ struct mschmd_file *file;
72
+ Data_Get_Struct(self, struct mschmd_file, file);
73
+ return rb_str_new2(file->filename);
74
+ }
75
+
76
+ VALUE chmd_file_next(VALUE self) {
77
+ struct mschmd_file *file;
78
+ Data_Get_Struct(self, struct mschmd_file, file);
79
+ struct mschmd_file *next = file->next;
80
+
81
+ if (next == NULL) {
82
+ return Qnil;
83
+ }
84
+
85
+ VALUE nextObj = rb_obj_alloc(ChmDFile);
86
+ rb_obj_call_init(nextObj, 0, NULL);
87
+ return Data_Wrap_Struct(ChmDFile, NULL, NULL, next);
88
+ }
89
+
90
+ void Init_chm_decompressor() {
91
+ ChmDecom = rb_define_class_under(Mspack, "ChmDecompressor", rb_cObject);
92
+ rb_define_alloc_func(ChmDecom, chmd_allocate);
93
+ rb_define_method(ChmDecom, "open", chmd_open, 1);
94
+ rb_define_method(ChmDecom, "close", chmd_close, 1);
95
+ rb_define_method(ChmDecom, "extract_to_path", chmd_extract_to_path, 2);
96
+
97
+ ChmDHeader = rb_define_class_under(ChmDecom, "Header", rb_cObject);
98
+ rb_define_method(ChmDHeader, "filename", chmd_header_filename, 0);
99
+ rb_define_method(ChmDHeader, "files", chmd_header_files, 0);
100
+
101
+ ChmDFile = rb_define_class_under(ChmDecom, "File", rb_cObject);
102
+ rb_define_method(ChmDFile, "filename", chmd_file_filename, 0);
103
+ rb_define_method(ChmDFile, "next", chmd_file_next, 0);
104
+ }
@@ -0,0 +1,12 @@
1
+ #ifndef CHM_DECOMPRESSOR_H
2
+ #define CHM_DECOMPRESSOR_H
3
+
4
+ #include "mspack_native.h"
5
+
6
+ extern VALUE ChmDecom;
7
+ extern VALUE ChmDHeader;
8
+ extern VALUE ChmDFile;
9
+
10
+ void Init_chm_decompressor();
11
+
12
+ #endif
@@ -1,10 +1,9 @@
1
+ #include "mspack_native.h"
2
+ #include "chm_decompressor.h"
3
+
1
4
  #include <mspack.h>
2
- #include <ruby.h>
3
5
 
4
6
  VALUE Mspack = Qnil;
5
- VALUE ChmDecom = Qnil;
6
- VALUE ChmDHeader = Qnil;
7
- VALUE ChmDFile = Qnil;
8
7
 
9
8
  VALUE mspack_test() {
10
9
  int result;
@@ -12,102 +11,9 @@ VALUE mspack_test() {
12
11
  return result == MSPACK_ERR_OK ? Qtrue : Qfalse;
13
12
  }
14
13
 
15
- void chmd_deallocate(void *decom) {
16
- mspack_destroy_chm_decompressor(decom);
17
- }
18
-
19
- static VALUE chmd_allocate(VALUE self) {
20
- struct mschm_decompressor *decom = mspack_create_chm_decompressor(NULL);
21
- return Data_Wrap_Struct(self, NULL, chmd_deallocate, decom);
22
- }
23
-
24
- static VALUE chmd_open(VALUE self, VALUE path) {
25
- struct mschm_decompressor *decom;
26
- Data_Get_Struct(self, struct mschm_decompressor, decom);
27
- struct mschmd_header *header = decom->open(decom, StringValueCStr(path));
28
-
29
- if (!header) {
30
- return Qnil;
31
- }
32
-
33
- VALUE headerObj = rb_obj_alloc(ChmDHeader);
34
- rb_obj_call_init(headerObj, 0, NULL);
35
- return Data_Wrap_Struct(ChmDHeader, NULL, NULL, header);
36
- }
37
-
38
- static VALUE chmd_close(VALUE self, VALUE header) {
39
- struct mschm_decompressor *decom;
40
- Data_Get_Struct(self, struct mschm_decompressor, decom);
41
-
42
- struct mschmd_header *headerPtr;
43
- Data_Get_Struct(header, struct mschmd_header, headerPtr);
44
-
45
- decom->close(decom, headerPtr);
46
- return Qnil;
47
- }
48
-
49
- static VALUE chmd_extract(VALUE self, VALUE file, VALUE outputPath) {
50
- struct mschm_decompressor *decom;
51
- Data_Get_Struct(self, struct mschm_decompressor, decom);
52
-
53
- struct mschmd_file *filePtr;
54
- Data_Get_Struct(file, struct mschmd_file, filePtr);
55
-
56
- const char *pathStr = StringValueCStr(outputPath);
57
- return decom->extract(decom, filePtr, pathStr) == MSPACK_ERR_OK ?
58
- Qtrue : Qfalse;
59
- }
60
-
61
- static VALUE chmd_header_filename(VALUE self) {
62
- struct mschmd_header *header;
63
- Data_Get_Struct(self, struct mschmd_header, header);
64
- return rb_str_new2(header->filename);
65
- }
66
-
67
- static VALUE chmd_header_files(VALUE self) {
68
- struct mschmd_header *header;
69
- Data_Get_Struct(self, struct mschmd_header, header);
70
-
71
- VALUE fileObj = rb_obj_alloc(ChmDFile);
72
- rb_obj_call_init(fileObj, 0, NULL);
73
- return Data_Wrap_Struct(ChmDFile, NULL, NULL, header->files);
74
- }
75
-
76
- static VALUE chmd_file_filename(VALUE self) {
77
- struct mschmd_file *file;
78
- Data_Get_Struct(self, struct mschmd_file, file);
79
- return rb_str_new2(file->filename);
80
- }
81
-
82
- static VALUE chmd_file_next(VALUE self) {
83
- struct mschmd_file *file;
84
- Data_Get_Struct(self, struct mschmd_file, file);
85
- struct mschmd_file *next = file->next;
86
-
87
- if (next == NULL) {
88
- return Qnil;
89
- }
90
-
91
- VALUE nextObj = rb_obj_alloc(ChmDFile);
92
- rb_obj_call_init(nextObj, 0, NULL);
93
- return Data_Wrap_Struct(ChmDFile, NULL, NULL, next);
94
- }
95
-
96
14
  void Init_mspack_native() {
97
15
  Mspack = rb_define_module("Mspack");
98
16
  rb_define_singleton_method(Mspack, "test", mspack_test, 0);
99
17
 
100
- ChmDecom = rb_define_class_under(Mspack, "ChmDecompressor", rb_cObject);
101
- rb_define_alloc_func(ChmDecom, chmd_allocate);
102
- rb_define_method(ChmDecom, "open", chmd_open, 1);
103
- rb_define_method(ChmDecom, "close", chmd_close, 1);
104
- rb_define_method(ChmDecom, "extract", chmd_extract, 2);
105
-
106
- ChmDHeader = rb_define_class_under(ChmDecom, "Header", rb_cObject);
107
- rb_define_method(ChmDHeader, "filename", chmd_header_filename, 0);
108
- rb_define_method(ChmDHeader, "files", chmd_header_files, 0);
109
-
110
- ChmDFile = rb_define_class_under(ChmDecom, "File", rb_cObject);
111
- rb_define_method(ChmDFile, "filename", chmd_file_filename, 0);
112
- rb_define_method(ChmDFile, "next", chmd_file_next, 0);
18
+ Init_chm_decompressor();
113
19
  }
@@ -0,0 +1,8 @@
1
+ #ifndef MSPACK_NATIVE_H
2
+ #define MSPACK_NATIVE_H
3
+
4
+ #include <ruby.h>
5
+
6
+ extern VALUE Mspack;
7
+
8
+ #endif
@@ -1,5 +1,12 @@
1
1
  module Mspack
2
2
  class ChmDecompressor
3
+
4
+
5
+ def extract(file, dir)
6
+
7
+ end
8
+
9
+
3
10
  class Header
4
11
 
5
12
  # Convenience method for iterating over files.
@@ -26,6 +33,7 @@ module Mspack
26
33
 
27
34
  end
28
35
 
36
+
29
37
  class File
30
38
  end
31
39
  end
@@ -1,3 +1,3 @@
1
1
  module Mspack
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
data/lib/mspack.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  require "mspack_native"
2
+
2
3
  require "mspack/chm_decompressor"
3
4
  require "mspack/version"
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mspack_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-02 00:00:00.000000000 Z
11
+ date: 2017-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -97,8 +97,11 @@ files:
97
97
  - Rakefile
98
98
  - bin/console
99
99
  - bin/setup
100
+ - ext/mspack_native/chm_decompressor.c
101
+ - ext/mspack_native/chm_decompressor.h
100
102
  - ext/mspack_native/extconf.rb
101
103
  - ext/mspack_native/mspack_native.c
104
+ - ext/mspack_native/mspack_native.h
102
105
  - lib/mspack.rb
103
106
  - lib/mspack/chm_decompressor.rb
104
107
  - lib/mspack/version.rb