gir_ffi 0.14.0 → 0.15.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (265) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +45 -0
  3. data/Gemfile +6 -4
  4. data/README.md +11 -10
  5. data/Rakefile +5 -5
  6. data/lib/ffi-glib.rb +16 -16
  7. data/lib/ffi-glib/array.rb +14 -4
  8. data/lib/ffi-glib/byte_array.rb +7 -2
  9. data/lib/ffi-glib/container_class_methods.rb +1 -1
  10. data/lib/ffi-glib/error.rb +1 -1
  11. data/lib/ffi-glib/hash_table.rb +3 -3
  12. data/lib/ffi-glib/list.rb +1 -1
  13. data/lib/ffi-glib/list_methods.rb +1 -1
  14. data/lib/ffi-glib/main_loop.rb +3 -3
  15. data/lib/ffi-glib/ptr_array.rb +30 -8
  16. data/lib/ffi-glib/s_list.rb +1 -1
  17. data/lib/ffi-glib/variant.rb +1 -1
  18. data/lib/ffi-gobject.rb +13 -13
  19. data/lib/ffi-gobject/object.rb +23 -32
  20. data/lib/ffi-gobject/param_spec.rb +1 -1
  21. data/lib/ffi-gobject/ruby_closure.rb +2 -2
  22. data/lib/ffi-gobject/value.rb +40 -29
  23. data/lib/ffi-gobject_introspection.rb +20 -20
  24. data/lib/ffi-gobject_introspection/gobject_type_init.rb +2 -2
  25. data/lib/ffi-gobject_introspection/i_arg_info.rb +2 -2
  26. data/lib/ffi-gobject_introspection/i_base_info.rb +27 -17
  27. data/lib/ffi-gobject_introspection/i_callable_info.rb +4 -4
  28. data/lib/ffi-gobject_introspection/i_constant_info.rb +2 -2
  29. data/lib/ffi-gobject_introspection/i_enum_info.rb +1 -0
  30. data/lib/ffi-gobject_introspection/i_field_info.rb +1 -1
  31. data/lib/ffi-gobject_introspection/i_function_info.rb +1 -1
  32. data/lib/ffi-gobject_introspection/i_interface_info.rb +1 -1
  33. data/lib/ffi-gobject_introspection/i_object_info.rb +2 -2
  34. data/lib/ffi-gobject_introspection/i_property_info.rb +2 -2
  35. data/lib/ffi-gobject_introspection/i_repository.rb +9 -6
  36. data/lib/ffi-gobject_introspection/i_struct_info.rb +2 -1
  37. data/lib/ffi-gobject_introspection/i_type_info.rb +13 -7
  38. data/lib/ffi-gobject_introspection/i_unresolved_info.rb +1 -1
  39. data/lib/ffi-gobject_introspection/i_vfunc_info.rb +1 -1
  40. data/lib/ffi-gobject_introspection/lib.rb +30 -19
  41. data/lib/ffi-gobject_introspection/strv.rb +1 -1
  42. data/lib/gir_ffi-base.rb +1 -1
  43. data/lib/gir_ffi-base/gobject.rb +26 -25
  44. data/lib/gir_ffi-base/gobject/lib.rb +3 -2
  45. data/lib/gir_ffi.rb +3 -3
  46. data/lib/gir_ffi/allocation_helper.rb +1 -1
  47. data/lib/gir_ffi/arg_helper.rb +4 -4
  48. data/lib/gir_ffi/{in_out_pointer.rb → array_element_convertor.rb} +16 -23
  49. data/lib/gir_ffi/boolean.rb +1 -1
  50. data/lib/gir_ffi/boxed_base.rb +1 -1
  51. data/lib/gir_ffi/builder.rb +18 -10
  52. data/lib/gir_ffi/builder_helper.rb +6 -1
  53. data/lib/gir_ffi/builders/argument_builder.rb +19 -19
  54. data/lib/gir_ffi/builders/argument_builder_collection.rb +2 -2
  55. data/lib/gir_ffi/builders/base_argument_builder.rb +1 -0
  56. data/lib/gir_ffi/builders/base_method_builder.rb +7 -7
  57. data/lib/gir_ffi/builders/base_return_value_builder.rb +1 -1
  58. data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
  59. data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +5 -5
  60. data/lib/gir_ffi/builders/callback_argument_builder.rb +8 -8
  61. data/lib/gir_ffi/builders/callback_builder.rb +16 -4
  62. data/lib/gir_ffi/builders/callback_return_value_builder.rb +2 -2
  63. data/lib/gir_ffi/builders/closure_argument_builder.rb +1 -1
  64. data/lib/gir_ffi/builders/closure_return_value_builder.rb +1 -1
  65. data/lib/gir_ffi/builders/constant_builder.rb +1 -1
  66. data/lib/gir_ffi/builders/constructor_builder.rb +9 -9
  67. data/lib/gir_ffi/builders/enum_builder.rb +16 -3
  68. data/lib/gir_ffi/builders/field_builder.rb +20 -18
  69. data/lib/gir_ffi/builders/flags_builder.rb +2 -2
  70. data/lib/gir_ffi/builders/full_c_to_ruby_convertor.rb +1 -1
  71. data/lib/gir_ffi/builders/function_builder.rb +11 -5
  72. data/lib/gir_ffi/builders/initializer_builder.rb +3 -3
  73. data/lib/gir_ffi/builders/initializer_return_value_builder.rb +2 -2
  74. data/lib/gir_ffi/builders/interface_builder.rb +2 -2
  75. data/lib/gir_ffi/builders/mapping_method_builder.rb +9 -9
  76. data/lib/gir_ffi/builders/marshalling_method_builder.rb +7 -7
  77. data/lib/gir_ffi/builders/method_template.rb +1 -1
  78. data/lib/gir_ffi/builders/module_builder.rb +7 -7
  79. data/lib/gir_ffi/builders/object_builder.rb +6 -6
  80. data/lib/gir_ffi/builders/property_argument_builder.rb +1 -1
  81. data/lib/gir_ffi/builders/property_builder.rb +13 -12
  82. data/lib/gir_ffi/builders/property_return_value_builder.rb +1 -1
  83. data/lib/gir_ffi/builders/registered_type_builder.rb +14 -5
  84. data/lib/gir_ffi/builders/return_value_builder.rb +4 -4
  85. data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +6 -6
  86. data/lib/gir_ffi/builders/signal_closure_builder.rb +2 -2
  87. data/lib/gir_ffi/builders/struct_builder.rb +6 -4
  88. data/lib/gir_ffi/builders/struct_like.rb +1 -1
  89. data/lib/gir_ffi/builders/type_builder.rb +12 -12
  90. data/lib/gir_ffi/builders/unintrospectable_boxed_builder.rb +2 -2
  91. data/lib/gir_ffi/builders/unintrospectable_builder.rb +2 -2
  92. data/lib/gir_ffi/builders/union_builder.rb +4 -4
  93. data/lib/gir_ffi/builders/user_defined_builder.rb +2 -2
  94. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +1 -1
  95. data/lib/gir_ffi/builders/vfunc_builder.rb +8 -8
  96. data/lib/gir_ffi/builders/with_layout.rb +2 -2
  97. data/lib/gir_ffi/callback_base.rb +4 -6
  98. data/lib/gir_ffi/class_base.rb +6 -5
  99. data/lib/gir_ffi/core.rb +19 -20
  100. data/lib/gir_ffi/enum_base.rb +1 -1
  101. data/lib/gir_ffi/enum_like_base.rb +2 -2
  102. data/lib/gir_ffi/error_argument_info.rb +2 -2
  103. data/lib/gir_ffi/error_type_info.rb +1 -1
  104. data/lib/gir_ffi/ffi_ext.rb +1 -1
  105. data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
  106. data/lib/gir_ffi/flags_base.rb +1 -1
  107. data/lib/gir_ffi/in_pointer.rb +10 -0
  108. data/lib/gir_ffi/info_ext.rb +15 -14
  109. data/lib/gir_ffi/info_ext/full_type_name.rb +3 -3
  110. data/lib/gir_ffi/info_ext/i_arg_info.rb +1 -1
  111. data/lib/gir_ffi/info_ext/i_callable_info.rb +1 -1
  112. data/lib/gir_ffi/info_ext/i_callback_info.rb +1 -1
  113. data/lib/gir_ffi/info_ext/i_field_info.rb +1 -1
  114. data/lib/gir_ffi/info_ext/i_function_info.rb +1 -1
  115. data/lib/gir_ffi/info_ext/i_property_info.rb +2 -2
  116. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +4 -5
  117. data/lib/gir_ffi/info_ext/i_signal_info.rb +7 -3
  118. data/lib/gir_ffi/info_ext/i_type_info.rb +48 -26
  119. data/lib/gir_ffi/info_ext/i_unresolved_info.rb +1 -1
  120. data/lib/gir_ffi/info_ext/i_value_info.rb +25 -0
  121. data/lib/gir_ffi/info_ext/i_vfunc_info.rb +2 -2
  122. data/lib/gir_ffi/info_ext/safe_constant_name.rb +8 -8
  123. data/lib/gir_ffi/info_ext/safe_function_name.rb +2 -2
  124. data/lib/gir_ffi/interface_base.rb +3 -3
  125. data/lib/gir_ffi/lib_c.rb +1 -1
  126. data/lib/gir_ffi/method_stubber.rb +1 -1
  127. data/lib/gir_ffi/module_base.rb +1 -1
  128. data/lib/gir_ffi/object_base.rb +3 -4
  129. data/lib/gir_ffi/receiver_argument_info.rb +1 -1
  130. data/lib/gir_ffi/receiver_type_info.rb +2 -2
  131. data/lib/gir_ffi/registered_type_base.rb +1 -1
  132. data/lib/gir_ffi/sized_array.rb +4 -2
  133. data/lib/gir_ffi/struct.rb +1 -1
  134. data/lib/gir_ffi/struct_base.rb +1 -1
  135. data/lib/gir_ffi/type_map.rb +2 -23
  136. data/lib/gir_ffi/unintrospectable_boxed_info.rb +2 -2
  137. data/lib/gir_ffi/unintrospectable_type_info.rb +5 -1
  138. data/lib/gir_ffi/union.rb +1 -1
  139. data/lib/gir_ffi/union_base.rb +1 -1
  140. data/lib/gir_ffi/user_defined_object_info.rb +6 -2
  141. data/lib/gir_ffi/user_defined_property_info.rb +33 -33
  142. data/lib/gir_ffi/version.rb +1 -1
  143. data/tasks/test.rake +3 -2
  144. data/test/base_test_helper.rb +16 -9
  145. data/test/ffi-glib/array_test.rb +71 -56
  146. data/test/ffi-glib/byte_array_test.rb +13 -7
  147. data/test/ffi-glib/bytes_test.rb +24 -19
  148. data/test/ffi-glib/closure_test.rb +11 -11
  149. data/test/ffi-glib/destroy_notify_test.rb +6 -6
  150. data/test/ffi-glib/hash_table_test.rb +27 -27
  151. data/test/ffi-glib/list_test.rb +22 -22
  152. data/test/ffi-glib/main_loop_test.rb +12 -12
  153. data/test/ffi-glib/ptr_array_test.rb +39 -39
  154. data/test/ffi-glib/ruby_closure_test.rb +10 -10
  155. data/test/ffi-glib/s_list_test.rb +20 -20
  156. data/test/ffi-glib/strv_test.rb +19 -19
  157. data/test/ffi-glib/variant_test.rb +5 -5
  158. data/test/ffi-gobject/gobject_test.rb +48 -44
  159. data/test/ffi-gobject/object_class_test.rb +8 -8
  160. data/test/ffi-gobject/object_test.rb +51 -68
  161. data/test/ffi-gobject/param_spec_test.rb +12 -12
  162. data/test/ffi-gobject/value_test.rb +145 -125
  163. data/test/ffi-gobject_introspection/gobject_type_init_test.rb +9 -9
  164. data/test/ffi-gobject_introspection/i_base_info_test.rb +15 -16
  165. data/test/ffi-gobject_introspection/i_constant_info_test.rb +9 -13
  166. data/test/ffi-gobject_introspection/i_enum_info_test.rb +7 -7
  167. data/test/ffi-gobject_introspection/i_function_info_test.rb +1 -1
  168. data/test/ffi-gobject_introspection/i_interface_info_test.rb +10 -10
  169. data/test/ffi-gobject_introspection/i_object_info_test.rb +23 -23
  170. data/test/ffi-gobject_introspection/i_property_info_test.rb +19 -19
  171. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +10 -10
  172. data/test/ffi-gobject_introspection/i_repository_test.rb +34 -34
  173. data/test/ffi-gobject_introspection/i_struct_info_test.rb +10 -10
  174. data/test/ffi-gobject_introspection/i_type_info_test.rb +12 -15
  175. data/test/ffi-gobject_introspection/i_union_info_test.rb +7 -7
  176. data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +16 -16
  177. data/test/ffi-gobject_introspection/lib_test.rb +3 -3
  178. data/test/ffi-gobject_introspection/strv_test.rb +9 -9
  179. data/test/ffi-gobject_test.rb +47 -45
  180. data/test/gir_ffi/allocation_helper_test.rb +13 -13
  181. data/test/gir_ffi/arg_helper_test.rb +71 -65
  182. data/test/gir_ffi/boolean_test.rb +20 -20
  183. data/test/gir_ffi/boxed_base_test.rb +18 -18
  184. data/test/gir_ffi/builder_test.rb +81 -213
  185. data/test/gir_ffi/builders/argument_builder_test.rb +321 -287
  186. data/test/gir_ffi/builders/base_argument_builder_test.rb +1 -1
  187. data/test/gir_ffi/builders/callback_argument_builder_test.rb +57 -56
  188. data/test/gir_ffi/builders/callback_builder_test.rb +71 -72
  189. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +40 -41
  190. data/test/gir_ffi/builders/constant_builder_test.rb +1 -1
  191. data/test/gir_ffi/builders/constructor_builder_test.rb +12 -10
  192. data/test/gir_ffi/builders/enum_builder_test.rb +12 -11
  193. data/test/gir_ffi/builders/field_builder_test.rb +48 -42
  194. data/test/gir_ffi/builders/function_builder_test.rb +256 -224
  195. data/test/gir_ffi/builders/initializer_builder_test.rb +16 -14
  196. data/test/gir_ffi/builders/interface_builder_test.rb +9 -9
  197. data/test/gir_ffi/builders/module_builder_test.rb +18 -18
  198. data/test/gir_ffi/builders/object_builder_test.rb +41 -41
  199. data/test/gir_ffi/builders/property_builder_test.rb +94 -94
  200. data/test/gir_ffi/builders/registered_type_builder_test.rb +35 -11
  201. data/test/gir_ffi/builders/return_value_builder_test.rb +227 -223
  202. data/test/gir_ffi/builders/signal_closure_builder_test.rb +124 -113
  203. data/test/gir_ffi/builders/struct_builder_test.rb +38 -35
  204. data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +8 -14
  205. data/test/gir_ffi/builders/unintrospectable_builder_test.rb +34 -23
  206. data/test/gir_ffi/builders/union_builder_test.rb +12 -15
  207. data/test/gir_ffi/builders/user_defined_builder_test.rb +152 -148
  208. data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +46 -40
  209. data/test/gir_ffi/builders/vfunc_builder_test.rb +149 -157
  210. data/test/gir_ffi/callback_base_test.rb +9 -9
  211. data/test/gir_ffi/class_base_test.rb +56 -53
  212. data/test/gir_ffi/core_test.rb +36 -35
  213. data/test/gir_ffi/enum_base_test.rb +19 -19
  214. data/test/gir_ffi/error_type_info_test.rb +23 -23
  215. data/test/gir_ffi/ffi_ext/pointer_test.rb +9 -7
  216. data/test/gir_ffi/g_type_test.rb +11 -11
  217. data/test/gir_ffi/in_pointer_test.rb +70 -50
  218. data/test/gir_ffi/info_ext/i_callable_info_test.rb +5 -5
  219. data/test/gir_ffi/info_ext/i_callback_info_test.rb +6 -5
  220. data/test/gir_ffi/info_ext/i_field_info_test.rb +6 -6
  221. data/test/gir_ffi/info_ext/i_function_info_test.rb +17 -17
  222. data/test/gir_ffi/info_ext/i_signal_info_test.rb +8 -8
  223. data/test/gir_ffi/info_ext/i_type_info_test.rb +231 -216
  224. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +4 -4
  225. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +8 -8
  226. data/test/gir_ffi/info_ext/safe_function_name_test.rb +8 -8
  227. data/test/gir_ffi/interface_base_test.rb +8 -8
  228. data/test/gir_ffi/method_stubber_test.rb +21 -19
  229. data/test/gir_ffi/object_base_test.rb +23 -23
  230. data/test/gir_ffi/object_store_test.rb +13 -13
  231. data/test/gir_ffi/receiver_argument_info_test.rb +15 -15
  232. data/test/gir_ffi/sized_array_test.rb +68 -68
  233. data/test/gir_ffi/struct_base_test.rb +8 -8
  234. data/test/gir_ffi/struct_like_base_test.rb +64 -64
  235. data/test/gir_ffi/type_map_test.rb +8 -8
  236. data/test/gir_ffi/unintrospectable_type_info_test.rb +33 -33
  237. data/test/gir_ffi/union_base_test.rb +8 -8
  238. data/test/gir_ffi/user_defined_object_info_test.rb +34 -34
  239. data/test/gir_ffi/user_defined_property_info_test.rb +16 -16
  240. data/test/gir_ffi/variable_name_generator_test.rb +8 -8
  241. data/test/gir_ffi/version_test.rb +4 -4
  242. data/test/gir_ffi/zero_terminated_test.rb +34 -34
  243. data/test/gir_ffi_test_helper.rb +3 -3
  244. data/test/integration/callback_exceptions_test.rb +17 -21
  245. data/test/integration/derived_classes_test.rb +14 -13
  246. data/test/integration/generated_everything_test.rb +225 -224
  247. data/test/integration/generated_gimarshallingtests_test.rb +1174 -1060
  248. data/test/integration/generated_gio_test.rb +36 -36
  249. data/test/integration/generated_glib_test.rb +4 -6
  250. data/test/integration/generated_gobject_test.rb +43 -35
  251. data/test/integration/generated_gst_test.rb +20 -16
  252. data/test/integration/generated_gtk_source_test.rb +9 -15
  253. data/test/integration/generated_gtop_test.rb +8 -15
  254. data/test/integration/generated_pango_ft2_test.rb +2 -2
  255. data/test/integration/generated_pango_test.rb +4 -4
  256. data/test/integration/generated_regress_test.rb +1858 -1632
  257. data/test/integration/generated_secret_test.rb +8 -11
  258. data/test/integration/generated_utility_test.rb +81 -81
  259. data/test/integration/generated_warnlib_test.rb +17 -21
  260. data/test/integration/method_lookup_test.rb +6 -6
  261. data/test/introspection_test_helper.rb +49 -7
  262. data/test/minitest/stats_plugin.rb +1 -1
  263. metadata +21 -23
  264. data/lib/ffi-glib/array_methods.rb +0 -16
  265. data/test/gir_ffi/in_out_pointer_test.rb +0 -56
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2fc709e79ed9d8d423b39d2793e648a3d4cf62603496f5398fe80515a756fe96
4
- data.tar.gz: 2ca46650022b545f0dff670fc8bbaa27c159ed43c101fde1d674ab064b4dec36
3
+ metadata.gz: 2ee5f86f4d4106139b51edf6855aa3a84bff5437b728dac4c0b878a61bbf86ea
4
+ data.tar.gz: de0aef98573ba69d41ffa094d08f576977928e6e55598586cf07c08c9c38da6f
5
5
  SHA512:
