I suspect that using the REST API directly is the answer, although if I
understand the Ruby client code, it's using direct socket connections,
which would be more efficient.

Not a critical issue at the moment but something I need to understand more
fully before too long.

Cheers,

E.
----
Eliot Kimber, Owner
Contrext, LLC
http://contrext.com




On 2/19/16, 9:31 AM, "Christian Grün" <christian.gr...@gmail.com> wrote:

>> Hmm. Is there a way to send other encodings to the server via the remote
>> API?
>
>A difficult one for me to answer, because I have never worked with
>Ruby before… Maybe there are some other users on the list who can
>reply on this?
>
>> I'm on my way to Japan for a workshop where we'll be using my system and
>> Japanese-language documents are more efficiently stored in UTF-16 so my
>> expectation is that users will either already have documents in that
>> encoding or will create new ones. Of course, for the workshop we can
>>limit
>> ourselves to UTF-8 but I'm trying to make the system as foolproof as
>> possible.
>
>Sounds interesting, and absolutely reasonable. Maybe our HTTP services
>(e.g. the default REST API) could be an alternative?
>
>Christian
>
>
>> I think the issue with my script was that I was putting quotes around
>>the
>> XML strings, which causes the server to treat it as a file path rather
>> than as XML to load. Once I fixed that then I was able to delete and add
>> files from my Ruby git hooks.
>>
>> I'll have to get a better understanding of how Ruby handles arbitrary
>>byte
>> sequences (this is where there's a little too much magic for my taste)
>>but
>> I would expect that if I provide the remote API with a byte sequence
>>that
>> starts with 0xFFFE, 0xFEFF, 0x003C003F, or 0x3C003F00 that it would
>>treat
>> it as UTF-16.
>>
>> Cheers,
>>
>> E.
>> ----
>> Eliot Kimber, Owner
>> Contrext, LLC
>> http://contrext.com
>>
>>
>>
>>
>> On 2/18/16, 4:58 PM, "Christian Grün" <christian.gr...@gmail.com> wrote:
>>
>>>Hi Eliot,
>>>
>>>For most client bindings, files must indeed be sent in UTF-8, so I
>>>guess it’s also the case for the Ruby binding. If the sent bytes are
>>>correct UTF-8, everything should work be fine.
>>>
>>>Christian
>>>
>>>
>>>On Thu, Feb 18, 2016 at 6:08 PM, Eliot Kimber <ekim...@contrext.com>
>>>wrote:
>>>> This test document as a non-ascii character '〺' (\u303A), which I
>>>>added
>>>>to
>>>> test handling of multi-byte characters.
>>>>
>>>> Ruby and the BaseX client seem to be handling the UTF-8 correctly but
>>>> UTF-16 didn't. I'm guessing it's Ruby's fault because it's treating
>>>>the
>>>> bytes as a string and of course that's not going to work in a naive
>>>>way.
>>>>
>>>> Cheers,
>>>>
>>>> E.
>>>> ----
>>>> Eliot Kimber, Owner
>>>> Contrext, LLC
>>>> http://contrext.com
>>>>
>>>>
>>>>
>>>>
>>>> On 2/18/16, 11:04 AM, "Eliot Kimber"
>>>> <basex-talk-boun...@mailman.uni-konstanz.de on behalf of
>>>> ekim...@contrext.com> wrote:
>>>>
>>>>>I turned my UTF-8 file into a UTF-16 file and trying to commit it to
>>>>>BaseX
>>>>>via the Ruby client it did not work:
>>>>>
>>>>>BaseXClient.rb:50:in `execute': Resource "/opt/basex/?" not found.
>>>>>(RuntimeError)
>>>>>
>>>>>Where "?" is some kind of "unrecognized character" indicator
>>>>>
>>>>>Cheers,
>>>>>
>>>>>E.
>>>>>
>>>>>
>>>>>----
>>>>>Eliot Kimber, Owner
>>>>>Contrext, LLC
>>>>>http://contrext.com
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>On 2/18/16, 10:26 AM, "Eliot Kimber"
>>>>><basex-talk-boun...@mailman.uni-konstanz.de on behalf of
>>>>>ekim...@contrext.com> wrote:
>>>>>
>>>>>>I'm implementing server-side git hooks for use in GitLab under Docker
>>>>>>where Java is not available (at least that I can see). The hooks load
>>>>>>or
>>>>>>delete files from databases in BaseX.
>>>>>>
>>>>>>I'm trying to implement the hooks in Ruby (which is much more
>>>>>>pleasant
>>>>>>than bash scripting in any case) and I'm using the BaseXClient.rb
>>>>>>from
>>>>>>https://github.com/BaseXdb/basex/tree/master/basex-api/src/main/ruby
>>>>>>
>>>>>>I need to create or replace files by sending the bytes--I'd rather
>>>>>>not
>>>>>>read the input file into a Ruby string and send that since I don't
>>>>>>trust
>>>>>>Ruby to not hose up the data (even when it's UTF-8 I still don't
>>>>>>trust
>>>>>>it,
>>>>>>but I only started using Ruby yesterday so maybe my mistrust is
>>>>>>misplaced?).
>>>>>>
>>>>>>Using the AddExample.rb as guide, I'm doing this:
>>>>>>
>>>>>>(Earlier code to open or create database, which works).
>>>>>>
>>>>>>file = File.new("../../" + path, "rb")
>>>>>>        bytes = file.read
>>>>>>        file.close
>>>>>>        puts "file=/#{bytes}/"
>>>>>>        @basex.add(path, "#{bytes}")
>>>>>>
>>>>>>I also tried:
>>>>>>
>>>>>>@basex.add(path, bytes)
>>>>>>
>>>>>>
>>>>>>
>>>>>>And I get this result (I added some debugging messages to sendCmd()):
>>>>>>
>>>>>>ensureDatabase(): Checking database "_dfst^metadata^temp^master"...
>>>>>>BaseXResult: Database '_dfst^metadata^temp^master' was opened in 1.53
>>>>>>ms.
>>>>>>Added or modified file: "test-newname.xml"
>>>>>>file=/<test>This is a test 20</test>
>>>>>>/
>>>>>>
>>>>>>*** sendCmd():
>>>>>>cmd=
>>>>>>arg=test-newname.xml
>>>>>>input=<test>This is a test 20</test>
>>>>>>BaseXClient.rb:110:in `sendCmd': "test-newname.xml.xml" (Line 1):
>>>>>>Premature end of file. (RuntimeError)
>>>>>>
>>>>>>      from commit-hooks/git/server-side/BaseXClient.rb:64:in `add'
>>>>>>      from commit-hooks/git/server-side/post-receive:80:in `block in
>>>>>>update'
>>>>>>      from commit-hooks/git/server-side/post-receive:74:in `each'
>>>>>>      from commit-hooks/git/server-side/post-receive:74:in `update'
>>>>>>      from commit-hooks/git/server-side/post-receive:111:in `block in
>>>>>><main>'
>>>>>>      from commit-hooks/git/server-side/post-receive:103:in `each'
>>>>>>      from commit-hooks/git/server-side/post-receive:103:in `<main>'
>>>>>>Eliots-MBP:hooks ekimber$
>>>>>>
>>>>>>A couple of things here:
>>>>>>
>>>>>>
>>>>>>Where is the extra ".xml" in the target filename coming from?
>>>>>>
>>>>>>What is causing the premature end of file? It feels like it's trying
>>>>>>interpret the second argument as a filename rather than the data to
>>>>>>be
>>>>>>loaded.
>>>>>>
>>>>>>If I use basex.execute("add to #{path} #{bytes}") it works but of
>>>>>>course
>>>>>>I
>>>>>>get duplicate files if I run the command twice.
>>>>>>
>>>>>>If I try:
>>>>>>
>>>>>>@basex.execute("replace #{path} #{bytes}")
>>>>>>
>>>>>>Then I get the same failure.
>>>>>>
>>>>>>
>>>>>>So something is not right.
>>>>>>
>>>>>>My Docker container is running 8.4.1 beta.
>>>>>>
>>>>>>What am I missing?
>>>>>>
>>>>>>Thanks,
>>>>>>
>>>>>>Eliot
>>>>>>----
>>>>>>Eliot Kimber, Owner
>>>>>>Contrext, LLC
>>>>>>http://contrext.com
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>
>>
>


Reply via email to