ruby-ogc 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.
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +29 -0
- data/Rakefile +2 -0
- data/lib/rogc.rb +3 -0
- data/lib/rogc/formats.rb +4 -0
- data/lib/rogc/formats/formats.rb +8 -0
- data/lib/rogc/formats/wms_capabilities.rb +8 -0
- data/lib/rogc/formats/wms_capabilities/base.rb +11 -0
- data/lib/rogc/formats/wms_capabilities/v1.rb +238 -0
- data/lib/rogc/formats/wms_capabilities/v1_1.rb +63 -0
- data/lib/rogc/formats/wms_capabilities/v1_1_1.rb +14 -0
- data/lib/rogc/formats/wms_capabilities/v1_3.rb +84 -0
- data/lib/rogc/formats/wms_capabilities/v1_3_0.rb +13 -0
- data/lib/rogc/formats/xml.rb +4 -0
- data/lib/rogc/formats/xml/base.rb +99 -0
- data/lib/rogc/formats/xml/versioned_ogc.rb +91 -0
- data/lib/rogc/version.rb +5 -0
- data/lib/rogc/wms_client.rb +35 -0
- data/lib/ruby-ogc.rb +1 -0
- data/ruby-ogc.gemspec +19 -0
- metadata +83 -0
    
        data/.gitignore
    ADDED
    
    
    
        data/Gemfile
    ADDED
    
    
    
        data/LICENSE
    ADDED
    
    | @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            Copyright (c) 2013 Philippe HUET
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            MIT License
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Permission is hereby granted, free of charge, to any person obtaining
         | 
| 6 | 
            +
            a copy of this software and associated documentation files (the
         | 
| 7 | 
            +
            "Software"), to deal in the Software without restriction, including
         | 
| 8 | 
            +
            without limitation the rights to use, copy, modify, merge, publish,
         | 
| 9 | 
            +
            distribute, sublicense, and/or sell copies of the Software, and to
         | 
| 10 | 
            +
            permit persons to whom the Software is furnished to do so, subject to
         | 
| 11 | 
            +
            the following conditions:
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            The above copyright notice and this permission notice shall be
         | 
| 14 | 
            +
            included in all copies or substantial portions of the Software.
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         | 
| 17 | 
            +
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         | 
| 18 | 
            +
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         | 
| 19 | 
            +
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         | 
| 20 | 
            +
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         | 
| 21 | 
            +
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         | 
| 22 | 
            +
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         | 
    
        data/README.md
    ADDED
    
    | @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            # Ruby::Ogc
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            TODO: Write a gem description
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            ## Installation
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            Add this line to your application's Gemfile:
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                gem 'ruby-ogc'
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            And then execute:
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                $ bundle
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            Or install it yourself as:
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                $ gem install ruby-ogc
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            ## Usage
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            TODO: Write usage instructions here
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            ## Contributing
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            1. Fork it
         | 
| 26 | 
            +
            2. Create your feature branch (`git checkout -b my-new-feature`)
         | 
| 27 | 
            +
            3. Commit your changes (`git commit -am 'Added some feature'`)
         | 
| 28 | 
            +
            4. Push to the branch (`git push origin my-new-feature`)
         | 
| 29 | 
            +
            5. Create new Pull Request
         | 
    
        data/Rakefile
    ADDED
    
    
    
        data/lib/rogc.rb
    ADDED
    
    
    
        data/lib/rogc/formats.rb
    ADDED
    
    
| @@ -0,0 +1,238 @@ | |
| 1 | 
            +
            module ROGC
         | 
| 2 | 
            +
              module Formats
         | 
| 3 | 
            +
                module WMSCapabilities
         | 
| 4 | 
            +
                  class V1 < Base
         | 
| 5 | 
            +
                    self.version = '1.0.0'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                    def initialize
         | 
| 8 | 
            +
                      super
         | 
