safrano 0.5.2 → 0.5.3
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 +4 -4
- data/lib/odata/edm/primitive_types.rb +8 -2
- data/lib/odata/entity.rb +5 -1
- data/lib/odata/model_ext.rb +10 -3
- data/lib/safrano/service.rb +5 -2
- data/lib/safrano/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 64699787371f5e9f696461faac80382cf2d53fe78d387742d8650e5a4b2c54df
         | 
| 4 | 
            +
              data.tar.gz: 530e7619b4b27a1a50a63f832d4f3a8894850c6cea36e638769cdffbc6b7d942
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: e5d118f15a3a3ba78f5385867c82370e36612585b7f83329343babb2e3a8a7220d1059ad766fbe7c9e1f7f74a57945c086e60624d0301259c1427f0053b59052
         | 
| 7 | 
            +
              data.tar.gz: 52b283be3e8902226f14864a74eae30bc62c65908be748ea37c5a150f574f3130c8957f26251e1958e298eba221eeada9f0155fcc73ed2591034e97466f1e629
         | 
| @@ -20,13 +20,15 @@ module Safrano | |
| 20 20 | 
             
              # cf. Sequel Database column_schema_default_to_ruby_value
         | 
| 21 21 | 
             
              #                     schema_column_type
         | 
| 22 22 | 
             
              # https://www.odata.org/documentation/odata-version-2-0/overview/
         | 
| 23 | 
            -
              def self.default_edm_type(ruby_type:)
         | 
| 23 | 
            +
              def self.default_edm_type(ruby_type:, db_type: )
         | 
| 24 24 | 
             
                case ruby_type
         | 
| 25 25 | 
             
                when :integer
         | 
| 26 26 | 
             
                  'Edm.Int32'
         | 
| 27 27 | 
             
                when :string
         | 
| 28 28 | 
             
                  'Edm.String'
         | 
| 29 | 
            -
                when :date | 
| 29 | 
            +
                when :date
         | 
| 30 | 
            +
                  'Edm.DateTime'
         | 
| 31 | 
            +
                when :datetime
         | 
| 30 32 | 
             
                  'Edm.DateTime'
         | 
| 31 33 | 
             
                when :time
         | 
| 32 34 | 
             
                  'Edm.Time'
         | 
| @@ -38,6 +40,10 @@ module Safrano | |
| 38 40 | 
             
                  'Edm.Decimal'
         | 
| 39 41 | 
             
                when :blob
         | 
| 40 42 | 
             
                  'Edm.Binary'
         | 
| 43 | 
            +
                else  # try with db_type:
         | 
| 44 | 
            +
                  if ( db_type =~ /\ANUMERIC/ )
         | 
| 45 | 
            +
                    'Edm.Decimal'
         | 
| 46 | 
            +
                  end
         | 
| 41 47 | 
             
                end
         | 
| 42 48 | 
             
              end
         | 
| 43 49 |  | 
    
        data/lib/odata/entity.rb
    CHANGED
    
    | @@ -311,7 +311,7 @@ module Safrano | |
| 311 311 | 
             
              end
         | 
| 312 312 |  | 
| 313 313 | 
             
              module MappingBeforeOutput
         | 
| 314 | 
            -
                # needed for proper datetime output
         | 
| 314 | 
            +
                # needed for proper datetime or Decimal output
         | 
| 315 315 | 
             
                def casted_values(cols = nil)
         | 
| 316 316 | 
             
                  vals = case cols
         | 
| 317 317 | 
             
                         when nil
         | 
| @@ -322,6 +322,10 @@ module Safrano | |
| 322 322 | 
             
                         else
         | 
| 323 323 | 
             
                           selected_values_for_odata(cols)
         | 
| 324 324 | 
             
                         end
         | 
| 325 | 
            +
                  # TODO better design (perf/ do more during startup and less during request runtime )    
         | 
| 326 | 
            +
                  # TODO replace the quick and dirty BigDecimal hack with something better      
         | 
| 327 | 
            +
                  self.class.decimal_cols.each { |dc| vals[dc] = BigDecimal(vals[dc].to_s).to_s('F') if vals.key?(dc) }
         | 
| 328 | 
            +
                         
         | 
| 325 329 | 
             
                  self.class.time_cols.each { |tc| vals[tc] = vals[tc]&.iso8601 if vals.key?(tc) }
         | 
| 326 330 | 
             
                  vals
         | 
| 327 331 | 
             
                end
         | 
    
        data/lib/odata/model_ext.rb
    CHANGED
    
    | @@ -6,6 +6,7 @@ | |
| 6 6 |  | 
| 7 7 | 
             
            require 'json'
         | 
| 8 8 | 
             
            require 'rexml/document'
         | 
| 9 | 
            +
            require 'bigdecimal'
         | 
| 9 10 | 
             
            require_relative '../safrano/core'
         | 