6
- metadata.gz: ad913da79bffc07e693e94aa2e56aa0b425c48999b84ffcee0a92a06439b75a46cd7db04f19cb5bc87b8869c541b7b374538c9aea300c2ffbf973d50f8b8bc5c
7
- data.tar.gz: d661d30631b2470b85f9ff59abf36e2c63f380ba94f40a5b98eb0e5fd1ebb0943b94c5b6dff2cb6737bc264746c014f5c24e080fceea13b7eb20a2de8077f54e
6
+ metadata.gz: 57de8a0753d8add11635ca497712988aa16507312d719bdc6ed7c8f63a707275622b73c1d968e742d13ba96094fe253baf6d60076dd186683851479cffa8cbe2
7
+ data.tar.gz: abc9d12f2590a325ab3d8deb087cc4dcf4f5e1eccf0a4dd2f74f48c50553c3b63c19cd799661830da3c13850d50b32cdcb6113ebfb0569b15e7875796a7287ed
@@ -1,5 +1,50 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.15.3 / 2020-06-14
4
+
5
+ * Officially support Ruby 2.7
6
+ * Officially drop support for Ruby 2.4
7
+ * Store classes representing inline callback types in the class that defines
8
+ them instead of in the main namespace, thus avoiding some potential name
9
+ clashes
10
+ * Update development dependencies
11
+ * Various code quality improvements
12
+ * Record approved licenses for dependencies
13
+
14
+ ## 0.15.2 / 2019-11-29
15
+
16
+ * Load girepository-1.0 library in a way that does not require installing a
17
+ development package.
18
+
19
+ ## 0.15.1 / 2019-10-20
20
+
21
+ * Allow access to properties for unintrospectable classes.
22
+
23
+ ## 0.15.0 / 2019-10-19
24
+
25
+ * Drop support for gobject-introspection below 1.46, the version available in
26
+ Ubuntu Xenial.
27
+ * Merge extended property getter and setter into regular ones. This means you
28
+ can always just use `#get_property` and `#set_property`. The methods
29
+ `#get_property_extended` and `#set_property_extended` are deprecated and will
30
+ be removed in GirFFI version 0.16 or later.
31
+ * Support setting ByteArray properties directly with string values.
32
+ * Target Ruby 2.4+
33
+ * Implement getting and setting of flag properties and GValues.
34
+ * Add support for basic hashtable values larger than pointer.
35
+ * Support unintrospectable classes not derived from GObject but from some other
36
+ fundamental object type.
37
+ * Make GPtrArray work with boxed types.
38
+ * Do not try to ref method reciever for struct instance methods marking the
39
+ instance receiver as transfer `:everything`.
40
+ * Support signals with GError arguments.
41
+ * Cache various methods on IBaseInfo and its subclasses.
42
+ * Generate aliases for accessor methods instead of relying on `method_missing`.
43
+
44
+ ## 0.14.1 / 2018-09-27
45
+
46
+ * Add enum values as constants in the generated module.
47
+
3
48
  ## 0.14.0 / 2018-09-25
