soup-ruby 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.
- checksums.yaml +7 -0
- data/README.md +34 -0
- data/Rakefile +54 -0
- data/ext/soup/soup.cr +133 -0
- data/lib/soup/version.rb +6 -0
- metadata +66 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3b6f79d07024077398f62ac29da32e2d358ae063
|
4
|
+
data.tar.gz: 94da43e7166aeda83d6f10f9bd3bddc01347f1bd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d0ee1db8550bf30b6dba97cfe8ef168415ef5869f8f74665f1e23fb7f23985b54dde1b3dc675660f85f0ef3b502ea228a8e8382757b745fdcb16272acb06f015
|
7
|
+
data.tar.gz: 23d36e2112e3814e676b6a5604418f402cf3fa9ae8350e52ad689a01ce487ab72d4f2309222488d6145eae84550dee37959b949c184184bf03759778fa654611
|
data/README.md
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
LibSoup bindings
|
2
|
+
================
|
3
|
+
|
4
|
+
Requires
|
5
|
+
--------
|
6
|
+
* rubber-generate >= 0.0.15
|
7
|
+
* ruby-gnome2 (including development files)
|
8
|
+
* libsoup-2.4 (including development files)
|
9
|
+
|
10
|
+
Description
|
11
|
+
-----------
|
12
|
+
|
13
|
+
Basic bindings for using the libsoup library from Ruby.
|
14
|
+
|
15
|
+
e.g
|
16
|
+
|
17
|
+
require 'gtk2'
|
18
|
+
require 'soup'
|
19
|
+
require 'digest/md5'
|
20
|
+
|
21
|
+
session = Soup::SessionAsync.new
|
22
|
+
|
23
|
+
message = Soup::Message.new("GET", "http://www.google.com/")
|
24
|
+
|
25
|
+
session.queue(message) do |*args|
|
26
|
+
puts message.response_body
|
27
|
+
|
28
|
+
Gtk.main_quit
|
29
|
+
|
30
|
+
false
|
31
|
+
end
|
32
|
+
|
33
|
+
Gtk.main
|
34
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
gem 'rake-compiler'
|
3
|
+
require 'rake/extensiontask'
|
4
|
+
BASE_DIR = Dir.pwd
|
5
|
+
require 'rubygems/package_task'
|
6
|
+
require 'rake/testtask'
|
7
|
+
|
8
|
+
$: << './lib'
|
9
|
+
|
10
|
+
require 'soup/version'
|
11
|
+
exts = []
|
12
|
+
|
13
|
+
namespace :prepare do
|
14
|
+
FileList["ext/*/*.cr"].each do |cr|
|
15
|
+
dir = File.dirname(cr)
|
16
|
+
name = File.basename(dir)
|
17
|
+
desc "Generate source for #{name}"
|
18
|
+
task(name.intern) do
|
19
|
+
sh 'rubber-generate', '--build-dir', dir, cr
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
spec = Gem::Specification.new do |s|
|
25
|
+
s.name = "soup-ruby"
|
26
|
+
s.author = "Geoff Youngs"
|
27
|
+
s.email = "git@intersect-uk.co.uk"
|
28
|
+
s.version = Soup::BINDINGS_VERSION
|
29
|
+
s.homepage = "http://github.com/geoffyoungs/soup-ruby"
|
30
|
+
s.summary = "Soup bindings using rubber-generate"
|
31
|
+
s.add_dependency("rubber-generate", ">= 0.0.17")
|
32
|
+
s.platform = Gem::Platform::RUBY
|
33
|
+
s.extensions = FileList["ext/*/extconf.rb"]
|
34
|
+
s.files = FileList['ext/*/*.{c,h,cr,rd}'] + ['Rakefile', 'README.md'] + FileList['lib/**/*.rb']
|
35
|
+
s.description = <<-EOF
|
36
|
+
Libsoup bindings for ruby. Partial coverage sufficient to allow HTTP requests to be handled without blocking the mainloop.
|
37
|
+
|
38
|
+
e.g
|
39
|
+
require 'gtk2'
|
40
|
+
require 'soup'
|
41
|
+
|
42
|
+
EOF
|
43
|
+
end
|
44
|
+
Gem::PackageTask.new(spec) do |pkg|
|
45
|
+
pkg.need_tar = true
|
46
|
+
end
|
47
|
+
Rake::ExtensionTask.new("soup", spec)
|
48
|
+
|
49
|
+
Rake::TestTask.new do |t|
|
50
|
+
t.test_files = FileList['test/*_test.rb']
|
51
|
+
end
|
52
|
+
|
53
|
+
task :default, :compile
|
54
|
+
|
data/ext/soup/soup.cr
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
%pkg-config gtk+-2.0
|
2
|
+
%pkg-config libsoup-2.4
|
3
|
+
%name soup
|
4
|
+
|
5
|
+
%{
|
6
|
+
#include <intern.h>
|
7
|
+
|
8
|
+
#define INIT(obj, gobj) __my_init(obj, G_OBJECT(gobj))
|
9
|
+
|
10
|
+
static inline void __my_init(VALUE obj, GObject *gobj) {
|
11
|
+
g_object_ref(gobj);
|
12
|
+
g_object_ref_sink(gobj);
|
13
|
+
G_INITIALIZE(obj, gobj);
|
14
|
+
}
|
15
|
+
|
16
|
+
static inline VALUE strOrNil(const char *str) {
|
17
|
+
if (str) {
|
18
|
+
return rb_str_new2(str);
|
19
|
+
} else {
|
20
|
+
return Qnil;
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
static void queue_callback(SoupSession *session, SoupMessage *message, gpointer user_data) {
|
25
|
+
VALUE block = (VALUE)user_data;
|
26
|
+
volatile VALUE ary = rb_ary_new3(2, GOBJ2RVAL(session), GOBJ2RVAL(message));
|
27
|
+
if (RTEST(rb_proc_call(block, ary))) {
|
28
|
+
// Truthy - requeue
|
29
|
+
soup_session_requeue_message(session, message);
|
30
|
+
} else {
|
31
|
+
RUBYFUNC_DEL(block);
|
32
|
+
}
|
33
|
+
}
|
34
|
+
|
35
|
+
static void each_header(const char *name, const char *value, gpointer user_data) {
|
36
|
+
VALUE block = (VALUE)user_data;
|
37
|
+
volatile VALUE ary = rb_ary_new3(2, rb_str_new2(name), rb_str_new2(value));
|
38
|
+
rb_proc_call(block, ary);
|
39
|
+
}
|
40
|
+
|
41
|
+
%}
|
42
|
+
|
43
|
+
%include libsoup/soup.h
|
44
|
+
|
45
|
+
%map strOrNil > VALUE : strOrNil(%%)
|
46
|
+
|
47
|
+
module Soup
|
48
|
+
gcpool RubyFunc
|
49
|
+
|
50
|
+
gobject Session < SOUP_TYPE_SESSION
|
51
|
+
@type SoupSession
|
52
|
+
def queue(SoupMessage *message)
|
53
|
+
if (rb_block_given_p()) {
|
54
|
+
VALUE block = rb_block_proc();
|
55
|
+
RUBYFUNC_ADD(block);
|
56
|
+
soup_session_queue_message(_self, message, queue_callback, (void*)block);
|
57
|
+
} else {
|
58
|
+
soup_session_queue_message(_self, message, NULL, NULL);
|
59
|
+
}
|
60
|
+
end
|
61
|
+
|
62
|
+
def guint:send(SoupMessage *msg)
|
63
|
+
return soup_session_send_message(_self, msg);
|
64
|
+
end
|
65
|
+
|
66
|
+
def pause(SoupMessage *msg)
|
67
|
+
soup_session_pause_message(_self, msg);
|
68
|
+
end
|
69
|
+
|
70
|
+
def unpause(SoupMessage *msg)
|
71
|
+
soup_session_unpause_message(_self, msg);
|
72
|
+
end
|
73
|
+
|
74
|
+
def abort
|
75
|
+
soup_session_abort(_self);
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
gobject SessionAsync < SOUP_TYPE_SESSION_ASYNC
|
80
|
+
@type SoupAsyncSession
|
81
|
+
def initialize()
|
82
|
+
INIT(self, soup_session_async_new());
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
gboxed URI < SOUP_TYPE_URI
|
87
|
+
@type SoupURI
|
88
|
+
def initialize(char * uri_string)
|
89
|
+
INIT(self, soup_uri_new(uri_string));
|
90
|
+
end
|
91
|
+
def char*:to_s
|
92
|
+
return soup_uri_to_string(_self, FALSE);
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
gobject Message < SOUP_TYPE_MESSAGE
|
97
|
+
@type SoupMessage
|
98
|
+
def initialize(char * method, char * uri)
|
99
|
+
INIT(self, soup_message_new(method, uri));
|
100
|
+
end
|
101
|
+
|
102
|
+
def set_request_header(char *name, char *value)
|
103
|
+
soup_message_headers_replace(_self->request_headers, name, value);
|
104
|
+
end
|
105
|
+
|
106
|
+
def unset_request_header(char *name)
|
107
|
+
soup_message_headers_remove(_self->request_headers, name);
|
108
|
+
end
|
109
|
+
|
110
|
+
def set_request_body(char *type, T_STRING body)
|
111
|
+
soup_message_set_request(_self, type, SOUP_MEMORY_COPY, RSTRING_PTR(body), RSTRING_LEN(body));
|
112
|
+
end
|
113
|
+
|
114
|
+
def char *:get_response_header(char *name)
|
115
|
+
return soup_message_headers_get_one(_self->response_headers, name);
|
116
|
+
end
|
117
|
+
|
118
|
+
def each_response_header
|
119
|
+
VALUE block = rb_block_proc();
|
120
|
+
rb_need_block();
|
121
|
+
soup_message_headers_foreach(_self->response_headers, each_header, (gpointer)block);
|
122
|
+
end
|
123
|
+
|
124
|
+
def response_body
|
125
|
+
SoupBuffer *buffer = soup_message_body_flatten(_self->response_body);
|
126
|
+
volatile VALUE str = rb_str_new(buffer->data, buffer->length);
|
127
|
+
|
128
|
+
soup_buffer_free(buffer);
|
129
|
+
return str;
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
data/lib/soup/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: soup-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Geoff Youngs
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-03-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rubber-generate
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.0.17
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.0.17
|
27
|
+
description: |+
|
28
|
+
Libsoup bindings for ruby. Partial coverage sufficient to allow HTTP requests to be handled without blocking the mainloop.
|
29
|
+
|
30
|
+
e.g
|
31
|
+
require 'gtk2'
|
32
|
+
require 'soup'
|
33
|
+
|
34
|
+
email: git@intersect-uk.co.uk
|
35
|
+
executables: []
|
36
|
+
extensions: []
|
37
|
+
extra_rdoc_files: []
|
38
|
+
files:
|
39
|
+
- ext/soup/soup.cr
|
40
|
+
- Rakefile
|
41
|
+
- README.md
|
42
|
+
- lib/soup/version.rb
|
43
|
+
homepage: http://github.com/geoffyoungs/soup-ruby
|
44
|
+
licenses: []
|
45
|
+
metadata: {}
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - '>='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
requirements: []
|
61
|
+
rubyforge_project:
|
62
|
+
rubygems_version: 2.0.0.rc.2
|
63
|
+
signing_key:
|
64
|
+
specification_version: 4
|
65
|
+
summary: Soup bindings using rubber-generate
|
66
|
+
test_files: []
|