| 9 | 
            +
                      @xml_readers = xml_readers.merge({
         | 
| 10 | 
            +
                      'wms' => {
         | 
| 11 | 
            +
                        'Service' => lambda { |node, obj|
         | 
| 12 | 
            +
                                      obj.service ||= OpenStruct.new
         | 
| 13 | 
            +
                                      read_child_nodes(node, obj.service)
         | 
| 14 | 
            +
                        },
         | 
| 15 | 
            +
                        'Name' => lambda { |node, obj|
         | 
| 16 | 
            +
                                      obj.name = child_value(node)
         | 
| 17 | 
            +
                        },
         | 
| 18 | 
            +
                        'Title' => lambda { |node, obj|
         | 
| 19 | 
            +
                          obj.title = child_value(node)
         | 
| 20 | 
            +
                        },
         | 
| 21 | 
            +
                        'Abstract' => lambda { |node, obj|
         | 
| 22 | 
            +
                                      obj.abstract = child_value(node)
         | 
| 23 | 
            +
                        },
         | 
| 24 | 
            +
                        'BoundingBox' => lambda { |node, obj|
         | 
| 25 | 
            +
                          return get_bounding_box(node, obj)
         | 
| 26 | 
            +
                          bbox = OpenStruct.new
         | 
| 27 | 
            +
                          bbox.bbox = [
         | 
| 28 | 
            +
                            node['minx'].to_f,
         | 
| 29 | 
            +
                            node['miny'].to_f,
         | 
| 30 | 
            +
                            node['maxx'].to_f,
         | 
| 31 | 
            +
                            node['maxy'].to_f
         | 
| 32 | 
            +
                          ]
         | 
| 33 | 
            +
                    
         | 
| 34 | 
            +
                          res = OpenStruct.new
         | 
| 35 | 
            +
                          res.x = node['resx'].to_f if node['resx']
         | 
| 36 | 
            +
                          res.y = node['resy'].to_f if node['resy']
         | 
| 37 | 
            +
                    
         | 
| 38 | 
            +
                          bbox.res = res unless res.x.nil? || res.y.nil?
         | 
| 39 | 
            +
                    
         | 
| 40 | 
            +
                          # obj.bbox = bbox
         | 
| 41 | 
            +
                          # obj
         | 
| 42 | 
            +
                          bbox
         | 
| 43 | 
            +
                        },
         | 
| 44 | 
            +
                        'OnlineReource' => lambda { |node, obj|
         | 
| 45 | 
            +
                          # obj.contact_information = OpenStruct.new
         | 
| 46 | 
            +
                          # read_child_nodes(node, obj.contact_information)
         | 
| 47 | 
            +
                        },
         | 
| 48 | 
            +
                        'ContactInformation' => lambda { |node, obj|
         | 
| 49 | 
            +
                          obj.contact_information = OpenStruct.new
         | 
| 50 | 
            +
                          read_child_nodes(node, obj.contact_information)
         | 
| 51 | 
            +
                        },
         | 
| 52 | 
            +
                        'ContactPersonPrimary' => lambda { |node, obj|
         | 
| 53 | 
            +
                          obj.person_primary = OpenStruct.new
         | 
| 54 | 
            +
                          read_child_nodes(node, obj.person_primary)
         | 
| 55 | 
            +
                        },
         | 
| 56 | 
            +
                        'Capability' => lambda { |node, obj|
         | 
| 57 | 
            +
                          obj.capability = OpenStruct.new
         | 
| 58 | 
            +
                          obj.capability.nested_layers = Array.new
         | 
| 59 | 
            +
                          obj.capability.layers = Array.new
         | 
| 60 | 
            +
                    
         | 
| 61 | 
            +
                          read_child_nodes(node, obj.capability)
         | 
| 62 | 
            +
                        },
         | 
| 63 | 
            +
                        'Request' => lambda { |node, obj|
         | 
| 64 | 
            +
                          obj.request = OpenStruct.new
         | 
| 65 | 
            +
                          read_child_nodes(node, obj.request)
         | 
| 66 | 
            +
                        },
         | 
| 67 | 
            +
                        'GetCapabilities' => lambda { |node, obj|
         | 
| 68 | 
            +
                          obj.getcapabilities = OpenStruct.new(formats: Array.new)
         | 
| 69 | 
            +
                          read_child_nodes(node, obj.getcapabilities)
         | 
| 70 | 
            +
                        },
         | 
| 71 | 
            +
                        'Format' => lambda { |node, obj|
         | 
| 72 | 
            +
                          if obj.formats.is_a?(Array)
         | 
| 73 | 
            +
                            obj.formats << node.child.content if node.child?
         | 
| 74 | 
            +
                          else
         | 
| 75 | 
            +
                            obj.format = node.child.content if node.child?
         | 
| 76 | 
            +
                          end
         | 
| 77 | 
            +
                        },
         | 
| 78 | 
            +
                        'DCPType' => lambda { |node, obj|
         | 
| 79 | 
            +
                          read_child_nodes(node, obj)
         | 
| 80 | 
            +
                        },
         | 
| 81 | 
            +
                        'HTTP' => lambda { |node, obj|
         | 
| 82 | 
            +
                          read_child_nodes(node, obj)
         | 
| 83 | 
            +
                        },
         | 
| 84 | 
            +
                        'Get' => lambda { |node, obj|
         | 
| 85 | 
            +
                          obj.get = OpenStruct.new
         | 
| 86 | 
            +
                          read_child_nodes(node, obj.get)
         | 
| 87 | 
            +
                    
         | 
| 88 | 
            +
                          if obj.href.nil? || obj.href == ''
         | 
| 89 | 
            +
                            obj.href = obj.get.href
         | 
| 90 | 
            +
                          end
         | 
| 91 | 
            +
                        },
         | 
| 92 | 
            +
                        'Post' => lambda { |node, obj|
         | 
| 93 | 
            +
                          obj.post = OpenStruct.new
         | 
| 94 | 
            +
                          read_child_nodes(node, obj.post)
         | 
| 95 | 
            +
                    
         | 
| 96 | 
            +
                          if obj.href.nil? || obj.href == ''
         | 
| 97 | 
            +
                            obj.href = obj.get.href
         | 
| 98 | 
            +
                            # obj.href = obj.post.href # Isn't it better?
         | 
| 99 | 
            +
                          end
         | 
| 100 | 
            +
                        },
         | 
| 101 | 
            +
                        'GetMap' => lambda { |node, obj|
         | 
| 102 | 
            +
                          obj.getmap = OpenStruct.new(formats: Array.new)
         | 
| 103 | 
            +
                          read_child_nodes(node, obj.getmap)
         | 
| 104 | 
            +
                        },
         | 
| 105 | 
            +
                        'GetFeatureInfo' => lambda { |node, obj|
         | 
| 106 | 
            +
                          obj.getfeatureinfo = OpenStruct.new(formats: Array.new)
         | 
| 107 | 
            +
                          read_child_nodes(node, obj.getfeatureinfo)
         | 
| 108 | 
            +
                        },
         | 
| 109 | 
            +
                        'Exception' => lambda { |node, obj|
         | 
| 110 | 
            +
                          obj.exception = OpenStruct.new(formats: Array.new)
         | 
| 111 | 
            +
                          read_child_nodes(node, obj.exception)
         | 
| 112 | 
            +
                        },
         | 
| 113 | 
            +
                        'Layer' => lambda { |node, obj|
         | 
| 114 | 
            +
                          parent_layer, capability = nil
         | 
| 115 | 
            +
                    
         | 
| 116 | 
            +
                          if (obj.capability)
         | 
| 117 | 
            +
                            capability = obj.capability
         | 
| 118 | 
            +
                            parent_layer = obj
         | 
| 119 | 
            +
                          else
         | 
| 120 | 
            +
                            capability = obj
         | 
| 121 | 
            +
                          end
         | 
| 122 | 
            +
                    
         | 
| 123 | 
            +
                          #
         | 
| 124 | 
            +
                          # List of attributes
         | 
| 125 | 
            +
                          #
         | 
| 126 | 
            +
                    
         | 
| 127 | 
            +
                          queryable = node['queryable']
         | 
| 128 | 
            +
                          cascaded = node['cascaded']
         | 
| 129 | 
            +
                          opaque = node['opaque']
         | 
| 130 | 
            +
                          no_subsets = node['noSubsets']
         | 
| 131 | 
            +
                          fixed_width = node['fixed_width']
         | 
| 132 | 
            +
                          fixed_height = node['fixed_height']
         | 
| 133 | 
            +
                    
         | 
| 134 | 
            +
                          parent = parent_layer || OpenStruct.new
         | 
| 135 | 
            +
                          #
         | 
| 136 | 
            +
                          # Create layer
         | 
| 137 | 
            +
                          #
         | 
| 138 | 
            +
                          layer = OpenStruct.new(
         | 
| 139 | 
            +
                            {
         | 
| 140 | 
            +
                              nested_layers: Array.new,
         | 
| 141 | 
            +
                              styles: parent_layer.nil? ? Array.new : [] + parent_layer.styles,
         | 
| 142 | 
            +
                              srs: parent_layer.nil? ? {} : {}.merge(parent.srs),
         | 
| 143 | 
            +
                              metadata_urls: [],
         | 
| 144 | 
            +
                              bbox: parent_layer.nil? ? {} : {}.merge(parent.bbox),
         | 
| 145 | 
            +
                              llbbox: parent.llbbox,
         | 
| 146 | 
            +
                              dimensions: parent_layer.nil? ? {} : {}.merge(parent.dimensions),
         | 
| 147 | 
            +
                              authority_urls: parent_layer.nil? ? {} : {}.merge(parent.authority_urls),
         | 
| 148 | 
            +
                              identifiers: OpenStruct.new,
         | 
| 149 | 
            +
                              keywords: Array.new,
         | 
| 150 | 
            +
                              queryable?: queryable.to_bool || parent.queryable?.to_bool, # TODO
         | 
| 151 | 
            +
                              cascaded: cascaded.to_i || parent.cascaded.to_i, # TODO
         | 
| 152 | 
            +
                              opaque: opaque.to_bool || parent.opaque.to_bool, # TODO
         | 
| 153 | 
            +
                              no_subsets: no_subsets.to_bool || parent.no_subsets.to_bool, # TODO
         | 
| 154 | 
            +
                              fixed_width: fixed_width.to_i || parent.fixed_width.to_i, # TODO
         | 
| 155 | 
            +
                              fixed_height: fixed_height.to_i || parent.fixed_height.to_i, # TODO
         | 
| 156 | 
            +
                              min_scale: parent.min_scale,
         | 
| 157 | 
            +
                              max_scale: parent.max_scale,
         | 
| 158 | 
            +
                              attribution: parent.attribution
         | 
| 159 | 
            +
                            }
         | 
| 160 | 
            +
                          )
         | 
| 161 | 
            +
                    
         | 
| 162 | 
            +
                          obj.nested_layers ||= Array.new
         | 
| 163 | 
            +
                          obj.nested_layers << layer
         | 
| 164 | 
            +
                          layer.capability = capability
         | 
| 165 | 
            +
                          read_child_nodes(node, layer)
         | 
| 166 | 
            +
                          layer.delete_field(:capability)
         | 
| 167 | 
            +
                    
         | 
| 168 | 
            +
                          unless layer.name.nil? || layer.name.strip == ''
         | 
| 169 | 
            +
                            parts = layer.name.split(':')
         | 
| 170 | 
            +
                            request = capability.request
         | 
| 171 | 
            +
                            gfi = request.getfeatureinfo
         | 
| 172 | 
            +
                    
         | 
| 173 | 
            +
                            if parts.length > 0
         | 
| 174 | 
            +
                              layer.prefix = parts.first
         | 
| 175 | 
            +
                            end
         | 
| 176 | 
            +
                            capability.layers << layer
         | 
| 177 | 
            +
                    
         | 
| 178 | 
            +
                            if layer.formats.nil?
         | 
| 179 | 
            +
                              layer.formats = request.getmap.formats
         | 
| 180 | 
            +
                            end
         | 
| 181 | 
            +
                    
         | 
| 182 | 
            +
                            if layer.info_formats.nil? && gfi
         | 
| 183 | 
            +
                              layer.info_formats = gfi.formats
         | 
| 184 | 
            +
                            end
         | 
| 185 | 
            +
                          end
         | 
| 186 | 
            +
                          #
         | 
| 187 | 
            +
                          # Handle layer name
         | 
| 188 | 
            +
                          #
         | 
| 189 | 
            +
                        },
         | 
| 190 | 
            +
                        'Request' => lambda { |node, obj|
         | 
| 191 | 
            +
                          obj.request = OpenStruct.new
         | 
| 192 | 
            +
                          read_child_nodes(node, obj.request)
         | 
| 193 | 
            +
                        },
         | 
| 194 | 
            +
                        'KeywordList' => lambda { |node, obj|
         | 
| 195 | 
            +
                          read_child_nodes(node, obj)
         | 
| 196 | 
            +
                        },
         | 
| 197 | 
            +
                        'Style' => lambda { |node, obj|
         | 
| 198 | 
            +
                          style = OpenStruct.new
         | 
| 199 | 
            +
                          obj.styles << style
         | 
| 200 | 
            +
                          read_child_nodes(node, style)
         | 
| 201 | 
            +
                        },
         | 
| 202 | 
            +
                        'SRS' => lambda { |node, obj|
         | 
| 203 | 
            +
                          get_srs(node, obj)
         | 
| 204 | 
            +
                          #obj.srs[child_value(node)] = true
         | 
| 205 | 
            +
                        }
         | 
| 206 | 
            +
                        
         | 
| 207 | 
            +
                      }
         | 
| 208 | 
            +
                    })
         | 