4
49
 
5
50
  * Do not generate field accessors for Object types. Object data should normally
data/Gemfile CHANGED
@@ -1,12 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- source 'https://rubygems.org'
3
+ source "https://rubygems.org"
4
4
 
5
5
  # The gem's dependencies are specified in gir_ffi.gemspec
6
6
  gemspec
7
7
 
8
- gem 'pry', '~> 0.11.0'
8
+ gem "pry", "~> 0.13.0"
9
+ gem "ruby-prof", platform: :mri
10
+ gem "test-prof", platform: :mri
9
11
 
10
- if ENV['CI']
11
- gem 'coveralls', group: :development if ENV['TRAVIS_RUBY_VERSION'] == '2.4'
12
+ if ENV["CI"]
13
+ gem "coveralls", group: :development if ENV["TRAVIS_RUBY_VERSION"] == "2.4"
12
14
  end
data/README.md CHANGED
@@ -53,7 +53,7 @@ examples can be found in `gir_ffi-gtk` and `gir_ffi-gst`.
53
53
 
54
54
  ## Requirements
55
55
 
56
- GirFFI is supported on CRuby 2.2, 2.3, 2.4 and 2.5, and JRuby 9.1 and 9.2
56
+ GirFFI is supported on CRuby 2.4, 2.5 and 2.6, and JRuby 9.2.
57
57
 
