infopark_reactor 1.14.0.beta2 → 1.15.0.beta1
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/app/models/rails_connector/blob_mapping.rb +4 -0
- data/lib/infopark_reactor.rb +3 -0
- data/lib/rails_connector/meta/eager_loader.rb +91 -0
- data/lib/reactor/attributes.rb +2 -2
- data/lib/reactor/cm/obj_class.rb +15 -2
- data/lib/reactor/configuration.rb +3 -0
- data/lib/reactor/persistence.rb +10 -6
- data/lib/reactor/session.rb +8 -1
- data/lib/reactor/sudo.rb +4 -3
- data/lib/reactor/version.rb +1 -1
- metadata +3 -3
- data/app/models/rails_connector/meta/eager_loader.rb +0 -41
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: a56b31ba2e29489af380f651342ddc82f3b542d3
         | 
| 4 | 
            +
              data.tar.gz: 9ed150774b911bb3dfb2c311d7a84dff1dc4fd72
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 78174cc1ebf120f5f844e1ebcb26c1f1e4245cb63bd03540bca50a380e455717c11580e4607a62e2406f1392991f1686670e7d39b5930259b598f3290dc3b134
         | 
| 7 | 
            +
              data.tar.gz: 4faab19e5c534b811533d7a106057c03ed9fc2cff51fc70013a1743d2460db98e05ca12aa8d04bae89bedea2e4c3c3defc9004eb1afb2a2dd0884eeeba889ca4
         | 
| @@ -8,5 +8,9 @@ module RailsConnector | |
| 8 8 | 
             
                def self.get_fingerprint(name)
         | 
| 9 9 | 
             
                  find_by_blob_name(name).fingerprint
         | 
| 10 10 | 
             
                end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def self.get_fingerprint_map(blob_names)
         | 
| 13 | 
            +
                  Hash[self.where(:blob_name => blob_names).select([:blob_name, :fingerprint]).map {|b| [b.blob_name, b.fingerprint] }]
         | 
| 14 | 
            +
                end
         | 
| 11 15 | 
             
              end
         | 
| 12 16 | 
             
            end
         | 
    
        data/lib/infopark_reactor.rb
    CHANGED
    
    | @@ -69,6 +69,9 @@ require 'reactor/already_released' | |
| 69 69 | 
             
            require 'reactor/no_working_version'
         | 
| 70 70 | 
             
            require 'reactor/not_permitted'
         | 
| 71 71 |  | 
| 72 | 
            +
            # require eager loader
         | 
| 73 | 
            +
            require 'rails_connector/meta/eager_loader'
         | 
| 74 | 
            +
             | 
| 72 75 | 
             
            # require components
         | 
| 73 76 | 
             
            require 'reactor/main'
         | 
| 74 77 | 
             
            require 'reactor/rc_independent'
         | 
| @@ -0,0 +1,91 @@ | |
| 1 | 
            +
            # -*- encoding : utf-8 -*-
         | 
| 2 | 
            +
            require 'singleton'
         | 
| 3 | 
            +
            require 'set'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module RailsConnector
         | 
| 6 | 
            +
              module Meta
         | 
| 7 | 
            +
                class EagerLoader
         | 
| 8 | 
            +
                  include Singleton
         | 
| 9 | 
            +
                  attr_reader :obj_classes
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  def initialize
         | 
| 12 | 
            +
                    # Rails.logger.debug "EagerLoader: I am eager to start working"
         | 
| 13 | 
            +
                    @obj_classes = {}
         | 
| 14 | 
            +
                    # Rails 3.1 contains a bug that screws attribute loading
         | 
| 15 | 
            +
                    # attributes are set to assigned classes
         | 
| 16 | 
            +
                    if ::Rails::VERSION::MAJOR == 3 && ::Rails::VERSION::MINOR == 1
         | 
| 17 | 
            +
                      RailsConnector::ObjClass.all.each do |obj_class|
         | 
| 18 | 
            +
                        obj_class.custom_attributes
         | 