| 209 | 
            +
                    end
         | 
| 210 | 
            +
             | 
| 211 | 
            +
                    def get_srs(node, obj)
         | 
| 212 | 
            +
                      obj.srs ||= Hash.new
         | 
| 213 | 
            +
                      obj.srs[child_value(node)] = true
         | 
| 214 | 
            +
                    end
         | 
| 215 | 
            +
             | 
| 216 | 
            +
                    def get_bounding_box(node, obj)
         | 
| 217 | 
            +
                      bbox = OpenStruct.new
         | 
| 218 | 
            +
                      bbox.bbox = [
         | 
| 219 | 
            +
                        node['minx'].to_f,
         | 
| 220 | 
            +
                        node['miny'].to_f,
         | 
| 221 | 
            +
                        node['maxx'].to_f,
         | 
| 222 | 
            +
                        node['maxy'].to_f
         | 
| 223 | 
            +
                      ]
         | 
| 224 | 
            +
                    
         | 
| 225 | 
            +
                      res = OpenStruct.new
         | 
| 226 | 
            +
                      res.x = node['resx'].to_f if node['resx']
         | 
| 227 | 
            +
                      res.y = node['resy'].to_f if node['resy']
         | 
| 228 | 
            +
                    
         | 
| 229 | 
            +
                      bbox.res = res unless res.x.nil? || res.y.nil?
         | 