58
58
  You will also need gobject-introspection installed with some
59
59
  introspection data.
@@ -63,17 +63,18 @@ available under the name ending in plain `.so`. If GirFFI complains that it
63
63
  cannot find the library, try installing development packages for those
64
64
  libraries.
65
65
 
66
- GirFFI should work with gobject-introspection 1.32.0 and up.
66
+ GirFFI should work with gobject-introspection 1.46.0 and up.
67
67
 
68
68
  On Debian and Ubuntu, installing `libgirepository1.0-1` and `gir1.2-glib-2.0`
69
69
  should be enough to use GirFFI in your application.
70
70
 
71
71
  To run the tests, you should additionally install `libgirepository1.0-dev`,
72
- `libcairo2-dev`, `gobject-introspection`, `gir1.2-gtop-2.0`, `gir1.2-gtk-3.0`,
73
- `gir1.2-pango-1.0`, `gir1.2-secret-1` and `gir1.2-gstreamer-1.0`. This should
74
- be enough to get `rake test` working.
72
+ `gobject-introspection`, `gir1.2-gtop-2.0`, `gir1.2-gtk-3.0`,
73
+ `gir1.2-gtksource-3.0`, `gir1.2-pango-1.0`, `gir1.2-secret-1` and
74
+ `gir1.2-gstreamer-1.0`. This should be enough to get `rake test` working.
75
75
 