| 19 | 
            +
                        @obj_classes[obj_class.name] = obj_class
         | 
| 20 | 
            +
                      end
         | 
| 21 | 
            +
                    else
         | 
| 22 | 
            +
                      RailsConnector::ObjClass.includes(:custom_attributes_raw).all.each do |obj_class|
         | 
| 23 | 
            +
                        @obj_classes[obj_class.name] = obj_class
         | 
| 24 | 
            +
                      end
         | 
| 25 | 
            +
                      preload_attribute_blobs
         | 
| 26 | 
            +
                    end
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  def obj_class(name)
         | 
| 30 | 
            +
                    name = name.to_s
         | 
| 31 | 
            +
                    if !@obj_classes.fetch(name, nil).nil?
         | 
| 32 | 
            +
                      @obj_classes[name]
         | 
| 33 | 
            +
                    else
         | 
| 34 | 
            +
                      # TODO: preload_attribute_blobs for obj_class
         | 
| 35 | 
            +
                      @obj_classes[name] ||= RailsConnector::ObjClass.find_by_obj_class_name(name)
         | 
| 36 | 
            +
                    end
         | 
| 37 | 
            +
                  end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                  def forget_obj_class(name)
         | 
| 40 | 
            +
                    @obj_classes.delete(name.to_s)
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  protected
         | 
| 44 | 
            +
                  def preload_attribute_blobs
         | 
| 45 | 
            +
                    attribute_names = Set.new
         | 
| 46 | 
            +
                    @obj_classes.each do |_, obj_class|
         | 
| 47 | 
            +
                      obj_class.custom_attributes.each do |attribute_name, _|
         | 
| 48 | 
            +
                        attribute_names << attribute_name
         | 
| 49 | 
            +
                      end
         | 
| 50 | 
            +
                    end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                    blob_names = attribute_names.map {|attribute_name| "#{attribute_name}.jsonAttributeDict" }
         | 
| 53 | 
            +
                    # Fiona >= 6.8
         | 
| 54 | 
            +
                    if RailsConnector::BlobMapping.exists?
         | 
| 55 | 
            +
                      blob_names               = attribute_names.map {|attribute_name| "#{attribute_name}.jsonAttributeDict" }
         | 
| 56 | 
            +
                      fingerprint_map          = RailsConnector::BlobMapping.get_fingerprint_map(blob_names)
         | 
| 57 | 
            +
                      blob_fingerprints        = fingerprint_map.values
         | 
| 58 | 
            +
                      # NOTE: this is correct! 
         | 
| 59 | 
            +
                      blobs                    = RailsConnector::Blob.where(:blob_name => blob_fingerprints).to_a
         | 
| 60 | 
            +
                      blob_map                 = Hash[blobs.map {|b| [b.blob_name, b]}]
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                      @obj_classes.each do |_, obj_class|
         | 
| 63 | 
            +
                        obj_class.custom_attributes.each do |_, attribute|
         | 
| 64 | 
            +
                          blob_name   = "#{attribute.name}.jsonAttributeDict"
         | 
| 65 | 
            +
                          fingerprint = fingerprint_map[blob_name]
         | 
| 66 | 
            +
                          blob        = blob_map[fingerprint]
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                          next unless blob && blob.blob_data?
         | 
| 69 | 
            +
                          attribute.instance_variable_set(:@blob_data, ::JSON.parse(blob.blob_data))
         | 
| 70 | 
            +
                        end
         | 
| 71 | 
            +
                      end
         | 
| 72 | 
            +
                    # Fiona = 6.7
         | 
| 73 | 
            +
                    else
         | 
| 74 | 
            +
                      blob_names               = attribute_names.map {|attribute_name| "#{attribute_name}.jsonAttributeDict" }
         | 
| 75 | 
            +
                      blobs                    = RailsConnector::Blob.where(:blob_name => blob_names).to_a
         | 
| 76 | 
            +
                      blob_map                 = Hash[blobs.map {|b| [b.blob_name, b]}]
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                      @obj_classes.each do |_, obj_class|
         | 