| 230 | 
            +
                    
         | 
| 231 | 
            +
                      # obj.bbox = bbox
         | 
| 232 | 
            +
                      # obj
         | 
| 233 | 
            +
                      bbox
         | 
| 234 | 
            +
                    end
         | 
| 235 | 
            +
                  end
         | 
| 236 | 
            +
                end
         | 
| 237 | 
            +
              end
         | 
| 238 | 
            +
            end
         | 
| @@ -0,0 +1,63 @@ | |
| 1 | 
            +
            module ROGC
         | 
| 2 | 
            +
              module Formats
         | 
| 3 | 
            +
                module WMSCapabilities
         | 
| 4 | 
            +
                  class V1_1 < V1
         | 
| 5 | 
            +
                    def initialize
         | 
| 6 | 
            +
                      super
         | 
| 7 | 
            +
                      @xml_readers = xml_readers.merge({ 'wms' =>  xml_readers['wms'].merge({
         | 
| 8 | 
            +
                      'WMT_MS_Capabilities' => lambda { |node, obj|
         | 
| 9 | 
            +
                        read_child_nodes(node, obj)
         | 
| 10 | 
            +
                      },
         | 
| 11 | 
            +
                      'Keyword' => lambda { |node, obj|
         | 
| 12 | 
            +
                        obj.keywords ||= Array.new
         | 
| 13 | 
            +
                        obj.keywords << child_value(node)
         | 
| 14 | 
            +
                      },
         | 
| 15 | 
            +
                      'DescribeLayer' => lambda { |node, obj|
         | 
| 16 | 
            +
                        obj.describelayer = OpenStruct.new({ formats: Array.new })
         | 
| 17 | 
            +
                        read_child_nodes(node, obj.describelayer)
         | 
| 18 | 
            +
                      },
         | 
| 19 | 
            +
                      'GetLegendGraphic' => lambda { |node, obj|
         | 
| 20 | 
            +
                        obj.getlegendgraphic = OpenStruct.new({ formats: Array.new })
         | 
| 21 | 
            +
                        read_child_nodes(node, obj.getlegendgraphic)
         | 
| 22 | 
            +
                      },
         | 
| 23 | 
            +
                      'GetStyles' => lambda { |node, obj|
         | 
| 24 | 
            +
                        obj.getstyles = OpenStruct.new({ formats: Array.new })
         | 
| 25 | 
            +
                        read_child_nodes(node, obj.getstyles)
         | 
| 26 | 
            +
                      },
         | 
| 27 | 
            +
                      'PutStyles' => lambda { |node, obj|
         | 
| 28 | 
            +
                        obj.putstyles = OpenStruct.new({ formats: Array.new })
         | 
| 29 | 
            +
                        read_child_nodes(node, obj.putstyles)
         | 
| 30 | 
            +
                      },
         | 
| 31 | 
            +
                      'UserDefinedSymbolization' => lambda { |node, obj|
         | 
| 32 | 
            +
                        obj.user_symbols = OpenStruct.new({
         | 
| 33 | 
            +
                          supports_SLD: node['SupportSLD'].to_i == 1,
         | 
| 34 | 
            +
                          user_layer: node['UserLayer'].to_i == 1,
         | 
| 35 | 
            +
                          user_style: node['UserStyle'].to_i == 1,
         | 
| 36 | 
            +
                          remote_WFS: node['RemoteWFS'].to_i == 1
         | 
| 37 | 
            +
                        })
         | 
| 38 | 
            +
                      },
         | 
| 39 | 
            +
                      'LatLonBoundingBox' => lambda { |node, obj|
         | 
| 40 | 
            +
                        obj.llbox = [
         | 
| 41 | 
            +
                          node['minx'].to_f,
         | 
| 42 | 
            +
                          node['miny'].to_f,
         | 
| 43 | 
            +
                          node['maxx'].to_f,
         | 
| 44 | 
            +
                          node['maxy'].to_f
         | 
| 45 | 
            +
                        ]
         | 
| 46 | 
            +
                      },
         | 
| 47 | 
            +
                      'BoundingBox' => lambda { |node, obj|
         | 
| 48 | 
            +
                          # raise super['wms']['BOundingBox'].inspect
         | 
| 49 | 
            +
                          bbox = get_bounding_box(node, obj)
         | 
| 50 | 
            +
                          # bbox = obj.bbox
         | 
| 51 | 
            +
                          bbox.srs = node['SRS']
         | 
| 52 | 
            +
                          obj.bbox ||= {}
         | 
| 53 | 
            +
                          obj.bbox[bbox.srs] = bbox 
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                          obj.bbox
         | 
| 56 | 
            +
                      }
         | 
| 57 | 
            +
                        
         | 
| 58 | 
            +
                    }) })
         | 