76
- GirFFI has not been tested on Mac OS X or Microsoft Windows. YMMV.
76
+ GirFFI has not been tested on Mac OS X or Microsoft Windows. YMMV. Pull
77
+ requests to support these platforms are welcome.
77
78
 
78
79
  ## Overrides
79
80
 
@@ -96,9 +97,9 @@ Please feel free to file bugs or send pull requests!
96
97
  If you just want to help out but don't know where to start, have a look at
97
98
  TODO.md, and check the notes in the code (e.g., using `dnote`).
98
99
 
99
- If you want to send pull requests or patches, please try to follow these
100
- instructions. If you get stuck, make a pull request anyway and I'll try to help
101
- out.
100
+ If you want to send pull requests or patches, try to follow the instructions
101
+ below. **If you get stuck, please make a pull request anyway and I'll try to
102
+ help out.**
102
103
 
103
104
  * Make sure `rake test` runs without reporting any failures.
104
105
  * Add tests for your feature. Otherwise, I can't see if it works or if I
@@ -119,7 +120,7 @@ The following people have contributed to GirFFI over the years:
119
120
 
120
121
  ## License
121
122
 
122
- Copyright © 2009–2018 [Matijs van Zuijlen](http://www.matijs.net)
123
+ Copyright © 2009–2019 [Matijs van Zuijlen](http://www.matijs.net)
123
124
 
124
125
  GirFFI is free software, distributed under the terms of the GNU Lesser
125
126
  General Public License, version 2.1 or later. See the file COPYING.LIB for
data/Rakefile CHANGED
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'rake/clean'
4
- require 'bundler/gem_tasks'
3
+ require "rake/clean"
4
+ require "bundler/gem_tasks"
5
5
 
6
- load 'tasks/test.rake'
6
+ load "tasks/test.rake"
7
7
 
8
- task default: 'test:all'
9
- task default: 'test:features'
8
+ task default: "test:all"
9
+ task default: "test:features"
@@ -1,25 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Ensure GLib is defined by GirFFI itself
4
- raise 'The module GLib was already defined elsewhere' if Kernel.const_defined? :GLib
4
+ raise "The module GLib was already defined elsewhere" if Kernel.const_defined? :GLib
5
5
 
6
- require 'gir_ffi/core'
6
+ require "gir_ffi/core"
7
7
 
8
8
  # Bypass check for existing modules
9
- GirFFI::Builders::ModuleBuilder.new('GLib').generate
10
-
11
- require 'ffi-glib/array'
12
- require 'ffi-glib/byte_array'
13
- require 'ffi-glib/bytes'
14
- require 'ffi-glib/destroy_notify'
15
- require 'ffi-glib/error'
16
- require 'ffi-glib/hash_table'
17
- require 'ffi-glib/list'
18
- require 'ffi-glib/main_loop'
19
- require 'ffi-glib/ptr_array'
20
- require 'ffi-glib/s_list'
21
- require 'ffi-glib/strv'
22
- require 'ffi-glib/variant'
9
+ GirFFI::Builders::ModuleBuilder.new("GLib").generate
10
+
11
+ require "ffi-glib/array"
12
+ require "ffi-glib/byte_array"
13
+ require "ffi-glib/bytes"
14
+ require "ffi-glib/destroy_notify"
15
+ require "ffi-glib/error"
16
+ require "ffi-glib/hash_table"
17
+ require "ffi-glib/list"
18
+ require "ffi-glib/main_loop"
19
+ require "ffi-glib/ptr_array"
20
+ require "ffi-glib/s_list"
21
+ require "ffi-glib/strv"
22
+ require "ffi-glib/variant"
23
23
 
24
24
  # Module representing GLib's GLib namespace.
25
25
  module GLib
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi-glib/container_class_methods'
4
- require 'ffi-glib/array_methods'
3
+ require "ffi-glib/container_class_methods"
4
+ require "gir_ffi/array_element_convertor"
5
5
 
6
6
  GLib.load_class :Array
7
7
 
@@ -10,7 +10,6 @@ module GLib
10
10
  # be necessary to create objects of this class from Ruby directly.
11
11
  class Array
12
12
  include Enumerable
13
- include ArrayMethods
14
13
  extend ContainerClassMethods
15
14
 
16
15
  attr_reader :element_type
@@ -70,6 +69,17 @@ module GLib
70
69
  self
71
70
  end
72
71
 
72
+ # Re-implementation of the g_array_index macro
73
+ def index(idx)
74
+ unless (0...length).cover? idx
75
+ raise IndexError, "Index #{idx} outside of bounds 0..#{length - 1}"
76
+ end
77
+
78
+ item_ptr = data_ptr + idx * element_size
79
+ convertor = GirFFI::ArrayElementConvertor.new element_type, item_ptr
80
+ convertor.to_ruby_value
81
+ end
82
+
73
83
  private
74
84
 
75
85
  def data_ptr
@@ -83,7 +93,7 @@ module GLib
83
93
  def check_element_size_match
84
94
  return if calculated_element_size == get_element_size
85
95
 
86
- warn 'WARNING: Element sizes do not match'
96
+ warn "WARNING: Element sizes do not match"
87
97
  end
88
98
 
89
99
  def guess_element_type
@@ -15,8 +15,13 @@ module GLib
15
15
  self.class.wrap Lib.g_byte_array_append(to_ptr, bytes, len)
16
16
  end
17
17
 
18
- def initialize
19
- store_pointer(Lib.g_byte_array_new)
18
+ def self.from(data)
19
+ case data
20
+ when self
21
+ data
22
+ else
23
+ new.append(data)
24
+ end
20
25
  end
21
26
  end
22
27
  end
@@ -18,7 +18,7 @@ module GLib
18
18
  end
19
19
 
20
20
  super(ptr).tap do |container|
21
- container.reset_typespec typespec if container
21
+ container&.reset_typespec typespec
22
22
  end
23
23
  end
24
24
 
@@ -5,7 +5,7 @@ GLib.load_class :Error
5
5
  module GLib
6
6
  # Overrides for GError, used by GLib for handling non-fatal errors.
7
7
  class Error
8
- GIR_FFI_DOMAIN = GLib.quark_from_string('gir_ffi')
8
+ GIR_FFI_DOMAIN = GLib.quark_from_string("gir_ffi")
9
9
 
10
10
  def self.from_exception(exception)
11
11
  new_literal GIR_FFI_DOMAIN, 0, exception.message
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi-glib/container_class_methods'
3
+ require "ffi-glib/container_class_methods"
4
4
 
5
5
  GLib.load_class :HashTable
6
6
 
@@ -63,7 +63,7 @@ module GLib
63
63
  when :utf8
64
64
  FFI::Function.new(:uint,
65
65
  [:pointer],
66
- find_support_function('g_str_hash'))
66
+ find_support_function("g_str_hash"))
67
67
  end
68
68
  end
69
69
 
@@ -72,7 +72,7 @@ module GLib
72
72
  when :utf8
73
73
  FFI::Function.new(:int,
74
74
  [:pointer, :pointer],
75
- find_support_function('g_str_equal'))
75
+ find_support_function("g_str_equal"))
76
76
  end
77
77
  end
78
78
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi-glib/list_methods'
3
+ require "ffi-glib/list_methods"
4
4
 
5
5
  GLib.load_class :List
6
6
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi-glib/container_class_methods'
3
+ require "ffi-glib/container_class_methods"
4
4
 
5
5
  module GLib
6
6
  # Common methods for List and SList.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'singleton'
3
+ require "singleton"
4
4
 
5
5
  GLib.load_class :MainLoop
6
6
 
@@ -40,7 +40,7 @@ module GLib
40
40
  setup_instance_method! :run
41
41
 
42
42
  def run_with_thread_enabler
43
- ThreadEnabler.instance.setup_idle_handler if RUBY_ENGINE == 'ruby'
43
+ ThreadEnabler.instance.setup_idle_handler if RUBY_ENGINE == "ruby"
44
44
  RUNNING_LOOPS << self
45
45
  result = run_without_thread_enabler
46
46
  exception = EXCEPTIONS.shift
@@ -63,6 +63,6 @@ module GLib
63
63
  end
64
64
  end
65
65
 
66
- Signal.trap 'INT' do
66
+ Signal.trap "INT" do
67
67
  GLib::MainLoop.handle_exception(Interrupt.new)
68
68
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi-glib/container_class_methods'
4
- require 'ffi-glib/array_methods'
3
+ require "ffi-glib/container_class_methods"
4
+ require "gir_ffi/array_element_convertor"
5
5
 