| 79 | 
            +
                        obj_class.custom_attributes.each do |_, attribute|
         | 
| 80 | 
            +
                          blob_name   = "#{attribute.name}.jsonAttributeDict"
         | 
| 81 | 
            +
                          blob        = blob_map[blob_name]
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                          next unless blob && blob.blob_data?
         | 
| 84 | 
            +
                          attribute.instance_variable_set(:@blob_data, ::JSON.parse(blob.blob_data))
         | 
| 85 | 
            +
                        end
         | 
| 86 | 
            +
                      end
         | 
| 87 | 
            +
                    end
         | 
| 88 | 
            +
                  end
         | 
| 89 | 
            +
                end
         | 
| 90 | 
            +
              end
         | 
| 91 | 
            +
            end
         | 
    
        data/lib/reactor/attributes.rb
    CHANGED
    
    | @@ -41,7 +41,7 @@ module Reactor | |
| 41 41 | 
             
                end
         | 
| 42 42 |  | 
| 43 43 | 
             
                def regenerate_attribute_handler(obj_class_name)
         | 
| 44 | 
            -
                  generate_attribute_handler(RailsConnector:: | 
| 44 | 
            +
                  generate_attribute_handler(RailsConnector::Meta::EagerLoader.instance.obj_class(obj_class_name))
         | 
| 45 45 | 
             
                end
         | 
| 46 46 |  | 
| 47 47 | 
             
                protected
         | 
| @@ -55,7 +55,7 @@ module Reactor | |
| 55 55 | 
             
                end
         | 
| 56 56 |  | 
| 57 57 | 
             
                def generate_attribute_handlers
         | 
| 58 | 
            -
                  RailsConnector:: | 
| 58 | 
            +
                  RailsConnector::Meta::EagerLoader.instance.obj_classes.each do |_, obj_class|
         | 
| 59 59 | 
             
                    # Rails.logger.debug "Reactor::AttributeHandlers: preparing obj class #{obj_class.name}"
         | 
| 60 60 | 
             
                    generate_attribute_handler(obj_class) if obj_class.name =~ /^[A-Z]/
         | 
| 61 61 | 
             
                  end
         | 
    
        data/lib/reactor/cm/obj_class.rb
    CHANGED
    
    | @@ -58,7 +58,12 @@ module Reactor | |
| 58 58 | 
             
                    result = [result] unless result.kind_of?(Array)
         | 
| 59 59 | 
             
                    result.map do |dictitem|
         | 
| 60 60 | 
             
                      key = dictitem.children.detect {|c| c.name == 'key'}.text
         | 
| 61 | 
            -
                       | 
| 61 | 
            +
                      raw_value = dictitem.children.detect {|c| c.name == 'value'}
         | 
| 62 | 
            +
                      if raw_value.children.detect {|c| c.kind_of?(::REXML::Text) }
         | 
| 63 | 
            +
                        value = raw_value.text
         | 
| 64 | 
            +
                      else
         | 
| 65 | 
            +
                        value = raw_value.children.map {|c| c.text }
         | 
| 66 | 
            +
                      end
         | 
| 62 67 | 
             
                      {key => value}
         | 
| 63 68 | 
             
                    end.inject({}, &:merge)
         | 
| 64 69 | 
             
                  end
         | 
| @@ -86,7 +91,15 @@ module Reactor | |
| 86 91 | 
             
                                  xml.text!(key.to_s)
         | 
| 87 92 | 
             
                                end
         | 
| 88 93 | 
             
                                xml.tag!('value') do
         | 
| 89 | 
            -
                                   | 
| 94 | 
            +
                                  if value.kind_of?(Array)
         | 
| 95 | 
            +
                                    value.each do |item|
         | 
| 96 | 
            +
                                      xml.tag!('listitem') do
         | 
| 97 | 
            +
                                        xml.text!(item.to_s)
         | 
| 98 | 
            +
                                      end
         | 
| 99 | 
            +
                                    end
         | 
| 100 | 
            +
                                  else
         | 
| 101 | 
            +
                                    xml.text!(value.to_s)
         | 
| 102 | 
            +
                                  end
         | 
| 90 103 | 
             
                                end
         | 
| 91 104 | 
             
                              end
         | 
| 92 105 | 
             
                            end
         | 
    
        data/lib/reactor/persistence.rb
    CHANGED
    
    | @@ -481,12 +481,16 @@ module Reactor | |
| 481 481 | 
             
                end
         | 
| 482 482 | 
             
                module ClassMethods
         | 
| 483 483 | 
             
                  def sanitize_name(old_name)
         | 
| 484 | 
            -
                     | 
| 485 | 
            -
             | 
| 486 | 
            -
             | 
| 487 | 
            -
             | 
| 488 | 
            -
             | 
| 489 | 
            -
             | 
| 484 | 
            +
                    if Reactor::Configuration.sanitize_obj_name
         | 
| 485 | 
            +
                      character_map = {'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'ß' => 'ss', 'Ä' => 'Ae', 'Ö' => 'Oe', 'Ü' => 'Ue'}
         | 
| 486 | 
            +
                      new_name = old_name.gsub(/[^-$a-zA-Z0-9]/) {|char| character_map[char] || '_'}.
         | 
| 487 | 
            +
                        gsub(/__+/,'_').
         | 
| 488 | 
            +
                        gsub(/^_+/,'').
         | 
| 489 | 
            +
                        gsub(/_+$/,'')
         | 
| 490 | 
            +
                      new_name
         | 
| 491 | 
            +
                    else
         | 
| 492 | 
            +
                      old_name
         | 
| 493 | 
            +
                    end
         | 
| 490 494 | 
             
                  end
         | 
| 491 495 |  | 
| 492 496 | 
             
                  if Reactor.rails4_x?
         | 
    
        data/lib/reactor/session.rb
    CHANGED
    
    | @@ -10,7 +10,14 @@ class Reactor::Session | |
| 10 10 | 
             
              include Observable
         | 
| 11 11 |  | 
| 12 12 | 
             
              def self.instance
         | 
| 13 | 
            -
                self. | 
| 13 | 
            +
                self.for(Reactor::Configuration.xml_access[:username])
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              def self.for(user_name)
         | 
| 17 | 
            +
                self.new.tap do |instance|
         | 
| 18 | 
            +
                  instance.instance_variable_set(:@user_name, user_name)
         | 
| 19 | 
            +
                  instance.send(:proper_notify_observers, user_name, false)
         | 
| 20 | 
            +
                end
         | 
| 14 21 | 
             
              end
         | 
| 15 22 |  | 
| 16 23 | 
             
              def marshal_dump
         | 
    
        data/lib/reactor/sudo.rb
    CHANGED
    
    | @@ -2,11 +2,12 @@ | |
| 2 2 | 
             
            module Reactor
         | 
| 3 3 | 
             
              module Sudo
         | 
| 4 4 | 
             
                def self.su(other_user_name, &block)
         | 
| 5 | 
            -
                   | 
| 6 | 
            -
                   | 
| 5 | 
            +
                  rsession           = Reactor::Session.instance
         | 
| 6 | 
            +
                  current_user_name  = rsession.user_name
         | 
| 7 | 
            +
                  rsession.user_name = other_user_name
         | 
| 7 8 | 
             
                  yield
         | 
| 8 9 | 
             
                ensure
         | 
| 9 | 
            -
                   | 
| 10 | 
            +
                  rsession.user_name = current_user_name || 'root'
         | 
| 10 11 | 
             
                end
         | 
| 11 12 | 
             
              end
         | 
| 12 13 | 
             
            end
         | 
    
        data/lib/reactor/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: infopark_reactor
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.15.0.beta1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Tomasz Przedmojski
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015- | 
| 11 | 
            +
            date: 2015-09-25 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rails
         | 
| @@ -105,7 +105,6 @@ files: | |
| 105 105 | 
             
            - app/models/rails_connector/blob_mapping.rb
         | 
| 106 106 | 
             
            - app/models/rails_connector/channel.rb
         | 
| 107 107 | 
             
            - app/models/rails_connector/content.rb
         | 
| 108 | 
            -
            - app/models/rails_connector/meta/eager_loader.rb
         | 
| 109 108 | 
             
            - app/models/rails_connector/obj_class.rb
         | 
| 110 109 | 
             
            - app/models/rails_connector/obj_class_attr.rb
         | 
| 111 110 | 
             
            - app/models/rails_connector/object_with_meta_data.rb
         | 
| @@ -115,6 +114,7 @@ files: | |
| 115 114 | 
             
            - lib/generators/cm/migration/migration_generator.rb
         | 
| 116 115 | 
             
            - lib/generators/cm/migration/templates/template.rb
         | 
| 117 116 | 
             
            - lib/infopark_reactor.rb
         | 
| 117 | 
            +
            - lib/rails_connector/meta/eager_loader.rb
         | 
| 118 118 | 
             
            - lib/reactor/already_released.rb
         | 
| 119 119 | 
             
            - lib/reactor/attributes.rb
         | 
| 120 120 | 
             
            - lib/reactor/attributes/date_serializer.rb
         | 
| @@ -1,41 +0,0 @@ | |
| 1 | 
            -
            # -*- encoding : utf-8 -*-
         | 
| 2 | 
            -
            require 'singleton'
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            module RailsConnector
         | 
| 5 | 
            -
              module Meta
         | 
| 6 | 
            -
                class EagerLoader
         | 
| 7 | 
            -
                  include Singleton
         | 
| 8 | 
            -
                  def initialize
         | 
| 9 | 
            -
                    # Rails.logger.debug "EagerLoader: I am eager to start working"
         | 
| 10 | 
            -
                    @obj_classes = {}
         | 
| 11 | 
            -
                    # Rails 3.1 contains a bug that screws attribute loading
         | 
| 12 | 
            -
                    # attributes are set to assigned classes
         | 
| 13 | 
            -
                    if ::Rails::VERSION::MAJOR == 3 && ::Rails::VERSION::MINOR == 1
         | 
| 14 | 
            -
                      RailsConnector::ObjClass.all.each do |obj_class|
         | 
| 15 | 
            -
                        obj_class.custom_attributes
         | 
| 16 | 
            -
                        @obj_classes[obj_class.name] = obj_class
         | 
| 17 | 
            -
                      end
         | 
| 18 | 
            -
                    else
         | 
| 19 | 
            -
                      RailsConnector::ObjClass.includes(:custom_attributes_raw).all.each do |obj_class|
         | 
| 20 | 
            -
                        @obj_classes[obj_class.name] = obj_class
         | 
| 21 | 
            -
                      end
         | 
| 22 | 
            -
                    end
         | 
| 23 | 
            -
                  end
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                  def obj_class(name)
         | 
| 26 | 
            -
                    name = name.to_s
         | 
| 27 | 
            -
                    if !@obj_classes.fetch(name, nil).nil?
         | 
| 28 | 
            -
                      # puts "EagerLoader: I've already loaded it: #{name}"
         | 
| 29 | 
            -
                      @obj_classes[name]
         | 
| 30 | 
            -
                    else
         | 
| 31 | 
            -
                      # puts "EagerLoader: NO HAVE: #{name}"
         | 
| 32 | 
            -
                      @obj_classes[name] ||= RailsConnector::ObjClass.find_by_obj_class_name(name)
         | 
| 33 | 
            -
                    end
         | 
| 34 | 
            -
                  end
         | 
| 35 | 
            -
             | 
| 36 | 
            -
                  def forget_obj_class(name)
         | 
| 37 | 
            -
                    @obj_classes.delete(name.to_s)
         | 
| 38 | 
            -
                  end
         | 
| 39 | 
            -
                end
         | 
| 40 | 
            -
              end
         | 
| 41 | 
            -
            end
         |