| 59 | 
            +
                    end
         | 
| 60 | 
            +
                  end
         | 
| 61 | 
            +
                end
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
            end
         | 
| @@ -0,0 +1,84 @@ | |
| 1 | 
            +
            module ROGC
         | 
| 2 | 
            +
              module Formats
         | 
| 3 | 
            +
                module WMSCapabilities
         | 
| 4 | 
            +
                  class V1_3 < ::ROGC::Formats::WMSCapabilities::V1_1
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                    READERS_v1_3 = {
         | 
| 7 | 
            +
                      'wms' => {
         | 
| 8 | 
            +
                        'WMS_Capabilities' => lambda { |node, obj|
         | 
| 9 | 
            +
                          read_child_nodes(node, obj)
         | 
| 10 | 
            +
                        }
         | 
| 11 | 
            +
                      }
         | 
| 12 | 
            +
                    }
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                    def initialize
         | 
| 15 | 
            +
                      super
         | 
| 16 | 
            +
                      #@xml_readers= xml_readers.merge(
         | 
| 17 | 
            +
                      #  'wms' => READERS_v1_3_0['wms']
         | 
| 18 | 
            +
                      #)
         | 
| 19 | 
            +
                      @xml_readers= xml_readers.merge( {
         | 
| 20 | 
            +
                          'wms' => @xml_readers['wms'].merge({
         | 
| 21 | 
            +
                            'WMS_Capabilities' => lambda { |node, obj|
         | 
| 22 | 
            +
                              read_child_nodes(node, obj)
         | 
| 23 | 
            +
                            },
         | 
| 24 | 
            +
                            'LayerLimit' => lambda { |node, obj|
         | 
| 25 | 
            +
                              obj.layer_limit = child_value(node).to_i
         | 
| 26 | 
            +
                            },
         | 
| 27 | 
            +
                            'MaxWidth' => lambda { |node, obj|
         | 
| 28 | 
            +
                              obj.layer_limit = child_value(node).to_i
         | 
| 29 | 
            +
                            },
         | 
| 30 | 
            +
                            'MaxHeight' => lambda { |node, obj|
         | 
| 31 | 
            +
                              obj.layer_limit = child_value(node).to_i
         | 
| 32 | 
            +
                            },
         | 
| 33 | 
            +
                            'BoundingBox' => lambda { |node, obj|
         | 
| 34 | 
            +
                              # raise super['wms']['BOundingBox'].inspect
         | 
| 35 | 
            +
                              bbox = get_bounding_box(node, obj)
         | 
| 36 | 
            +
                              bbox.srs = node['CRS']
         | 
| 37 | 
            +
                              obj.bbox ||= {}
         | 
| 38 | 
            +
                              obj.bbox[bbox.srs] = bbox
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                              obj.bbox
         | 
| 41 | 
            +
                            },
         | 
| 42 | 
            +
                            'CRS' => lambda { |node, obj|
         | 
| 43 | 
            +
                              get_srs(node, obj)
         | 
| 44 | 
            +
                            },
         | 
| 45 | 
            +
                            'EX_GeographicBoundingBox' => lambda { |node, obj|
         | 
| 46 | 
            +
                              # replacement of LatLonBoundingBox
         | 
| 47 | 
            +
                              obj.llbbox = [];
         | 
| 48 | 
            +
                              read_child_nodes(node, obj.llbbox)
         | 
| 49 | 
            +
                            },
         | 
| 50 | 
            +
                            'westBoundLongitude' => lambda { |node, obj|
         | 
| 51 | 
            +
                              obj[0] = child_value(node)
         | 
| 52 | 
            +
                            },
         | 
| 53 | 
            +
                            'eastBoundLongitude' => lambda { |node, obj|
         | 
| 54 | 
            +
                              obj[2] = child_value(node)
         | 
| 55 | 
            +
                            },
         | 
| 56 | 
            +
                            'southBoundLatitude' => lambda { |node, obj|
         | 
| 57 | 
            +
                              obj[1] = child_value(node)
         | 
| 58 | 
            +
                            },
         | 
| 59 | 
            +
                            'northBoundLatitude' => lambda { |node, obj|
         | 
| 60 | 
            +
                              obj[3] = child_value(node)
         | 
| 61 | 
            +
                            },
         | 
| 62 | 
            +
                            'MinScaleDenominator' => lambda { |node, obj|
         | 
| 63 | 
            +
                              # obj.maxScale = parseFloat(this.getChildValue(node)).toPrecision(16);
         | 
| 64 | 
            +
                              obj.max_scale = child_value(node).to_f.round(16)
         | 
| 65 | 
            +
                            },
         | 
| 66 | 
            +
                            'MaxScaleDenominator' => lambda { |node, obj|
         | 
| 67 | 
            +
                              # obj.minScale = parseFloat(this.getChildValue(node)).toPrecision(16);
         | 
| 68 | 
            +
                              obj.max_scale = child_value(node).to_f.round(16)
         | 
| 69 | 
            +
                            },
         | 
| 70 | 
            +
                            'Keyword' => lambda { |node, obj|
         | 
| 71 | 
            +
                              keyword = {
         | 
| 72 | 
            +
                                'value' => child_value(node),
         | 
| 73 | 
            +
                                'vocabulary' => node['vocabulary']
         | 
| 74 | 
            +
                              }
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                              obj.keywords << keyword if (obj.keywords)
         | 
| 77 | 
            +
                            }
         | 
| 78 | 
            +
                          })
         | 
| 79 | 
            +
                      })
         | 
| 80 | 
            +
                    end
         | 
| 81 | 
            +
                  end 
         | 
| 82 | 
            +
                end
         | 
| 83 | 
            +
              end
         | 
| 84 | 
            +
            end
         | 
| @@ -0,0 +1,99 @@ | |
| 1 | 
            +
            require 'libxml'
         | 
| 2 | 
            +
            require 'open-uri'
         | 
| 3 | 
            +
            require 'ostruct'
         | 
| 4 | 
            +
            require 'active_support/all'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            unless Object.respond_to?(:blank)
         | 
| 7 | 
            +
              class Object
         | 
| 8 | 
            +
                def blank?
         | 
| 9 | 
            +
                  respond_to?(:empty?) ? empty? : !self
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
            end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            unless Object.respond_to?(:to_bool)
         | 
| 15 | 
            +
              class Object
         | 
| 16 | 
            +
                def to_bool
         | 
| 17 | 
            +
                  return false if self == false || self.blank? || self.to_s =~ (/(false|f|no|n|0)$/i)
         | 
| 18 | 
            +
                  return true if self == true || self.to_s =~ (/(true|t|yes|y|1)$/i)
         | 
| 19 | 
            +
                  raise ArgumentError.new("invalid value for Boolean: \"#{self}\"")
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            #
         | 
| 25 | 
            +
            # TODO: OnlineResource
         | 
| 26 | 
            +
            #
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            module ROGC
         | 
| 29 | 
            +
              module Formats
         | 
| 30 | 
            +
                module XML
         | 
| 31 | 
            +
                  class Base
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    # class_attribute :readers
         | 
| 34 | 
            +
                    cattr_accessor :namespace_alias, :default_prefix, :xmldom
         | 
| 35 | 
            +
                    
         | 
| 36 | 
            +
                    attr_accessor :xml_readers
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                    def initialize
         | 
| 39 | 
            +
                      # @io = io
         | 
| 40 | 
            +
                      # @parser = LibXML::XML::Parser.io(io)
         | 
| 41 | 
            +
                      # @raw = @parser.parse
         | 
| 42 | 
            +
                      # @capabilities = OpenStruct.new
         | 
| 43 | 
            +
                      # @root = @raw.root
         | 
| 44 | 
            +
                      # self.class.read_node(@root, @capabilities)
         | 
| 45 | 
            +
                      @xml_readers = {}
         | 
| 46 | 
            +
                    end
         | 
| 47 | 
            +
                  
         | 
| 48 | 
            +
                    # class << self
         | 
| 49 | 
            +
                      def read_node(node, obj)
         | 
| 50 | 
            +
                        if (obj.nil?)
         | 
| 51 | 
            +
                          obj = OpenStruct.new
         | 
| 52 | 
            +
                        end
         | 
| 53 | 
            +
                  
         | 
| 54 | 
            +
                        # reader = self.readers['wms'][node.name]
         | 
| 55 | 
            +
                        reader = xml_readers['wms'][node.name]
         | 
| 56 | 
            +
                        if (reader)
         | 
| 57 | 
            +
                          reader.call(node, obj)
         | 
| 58 | 
            +
                        end
         | 
| 59 | 
            +
                        obj
         | 
| 60 | 
            +
                      end
         | 
| 61 | 
            +
                  
         | 
| 62 | 
            +
                      def read_child_nodes(node, obj)
         | 
| 63 | 
            +
                        if (obj.nil?)
         | 
| 64 | 
            +
                          obj = OpenStruct.new
         | 
| 65 | 
            +
                        end
         | 
| 66 | 
            +
                  
         | 
| 67 | 
            +
                        children = node.children
         | 
| 68 | 
            +
                        children.each do |child|
         | 
| 69 | 
            +
                          if (child.node_type == 1)
         | 
| 70 | 
            +
                            read_node(child, obj)
         | 
| 71 | 
            +
                          end
         | 
| 72 | 
            +
                        end
         | 
| 73 | 
            +
                  
         | 
| 74 | 
            +
                        obj
         | 
| 75 | 
            +
                      end
         | 
| 76 | 
            +
                   
         | 
| 77 | 
            +
                      def child_value(node, default = nil)
         | 
| 78 | 
            +
                        value = default || ""
         | 
| 79 | 
            +
                  
         | 
| 80 | 
            +
                        node.each do |child|
         | 
| 81 | 
            +
                          case child.node_type
         | 
| 82 | 
            +
                          when 3,4 # Text: 3 or CDATA: 4 use cdata? or text?
         | 
| 83 | 
            +
                            value << child.content
         | 
| 84 | 
            +
                          end
         | 
| 85 | 
            +
                        end
         | 
| 86 | 
            +
                        value.strip!
         | 
| 87 | 
            +
                  
         | 
| 88 | 
            +
                        value
         | 
| 89 | 
            +
                      end
         | 
| 90 | 
            +
                    # end
         | 
| 91 | 
            +
                     
         | 
| 92 | 
            +
                    # def read_node(node, obj)
         | 
| 93 | 
            +
                    #   self.class.read_node(node, obj)
         | 
| 94 | 
            +
                    # end
         | 
| 95 | 
            +
                  end
         | 
| 96 | 
            +
                end
         | 
| 97 | 
            +
              end
         | 
| 98 | 
            +
            end
         | 
| 99 | 
            +
                  
         | 
| @@ -0,0 +1,91 @@ | |
| 1 | 
            +
            module ROGC
         | 
| 2 | 
            +
              module Formats
         | 
| 3 | 
            +
                module XML
         | 
| 4 | 
            +
                  class VersionedOGC < Base
         | 
| 5 | 
            +
                    class << self
         | 
| 6 | 
            +
                      attr_accessor :version
         | 
| 7 | 
            +
                    end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                    cattr_accessor :profile, :default_version
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    self.version = nil
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    parser = nil
         | 