6
6
  GLib.load_class :PtrArray
7
7
 
@@ -10,7 +10,6 @@ module GLib
10
10
  # pointers.
11
11
  class PtrArray
12
12
  include Enumerable
13
- include ArrayMethods
14
13
  extend ContainerClassMethods
15
14
 
16
15
  attr_reader :element_type
@@ -49,12 +48,25 @@ module GLib
49
48
  ary.each { |item| add item }
50
49
  end
51
50
 
52
- def data_ptr
53
- struct[:pdata]
54
- end
51
+ # Re-implementation of the g_ptrarray_index macro
52
+ def index(idx)
53
+ unless (0...length).cover? idx
54
+ raise IndexError, "Index #{idx} outside of bounds 0..#{length - 1}"
55
+ end
55
56
 
56
- def element_size
57
- POINTER_SIZE
57
+ item_ptr = data_ptr + idx * element_size
58
+
59
+ convert_element_type = case element_type
60
+ when :utf8
61
+ :utf8
62
+ when GirFFI::ObjectBase
63
+ element_type
64
+ else
65
+ [:pointer, element_type]
66
+ end
67
+
68
+ convertor = GirFFI::ArrayElementConvertor.new convert_element_type, item_ptr
69
+ convertor.to_ruby_value
58
70
  end
59
71
 
60
72
  def each
@@ -70,5 +82,15 @@ module GLib
70
82
  def ==(other)
71
83
  to_a == other.to_a
72
84
  end
85
+
86
+ private
87
+
88
+ def element_size
89
+ POINTER_SIZE
90
+ end
91
+
92
+ def data_ptr
93
+ struct[:pdata]
94
+ end
73
95
  end
74
96
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi-glib/list_methods'
3
+ require "ffi-glib/list_methods"
4
4
 
5
5
  GLib.load_class :SList
6
6
 
@@ -5,7 +5,7 @@ GLib.load_class :Variant
5
5
  module GLib
6
6
  # Overrides for GVariant, GLib's variant data type.
7
7
  class Variant
8
- setup_instance_method! 'get_string'
8
+ setup_instance_method! "get_string"
9
9
 
10
10
  def get_string_with_override
11
11
  get_string_without_override.first
@@ -1,18 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/core'
3
+ require "gir_ffi/core"
4
4
 
5
5
  # Bypass check for existing modules
6
- GirFFI::Builders::ModuleBuilder.new('GObject').generate
6
+ GirFFI::Builders::ModuleBuilder.new("GObject").generate
7
7
 
8
- require 'ffi-gobject/value'
9
- require 'ffi-gobject/initially_unowned'
10
- require 'ffi-gobject/closure'
11
- require 'ffi-gobject/object'
12
- require 'ffi-gobject/object_class'
13
- require 'ffi-gobject/param_spec'
14
- require 'ffi-gobject/ruby_closure'
15
- require 'gir_ffi/signal_not_found_error'
8
+ require "ffi-gobject/value"
9
+ require "ffi-gobject/initially_unowned"
10
+ require "ffi-gobject/closure"
11
+ require "ffi-gobject/object"
12
+ require "ffi-gobject/object_class"
13
+ require "ffi-gobject/param_spec"
14
+ require "ffi-gobject/ruby_closure"
15
+ require "gir_ffi/signal_not_found_error"
16
16
 
17
17
  # Module representing GLib's GObject namespace.
18
18
  module GObject
@@ -47,7 +47,7 @@ module GObject
47
47
  end
48
48
 
49
49
  def self.signal_emit(object, detailed_signal, *args)
50
- signal, detail = detailed_signal.split('::')
50
+ signal, detail = detailed_signal.split("::")
51
51
  signal_id = signal_lookup_from_instance signal, object
52
52
  detail_quark = GLib.quark_from_string(detail)
53
53
 
@@ -63,9 +63,9 @@ module GObject
63
63
  end
64
64
 
65
65
  def self.signal_connect(object, detailed_signal, data = nil, after = false, &block)
66
- raise ArgumentError, 'Block needed' unless block_given?
66
+ raise ArgumentError, "Block needed" unless block_given?
67
67
 
68
- signal_name, = detailed_signal.split('::')
68
+ signal_name, = detailed_signal.split("::")
69
69
  sig_info = object.class.find_signal signal_name
70
70
 
71
71
  closure = sig_info.wrap_in_closure do |*args|