idzebra 0.1.1 → 0.2.0
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/bin/zebraidx_record +7 -5
- data/lib/idzebra.rb +65 -2
- metadata +35 -3
    
        data/bin/zebraidx_record
    CHANGED
    
    | @@ -45,11 +45,13 @@ data = case file | |
| 45 45 | 
             
              end
         | 
| 46 46 |  | 
| 47 47 | 
             
            IdZebra::API(global_opts[:config]) do |repo|
         | 
| 48 | 
            -
               | 
| 49 | 
            -
                 | 
| 50 | 
            -
                   | 
| 51 | 
            -
             | 
| 52 | 
            -
                   | 
| 48 | 
            +
              repo.transaction do
         | 
| 49 | 
            +
                case cmd
         | 
| 50 | 
            +
                  when "add"
         | 
| 51 | 
            +
                    repo.add_record(data)
         | 
| 52 | 
            +
                  when "remove"
         | 
| 53 | 
            +
                    repo.delete_record(data)
         | 
| 54 | 
            +
                end
         | 
| 53 55 | 
             
              end
         | 
| 54 56 | 
             
              repo.commit if global_opts[:commit]
         | 
| 55 57 | 
             
            end
         | 
    
        data/lib/idzebra.rb
    CHANGED
    
    | @@ -20,15 +20,21 @@ module IdZebra | |
| 20 20 |  | 
| 21 21 | 
             
                typedef :pointer, :zebra_handle
         | 
| 22 22 | 
             
                typedef :pointer, :zebra_service
         | 
| 23 | 
            +
                typedef :pointer, :res
         | 
| 23 24 | 
             
                typedef :short,   :zebra_res
         | 
| 24 25 |  | 
| 25 26 | 
             
                # Yaz functions to set logging level
         | 
| 26 27 | 
             
                attach_function :yaz_log_init_level, [:int], :void
         | 
| 27 28 | 
             
                attach_function :yaz_log_mask_str, [:string], :int
         | 
| 28 29 |  | 
| 30 | 
            +
                # Res function for resource handling
         | 
| 31 | 
            +
                attach_function :res_open, [:res, :res], :res
         | 
| 32 | 
            +
             | 
| 29 33 | 
             
                attach_function :zebra_start, [:string], :zebra_service
         | 
| 30 34 | 
             
                attach_function :zebra_stop, [:zebra_service], :zebra_res
         | 
