glib2 0.20.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. data/ChangeLog +3023 -0
  2. data/README +28 -0
  3. data/Rakefile +87 -0
  4. data/extconf.rb +61 -0
  5. data/sample/bookmarkfile.rb +66 -0
  6. data/sample/completion.rb +45 -0
  7. data/sample/idle.rb +41 -0
  8. data/sample/iochannel.rb +44 -0
  9. data/sample/keyfile.rb +62 -0
  10. data/sample/shell.rb +36 -0
  11. data/sample/spawn.rb +25 -0
  12. data/sample/timeout.rb +28 -0
  13. data/sample/timeout2.rb +35 -0
  14. data/sample/timer.rb +40 -0
  15. data/sample/type-register.rb +103 -0
  16. data/sample/type-register2.rb +104 -0
  17. data/sample/utils.rb +54 -0
  18. data/src/glib-enum-types.c +1032 -0
  19. data/src/glib-enum-types.h +140 -0
  20. data/src/lib/glib-mkenums.rb +199 -0
  21. data/src/lib/glib2.rb +220 -0
  22. data/src/lib/mkmf-gnome2.rb +390 -0
  23. data/src/lib/pkg-config.rb +137 -0
  24. data/src/rbgcompat.h +30 -0
  25. data/src/rbglib.c +320 -0
  26. data/src/rbglib.h +96 -0
  27. data/src/rbglib_bookmarkfile.c +595 -0
  28. data/src/rbglib_completion.c +192 -0
  29. data/src/rbglib_convert.c +195 -0
  30. data/src/rbglib_error.c +95 -0
  31. data/src/rbglib_fileutils.c +83 -0
  32. data/src/rbglib_i18n.c +44 -0
  33. data/src/rbglib_int64.c +157 -0
  34. data/src/rbglib_iochannel.c +883 -0
  35. data/src/rbglib_keyfile.c +846 -0
  36. data/src/rbglib_maincontext.c +917 -0
  37. data/src/rbglib_mainloop.c +87 -0
  38. data/src/rbglib_messages.c +150 -0
  39. data/src/rbglib_pollfd.c +111 -0
  40. data/src/rbglib_shell.c +68 -0
  41. data/src/rbglib_source.c +190 -0
  42. data/src/rbglib_spawn.c +345 -0
  43. data/src/rbglib_threads.c +51 -0
  44. data/src/rbglib_timer.c +127 -0
  45. data/src/rbglib_unicode.c +611 -0
  46. data/src/rbglib_utils.c +386 -0
  47. data/src/rbglib_win32.c +136 -0
  48. data/src/rbgobj_boxed.c +251 -0
  49. data/src/rbgobj_closure.c +337 -0
  50. data/src/rbgobj_convert.c +167 -0
  51. data/src/rbgobj_enums.c +961 -0
  52. data/src/rbgobj_fundamental.c +30 -0
  53. data/src/rbgobj_object.c +892 -0
  54. data/src/rbgobj_param.c +390 -0
  55. data/src/rbgobj_paramspecs.c +305 -0
  56. data/src/rbgobj_signal.c +963 -0
  57. data/src/rbgobj_strv.c +61 -0
  58. data/src/rbgobj_type.c +851 -0
  59. data/src/rbgobj_typeinstance.c +121 -0
  60. data/src/rbgobj_typeinterface.c +148 -0
  61. data/src/rbgobj_typemodule.c +66 -0
  62. data/src/rbgobj_typeplugin.c +49 -0
  63. data/src/rbgobj_value.c +313 -0
  64. data/src/rbgobj_valuearray.c +59 -0
  65. data/src/rbgobj_valuetypes.c +298 -0
  66. data/src/rbgobject.c +406 -0
  67. data/src/rbgobject.h +265 -0
  68. data/src/rbgprivate.h +88 -0
  69. data/src/rbgutil.c +222 -0
  70. data/src/rbgutil.h +82 -0
  71. data/src/rbgutil_callback.c +231 -0
  72. data/test/glib-test-init.rb +6 -0
  73. data/test/glib-test-utils.rb +12 -0
  74. data/test/run-test.rb +25 -0
  75. data/test/test_enum.rb +99 -0
  76. data/test/test_file_utils.rb +15 -0
  77. data/test/test_glib2.rb +120 -0
  78. data/test/test_iochannel.rb +275 -0
  79. data/test/test_key_file.rb +38 -0
  80. data/test/test_mkenums.rb +25 -0
  81. data/test/test_signal.rb +20 -0
  82. data/test/test_timeout.rb +28 -0
  83. data/test/test_unicode.rb +369 -0
  84. data/test/test_utils.rb +37 -0
  85. data/test/test_win32.rb +13 -0
  86. metadata +165 -0
