gir_ffi-pretty_printer 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md ADDED
@@ -0,0 +1,32 @@
1
+ # GirFFI-PrettyPrinter
2
+
3
+ Pretty-printer for modules generated by GirFFI.
4
+
5
+ ## Features
6
+
7
+ * Prints generated, overridden and hand-added methods.
8
+ * Uses the `live_ast` gem to inspect runtime-generated methods.
9
+ * Needs MRI 1.9.3.
10
+
11
+ ## Usage
12
+
13
+ # The pretty-printer must be required first!
14
+ require 'gir_ffi-pretty_printer'
15
+ require 'gir_ffi'
16
+
17
+ # Any version
18
+ GirFFI::PrettyPrinter.new.pretty_print 'GObject'
19
+ # A specific version
20
+ GirFFI::PrettyPrinter.new.pretty_print 'Gtk', '3.0'
21
+
22
+ ## Install
23
+
24
+ gem install gir_ffi-pretty_printer
25
+
26
+ ## License
27
+
28
+ Copyright © 2012--2013, [Matijs van Zuijlen](http://www.matijs.net/)
29
+
30
+ GirFFI-PrettyPrinter is free software, distributed under the terms of
31
+ the GNU Lesser General Public License, version 2.1 or later. See the
32
+ file COPYING.LIB for more information.
data/Rakefile ADDED
@@ -0,0 +1,27 @@
1
+ require 'rake/testtask'
2
+ require 'yard'
3
+
4
+ namespace :test do
5
+ Rake::TestTask.new(:unit) do |t|
6
+ t.libs = ['lib']
7
+ t.ruby_opts += ["-w -Itest"]
8
+ t.test_files = FileList['test/gir_ffi-pretty_printer/*_test.rb']
9
+ t.warning = true
10
+ end
11
+
12
+ Rake::TestTask.new(:end_to_end) do |t|
13
+ t.libs = ['lib']
14
+ t.ruby_opts += ["-w -Itest"]
15
+ t.test_files = FileList['test/end_to_end/*_test.rb']
16
+ t.warning = true
17
+ end
18
+
19
+ task :all => [:unit, :end_to_end]
20
+ end
21
+
22
+ YARD::Rake::YardocTask.new
23
+
24
+ task :test => 'test:all'
25
+
26
+ task :default => 'test'
27
+
@@ -0,0 +1,103 @@
1
+ require 'live_ast/full'
2
+ require 'live_ast/to_ruby'
3
+ require 'gir_ffi'
4
+ require 'indentation'
5
+
6
+ class GirFFI::PrettyPrinter
7
+ def pretty_print_class klass
8
+ arr = []
9
+ arr << "class #{klass.name} < #{klass.superclass.name}"
10
+ arr << pretty_print_singleton_methods(klass).indent
11
+ arr << pretty_print_instance_methods(klass).indent
12
+ arr << "end"
13
+ arr.join "\n"
14
+ end
15
+
16
+ def pretty_print_instance_methods klass
17
+ arr = []
18
+ klass.instance_methods(false).each do |mname|
19
+ meth = klass.instance_method mname
20
+
21
+ if meth.arity == -1
22
+ klass.setup_instance_method mname.to_s
23
+ meth = klass.instance_method mname
24
+ end
25
+
26
+ begin
27
+ arr << meth.to_ruby
28
+ rescue => e
29
+ warn "Printing #{klass.name}##{mname} failed: #{e.message}"
30
+ end
31
+ end
32
+ arr.join "\n"
33
+ end
34
+
35
+ def pretty_print_singleton_methods klass
36
+ arr = []
37
+ klass.methods(false).each do |mname|
38
+ meth = klass.method mname
39
+
40
+ if meth.arity == -1
41
+ klass.setup_method mname.to_s
42
+ meth = klass.method mname
43
+ end
44
+
45
+ begin
46
+ arr << meth.to_ruby
47
+ rescue => e
48
+ warn "Printing #{klass.name}.#{mname} failed: #{e.message}"
49
+ end
50
+ end
51
+ arr.join "\n"
52
+ end
53
+
54
+ def pretty_print_function modul, mname
55
+ str = ""
56
+ begin
57
+ modul.setup_method mname.to_s unless modul.respond_to? mname
58
+
59
+ meth = modul.method mname
60
+ str << meth.to_ruby
61
+ rescue => e
62
+ warn "Printing #{modul.name}.#{mname} failed: #{e.message}"
63
+ end
64
+ str
65
+ end
66
+
67
+ def pretty_print_constant modul, const_name
68
+ value = modul.const_get(const_name)
69
+ "#{const_name} = #{value.inspect}"
70
+ end
71
+
72
+ def pretty_print module_name, version = nil
73
+ GirFFI.setup module_name, version
74
+ arr = []
75
+ gir = GObjectIntrospection::IRepository.default
76
+ modul = Kernel.const_get(module_name)
77
+ infos = gir.infos module_name
78
+
79
+ arr << "module #{module_name}"
80
+
81
+ infos.each do |info|
82
+ case info.info_type
83
+ when :struct, :object
84
+ # FIXME: We skip IConv for now since building it fails.
85
+ if info.name == "IConv"
86
+ warn "Skipping #{module_name}::#{info.name}"
87
+ else
88
+ klass = GirFFI::Builder.build_class info
89
+ arr << pretty_print_class(klass).indent
90
+ end
91
+ when :constant
92
+ arr << pretty_print_constant(modul, info.name).indent
93
+ when :function
94
+ arr << pretty_print_function(modul, info.name).indent
95
+ else
96
+ arr << "# XXX: Don't know how to print #{info.info_type}".indent
97
+ end
98
+ end
99
+
100
+ arr << "end"
101
+ arr.join "\n"
102
+ end
103
+ end
@@ -0,0 +1 @@
1
+ require 'gir_ffi-pretty_printer/pretty_printer'
@@ -0,0 +1,15 @@
1
+ require 'test_helper'
2
+ describe GirFFI::PrettyPrinter do
3
+ describe "#initialize" do
4
+ it "takes no arguments" do
5
+ GirFFI::PrettyPrinter.new
6
+ end
7
+ end
8
+
9
+ describe "#pretty_print" do
10
+ let(:instance) { GirFFI::PrettyPrinter.new }
11
+ it "pretty-prints a module without type specification" do
12
+ instance.pretty_print 'GObject'
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ require 'minitest/autorun'
2
+
3
+ require 'gir_ffi-pretty_printer'
metadata ADDED
@@ -0,0 +1,151 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gir_ffi-pretty_printer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Matijs van Zuijlen
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-07-04 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: gir_ffi
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.6.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.6.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: live_ast
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 1.0.2
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.0.2
46
+ - !ruby/object:Gem::Dependency
47
+ name: boc
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 0.4.5
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.4.5
62
+ - !ruby/object:Gem::Dependency
63
+ name: minitest
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '5.0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '5.0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rake
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 10.0.3
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 10.0.3
94
+ - !ruby/object:Gem::Dependency
95
+ name: yard
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 0.8.3
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 0.8.3
110
+ description: Library and executable to pretty-print modules generated by GirFFI, taking
111
+ method overrides and hand-added methods into account.
112
+ email:
113
+ - matijs@matijs.net
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - lib/gir_ffi-pretty_printer.rb
119
+ - lib/gir_ffi-pretty_printer/pretty_printer.rb
120
+ - test/test_helper.rb
121
+ - test/gir_ffi-pretty_printer/pretty_printer_test.rb
122
+ - README.md
123
+ - Rakefile
124
+ homepage: http://www.github.com/mvz/gir_ffi-pretty_printer
125
+ licenses: []
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ requirements: []
143
+ rubyforge_project:
144
+ rubygems_version: 1.8.23
145
+ signing_key:
146
+ specification_version: 3
147
+ summary: Pretty-printer for modules generated by GirFFI
148
+ test_files:
149
+ - test/test_helper.rb
150
+ - test/gir_ffi-pretty_printer/pretty_printer_test.rb
151
+ has_rdoc: