summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2014-06-14 13:29:05 -0700
committerLamont Granquist <lamont@scriptkiddie.org>2014-06-14 13:29:05 -0700
commit31c6704a67038fd85b1e70e5f72f1b82626f9f2a (patch)
tree6c6de90489c45b1c6e9f015c387dd6c3af888681
parentc10a3f55c025e21303e642e64bc3654607554c02 (diff)
downloadffi-yajl-31c6704a67038fd85b1e70e5f72f1b82626f9f2a.tar.gz
implementing allow_comments in ffi
-rw-r--r--lib/ffi_yajl/ffi.rb2
-rw-r--r--lib/ffi_yajl/ffi/parser.rb8
-rw-r--r--lib/ffi_yajl/parser.rb2
-rw-r--r--spec/ffi_yajl/parser_spec.rb4
4 files changed, 11 insertions, 5 deletions
diff --git a/lib/ffi_yajl/ffi.rb b/lib/ffi_yajl/ffi.rb
index 8a84345..1510bcc 100644
--- a/lib/ffi_yajl/ffi.rb
+++ b/lib/ffi_yajl/ffi.rb
@@ -87,7 +87,7 @@ module FFI_Yajl
attach_function :yajl_free_error, [:yajl_handle, :ustring], :void
#
- attach_function :yajl_config, [:yajl_handle, :yajl_option, :int], :int
+ attach_function :yajl_config, [:yajl_handle, :yajl_option, :varargs], :int
attach_function :yajl_gen_config, [:yajl_gen, :yajl_gen_option, :varargs], :int
diff --git a/lib/ffi_yajl/ffi/parser.rb b/lib/ffi_yajl/ffi/parser.rb
index e557905..cc454f0 100644
--- a/lib/ffi_yajl/ffi/parser.rb
+++ b/lib/ffi_yajl/ffi/parser.rb
@@ -94,7 +94,7 @@ module FFI_Yajl
end
- def do_yajl_parse(str, opts = {})
+ def do_yajl_parse(str, yajl_opts = {})
setup_callbacks
callback_ptr = ::FFI::MemoryPointer.new(::FFI_Yajl::YajlCallbacks)
callbacks = ::FFI_Yajl::YajlCallbacks.new(callback_ptr)
@@ -110,6 +110,12 @@ module FFI_Yajl
callbacks[:yajl_start_array] = @start_array_callback
callbacks[:yajl_end_array] = @end_array_callback
yajl_handle = ::FFI_Yajl.yajl_alloc(callback_ptr, nil, nil)
+
+ # configure the yajl parser
+ if yajl_opts[:yajl_allow_comments]
+ ::FFI_Yajl.yajl_config(yajl_handle, :yajl_allow_comments, :int, 1)
+ end
+
if ( stat = ::FFI_Yajl.yajl_parse(yajl_handle, str, str.bytesize) != :yajl_status_ok )
# FIXME: dup the error and call yajl_free_error?
error = ::FFI_Yajl.yajl_get_error(yajl_handle, 1, str, str.bytesize)
diff --git a/lib/ffi_yajl/parser.rb b/lib/ffi_yajl/parser.rb
index ce6ee89..f1b9625 100644
--- a/lib/ffi_yajl/parser.rb
+++ b/lib/ffi_yajl/parser.rb
@@ -34,6 +34,8 @@ module FFI_Yajl
# initialization that we can do in pure ruby
yajl_opts = {}
+ yajl_opts[:yajl_allow_comments] = @opts[:allow_comments]
+
# XXX: bug-compat with ruby-yajl
return nil if str == ""
diff --git a/spec/ffi_yajl/parser_spec.rb b/spec/ffi_yajl/parser_spec.rb
index 7172160..0ce848f 100644
--- a/spec/ffi_yajl/parser_spec.rb
+++ b/spec/ffi_yajl/parser_spec.rb
@@ -22,7 +22,6 @@ describe "FFI_Yajl::Parser" do
let(:options) { { :allow_comments => false } }
it "should not parse" do
- skip "implement :allow_comments"
expect{parser}.to raise_error(FFI_Yajl::ParseError)
end
end
@@ -31,8 +30,7 @@ describe "FFI_Yajl::Parser" do
let(:options) { { :allow_comments => true } }
it "should parse" do
- skip "implement :allow_comments"
- expect(parser).to eq({}) # FIXME
+ expect(parser).to eq({"key"=>"value"})
end
end
end