| 31 | 
            -
                attach_function :zebra_open, [:zebra_service, : | 
| 35 | 
            +
                attach_function :zebra_open, [:zebra_service, :res], :zebra_handle
         | 
| 36 | 
            +
                attach_function :zebra_begin_trans, [:zebra_handle, :short], :zebra_res
         | 
| 37 | 
            +
                attach_function :zebra_end_trans, [:zebra_handle], :zebra_res
         | 
| 32 38 | 
             
                attach_function :zebra_close, [:zebra_handle], :zebra_res
         | 
| 33 39 |  | 
| 34 40 | 
             
                attach_function :zebra_init,    [:zebra_handle], :zebra_res
         | 
| @@ -36,6 +42,18 @@ module IdZebra | |
| 36 42 | 
             
                attach_function :zebra_commit,  [:zebra_handle], :zebra_res
         | 
| 37 43 | 
             
                attach_function :zebra_compact, [:zebra_handle], :zebra_res
         | 
| 38 44 |  | 
| 45 | 
            +
                attach_function :zebra_get_resource, [
         | 
| 46 | 
            +
                  :zebra_handle,
         | 
| 47 | 
            +
                  :string,        # name
         | 
| 48 | 
            +
                  :string],       # default value
         | 
| 49 | 
            +
                  :string
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                attach_function :zebra_set_resource, [
         | 
| 52 | 
            +
                  :zebra_handle,
         | 
| 53 | 
            +
                  :string,        # name
         | 
| 54 | 
            +
                  :string],       # value
         | 
| 55 | 
            +
                  :string
         | 
| 56 | 
            +
             | 
| 39 57 | 
             
                attach_function :zebra_add_record, [
         | 
| 40 58 | 
             
                  :zebra_handle,
         | 
| 41 59 | 
             
                  :string,        # buf
         | 
| @@ -55,6 +73,7 @@ module IdZebra | |
| 55 73 |  | 
| 56 74 | 
             
              class << self
         | 
| 57 75 |  | 
| 76 | 
            +
                # Create a new {Repository} connection.
         | 
| 58 77 | 
             
                def API(config_file, &block)
         | 
| 59 78 | 
             
                  extend Native
         | 
| 60 79 | 
             
                  log_level = :error
         | 
| @@ -67,6 +86,7 @@ module IdZebra | |
| 67 86 | 
             
                  zebra_stop zs
         | 
| 68 87 | 
             
                end
         | 
| 69 88 |  | 
| 89 | 
            +
                # Get the current logging level
         | 
| 70 90 | 
             
                def log_level
         | 
| 71 91 | 
             
                  extend Native
         | 
| 72 92 | 
             
                  mask = yaz_log_mask_str('')
         | 
| @@ -84,6 +104,7 @@ module IdZebra | |
| 84 104 | 
             
                  end
         | 
| 85 105 | 
             
                end
         | 
| 86 106 |  | 
| 107 | 
            +
                # Set the logging level
         | 
| 87 108 | 
             
                def log_level=(log_level)
         | 
| 88 109 | 
             
                  extend Native
         | 
| 89 110 | 
             
                  case log_level
         | 
| @@ -96,29 +117,66 @@ module IdZebra | |
| 96 117 | 
             
                  when :info, :default
         | 
| 97 118 | 
             
                    yaz_log_init_level(yaz_log_mask_str('log'))
         | 
| 98 119 | 
             
                  when :debug, :all
         | 
| 99 | 
            -
                    yaz_log_init_level(yaz_log_mask_str('all'))
         | 
| 120 | 
            +
                    yaz_log_init_level(yaz_log_mask_str('all,zebraapi,flock'))
         | 
| 100 121 | 
             
                  end
         | 
| 101 122 | 
             
                end
         | 
| 102 123 |  | 
| 103 124 | 
             
              end
         | 
| 104 125 |  | 
| 126 | 
            +
              # Raised when transactions are unable to be started.
         | 
| 127 | 
            +
              class TransactionError < StandardError; end
         | 
| 128 | 
            +
             | 
| 129 | 
            +
              # Class representing a Zebra handle to a repository.
         | 
| 130 | 
            +
              #
         | 
| 131 | 
            +
              # Operations are named to directly correspond to their counterparts in api.h
         | 
| 132 | 
            +
              # and zebraidx, and so are not particularly Ruby-like.
         | 
| 133 | 
            +
              #
         | 
| 134 | 
            +
              # @see http://www.indexdata.com/zebra/dox/html/api_8h.html Zebra API
         | 
| 135 | 
            +
              # @see http://www.indexdata.com/zebra/doc/zebraidx.html zebraidx
         | 
| 105 136 | 
             
              class Repository < Struct.new(:zebra_handle)
         | 
| 106 137 | 
             
                include Native
         | 
| 107 138 |  | 
| 139 | 
            +
                # Create a new repository (wiping any existing data).
         | 
| 108 140 | 
             
                def init
         | 
| 109 141 | 
             
                  zebra_init(zebra_handle)
         | 
| 110 142 | 
             
                end
         | 
| 111 143 |  | 
| 144 | 
            +
                # Attempt to save some space by compacting existing data files.
         | 
| 112 145 | 
             
                def compact
         | 
| 113 146 | 
             
                  zebra_compact(zebra_handle)
         | 
| 114 147 | 
             
                end
         | 
| 115 148 |  | 
| 149 | 
            +
                # Rollback changes in shadow files and forget changes.
         | 
| 116 150 | 
             
                def clean
         | 
| 117 151 | 
             
                  zebra_clean(zebra_handle)
         | 
| 118 152 | 
             
                end
         | 
| 119 153 |  | 
| 154 | 
            +
                # Commit the shadow files. Not designed to be run inside a transaction, but
         | 
| 155 | 
            +
                # instead should be run after it.
         | 
| 120 156 | 
             
                def commit
         | 
| 157 | 
            +
                  transaction
         | 
| 121 158 | 
             
                  zebra_commit(zebra_handle)
         | 
| 159 | 
            +
                rescue TransactionError
         | 
| 160 | 
            +
                  raise TransactionError, "Commit cannot occur inside a transaction."
         | 
| 161 | 
            +
                end
         | 
| 162 | 
            +
             | 
| 163 | 
            +
                # Encapsulates the operation with `zebra_begin_trans` and `zebra_end_trans`
         | 
| 164 | 
            +
                def transaction(read_only = false)
         | 
| 165 | 
            +
                  zebra_res = zebra_begin_trans(zebra_handle, read_only ? 0 : 1)
         | 
| 166 | 
            +
                  if zebra_res != 0
         | 
| 167 | 
            +
                    raise TransactionError,
         | 
| 168 | 
            +
                        "Unable to start transaction - probably a locking issue."
         | 
| 169 | 
            +
                  end
         | 
| 170 | 
            +
                  yield if block_given?
         | 
| 171 | 
            +
                  zebra_end_trans(zebra_handle)
         | 
| 172 | 
            +
                end
         | 
| 173 | 
            +
             | 
| 174 | 
            +
                def get_resource(name, default = nil)
         | 
| 175 | 
            +
                  zebra_get_resource(zebra_handle, name, default)
         | 
| 176 | 
            +
                end
         | 
| 177 | 
            +
             | 
| 178 | 
            +
                def set_resource(name, value)
         | 
| 179 | 
            +
                  zebra_set_resource(zebra_handle, name, value)
         | 
| 122 180 | 
             
                end
         | 
| 123 181 |  | 
| 124 182 | 
             
                def add_record(record_str)
         | 
| @@ -135,6 +193,11 @@ module IdZebra | |
| 135 193 | 
             
                    :action_delete, nil, 0, nil, nil, record_str, 0)
         | 
| 136 194 | 
             
                end
         | 
| 137 195 |  | 
| 196 | 
            +
                alias :<< :update_record
         | 
| 197 | 
            +
                alias :[] :get_resource
         | 
| 198 | 
            +
                alias :[]=  :set_resource
         | 
| 199 | 
            +
                alias :rollback :clean
         | 
| 200 | 
            +
             | 
| 138 201 | 
             
              end
         | 
| 139 202 |  | 
| 140 203 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: idzebra
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.2.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 12 | 
            +
            date: 2013-01-14 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: ffi
         | 
| @@ -59,6 +59,22 @@ dependencies: | |
| 59 59 | 
             
                - - ! '>='
         | 
| 60 60 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 61 | 
             
                    version: '0'
         | 
| 62 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 63 | 
            +
              name: redcarpet
         | 
| 64 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                none: false
         | 
| 66 | 
            +
                requirements:
         | 
| 67 | 
            +
                - - ! '>='
         | 
| 68 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 69 | 
            +
                    version: '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: '0'
         | 
| 62 78 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 63 79 | 
             
              name: rspec
         | 
| 64 80 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -75,6 +91,22 @@ dependencies: | |
| 75 91 | 
             
                - - ! '>='
         | 
| 76 92 | 
             
                  - !ruby/object:Gem::Version
         | 
| 77 93 | 
             
                    version: '0'
         | 
| 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'
         | 
| 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'
         | 
| 78 110 | 
             
            description: Ruby bindings for the Zebra open-source Z39.50/SRU server.
         | 
| 79 111 | 
             
            email: tim@dettrick.net
         | 
| 80 112 | 
             
            executables:
         | 
| @@ -105,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 105 137 | 
             
                  version: '0'
         | 
| 106 138 | 
             
                  segments:
         | 
| 107 139 | 
             
                  - 0
         | 
| 108 | 
            -
                  hash: - | 
| 140 | 
            +
                  hash: -4571173317423406803
         | 
| 109 141 | 
             
            requirements:
         | 
| 110 142 | 
             
            - idzebra-2.0
         | 
| 111 143 | 
             
            rubyforge_project: 
         |