data/README ADDED
@@ -0,0 +1,28 @@
1
+ Ruby/GLib2
2
+ ==========
3
+ Ruby/GLib2 is a Ruby binding of GLib-2.x.
4
+
5
+ Requirements
6
+ ------------
7
+ Ruby: http://www.ruby-lang.org/
8
+ GLib: http://www.gtk.org/
9
+
10
+ Install
11
+ -------
12
+ 0. install ruby-1.6.x or later, GLib.
13
+ 1. ruby extconf.rb
14
+ 2. make
15
+ 3. su
16
+ 4. make install
17
+
18
+ Copying
19
+ -------
20
+ Copyright (c) 2002-2005 Ruby-GNOME2 Project Team
21
+
22
+ This program is free software.
23
+ You can distribute/modify this program under the terms of
24
+ the GNU LESSER GENERAL PUBLIC LICENSE Version 2.1.
25
+
26
+ Project Website
27
+ ---------------
28
+ http://ruby-gnome2.sourceforge.jp/
data/Rakefile ADDED
@@ -0,0 +1,87 @@
1
+ require 'rake/clean'
2
+ CLEAN.include '**/*.o'
3
+ CLEAN.include "**/*.#{Config::MAKEFILE_CONFIG['DLEXT']}"
4
+ CLOBBER.include 'doc'
5
+ CLOBBER.include '**/*.log'
6
+ CLOBBER.include '**/Makefile'
7
+ CLOBBER.include '**/extconf.h'
8
+
9
+ # Determine the current version of the software
10
+ def ruby_glib_version
11
+ buf = File.read('src/rbglib.h')
12
+ if buf =~ /\s*RBGLIB_MAJOR_VERSION\s*(\d.+)/
13
+ major = $1
14
+ else
15
+ major = 0
16
+ end
17
+ if buf =~ /\s*RBGLIB_MINOR_VERSION\s*(\d.+)/
18
+ minor = $1
19
+ else
20
+ minor = 0
21
+ end
22
+ if buf =~ /\s*RBGLIB_MICRO_VERSION\s*(\d.+)/
23
+ micro = $1
24
+ else
25
+ micro = 0
26
+ end
27
+ "#{major}.#{minor}.#{micro}"
28
+ end
29
+
30
+ CURRENT_VERSION = ruby_glib_version
31
+
32
+ desc "Default Task (Test project)"
33
+ task :default => :test
34
+
35
+ # Make tasks -----------------------------------------------------
36
+ make_program = (/mswin/ =~ RUBY_PLATFORM) ? 'nmake' : 'make'
37
+ MAKECMD = ENV['MAKE_CMD'] || make_program
38
+ MAKEOPTS = ENV['MAKE_OPTS'] || ''
39
+
40
+ GLIB_SO = "src/glib2.#{Config::MAKEFILE_CONFIG['DLEXT']}"
41
+
42
+ file 'Makefile' => 'extconf.rb' do
43
+ sh "ruby extconf.rb #{ENV['EXTCONF_OPTS']}"
44
+ end
45
+
46
+ def make(target = '')
47
+ pid = system("#{MAKECMD} #{MAKEOPTS} #{target}")
48
+ $?.exitstatus
49
+ end
50
+
51
+ # Let make handle dependencies between c/o/so - we'll just run it.
52
+ file GLIB_SO => (['Makefile'] + Dir['src/*.c'] + Dir['src/*.h']) do
53
+ m = make
54
+ fail "Make failed (status #{m})" unless m == 0
55
+ end
56
+
57
+ desc "Configure Glib2"
58
+ task :configure => ['Makefile']
59
+
60
+ desc "Compile the shared object"
61
+ task :compile => [GLIB_SO]
62
+
63
+ desc "Run glib tests"
64
+ task :test => :compile do
65
+ sh "ruby test/run-test.rb"
66
+ end
67
+
68
+ desc 'Generate gem specification'
69
+ task :gemspec do
70
+ require 'erb'
71
+ tspec = ERB.new(File.read(File.join(File.dirname(__FILE__),'src','glib2.gemspec.erb')))
72
+ File.open(File.join(File.dirname(__FILE__),'glib2.gemspec'),'wb') do|f|
73
+ f << tspec.result
74
+ end
75
+ end
76
+
77
+ desc 'Build gem'
78
+ task :package => :gemspec do
79
+ require 'rubygems/specification'
80
+ spec_source = File.read File.join(File.dirname(__FILE__),'glib2.gemspec')
81
+ spec = nil
82
+ # see: http://gist.github.com/16215
83
+ Thread.new { spec = eval("$SAFE = 3\n#{spec_source}") }.join
84
+ spec.validate
85
+ Gem::Builder.new(spec).build
86
+ end
87
+
data/extconf.rb ADDED
@@ -0,0 +1,61 @@
1
+ =begin
2
+ extconf.rb for Ruby/GLib extention library
3
+ =end
4
+
5
+ TOPDIR = File.expand_path(File.dirname(__FILE__))
6
+ MKMF_GNOME2_DIR = TOPDIR + '/src/lib'
7
+ SRCDIR = TOPDIR + '/src'
8
+
9
+ $LOAD_PATH.unshift MKMF_GNOME2_DIR
10
+
11
+ PACKAGE_NAME = "glib2"
12
+ PACKAGE_ID = "gobject-2.0"
13
+
14
+ require 'mkmf-gnome2'
15
+
16
+ PKGConfig.have_package(PACKAGE_ID) or exit 1
17
+ PKGConfig.have_package('gthread-2.0')
18
+
19
+ setup_win32(PACKAGE_NAME)
20
+
21
+ have_header("unistd.h")
22
+ have_header("io.h")
23
+
24
+ glib_header = "glib.h"
25
+ have_func("g_spawn_close_pid", glib_header)
26
+ have_func("g_thread_init", glib_header)
27
+ have_func("g_main_depth", glib_header)
28
+ have_func("g_listenv", glib_header)
29
+
30
+ ruby_header = "ruby.h"
31
+ have_func("rb_check_array_type", ruby_header)
32
+ have_func("rb_exec_recursive", ruby_header)
33
+ have_func("rb_errinfo", ruby_header)
34
+ have_func("rb_sourcefile", ruby_header)
35
+ have_func("rb_sourceline", ruby_header)
36
+ have_func("ruby_set_current_source", ruby_header)
37
+ have_func("rb_thread_blocking_region", ruby_header)
38
+ have_func("ruby_native_thread_p", ruby_header)
39
+ have_func("rb_str_encode", ruby_header)
40
+
41
+ have_var("curr_thread", [ruby_header, "node.h"])
42
+ have_var("rb_curr_thread", [ruby_header, "node.h"])
43
+
44
+ create_pkg_config_file("Ruby/GLib2", PACKAGE_ID)
45
+
46
+ create_makefile_at_srcdir(PACKAGE_NAME, SRCDIR, "-DRUBY_GLIB2_COMPILATION") do
47
+ enum_type_prefix = "glib-enum-types"
48
+ include_paths = PKGConfig.cflags_only_I("glib-2.0")
49
+ headers = include_paths.split.inject([]) do |result, path|
50
+ result + Dir.glob(File.join(path.sub(/^-I/, ""), "glib", "*.h"))
51
+ end.reject do |file|
52
+ /g(iochannel|scanner)\.h/ =~ file
53
+ end
54
+ include_paths = PKGConfig.cflags_only_I("gobject-2.0")
55
+ headers = include_paths.split.inject(headers) do |result, path|
56
+ result + Dir.glob(File.join(path.sub(/^-I/, ""), "gobject", "gsignal.h"))
57
+ end
58
+ glib_mkenums(enum_type_prefix, headers, "G_TYPE_", ["glib-object.h"])
59
+ end
60
+
61
+ create_top_makefile
@@ -0,0 +1,66 @@
1
+ =begin
2
+ bookmarkfile.rb - Sample for GLib::BookmarkFile
3
+
4
+ Copyright (C) 2006 Ruby-GNOME2 Project Team
5
+ This program is licenced under the same licence as Ruby-GNOME2.
6
+
7
+ $Id: bookmarkfile.rb,v 1.1 2006/12/26 09:59:51 mutoh Exp $
8
+ =end
9
+
10
+ require 'glib2'
11
+
12
+ $KCODE = "U"
13
+
14
+ #
15
+ # Create bookmarkfile data.
16
+ #
17
+ URI = "http://ruby-gnome2.sourceforge.jp/"
18
+ bf = GLib::BookmarkFile.new
19
+ bf.set_title(URI, "Ruby-GNOME2 sample")
20
+ bf.set_description(URI, "Ruby-GNOME2 Sampe for GLib::BookmarkFile")
21
+ bf.set_mime_type(URI, "text/html")
22
+ bf.set_private(URI, false)
23
+ bf.set_icon(URI, "http://ruby-gnome2.sourceforge.jp/logo-gy.png", "image/png")
24
+ bf.set_added(URI, Time.now)
25
+ bf.set_modified(URI, Time.now)
26
+ bf.set_visited(URI, Time.now)
27
+ bf.set_groups(URI, ["Ruby", "GTK+"])
28
+ bf.set_app_info(URI, "WWW Browser", "firefox %u", 1, Time.now)
29
+ bf.add_group(URI, "GNOME")
30
+ bf.add_application(URI, "Ruby VM", "ruby %u")
31
+
32
+ #bf.remove_group(URI, "GTK+")
33
+ #bf.remove_application(URI, "Ruby VM")
34
+ #bf.remove_item(URI)
35
+ #bf.move_item(URI, "http://gtk.org/")
36
+
37
+ # Save as "bookmarkfile.xml"
38
+ bf.to_file("bookmarkfile.xml")
39
+
40
+ #
41
+ # Load from "bookmarkfile.xml"
42
+ #
43
+ bf2 = GLib::BookmarkFile.new
44
+ bf2.load_from_file("bookmarkfile.xml")
45
+
46
+ puts "size = #{bf2.size}"
47
+ puts "uris = #{bf2.uris.inspect}"
48
+ bf2.uris.each do |uri|
49
+ puts "uri: [#{uri}]"
50
+ puts " * title: [#{bf2.get_title(uri)}]"
51
+ puts " * description: [#{bf2.get_description(uri)}]"
52
+ puts " * mime_type: [#{bf2.get_mime_type(uri)}]"
53
+ puts " * private?: [#{bf2.private?(uri)}]"
54
+ puts " * icon: [#{bf2.get_icon(uri).inspect}]"
55
+ puts " * added: [#{bf2.get_added(uri)}]"
56
+ puts " * modified: [#{bf2.get_modified(uri)}]"
57
+ puts " * visited: [#{bf2.get_visited(uri)}]"
58
+ puts " * groups: #{bf2.get_groups(uri).inspect}"
59
+ puts " * applications: #{bf2.get_applications(uri).inspect}"
60
+ begin
61
+ puts " * app_info: #{bf2.get_app_info(uri, "WWW Browser").inspect}"
62
+ rescue
63
+ puts $!
64
+ end
65
+ puts
66
+ end
@@ -0,0 +1,45 @@
1
+ =begin
2
+ completion.rb - Sample for GLib::Completion
3
+
4
+ Copyright (C) 2005 Ruby-GNOME2 Project Team
5
+ This program is licenced under the same licence as Ruby-GNOME2.
6
+
7
+ $Id: completion.rb,v 1.1 2005/10/14 19:10:07 mutoh Exp $
8
+ =end
9
+
10
+ require 'glib2'
11
+
12
+ ###########################
13
+ # Simple String completion
14
+ ###########################
15
+ ary = ["a_", "a_ab", "aac", "aabc", "aabcd"]
16
+ comp = GLib::Completion.new
17
+ comp.add_items(ary)
18
+ p comp.complete("a_")
19
+ p comp.complete("aab")
20
+
21
+ puts "-----------"
22
+
23
+
24
+ ############################
25
+ # Class completion and UTF-8
26
+ ############################
27
+ class Test
28
+ def initialize(str)
29
+ @str = str
30
+ end
31
+ def value
32
+ @str
33
+ end
34
+ end
35
+
36
+ ary2 = [Test.new("あ_"), Test.new("あ_あい"),
37
+ Test.new("ああab"), Test.new("ああabc"), Test.new("ああbcd")]
38
+
39
+ comp2 = GLib::Completion.new {|data|
40
+ data.value
41
+ }
42
+
43
+ comp2.add_items(ary2)
44
+ puts %Q$["#{comp2.complete("あ_").join(', "')}"]$
45
+ puts %Q$["#{comp2.complete("ああa").join(', "')}"]$
data/sample/idle.rb ADDED
@@ -0,0 +1,41 @@
1
+ =begin
2
+ idle.rb - Sample for GLib::Idle, GLib::MainLoop.
3
+
4
+ Copyright (C) 2005 Ruby-GNOME2 Project Team
5
+ This program is licenced under the same licence as Ruby-GNOME2.
6
+
7
+ $Date: 2005/03/13 14:39:58 $
8
+ $Id: idle.rb,v 1.1 2005/03/13 14:39:58 mutoh Exp $
9
+ =end
10
+
11
+ require 'glib2'
12
+
13
+ mainloop = GLib::MainLoop.new(nil, true)
14
+
15
+ i = 0
16
+ GLib::Idle.add {
17
+ i += 1
18
+ p "timeout1-#{i}"
19
+ if i > 9
20
+ mainloop.quit
21
+ false # the source is removed.
22
+ else
23
+ true # continue ...
24
+ end
25
+ }
26
+
27
+ j = 0
28
+ GLib::Idle.add {
29
+ j += 1
30
+ p "timeout2-#{i}"
31
+ if j > 9
32
+ mainloop.quit
33
+ false # the source is removed.
34
+ else
35
+ true # continue ...
36
+ end
37
+ }
38
+
39
+ mainloop.run
40
+
41
+ p "quit..."
@@ -0,0 +1,44 @@
1
+ =begin
2
+ iochannel.rb - Sample for GLib::IOChannel.
3
+
4
+ Copyright (C) 2005 Ruby-GNOME2 Project Team
5
+ This program is licenced under the same licence as Ruby-GNOME2.
6
+
7
+ $Id: iochannel.rb,v 1.3 2006/12/20 18:08:20 mutoh Exp $
8
+ =end
9
+
10
+ require 'glib2'
11
+
12
+ path = ARGV[0] || __FILE__
13
+
14
+ GLib::IOChannel.open(path) {|io|
15
+ puts io.read
16
+ }
17
+
18
+ stdout = GLib::IOChannel.new(path, "r")
19
+ stdout.add_watch(GLib::IOChannel::IN
20
+ ) {|io, condition|
21
+ puts "condition = #{condition}"
22
+ false
23
+ }
24
+
25
+ context = GLib::MainContext.default
26
+ mainloop = GLib::MainLoop.new(context, true)
27
+
28
+
29
+ Thread.new{
30
+ num = 0
31
+ loop {
32
+ num += 1
33
+ str = stdout.gets
34
+ puts "line #{num}: #{str}"
35
+ unless str
36
+ mainloop.quit
37
+ break
38
+ end
39
+ }
40
+ }
41
+
42
+ mainloop.run
43
+
44
+ stdout.close
data/sample/keyfile.rb ADDED
@@ -0,0 +1,62 @@
1
+ =begin
2
+ keyfile.rb - Sample for GLib::KeyFile
3
+
4
+ Copyright (C) 2006 Ruby-GNOME2 Project Team
5
+ This program is licenced under the same licence as Ruby-GNOME2.
6
+
7
+ $Id: keyfile.rb,v 1.2 2006/12/23 17:43:03 mutoh Exp $
8
+ =end
9
+
10
+ require 'glib2'
11
+
12
+ $KCODE = "U"
13
+
14
+ #
15
+ # Create a GLib::KeyFile
16
+ #
17
+ kf = GLib::KeyFile.new
18
+ kf.set_value("Group 1", "value", "Hello World")
19
+ kf.set_comment("Group 1", nil, "This file is generated by keyfile.rb")
20
+ kf.set_string("Group 1", "string", "Hello World\nRuby-GNOME2")
21
+ kf.set_locale_string("Group 1", "locale_string", "ja", "こんにちわ世界")
22
+ kf.set_locale_string("Group 1", "locale_string", "en", "Hello World")
23
+ kf.set_boolean("Group 1", "boolean", true)
24
+ kf.set_integer("Group 1", "integer", 1)
25
+ kf.set_double("Group 1", "double", 1.0)
26
+ kf.set_string_list("Group 2", "string_list", ["foo", "bar"])
27
+ kf.set_locale_string_list("Group 2", "locale_string_list", "ja", ["こんにちわ", "世界"])
28
+ kf.set_locale_string_list("Group 2", "locale_string_list", "en", ["Hellow", "World"])
29
+ kf.set_boolean_list("Group 2", "boolean_list", [true, false])
30
+ kf.set_integer_list("Group 2", "integer_list", [1, 2, 3])
31
+ kf.set_double_list("Group 2", "double_list", [1.2, 1.3, 1.45])
32
+ kf.set_comment("Group 2", "string_list", "comment of string_list")
33
+
34
+ # Save as "keyfile.ini"
35
+ File.open("keyfile.ini", "w") do |out|
36
+ out.write kf.to_data
37
+ end
38
+
39
+ #kf.remove_comment("Group 2", "string_list")
40
+ #kf.remove_key("Group 2", "string_list")
41
+ #kf.remove_group("Group 2")
42
+
43
+ #
44
+ # Load from "keyfile.ini"
45
+ #
46
+ kf2 = GLib::KeyFile.new
47
+ kf2.load_from_file("keyfile.ini")
48
+
49
+ puts "Group 1: value = #{kf2.get_value("Group 1", "value")}"
50
+ puts "Group 1: string = #{kf2.get_string("Group 1", "string")}"
51
+ puts "Group 1: locale_string[ja] = #{kf2.get_locale_string("Group 1", "locale_string", "ja")}"
52
+ puts "Group 1: locale_string[en] = #{kf2.get_locale_string("Group 1", "locale_string", "en")}"
53
+ puts "Group 1: boolean = #{kf2.get_boolean("Group 1", "boolean")}"
54
+ puts "Group 1: integer = #{kf2.get_integer("Group 1", "integer")}"
55
+ puts "Group 1: double = #{kf2.get_double("Group 1", "double")}"
56
+ puts "Group 2: string_list = #{kf2.get_string_list("Group 2", "string_list").inspect}"
57
+ puts "Group 2: locale_string_list[ja] = #{kf2.get_locale_string_list("Group 2", "locale_string_list", "ja").inspect}"
58
+ puts "Group 2: locale_string_list[en] = #{kf2.get_locale_string_list("Group 2", "locale_string_list", "en").inspect}"
59
+ puts "Group 2: boolean_list = #{kf2.get_boolean_list("Group 2", "boolean_list").inspect}"
60
+ puts "Group 2: integer_list = #{kf2.get_integer_list("Group 2", "integer_list").inspect}"
61
+ puts "Group 2: double_list = #{kf2.get_double_list("Group 2", "double_list").inspect}"
62
+ puts "Group 2: comment = #{kf2.get_comment("Group 2", "string_list")}"
data/sample/shell.rb ADDED
@@ -0,0 +1,36 @@
1
+ =begin
2
+ shell.rb - Sample for GLib::Shell
3
+
4
+ Copyright (C) 2005 Ruby-GNOME2 Project Team
5
+ This program is licenced under the same licence as Ruby-GNOME2.
6
+
7
+ $Id: shell.rb,v 1.1 2005/10/14 19:10:07 mutoh Exp $
8
+ =end
9
+
10
+ require 'glib2'
11
+
12
+ cmd = "ls *.c *.o"
13
+
14
+ p GLib::Shell.parse(cmd)
15
+
16
+ puts quote = GLib::Shell.quote(cmd)
17
+ puts GLib::Shell.unquote(quote)
18
+
19
+ puts "----"
20
+
21
+ #Samples to catch an Exception
22
+ begin
23
+ GLib::Shell.parse('foooo "bar')
24
+ rescue GLib::ShellError => e
25
+ puts "domain = #{e.domain}"
26
+ puts "code = #{e.code}"
27
+ puts "message = #{e.message}"
28
+ end
29
+
30
+ begin
31
+ GLib::Shell.unquote('foooo "bar')
32
+ rescue GLib::ShellError => e
33
+ puts "domain = #{e.domain}"
34
+ puts "code = #{e.code}"
35
+ puts "message = #{e.message}"
36
+ end