gir_ffi-pretty_printer 0.0.1
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.
- data/README.md +32 -0
- data/Rakefile +27 -0
- data/lib/gir_ffi-pretty_printer/pretty_printer.rb +103 -0
- data/lib/gir_ffi-pretty_printer.rb +1 -0
- data/test/gir_ffi-pretty_printer/pretty_printer_test.rb +15 -0
- data/test/test_helper.rb +3 -0
- metadata +151 -0
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
|
data/test/test_helper.rb
ADDED
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:
|