gir_ffi 0.0.3 → 0.0.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.
Files changed (52) hide show
  1. data/DESIGN.rdoc +9 -0
  2. data/History.txt +11 -0
  3. data/TODO.rdoc +6 -9
  4. data/examples/01_empty_window.rb +1 -1
  5. data/examples/02_hello_world.rb +4 -4
  6. data/examples/03_upgraded_hello_world.rb +7 -8
  7. data/lib/gir_ffi.rb +0 -4
  8. data/lib/gir_ffi/arg_helper.rb +27 -2
  9. data/lib/gir_ffi/builder.rb +13 -86
  10. data/lib/gir_ffi/builder_helper.rb +2 -15
  11. data/lib/gir_ffi/class_base.rb +51 -0
  12. data/lib/gir_ffi/class_builder.rb +178 -52
  13. data/lib/gir_ffi/function_definition_builder.rb +46 -9
  14. data/lib/gir_ffi/g_object.rb +37 -0
  15. data/lib/gir_ffi/i_arg_info.rb +27 -9
  16. data/lib/gir_ffi/i_base_info.rb +12 -4
  17. data/lib/gir_ffi/i_callable_info.rb +15 -5
  18. data/lib/gir_ffi/i_enum_info.rb +9 -3
  19. data/lib/gir_ffi/i_field_info.rb +12 -4
  20. data/lib/gir_ffi/i_function_info.rb +24 -8
  21. data/lib/gir_ffi/i_object_info.rb +63 -21
  22. data/lib/gir_ffi/i_registered_type_info.rb +11 -0
  23. data/lib/gir_ffi/i_repository.rb +2 -2
  24. data/lib/gir_ffi/i_signal_info.rb +1 -1
  25. data/lib/gir_ffi/i_struct_info.rb +24 -8
  26. data/lib/gir_ffi/i_type_info.rb +24 -8
  27. data/lib/gir_ffi/i_union_info.rb +15 -0
  28. data/lib/gir_ffi/i_value_info.rb +3 -1
  29. data/lib/gir_ffi/i_vfunc_info.rb +12 -1
  30. data/lib/gir_ffi/lib.rb +23 -1
  31. data/lib/gir_ffi/lib_c.rb +1 -1
  32. data/lib/gir_ffi/module_base.rb +19 -0
  33. data/lib/gir_ffi/module_builder.rb +67 -20
  34. data/lib/gir_ffi/overrides/gobject.rb +174 -0
  35. data/lib/gir_ffi/overrides/gtk.rb +26 -9
  36. data/test/builder_test.rb +57 -37
  37. data/test/{base_test.rb → class_base_test.rb} +3 -3
  38. data/test/class_builder_test.rb +48 -6
  39. data/test/everything_test.rb +285 -36
  40. data/test/function_definition_builder_test.rb +11 -9
  41. data/test/g_object_test.rb +22 -0
  42. data/test/gobject_overrides_test.rb +216 -0
  43. data/test/i_object_info_test.rb +21 -0
  44. data/test/module_builder_test.rb +54 -0
  45. data/test/test_helper.rb +6 -4
  46. metadata +18 -14
  47. data/lib/gir_ffi/base.rb +0 -25
  48. data/lib/gir_ffi/constructor_definition_builder.rb +0 -20
  49. data/lib/gir_ffi/g_type.rb +0 -14
  50. data/lib/gir_ffi/method_missing_definition_builder.rb +0 -59
  51. data/test/constructor_definition_builder_test.rb +0 -19
  52. data/test/g_type_test.rb +0 -22
@@ -1,20 +0,0 @@
1
- module GirFFI
2
- # Implements the creation of a Ruby constructor definition out of a GIR
3
- # IFunctionInfo, if it represents a constructor.
4
- class ConstructorDefinitionBuilder < FunctionDefinitionBuilder
5
- private
6
-
7
- def process_return_value
8
- end
9
-
10
- def filled_out_template
11
- return <<-CODE
12
- def #{@info.name} #{@inargs.join(', ')}
13
- #{@pre.join("\n")}
14
- _real_new #{@libmodule}.#{@info.symbol}(#{@callargs.join(', ')})
15
- end
16
- CODE
17
- end
18
- end
19
- end
20
-
@@ -1,14 +0,0 @@
1
- require 'ffi'
2
-
3
- module GirFFI
4
- module GType
5
- def self.init; Lib::g_type_init; end
6
- module Lib
7
- extend FFI::Library
8
- ffi_lib "gobject-2.0"
9
- attach_function :g_type_init, [], :void
10
- end
11
- end
12
- end
13
-
14
-
@@ -1,59 +0,0 @@
1
- module GirFFI
2
- # Base class for builders of #method_missing definitions.
3
- class MethodMissingDefinitionBuilder
4
- def initialize lib, namespace
5
- @lib = lib
6
- @namespace = namespace
7
- end
8
-
9
- def generate
10
- args = arguments.map {|arg| "\"#{arg}\""}
11
-
12
- return <<-CODE
13
- def #{slf}method_missing method, *arguments, &block
14
- result = GirFFI::Builder.#{fn} #{args.join ', '}, method.to_s
15
- return super unless result
16
- self.send method, *arguments, &block
17
- end
18
- CODE
19
- end
20
- end
21
-
22
- # Builds a #method_missing for a module. This method_missing will be
23
- # called for missing module methods; these modules are not meant for
24
- # #include'ing.
25
- class ModuleMethodMissingDefinitionBuilder < MethodMissingDefinitionBuilder
26
- private
27
-
28
- def slf; "self."; end
29
- def fn; "setup_function"; end
30
- def arguments; [@namespace]; end
31
- def libs; [@lib]; end
32
- end
33
-
34
- # Builds a #method_missing for missing instance methods.
35
- class InstanceMethodMissingDefinitionBuilder < MethodMissingDefinitionBuilder
36
- def initialize lib, modul, namespace, classname
37
- super lib, namespace
38
- @classname = classname
39
- @module = modul
40
- end
41
-
42
- private
43
-
44
- def slf; ""; end
45
- def fn; "setup_instance_method"; end
46
- def arguments; [@namespace, @classname]; end
47
- def libs; [@lib, @module]; end
48
- end
49
-
50
- # Builds a #method_missing for missing class methods.
51
- class ClassMethodMissingDefinitionBuilder < InstanceMethodMissingDefinitionBuilder
52
- private
53
-
54
- def slf; "self."; end
55
- def fn; "setup_method"; end
56
- end
57
-
58
- end
59
-
@@ -1,19 +0,0 @@
1
- require File.expand_path('test_helper.rb', File.dirname(__FILE__))
2
- require 'gir_ffi'
3
-
4
- class ConstructorDefinitionBuilderTest < Test::Unit::TestCase
5
- context "The ConstructorDefinitionBuilder" do
6
- should "build correct definition of Gtk::Window#new" do
7
- go = get_method_introspection_data 'Gtk', 'Window', 'new'
8
- cbuilder = GirFFI::ConstructorDefinitionBuilder.new go, Lib
9
- code = cbuilder.generate
10
-
11
- expected =
12
- "def new type
13
- _real_new Lib.gtk_window_new(type)
14
- end"
15
-
16
- assert_equal cws(expected), cws(code)
17
- end
18
- end
19
- end
data/test/g_type_test.rb DELETED
@@ -1,22 +0,0 @@
1
- require File.expand_path('test_helper.rb', File.dirname(__FILE__))
2
- require 'gir_ffi/g_type'
3
-
4
- class HelperGTypeTest < Test::Unit::TestCase
5
- context "The GType module" do
6
- should "have init as a public method" do
7
- assert GirFFI::GType.respond_to?('init')
8
- end
9
-
10
- should "not have g_type_init as a public method" do
11
- assert GirFFI::GType.respond_to?('g_type_init') == false
12
- end
13
-
14
- end
15
- context "the init method" do
16
- should "not raise an error" do
17
- assert_nothing_raised do
18
- GirFFI::GType.init
19
- end
20
- end
21
- end
22
- end