| 14 | 
            +
                    default_version = nil
         | 
| 15 | 
            +
                    profile = nil
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    def initialize
         | 
| 18 | 
            +
                      super
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def get_version(root, options = {})
         | 
| 22 | 
            +
                      lversion = nil
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                      unless root.nil?
         | 
| 25 | 
            +
                        lversion = self.class.version
         | 
| 26 | 
            +
                        if lversion.nil?
         | 
| 27 | 
            +
                          lversion = root['version']
         | 
| 28 | 
            +
                          lversion ||= default_version
         | 
| 29 | 
            +
                        end
         | 
| 30 | 
            +
                      else
         | 
| 31 | 
            +
                        lversion = options[:version] || self.version || self.default_version
         | 
| 32 | 
            +
                      end
         | 
| 33 | 
            +
                      lversion
         | 
| 34 | 
            +
                    end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                    def get_parser(version)
         | 
| 37 | 
            +
                      version ||= default_version
         | 
| 38 | 
            +
                      profile = self.profile.nil? ? "" : "_" + self.profile
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                      if @parser.nil? || @parser.class.version != version
         | 
| 41 | 
            +
                        # version = 1
         | 
| 42 | 
            +
                        # format = "ROGC::Formats::WMSCapabilities::V#{version}".constantize
         | 
| 43 | 
            +
                        parser_class_name = "V#{version.to_s.gsub(/\./, "_")}" + profile
         | 
| 44 | 
            +
                        begin
         | 
| 45 | 
            +
                          format = "#{self.class.name.deconstantize}::#{parser_class_name}".constantize
         | 
| 46 | 
            +
                        rescue
         | 
| 47 | 
            +
                          format = nil
         | 
| 48 | 
            +
                        end
         | 
| 49 | 
            +
                        if format.nil?
         | 
| 50 | 
            +
                          if !profile.empty? && self.allow_fallback
         | 
| 51 | 
            +
                            profile = ""
         | 
| 52 | 
            +
                            parser_class_name = "V#{version.to_s.gsub(/\./, "_")}" + profile
         | 
| 53 | 
            +
                            begin
         | 
| 54 | 
            +
                              format = "#{self.class.name.deconstantize}::#{parser_class_name}".constantize
         | 
| 55 | 
            +
                            rescue
         | 
| 56 | 
            +
                              format = nil
         | 
| 57 | 
            +
                            end
         | 
| 58 | 
            +
                          end
         | 
| 59 | 
            +
                          if format.nil?
         | 
| 60 | 
            +
                            raise "Can't find a parser for version #{version} #{profile}"
         | 
| 61 | 
            +
                          end
         | 
| 62 | 
            +
                        end
         | 
| 63 | 
            +
                            
         | 
| 64 | 
            +
                        @parser = format.new
         | 
| 65 | 
            +
                      else
         | 
| 66 | 
            +
                        puts "Yahoo one parser"
         | 
| 67 | 
            +
                      end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                      @parser
         | 
| 70 | 
            +
                    end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                    def read(data, options = {})
         | 
| 73 | 
            +
                      if data.is_a?(String)
         | 
| 74 | 
            +
                        data = StringIO.new(data)
         | 
| 75 | 
            +
                      end
         | 
| 76 | 
            +
                      xml_parser = LibXML::XML::Parser.io(data)
         | 
| 77 | 
            +
                      xml = xml_parser.parse
         | 
| 78 | 
            +
                      root = xml.root
         | 
| 79 | 
            +
                      version = get_version(root)
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                      parser = get_parser(version)
         | 
| 82 | 
            +
                      # puts parser.readers['wms']['Layer'].inspect
         | 
| 83 | 
            +
                      capabilities = OpenStruct.new
         | 
| 84 | 
            +
                      capabilities = parser.read_node(root, capabilities)
         | 
| 85 | 
            +
                      capabilities.version = version
         | 
| 86 | 
            +
                      capabilities
         | 
| 87 | 
            +
                    end
         | 
| 88 | 
            +
                  end
         | 
| 89 | 
            +
                end
         | 
| 90 | 
            +
              end
         | 
| 91 | 
            +
            end
         | 
    
        data/lib/rogc/version.rb
    ADDED
    
    
| @@ -0,0 +1,35 @@ | |
| 1 | 
            +
            $:.unshift File.dirname(__FILE__)
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'formats'
         | 
| 4 | 
            +
            require 'open-uri'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
             | 
| 7 | 
            +
            module ROGC
         | 
| 8 | 
            +
              class WMSClient
         | 
| 9 | 
            +
                def initialize(wms_url)
         | 
| 10 | 
            +
                  @wms_url = wms_url
         | 
| 11 | 
            +
                  @capabilities = nil
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                def capabilities
         | 
| 15 | 
            +
                  return @capabilities if @capabilities
         | 
| 16 | 
            +
                  doc = open(build_wms_url)
         | 
| 17 | 
            +
                  format = ROGC::Formats::WMSCapabilities::Base.new
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  @capabilities = format.read(doc)
         | 
| 20 | 
            +
                  @capabilities
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                private
         | 
| 24 | 
            +
                  def build_wms_url(request = 'GetCapabilities', version = "1.3.0", params = {})
         | 
| 25 | 
            +
                    params.merge!({
         | 
| 26 | 
            +
                      'service' => 'wms',
         | 
| 27 | 
            +
                      'request' => request,
         | 
| 28 | 
            +
                      'version' => version
         | 
| 29 | 
            +
                    })
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                    query_string = params.map { |k,v| "#{k}=#{v}" }.join('&')
         | 
| 32 | 
            +
                    "#{@wms_url}?#{query_string}"
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
            end
         | 
    
        data/lib/ruby-ogc.rb
    ADDED
    
    | @@ -0,0 +1 @@ | |