| 10 11 | 
             
            require_relative 'error'
         | 
| 11 12 | 
             
            require_relative 'collection_filter'
         | 
| @@ -32,6 +33,7 @@ module Safrano | |
| 32 33 | 
             
                attr_reader :uri
         | 
| 33 34 | 
             
                attr_reader :odata_upk_parts
         | 
| 34 35 | 
             
                attr_reader :time_cols
         | 
| 36 | 
            +
                attr_reader :decimal_cols
         | 
| 35 37 | 
             
                attr_reader :namespace
         | 
| 36 38 |  | 
| 37 39 | 
             
                # initialising block of code to be executed at end of
         | 
| @@ -73,7 +75,7 @@ module Safrano | |
| 73 75 | 
             
                  @uparms = nil
         | 
| 74 76 | 
             
                  @params = nil
         | 
| 75 77 | 
             
                  @cx = nil
         | 
| 76 | 
            -
                  @@time_cols = nil
         | 
| 78 | 
            +
            #      @@time_cols = nil
         | 
| 77 79 | 
             
                end
         | 
| 78 80 |  | 
| 79 81 | 
             
                def build_uri(uribase)
         | 
| @@ -358,11 +360,16 @@ module Safrano | |
| 358 360 | 
             
                  # Time columns
         | 
| 359 361 | 
             
                  @time_cols = db_schema.select { |_c, v| v[:type] == :datetime }.map { |c, _v| c }
         | 
| 360 362 |  | 
| 363 | 
            +
                  
         | 
| 364 | 
            +
             | 
| 361 365 | 
             
                  # add edm_types into schema
         | 
| 362 366 | 
             
                  db_schema.each do |_col, props|
         | 
| 363 | 
            -
                    props[:odata_edm_type] = Safrano.default_edm_type(ruby_type: props[:type] | 
| 367 | 
            +
                    props[:odata_edm_type] = Safrano.default_edm_type(ruby_type: props[:type],
         | 
| 368 | 
            +
                                                                      db_type: props[:db_type])
         | 
| 364 369 | 
             
                  end
         | 
| 365 | 
            -
             | 
| 370 | 
            +
                  # Edm.Decimal cols
         | 
| 371 | 
            +
                  @decimal_cols = db_schema.select { |_c, v| v[:odata_edm_type] == 'Edm.Decimal' }.map { |c, _v| c }
         | 
| 372 | 
            +
                  
         | 
| 366 373 | 
             
                  # and finally build the path lists and allowed tr's
         | 
| 367 374 | 
             
                  build_attribute_path_list
         | 
| 368 375 | 
             
                  build_expand_path_list
         | 
    
        data/lib/safrano/service.rb
    CHANGED
    
    | @@ -375,7 +375,8 @@ module Safrano | |
| 375 375 | 
             
                  # finalize the uri's and include NoMappingBeforeOutput or MappingBeforeOutput as needed
         | 
| 376 376 | 
             
                  @collections.each do |klass|
         | 
| 377 377 | 
             
                    klass.build_uri(@uribase)
         | 
| 378 | 
            -
                     | 
| 378 | 
            +
                    # TODO perf 
         | 
| 379 | 
            +
                    klass.include( (klass.time_cols.empty? && klass.decimal_cols.empty?) ? Safrano::NoMappingBeforeOutput : Safrano::MappingBeforeOutput)
         | 
| 379 380 |  | 
| 380 381 | 
             
                    # Output create (POST) as single entity (Standard) or as array (non-standard buggy)
         | 
| 381 382 | 
             
                    klass.include ( @bugfix_create_response ? Safrano::EntityCreateStandardOutput : Safrano::EntityCreateArrayOutput)
         | 
| @@ -504,7 +505,9 @@ module Safrano | |
| 504 505 | 
             
                  doc.add_element('edmx:Edmx', 'Version' => '1.0')
         | 
| 505 506 | 
             
                  doc.root.add_namespace('xmlns:edmx', XMLNS::MSFT_ADO_2007_EDMX)
         | 
| 506 507 | 
             
                  serv = doc.root.add_element('edmx:DataServices',
         | 
| 507 | 
            -
             | 
| 508 | 
            +
                  # TODO: export the real version (result from version negotions)
         | 
| 509 | 
            +
                  # but currently we support only v1 and v2, and most users will use v2
         | 
| 510 | 
            +
                                              'm:DataServiceVersion' => '2.0')
         | 
| 508 511 | 
             
                  # 'm:DataServiceVersion' => "#{self.dataServiceVersion}" )
         | 
| 509 512 | 
             
                  # DataServiceVersion: This attribute MUST be in the data service
         | 
| 510 513 | 
             
                  # metadata namespace
         | 
    
        data/lib/safrano/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: safrano
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.5. | 
| 4 | 
            +
              version: 0.5.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - oz
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2021- | 
| 11 | 
            +
            date: 2021-07-10 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rack
         |