| 1 | 
            +
            require 'rogc'
         | 
    
        data/ruby-ogc.gemspec
    ADDED
    
    | @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            +
            require File.expand_path('../lib/rogc/version', __FILE__)
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            Gem::Specification.new do |gem|
         | 
| 5 | 
            +
              gem.authors       = ["Philippe HUET"]
         | 
| 6 | 
            +
              gem.email         = ["philippe@dotgee.fr"]
         | 
| 7 | 
            +
              gem.description   = %q{Ruby lib for OGC manipulations}
         | 
| 8 | 
            +
              gem.summary       = %q{Ruby lib for OGC manipulations}
         | 
| 9 | 
            +
              gem.homepage      = ""
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              gem.files         = `git ls-files`.split($\)
         | 
| 12 | 
            +
              gem.executables   = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
         | 
| 13 | 
            +
              gem.test_files    = gem.files.grep(%r{^(test|spec|features)/})
         | 
| 14 | 
            +
              gem.name          = "ruby-ogc"
         | 
| 15 | 
            +
              gem.require_paths = ["lib"]
         | 
| 16 | 
            +
              gem.version       = Ruby::Ogc::VERSION
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              gem.add_dependency  "libxml-ruby"
         | 
| 19 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,83 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: ruby-ogc
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.0.1
         | 
| 5 | 
            +
              prerelease: 
         | 
| 6 | 
            +
            platform: ruby
         | 
| 7 | 
            +
            authors:
         | 
| 8 | 
            +
            - Philippe HUET
         | 
| 9 | 
            +
            autorequire: 
         | 
| 10 | 
            +
            bindir: bin
         | 
| 11 | 
            +
            cert_chain: []
         | 
| 12 | 
            +
            date: 2013-01-24 00:00:00.000000000 Z
         | 
| 13 | 
            +
            dependencies:
         | 
| 14 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 15 | 
            +
              name: libxml-ruby
         | 
| 16 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 17 | 
            +
                none: false
         | 
| 18 | 
            +
                requirements:
         | 
| 19 | 
            +
                - - ! '>='
         | 
| 20 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 21 | 
            +
                    version: '0'
         | 
| 22 | 
            +
              type: :runtime
         | 
| 23 | 
            +
              prerelease: false
         | 
| 24 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 25 | 
            +
                none: false
         | 
| 26 | 
            +
                requirements:
         | 
| 27 | 
            +
                - - ! '>='
         | 
| 28 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 29 | 
            +
                    version: '0'
         | 
| 30 | 
            +
            description: Ruby lib for OGC manipulations
         | 
| 31 | 
            +
            email:
         | 
| 32 | 
            +
            - philippe@dotgee.fr
         | 
| 33 | 
            +
            executables: []
         | 
| 34 | 
            +
            extensions: []
         | 
| 35 | 
            +
            extra_rdoc_files: []
         | 
| 36 | 
            +
            files:
         | 
| 37 | 
            +
            - .gitignore
         | 
| 38 | 
            +
            - Gemfile
         | 
| 39 | 
            +
            - LICENSE
         | 
| 40 | 
            +
            - README.md
         | 
| 41 | 
            +
            - Rakefile
         | 
| 42 | 
            +
            - lib/rogc.rb
         | 
| 43 | 
            +
            - lib/rogc/formats.rb
         | 
| 44 | 
            +
            - lib/rogc/formats/formats.rb
         | 
| 45 | 
            +
            - lib/rogc/formats/wms_capabilities.rb
         | 
| 46 | 
            +
            - lib/rogc/formats/wms_capabilities/base.rb
         | 
| 47 | 
            +
            - lib/rogc/formats/wms_capabilities/v1.rb
         | 
| 48 | 
            +
            - lib/rogc/formats/wms_capabilities/v1_1.rb
         | 
| 49 | 
            +
            - lib/rogc/formats/wms_capabilities/v1_1_1.rb
         | 
| 50 | 
            +
            - lib/rogc/formats/wms_capabilities/v1_3.rb
         | 
| 51 | 
            +
            - lib/rogc/formats/wms_capabilities/v1_3_0.rb
         | 
| 52 | 
            +
            - lib/rogc/formats/xml.rb
         | 
| 53 | 
            +
            - lib/rogc/formats/xml/base.rb
         | 
| 54 | 
            +
            - lib/rogc/formats/xml/versioned_ogc.rb
         | 
| 55 | 
            +
            - lib/rogc/version.rb
         | 
| 56 | 
            +
            - lib/rogc/wms_client.rb
         | 
| 57 | 
            +
            - lib/ruby-ogc.rb
         | 
| 58 | 
            +
            - ruby-ogc.gemspec
         | 
| 59 | 
            +
            homepage: ''
         | 
| 60 | 
            +
            licenses: []
         | 
| 61 | 
            +
            post_install_message: 
         | 
| 62 | 
            +
            rdoc_options: []
         | 
| 63 | 
            +
            require_paths:
         | 
| 64 | 
            +
            - lib
         | 
| 65 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 66 | 
            +
              none: false
         | 
| 67 | 
            +
              requirements:
         | 
| 68 | 
            +
              - - ! '>='
         | 
| 69 | 
            +
                - !ruby/object:Gem::Version
         | 
| 70 | 
            +
                  version: '0'
         | 
| 71 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 72 | 
            +
              none: false
         | 
| 73 | 
            +
              requirements:
         | 
| 74 | 
            +
              - - ! '>='
         | 
| 75 | 
            +
                - !ruby/object:Gem::Version
         | 
| 76 | 
            +
                  version: '0'
         | 
| 77 | 
            +
            requirements: []
         | 
| 78 | 
            +
            rubyforge_project: 
         | 
| 79 | 
            +
            rubygems_version: 1.8.21
         | 
| 80 | 
            +
            signing_key: 
         | 
| 81 | 
            +
            specification_version: 3
         | 
| 82 | 
            +
            summary: Ruby lib for OGC manipulations
         | 
| 83 | 
            +
            test_files: []
         |