yus 1.0.1 → 1.0.2
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 +15 -0
- data/Guide.txt +62 -75
- data/History.txt +7 -0
- data/bin/yus_add_user +1 -0
- data/bin/yus_delete_user +1 -0
- data/bin/yus_grant +1 -0
- data/bin/yus_passwd +1 -0
- data/bin/yus_show +1 -0
- data/bin/yusd +1 -0
- data/lib/yus/server.rb +1 -1
- data/lib/yus/session.rb +27 -5
- data/test/suite.rb +7 -0
- data/test/test_entity.rb +5 -8
- data/test/test_privilege.rb +3 -2
- data/test/test_server.rb +8 -13
- data/test/test_session.rb +114 -41
- metadata +10 -16
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            !binary "U0hBMQ==":
         | 
| 3 | 
            +
              metadata.gz: !binary |-
         | 
| 4 | 
            +
                NzBiN2NhYjE5MzU5YzAxZDZmZDk1MzI4OTE0YmIwYmUxOWQ5ZmNlOQ==
         | 
| 5 | 
            +
              data.tar.gz: !binary |-
         | 
| 6 | 
            +
                YjNiNThjNmY0ZjYxZWE2YTg1MzkyYThmYmQ1YzczYzBjYTg1MjQ0OQ==
         | 
| 7 | 
            +
            SHA512:
         | 
| 8 | 
            +
              metadata.gz: !binary |-
         | 
| 9 | 
            +
                MzhlMzYxYzUyYzY2NzAyYjg1MWZjMzNiYmNhODQ2MWQyZThkYjBkZDdkNDgx
         | 
| 10 | 
            +
                OWMzOTM0MjFiOTY3YjkxMzA4MzIwNzExNWIwMWFiNjk5OWE0NjJjZmI4MGU5
         | 
| 11 | 
            +
                MmU0M2M1NDk2YzYxYzliOWY4YmIyZTBjYTJhYTBlYjVmNWQyMGE=
         | 
| 12 | 
            +
              data.tar.gz: !binary |-
         | 
| 13 | 
            +
                YTFmODdiNjkwNzcyZjViYTc1NjQzMmZhYjQyNDAyNTE0NjgyYTFjMThjNzdk
         | 
| 14 | 
            +
                YThkYmJlZjQxZDBmOTQ2ZGMwZTRmZDQyY2ViMmIxYjhlOTYwMzk2YmQ5ODM5
         | 
| 15 | 
            +
                MzMzM2QyNzA1MGZiOWQyMDk1YjZiYmE3YmVmYjFjNTI2ZDM0NDQ=
         | 
    
        data/Guide.txt
    CHANGED
    
    | @@ -3,64 +3,73 @@ | |
| 3 3 | 
             
            If you want to know why this software exists, please read the README file of
         | 
| 4 4 | 
             
            ch.oddb.org at scm.ywesee.com
         | 
| 5 5 |  | 
| 6 | 
            -
            yus is only running  | 
| 6 | 
            +
            yus is only running under Ruby1.8 (Ruby 1.9 and 2.0 have problems in the gem needle which calls Threads.critical=)
         | 
| 7 7 |  | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
              ssh-keygen -t rsa
         | 
| 11 | 
            -
             | 
| 12 | 
            -
            do _not_ set a password for the key otherwise yus-server will always
         | 
| 13 | 
            -
            ask you for a password at startup-time. The password you set will be
         | 
| 14 | 
            -
            with the sha256.rb.
         | 
| 8 | 
            +
            You must have a working installation of Ruby 1.8 and git.
         | 
| 15 9 |  | 
| 16 | 
            -
             | 
| 10 | 
            +
            git clone https://github.com/zdavatz/yus.git
         | 
| 11 | 
            +
            cd yus
         | 
| 12 | 
            +
            gem install bundler          # unless you already have bundler installed
         | 
| 13 | 
            +
            bundle install
         | 
| 14 | 
            +
            bundle exec rake gem_install 
         | 
| 17 15 |  | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 16 | 
            +
            # Setup the necessary configuration files. In this example we use
         | 
| 17 | 
            +
            # user_tom as username and domain.com as the domain-name.
         | 
| 18 | 
            +
            # He must be reachable by email via user_tom@domain.com
         | 
| 19 | 
            +
            # Please adapt this to your need!
         | 
| 21 20 |  | 
| 22 | 
            -
             | 
| 21 | 
            +
            sudo mkdir -p /etc/yus/data/
         | 
| 23 22 |  | 
| 24 | 
            -
             | 
| 23 | 
            +
            If you do not yet have a private key you will have to create one with 
         | 
| 25 24 |  | 
| 26 | 
            -
             | 
| 25 | 
            +
              ssh-keygen -t rsa -f /etc/yus/user_tom
         | 
| 27 26 |  | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 27 | 
            +
            do _not_ set a password for the key otherwise yus-server will always
         | 
| 28 | 
            +
            ask you for a password at startup-time. You will set a password later
         | 
| 29 | 
            +
            using sha256.rb.
         | 
| 30 30 |  | 
| 31 | 
            -
             | 
| 31 | 
            +
            ssh-keygen should have created the following two files
         | 
| 32 | 
            +
              /etc/yus/data/user_tom.pub 
         | 
| 33 | 
            +
              /etc/yus/data/user_tom
         | 
| 32 34 |  | 
| 33 | 
            -
             | 
| 34 | 
            -
              /etc/yus/data/yus.key
         | 
| 35 | 
            +
            Create the file /etc/yus/data/user_tom.crt, by calling
         | 
| 35 36 |  | 
| 36 | 
            -
             | 
| 37 | 
            +
              openssl req -key /etc/yus/data/user_tom -out /etc/yus/data/user_tom.crt  -new -x509 -batch -passin pass:''
         | 
| 37 38 |  | 
| 38 | 
            -
             | 
| 39 | 
            +
            Determine the SHA256 value of the root_pass (password for the yus root user, in this example hatakeyama). We
         | 
| 40 | 
            +
            use the sha256.rb which is in the root of the yus checkout.
         | 
| 39 41 |  | 
| 40 | 
            -
             | 
| 42 | 
            +
              ruby sha256.rb hatakeyama
         | 
| 43 | 
            +
              
         | 
| 44 | 
            +
            Create the file /etc/yus/yus.yml with the following content (using the output of the previous command)
         | 
| 41 45 |  | 
| 42 | 
            -
             | 
| 43 | 
            -
              root_name:  | 
| 44 | 
            -
              root_pass:  | 
| 46 | 
            +
            ---
         | 
| 47 | 
            +
              root_name: user_tom@domain.com
         | 
| 48 | 
            +
              root_pass: 48714061119f3bb753a0c63dd4230f641ab79e58eb603fc263925c53580acdf1 # [the SHA2-hash of your password]
         | 
| 45 49 | 
             
              log_level: DEBUG
         | 
| 46 | 
            -
              ssl_key: | 
| 47 | 
            -
              ssl_cert: /etc/yus/data/ | 
| 50 | 
            +
              ssl_key:  /etc/yus/data/user_tom      # [path to an rsa private key]
         | 
| 51 | 
            +
              ssl_cert: /etc/yus/data/user_tom.crt  # [path to a ssl x509 certificate]
         | 
| 48 52 | 
             
              session_timeout: 3600
         | 
| 49 53 |  | 
| 50 | 
            -
             | 
| 54 | 
            +
            Setup the PostgresDB like this
         | 
| 55 | 
            +
             | 
| 56 | 
            +
              sudo -iHu postgres
         | 
| 57 | 
            +
              psql -c "create user yus with password 'hatakeyama';"
         | 
| 58 | 
            +
              psql -c "create database yus with encoding 'utf-8' template template0;"
         | 
| 59 | 
            +
              psql -c "grant all privileges  on database yus to yus";
         | 
| 60 | 
            +
              exit
         | 
| 61 | 
            +
             | 
| 62 | 
            +
            Verify that you have a line in you postgres /etc/postgresql-<veryion>/pg_hba.conf like the following
         | 
| 63 | 
            +
              local   all         all                               trust
         | 
| 51 64 |  | 
| 52 | 
            -
             | 
| 65 | 
            +
            If not you will get errors like this 'FATAL:  Peer authentication failed for user "yus" (DBI::OperationalError)' while verifying
         | 
| 66 | 
            +
            that you can connect to your new postgres database yus as user yus. When asked for the password answer with hatakeyama
         | 
| 53 67 |  | 
| 54 | 
            -
               | 
| 55 | 
            -
              require 'digest/sha2'
         | 
| 56 | 
            -
              print "password: ", ARGV[0], "\n"
         | 
| 57 | 
            -
              print "SHA256 encoding: ",Digest::SHA256.hexdigest(ARGV[0]),"\n"
         | 
| 68 | 
            +
              psql --user=yus --host=localhost --password yus -c '\dT'
         | 
| 58 69 |  | 
| 59 | 
            -
             | 
| 70 | 
            +
            Now you should be able to start the yus-daemon
         | 
| 60 71 |  | 
| 61 | 
            -
               | 
| 62 | 
            -
              password: hatakeyama
         | 
| 63 | 
            -
              SHA256 encoding: 48714061119f3bb753a0c63dd4230f641ab79e58eb603fc263925c53580acdf1
         | 
| 72 | 
            +
              bin/yusd &
         | 
| 64 73 |  | 
| 65 74 | 
             
            == Note
         | 
| 66 75 |  | 
| @@ -74,20 +83,13 @@ To create root_pass do | |
| 74 83 | 
             
                  starts. root_pass and ssl_key are independent from each other. The password does
         | 
| 75 84 | 
             
                  not have to be the same.
         | 
| 76 85 |  | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
              /etc/yus/yus.yml 
         | 
| 80 | 
            -
             | 
| 81 | 
            -
            for the yus server setup. When you start the yus server or you use yus admin
         | 
| 82 | 
            -
            commands, the server asks you for the password.
         | 
| 86 | 
            +
            Create a new user with
         | 
| 83 87 |  | 
| 84 | 
            -
             | 
| 85 | 
            -
              
         | 
| 86 | 
            -
            * openssl req -new -x509 -key .ssh/id_rsa -out .ssh/id_rsa.crt
         | 
| 88 | 
            +
              yus_add_user user_tom@domain.com login org.oddb.RootUser
         | 
| 87 89 |  | 
| 88 | 
            -
             | 
| 90 | 
            +
            Verify that everthings is okay by calling
         | 
| 89 91 |  | 
| 90 | 
            -
               | 
| 92 | 
            +
              yus_show user_tom@domain.com
         | 
| 91 93 |  | 
| 92 94 | 
             
            == NOTE
         | 
| 93 95 |  | 
| @@ -108,12 +110,8 @@ Create a new user with | |
| 108 110 | 
             
              >      end
         | 
| 109 111 | 
             
              >    }
         | 
| 110 112 | 
             
              >  end
         | 
| 111 | 
            -
             | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 114 | 
            -
              bin/yusd
         | 
| 115 | 
            -
             | 
| 116 | 
            -
            is running. Then you have to grant 
         | 
| 113 | 
            +
              
         | 
| 114 | 
            +
            Then you have to grant 
         | 
| 117 115 |  | 
| 118 116 | 
             
              yus_grant zdavatz@ywesee.com edit yus.entities  
         | 
| 119 117 |  | 
| @@ -158,28 +156,17 @@ For installing extensive user privileges for ch.oddb.org you need to do the foll | |
| 158 156 | 
             
              > become gray. The other box can be checked, but
         | 
| 159 157 | 
             
              > as a default of RootUser, the three privileges are checked.
         | 
| 160 158 |  | 
| 161 | 
            -
            To run the tests you  | 
| 162 | 
            -
             | 
| 163 | 
            -
              flexmock (0.8.6)
         | 
| 164 | 
            -
             | 
| 165 | 
            -
            == IMPORTANT
         | 
| 159 | 
            +
            To run the tests you call
         | 
| 166 160 |  | 
| 167 | 
            -
               | 
| 168 | 
            -
             
         | 
| 169 | 
            -
              also see: http://dev.ywesee.com/wiki.php/Michal/DayTwo#dbi
         | 
| 161 | 
            +
              bundle install
         | 
| 162 | 
            +
              bundle exec rake test
         | 
| 170 163 |  | 
| 171 | 
            -
             | 
| 172 | 
            -
              gem install odba
         | 
| 164 | 
            +
            == The setup is explained by
         | 
| 173 165 |  | 
| 174 | 
            -
             | 
| 175 | 
            -
             | 
| 176 | 
            -
             | 
| 177 | 
            -
              createuser yus
         | 
| 178 | 
            -
              createdb yus
         | 
| 179 | 
            -
              exit
         | 
| 180 | 
            -
              cd [yus-git-reposito]
         | 
| 181 | 
            -
              ruby bin/yusd
         | 
| 166 | 
            +
            * Masa in http://dev.ywesee.com/wiki.php/Masa/20101019-debug-importGkv#SetYus
         | 
| 167 | 
            +
            * Michal in http://dev.ywesee.com/wiki.php/Michal/DayTwo#dbi
         | 
| 168 | 
            +
            * Niklaus using a vagrant/puppet setup. See https://github.com/ngiger/vagrant-oddb_org
         | 
| 182 169 |  | 
| 183 | 
            -
             | 
| 170 | 
            +
            There exists a template to create the files under /etc/yus. Have a look at 
         | 
| 184 171 |  | 
| 185 | 
            -
            *  | 
| 172 | 
            +
            * https://github.com/ngiger/vagrant-oddb_org/blob/master/static-modules/oddb_org/templates/yus_grant_user.rb.erb
         | 
    
        data/History.txt
    CHANGED
    
    | @@ -1,3 +1,10 @@ | |
| 1 | 
            +
            === 1.0.2 / 01.10.2014
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            * Added bin/yus_dump to dump yus-database into data/yus_dump.yml
         | 
| 4 | 
            +
            * Added concerned user and result when logging allowed?
         | 
| 5 | 
            +
            * Improved unit-tests
         | 
| 6 | 
            +
            * Made travis-ci pass for 1.8.7 and 2.1.2
         | 
| 7 | 
            +
             | 
| 1 8 | 
             
            === 1.0.1 / 18.06.2013
         | 
| 2 9 |  | 
| 3 10 | 
             
            * Rename pg driver name to Pg
         | 
    
        data/bin/yus_add_user
    CHANGED
    
    
    
        data/bin/yus_delete_user
    CHANGED
    
    
    
        data/bin/yus_grant
    CHANGED
    
    
    
        data/bin/yus_passwd
    CHANGED
    
    
    
        data/bin/yus_show
    CHANGED
    
    
    
        data/bin/yusd
    CHANGED
    
    
    
        data/lib/yus/server.rb
    CHANGED
    
    
    
        data/lib/yus/session.rb
    CHANGED
    
    | @@ -4,6 +4,9 @@ | |
| 4 4 | 
             
            require 'drb'
         | 
| 5 5 | 
             
            require 'thread'
         | 
| 6 6 | 
             
            require 'yus/entity'
         | 
| 7 | 
            +
            require 'pp'
         | 
| 8 | 
            +
            require 'yaml'
         | 
| 9 | 
            +
             | 
| 7 10 | 
             
            begin 
         | 
| 8 11 | 
             
              require 'encoding/character/utf-8'
         | 
| 9 12 | 
             
            rescue LoadError
         | 
| @@ -30,6 +33,27 @@ module Yus | |
| 30 33 | 
             
                  }
         | 
| 31 34 | 
             
                  touch!
         | 
| 32 35 | 
             
                end
         | 
| 36 | 
            +
                def dump_to_yaml(yaml_name=nil)
         | 
| 37 | 
            +
                  yaml_name ||= File.expand_path(File.join(__FILE__, '..', '..', '..', 'data', 'yus_dump.yml'))
         | 
| 38 | 
            +
                  FileUtils.makedirs(File.dirname(yaml_name))
         | 
| 39 | 
            +
                  if entities.is_a?(Hash) # when running unit tests, where MockPersistence uses a Hash
         | 
| 40 | 
            +
                    File.open(yaml_name, 'w') { |f| YAML.dump(@needle.persistence, f) }
         | 
| 41 | 
            +
                  else
         | 
| 42 | 
            +
                    File.open(yaml_name, 'w') {
         | 
| 43 | 
            +
                      |fh|
         | 
| 44 | 
            +
                          ids = entities.collect { |item| item.odba_id }
         | 
| 45 | 
            +
                          ids.each { |odba_id|
         | 
| 46 | 
            +
                          begin
         | 
| 47 | 
            +
                            yaml = YAML.dump(ODBA.cache.fetch(odba_id, nil))
         | 
| 48 | 
            +
                            fh.puts yaml
         | 
| 49 | 
            +
                            fh.puts
         | 
| 50 | 
            +
                          rescue
         | 
| 51 | 
            +
                          end
         | 
| 52 | 
            +
                        }
         | 
| 53 | 
            +
                    }
         | 
| 54 | 
            +
                    info "dumped #{entities.size} entities to #{yaml_name}"
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
                end
         | 
| 33 57 | 
             
                def create_entity(name, valid_until=nil, valid_from=Time.now)
         | 
| 34 58 | 
             
                  info("create_entity(name=#{name}, valid_until=#{valid_until}, valid_from=#{valid_from})")
         | 
| 35 59 | 
             
                  entity = nil
         | 
| @@ -63,9 +87,6 @@ module Yus | |
| 63 87 | 
             
                    allow_or_fail('edit', 'yus.entities')
         | 
| 64 88 | 
             
                    user = find_or_fail(name)
         | 
| 65 89 | 
             
                    group = find_or_fail(groupname)
         | 
| 66 | 
            -
                    puts group.inspect
         | 
| 67 | 
            -
                    puts user.leave(group).inspect
         | 
| 68 | 
            -
                    puts user.inspect
         | 
| 69 90 | 
             
                    save(user, group)
         | 
| 70 91 | 
             
                  }
         | 
| 71 92 | 
             
                  touch!
         | 
| @@ -270,8 +291,9 @@ module Yus | |
| 270 291 | 
             
                  super(needle)
         | 
| 271 292 | 
             
                end
         | 
| 272 293 | 
             
                def allowed?(*args)
         | 
| 273 | 
            -
                   | 
| 274 | 
            -
                  @user.allowed?( | 
| 294 | 
            +
                  res = @user.allowed?(*args)
         | 
| 295 | 
            +
                  debug("#{@user.name} allowed?(#{args.join(', ')}) returns #{res}")
         | 
| 296 | 
            +
                  res
         | 
| 275 297 | 
             
                end
         | 
| 276 298 | 
             
                def name
         | 
| 277 299 | 
             
                  @user.name
         | 
    
        data/test/suite.rb
    CHANGED
    
    | @@ -3,6 +3,13 @@ | |
| 3 3 |  | 
| 4 4 | 
             
            $: << File.dirname(File.expand_path(__FILE__))
         | 
| 5 5 |  | 
| 6 | 
            +
            if /^1\.8/.match(RUBY_VERSION)
         | 
| 7 | 
            +
              gem 'minitest'
         | 
| 8 | 
            +
              require 'minitest/autorun'
         | 
| 9 | 
            +
            else
         | 
| 10 | 
            +
              require 'test/unit'
         | 
| 11 | 
            +
            end
         | 
| 12 | 
            +
             | 
| 6 13 | 
             
            Dir.foreach(File.dirname(__FILE__)) { |file|
         | 
| 7 14 | 
             
            	require file if /^test_.*\.rb$/o.match(file)
         | 
| 8 15 | 
             
            }
         | 
    
        data/test/test_entity.rb
    CHANGED
    
    | @@ -4,11 +4,12 @@ | |
| 4 4 |  | 
| 5 5 | 
             
            $: << File.expand_path('../lib', File.dirname(__FILE__))
         | 
| 6 6 |  | 
| 7 | 
            -
             | 
| 7 | 
            +
            gem 'minitest'
         | 
| 8 | 
            +
            require 'minitest/autorun'
         | 
| 8 9 | 
             
            require 'yus/entity'
         | 
| 9 10 |  | 
| 10 11 | 
             
            module Yus
         | 
| 11 | 
            -
              class TestEntity < | 
| 12 | 
            +
              class TestEntity <Minitest::Test
         | 
| 12 13 | 
             
                def setup
         | 
| 13 14 | 
             
                  @user = Entity.new('user')
         | 
| 14 15 | 
             
                end
         | 
| @@ -58,15 +59,11 @@ module Yus | |
| 58 59 | 
             
                  group1 = Entity.new('A Group')
         | 
| 59 60 | 
             
                  group2 = Entity.new('Another Group')
         | 
| 60 61 | 
             
                  assert_equal([], @user.affiliations)
         | 
| 61 | 
            -
                   | 
| 62 | 
            -
                    @user.join(group1)
         | 
| 63 | 
            -
                  }
         | 
| 62 | 
            +
                  @user.join(group1)
         | 
| 64 63 | 
             
                  assert_raises(CircularAffiliationError) {
         | 
| 65 64 | 
             
                    group1.join(@user) 
         | 
| 66 65 | 
             
                  }
         | 
| 67 | 
            -
                   | 
| 68 | 
            -
                    group1.join(group2)
         | 
| 69 | 
            -
                  }
         | 
| 66 | 
            +
                  group1.join(group2)
         | 
| 70 67 | 
             
                  assert_raises(CircularAffiliationError) {
         | 
| 71 68 | 
             
                    group2.join(@user) 
         | 
| 72 69 | 
             
                  }
         | 
    
        data/test/test_privilege.rb
    CHANGED
    
    | @@ -3,11 +3,12 @@ | |
| 3 3 |  | 
| 4 4 | 
             
            $: << File.expand_path('../lib', File.dirname(__FILE__))
         | 
| 5 5 |  | 
| 6 | 
            -
             | 
| 6 | 
            +
            gem 'minitest'
         | 
| 7 | 
            +
            require 'minitest/autorun'
         | 
| 7 8 | 
             
            require 'yus/privilege'
         | 
| 8 9 |  | 
| 9 10 | 
             
            module Yus
         | 
| 10 | 
            -
              class TestPrivilege < | 
| 11 | 
            +
              class TestPrivilege <Minitest::Test
         | 
| 11 12 | 
             
                def setup
         | 
| 12 13 | 
             
                  @privilege = Privilege.new
         | 
| 13 14 | 
             
                end
         | 
    
        data/test/test_server.rb
    CHANGED
    
    | @@ -3,7 +3,6 @@ | |
| 3 3 |  | 
| 4 4 | 
             
            $: << File.expand_path('../lib', File.dirname(__FILE__))
         | 
| 5 5 |  | 
| 6 | 
            -
            require 'test/unit'
         | 
| 7 6 | 
             
            require 'yus/server'
         | 
| 8 7 | 
             
            require 'flexmock'
         | 
| 9 8 |  | 
| @@ -11,7 +10,7 @@ module Yus | |
| 11 10 | 
             
              class Server
         | 
| 12 11 | 
             
                public :authenticate, :clean
         | 
| 13 12 | 
             
              end
         | 
| 14 | 
            -
              class TestServer < Test | 
| 13 | 
            +
              class TestServer < Minitest::Test
         | 
| 15 14 | 
             
                def setup
         | 
| 16 15 | 
             
                  @config = FlexMock.new
         | 
| 17 16 | 
             
                  @config.should_receive(:cleaner_interval).and_return { 100000000 }
         | 
| @@ -50,10 +49,8 @@ module Yus | |
| 50 49 | 
             
                    true 
         | 
| 51 50 | 
             
                  }
         | 
| 52 51 | 
             
                  @persistence.should_receive(:find_entity).times(1).and_return { user }
         | 
| 53 | 
            -
                   | 
| 54 | 
            -
             | 
| 55 | 
            -
                    assert_equal(user, result)
         | 
| 56 | 
            -
                  }
         | 
| 52 | 
            +
                  result = @server.authenticate('name', 'password')
         | 
| 53 | 
            +
                  assert_equal(user, result)
         | 
| 57 54 | 
             
                end
         | 
| 58 55 | 
             
                def test_autosession
         | 
| 59 56 | 
             
                  @server.autosession('domain') { |session|
         | 
| @@ -74,12 +71,10 @@ module Yus | |
| 74 71 | 
             
                  }
         | 
| 75 72 | 
             
                  @persistence.should_receive(:find_entity).times(1).and_return { user }
         | 
| 76 73 | 
             
                  @persistence.should_receive(:save_entity).times(1) 
         | 
| 77 | 
            -
                   | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
                    assert_equal([session], @server.instance_variable_get('@sessions'))
         | 
| 82 | 
            -
                  }
         | 
| 74 | 
            +
                  session = @server.login('name', 'password', 'domain')
         | 
| 75 | 
            +
                  assert_instance_of(EntitySession, session)
         | 
| 76 | 
            +
                  assert_kind_of(DRb::DRbUndumped, session)
         | 
| 77 | 
            +
                  assert_equal([session], @server.instance_variable_get('@sessions'))
         | 
| 83 78 | 
             
                end
         | 
| 84 79 | 
             
                def test_logout
         | 
| 85 80 | 
             
                  needle = FlexMock.new
         | 
| @@ -110,7 +105,7 @@ module Yus | |
| 110 105 | 
             
                  assert_equal([], sessions)
         | 
| 111 106 | 
             
                end
         | 
| 112 107 | 
             
              end
         | 
| 113 | 
            -
              class TestServerCleaner < Test | 
| 108 | 
            +
              class TestServerCleaner < Minitest::Test
         | 
| 114 109 | 
             
                def test_autoclean
         | 
| 115 110 | 
             
                  config = FlexMock.new
         | 
| 116 111 | 
             
                  config.should_receive(:cleaner_interval).and_return { 0.5 }
         | 
    
        data/test/test_session.rb
    CHANGED
    
    | @@ -3,16 +3,19 @@ | |
| 3 3 |  | 
| 4 4 | 
             
            $: << File.expand_path('../lib', File.dirname(__FILE__))
         | 
| 5 5 |  | 
| 6 | 
            -
             | 
| 6 | 
            +
            gem "minitest"
         | 
| 7 | 
            +
            require "minitest/autorun"
         | 
| 7 8 | 
             
            require 'flexmock'
         | 
| 8 9 | 
             
            require 'yus/session'
         | 
| 9 10 | 
             
            require 'digest/sha2'
         | 
| 11 | 
            +
            require 'fileutils'
         | 
| 12 | 
            +
            require File.expand_path(File.dirname(__FILE__)+'/helpers.rb')
         | 
| 10 13 |  | 
| 11 14 | 
             
            module Yus
         | 
| 12 15 | 
             
              class Session
         | 
| 13 16 | 
             
                public :touch!
         | 
| 14 17 | 
             
              end
         | 
| 15 | 
            -
              class TestAutoSession < Test | 
| 18 | 
            +
              class TestAutoSession < Minitest::Test
         | 
| 16 19 | 
             
                def setup
         | 
| 17 20 | 
             
                  @config = FlexMock.new
         | 
| 18 21 | 
             
                  @config.should_receive(:session_timeout).and_return { 0.5 }
         | 
| @@ -41,9 +44,7 @@ module Yus | |
| 41 44 | 
             
                  }
         | 
| 42 45 | 
             
                  @persistence.should_receive(:find_entity, 1).times(1).and_return { user }
         | 
| 43 46 | 
             
                  res = nil
         | 
| 44 | 
            -
                   | 
| 45 | 
            -
                    res = @session.get_entity_preference('name', 'preference_key', 'domain')
         | 
| 46 | 
            -
                  }
         | 
| 47 | 
            +
                  res = @session.get_entity_preference('name', 'preference_key', 'domain')
         | 
| 47 48 | 
             
                  assert_nil(res)
         | 
| 48 49 | 
             
                end
         | 
| 49 50 | 
             
                def test_get_entity_preference__success
         | 
| @@ -55,9 +56,7 @@ module Yus | |
| 55 56 | 
             
                  }
         | 
| 56 57 | 
             
                  @persistence.should_receive(:find_entity, 1).times(1).and_return { user }
         | 
| 57 58 | 
             
                  res = nil
         | 
| 58 | 
            -
                   | 
| 59 | 
            -
                    res = @session.get_entity_preference('name', 'preference_key', 'domain')
         | 
| 60 | 
            -
                  }
         | 
| 59 | 
            +
                  res = @session.get_entity_preference('name', 'preference_key', 'domain')
         | 
| 61 60 | 
             
                  assert_equal('value', res)
         | 
| 62 61 | 
             
                end
         | 
| 63 62 | 
             
                def test_get_entity_preferences__no_user
         | 
| @@ -75,9 +74,7 @@ module Yus | |
| 75 74 | 
             
                  }
         | 
| 76 75 | 
             
                  @persistence.should_receive(:find_entity, 1).times(1).and_return { user }
         | 
| 77 76 | 
             
                  res = nil
         | 
| 78 | 
            -
                   | 
| 79 | 
            -
                    res = @session.get_entity_preferences('name', ['preference_key'], 'domain')
         | 
| 80 | 
            -
                  }
         | 
| 77 | 
            +
                  res = @session.get_entity_preferences('name', ['preference_key'], 'domain')
         | 
| 81 78 | 
             
                  assert_equal({'preference_key' => nil}, res)
         | 
| 82 79 | 
             
                end
         | 
| 83 80 | 
             
                def test_get_entity_preferences__success
         | 
| @@ -89,9 +86,7 @@ module Yus | |
| 89 86 | 
             
                  }
         | 
| 90 87 | 
             
                  @persistence.should_receive(:find_entity, 1).times(1).and_return { user }
         | 
| 91 88 | 
             
                  res = nil
         | 
| 92 | 
            -
                   | 
| 93 | 
            -
                    res = @session.get_entity_preferences('name', ['preference_key'], 'domain')
         | 
| 94 | 
            -
                  }
         | 
| 89 | 
            +
                  res = @session.get_entity_preferences('name', ['preference_key'], 'domain')
         | 
| 95 90 | 
             
                  assert_equal({'preference_key' => 'value'}, res)
         | 
| 96 91 | 
             
                end
         | 
| 97 92 | 
             
                def test_set_entity_preference__no_user
         | 
| @@ -176,7 +171,6 @@ module Yus | |
| 176 171 | 
             
                    false
         | 
| 177 172 | 
             
                  }
         | 
| 178 173 | 
             
                  @persistence.should_receive(:find_entity, 1).times(1).and_return { user }
         | 
| 179 | 
            -
                  res = nil
         | 
| 180 174 | 
             
                  assert_raises(NotPrivilegedError) {
         | 
| 181 175 | 
             
                    @session.reset_entity_password('name', 'token', 'password')
         | 
| 182 176 | 
             
                  }
         | 
| @@ -200,9 +194,7 @@ module Yus | |
| 200 194 | 
             
                  @persistence.should_receive(:save_entity, 1).times(1).and_return { |entity|
         | 
| 201 195 | 
             
                    assert_equal(user, entity)
         | 
| 202 196 | 
             
                  }
         | 
| 203 | 
            -
                   | 
| 204 | 
            -
                    @session.reset_entity_password('name', 'token', 'password')
         | 
| 205 | 
            -
                  }
         | 
| 197 | 
            +
                  @session.reset_entity_password('name', 'token', 'password')
         | 
| 206 198 | 
             
                end
         | 
| 207 199 | 
             
                def test_grant__no_user
         | 
| 208 200 | 
             
                  @persistence.should_receive(:find_entity).and_return { |name|
         | 
| @@ -229,16 +221,24 @@ module Yus | |
| 229 221 | 
             
                  @session.grant('username', 'action', 'key')
         | 
| 230 222 | 
             
                end
         | 
| 231 223 | 
             
              end
         | 
| 232 | 
            -
              class TestEntitySession < Test | 
| 224 | 
            +
              class TestEntitySession < Minitest::Test
         | 
| 225 | 
            +
                HexDigestSample = 'cleartext'
         | 
| 233 226 | 
             
                def setup
         | 
| 234 | 
            -
                  @config = FlexMock.new
         | 
| 227 | 
            +
                  @config = FlexMock.new('config')
         | 
| 235 228 | 
             
                  @config.should_receive(:session_timeout).and_return { 0.5 }
         | 
| 236 | 
            -
                  @ | 
| 237 | 
            -
                  @ | 
| 238 | 
            -
                  @ | 
| 229 | 
            +
                  @config.should_receive(:token_lifetime).and_return { 0.2 }
         | 
| 230 | 
            +
                  @digest = FlexMock.new('digest')
         | 
| 231 | 
            +
                  @digest.should_receive(:hexdigest).and_return { HexDigestSample }
         | 
| 232 | 
            +
                  @config.should_receive(:digest).by_default.and_return {@digest}
         | 
| 233 | 
            +
                  @user = FlexMock.new('user')
         | 
| 234 | 
            +
                  @user.should_receive(:set_token).and_return { 'set_token' }
         | 
| 235 | 
            +
                  @user.should_receive(:name).and_return { 'name' }
         | 
| 236 | 
            +
                  @persistence = FlexMock.new('persistence')
         | 
| 237 | 
            +
                  @persistence.should_receive(:save_entity)
         | 
| 238 | 
            +
                  @logger = FlexMock.new('logger')
         | 
| 239 239 | 
             
                  @logger.should_receive(:info).and_return {}
         | 
| 240 240 | 
             
                  @logger.should_receive(:debug).and_return {}
         | 
| 241 | 
            -
                  @needle = FlexMock.new
         | 
| 241 | 
            +
                  @needle = FlexMock.new('needle')
         | 
| 242 242 | 
             
                  @needle.should_receive(:persistence).and_return { @persistence }
         | 
| 243 243 | 
             
                  @needle.should_receive(:config).and_return { @config }
         | 
| 244 244 | 
             
                  @needle.should_receive(:logger).and_return { @logger }
         | 
| @@ -282,6 +282,10 @@ module Yus | |
| 282 282 | 
             
                  }
         | 
| 283 283 | 
             
                  @session.create_entity('name')
         | 
| 284 284 | 
             
                end
         | 
| 285 | 
            +
                def test_generate_token
         | 
| 286 | 
            +
                  assert_equal(false, @session.expired?)
         | 
| 287 | 
            +
                  assert_equal(HexDigestSample, @session.generate_token)
         | 
| 288 | 
            +
                end
         | 
| 285 289 | 
             
                def test_create_entity__duplicate
         | 
| 286 290 | 
             
                  @user.should_receive(:allowed?).and_return { |action, key|
         | 
| 287 291 | 
             
                    assert_equal('edit', action)
         | 
| @@ -317,9 +321,7 @@ module Yus | |
| 317 321 | 
             
                    true
         | 
| 318 322 | 
             
                  }
         | 
| 319 323 | 
             
                  @persistence.should_receive(:entities).and_return { [] }
         | 
| 320 | 
            -
                   | 
| 321 | 
            -
                    assert_equal([], @session.entities)
         | 
| 322 | 
            -
                  }
         | 
| 324 | 
            +
                  assert_equal([], @session.entities)
         | 
| 323 325 | 
             
                end
         | 
| 324 326 | 
             
                def test_find_entity__not_allowed
         | 
| 325 327 | 
             
                  @user.should_receive(:allowed?).and_return { |action, key|
         | 
| @@ -787,9 +789,7 @@ module Yus | |
| 787 789 | 
             
                    nil
         | 
| 788 790 | 
             
                  }
         | 
| 789 791 | 
             
                  res = nil
         | 
| 790 | 
            -
                   | 
| 791 | 
            -
                    res = @session.get_preference('preference_key')
         | 
| 792 | 
            -
                  }
         | 
| 792 | 
            +
                  res = @session.get_preference('preference_key')
         | 
| 793 793 | 
             
                  assert_nil(res)
         | 
| 794 794 | 
             
                end
         | 
| 795 795 | 
             
                def test_get_entity_preference__success
         | 
| @@ -799,27 +799,25 @@ module Yus | |
| 799 799 | 
             
                    'value'
         | 
| 800 800 | 
             
                  }
         | 
| 801 801 | 
             
                  res = nil
         | 
| 802 | 
            -
                   | 
| 803 | 
            -
                    res = @session.get_preference('preference_key')
         | 
| 804 | 
            -
                  }
         | 
| 802 | 
            +
                  res = @session.get_preference('preference_key')
         | 
| 805 803 | 
             
                  assert_equal('value', res)
         | 
| 806 804 | 
             
                end
         | 
| 807 805 | 
             
                def test_ping
         | 
| 808 806 | 
             
                  assert_equal(true, @session.ping)
         | 
| 809 807 | 
             
                end
         | 
| 810 808 | 
             
              end
         | 
| 811 | 
            -
              class TestRootSession < Test | 
| 809 | 
            +
              class TestRootSession < Minitest::Test
         | 
| 812 810 | 
             
                def setup
         | 
| 813 | 
            -
                  @config = FlexMock.new
         | 
| 811 | 
            +
                  @config = FlexMock.new('config')
         | 
| 814 812 | 
             
                  @config.should_receive(:session_timeout).and_return { 0.5 }
         | 
| 815 | 
            -
                  @ | 
| 816 | 
            -
                  @ | 
| 813 | 
            +
                  @needle = FlexMock.new('needle')
         | 
| 814 | 
            +
                  @persistence = MockPersistence.new
         | 
| 815 | 
            +
                  @logger = FlexMock.new('logger')
         | 
| 817 816 | 
             
                  @logger.should_receive(:info).and_return {}
         | 
| 818 | 
            -
                  @logger.should_receive(:debug).and_return {}
         | 
| 819 | 
            -
                  @needle = FlexMock.new
         | 
| 820 817 | 
             
                  @needle.should_receive(:persistence).and_return { @persistence }
         | 
| 821 | 
            -
                  @needle.should_receive(: | 
| 822 | 
            -
                  @needle.should_receive(: | 
| 818 | 
            +
                  @needle.should_receive(:logger).and_return { @logger }.by_default
         | 
| 819 | 
            +
                  @needle.should_receive(:config).and_return { @config }.by_default
         | 
| 820 | 
            +
                  @config.should_receive(:session_timeout).and_return { 0.5 }
         | 
| 823 821 | 
             
                  @session = RootSession.new(@needle)
         | 
| 824 822 | 
             
                end
         | 
| 825 823 | 
             
                def test_valid
         | 
| @@ -832,5 +830,80 @@ module Yus | |
| 832 830 | 
             
                  @config.should_receive(:root_name).and_return { 'root_name' }
         | 
| 833 831 | 
             
                  assert_equal('root_name', @session.name)
         | 
| 834 832 | 
             
                end
         | 
| 833 | 
            +
                def test_delete_entity
         | 
| 834 | 
            +
                  entity_name = 'entity_name'
         | 
| 835 | 
            +
                  entity = @session.create_entity(entity_name, 'entity_pass')
         | 
| 836 | 
            +
                  assert_equal(entity, @session.find_entity(entity_name))
         | 
| 837 | 
            +
                  @session.delete_entity(entity_name)
         | 
| 838 | 
            +
                  assert_nil(@session.find_entity(entity_name))
         | 
| 839 | 
            +
                end
         | 
| 840 | 
            +
                def test_last_login
         | 
| 841 | 
            +
                  entity_name = 'entity_name'
         | 
| 842 | 
            +
                  entity = @session.create_entity(entity_name, 'entity_pass')
         | 
| 843 | 
            +
                  domain = 'domain'
         | 
| 844 | 
            +
                  entity.login(domain)
         | 
| 845 | 
            +
                  assert_equal(entity, @session.find_entity(entity_name))
         | 
| 846 | 
            +
                  #require 'pry'; binding.pry
         | 
| 847 | 
            +
                  assert_in_delta(Time.now.to_f, @session.last_login(entity_name, domain).to_f)
         | 
| 848 | 
            +
                end
         | 
| 849 | 
            +
                def test_show
         | 
| 850 | 
            +
                  assert_raises(UnknownEntityError) {
         | 
| 851 | 
            +
                    @session.show('unkown_name')
         | 
| 852 | 
            +
                  }
         | 
| 853 | 
            +
                  entity_name = 'entity_name'
         | 
| 854 | 
            +
                  @session.create_entity(entity_name, 'entity_pass')
         | 
| 855 | 
            +
                  assert_kind_of(String, @session.show(entity_name))
         | 
| 856 | 
            +
                  assert(@session.show(entity_name).index(entity_name) > 0)
         | 
| 857 | 
            +
                end
         | 
| 858 | 
            +
             | 
| 859 | 
            +
                def setup_for_dump
         | 
| 860 | 
            +
                  assert_raises(UnknownEntityError) {
         | 
| 861 | 
            +
                    @session.show('unkown_name')
         | 
| 862 | 
            +
                  }
         | 
| 863 | 
            +
                  @entity_name  = 'entity_name'
         | 
| 864 | 
            +
                  entity_name2  = 'second_name'
         | 
| 865 | 
            +
                  password      = 'entity_pass'
         | 
| 866 | 
            +
                  groupname     = 'a_yus_group'
         | 
| 867 | 
            +
                  @session.create_entity(@entity_name, password)
         | 
| 868 | 
            +
                  @session.create_entity(entity_name2, password)
         | 
| 869 | 
            +
                  @session.create_entity(groupname, password)
         | 
| 870 | 
            +
                  assert_kind_of(String, @session.show(@entity_name))
         | 
| 871 | 
            +
                  assert(@session.show(@entity_name).index(@entity_name) > 0)
         | 
| 872 | 
            +
                  assert(@session.show(entity_name2).index(entity_name2) > 0)
         | 
| 873 | 
            +
                  @session.affiliate(@entity_name, groupname)
         | 
| 874 | 
            +
                  @session.grant(@entity_name, 'action', 'key')
         | 
| 875 | 
            +
             | 
| 876 | 
            +
                  @needle = FlexMock.new('needle')
         | 
| 877 | 
            +
                  @needle.should_receive(:persistence).and_return { @persistence }
         | 
| 878 | 
            +
                  @needle.should_receive(:config).and_return { @config }
         | 
| 879 | 
            +
                  @needle.should_receive(:logger).and_return { @logger }
         | 
| 880 | 
            +
                end
         | 
| 881 | 
            +
             | 
| 882 | 
            +
                def test_dump_to_named_yaml
         | 
| 883 | 
            +
                  setup_for_dump
         | 
| 884 | 
            +
                  tmpdir = File.expand_path(File.join(__FILE__, '../tmp'))
         | 
| 885 | 
            +
                  outFile = File.join(tmpdir, 'yus_dump.yaml')
         | 
| 886 | 
            +
                  assert(@session.dump_to_yaml(outFile))
         | 
| 887 | 
            +
                  assert(File.exist?(outFile))
         | 
| 888 | 
            +
                  assert(File.size(outFile) > 0)
         | 
| 889 | 
            +
                  dump_content = IO.read(outFile)
         | 
| 890 | 
            +
                  # puts "#{outFile} is #{File.size(outFile)} bytes lang and contains \n#{dump_content}"
         | 
| 891 | 
            +
                  refute_nil(dump_content)
         | 
| 892 | 
            +
                  refute_nil(dump_content.index(@entity_name))
         | 
| 893 | 
            +
                  FileUtils.rm_rf(tmpdir)
         | 
| 894 | 
            +
                  skip("Tests saving preferences")
         | 
| 895 | 
            +
                end
         | 
| 896 | 
            +
             | 
| 897 | 
            +
                def test_dump_to_default
         | 
| 898 | 
            +
                  setup_for_dump
         | 
| 899 | 
            +
                  assert(@session.dump_to_yaml)
         | 
| 900 | 
            +
                  outFile = File.expand_path(File.join(__FILE__, '..', '..', 'data', 'yus_dump.yml'))
         | 
| 901 | 
            +
                  assert(File.exist?(outFile), "outfile #{outFile} should exist")
         | 
| 902 | 
            +
                  assert(File.size(outFile) > 0)
         | 
| 903 | 
            +
                  dump_content = IO.read(outFile)
         | 
| 904 | 
            +
                  # puts "#{outFile} is #{File.size(outFile)} bytes lang and contains \n#{dump_content}"
         | 
| 905 | 
            +
                  refute_nil(dump_content)
         | 
| 906 | 
            +
                  refute_nil(dump_content.index(@entity_name))
         | 
| 907 | 
            +
                end
         | 
| 835 908 | 
             
              end
         | 
| 836 909 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,48 +1,43 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: yus
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0. | 
| 5 | 
            -
              prerelease: 
         | 
| 4 | 
            +
              version: 1.0.2
         | 
| 6 5 | 
             
            platform: ruby
         | 
| 7 6 | 
             
            authors:
         | 
| 8 7 | 
             
            - Yasuhiro Asaka, Zeno R.R. Davatz
         | 
| 9 8 | 
             
            autorequire: 
         | 
| 10 9 | 
             
            bindir: bin
         | 
| 11 10 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 11 | 
            +
            date: 2014-10-01 00:00:00.000000000 Z
         | 
| 13 12 | 
             
            dependencies:
         | 
| 14 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 14 | 
             
              name: rdoc
         | 
| 16 15 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 17 | 
            -
                none: false
         | 
| 18 16 | 
             
                requirements:
         | 
| 19 17 | 
             
                - - ~>
         | 
| 20 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 21 | 
            -
                    version: ' | 
| 19 | 
            +
                    version: '4.0'
         | 
| 22 20 | 
             
              type: :development
         | 
| 23 21 | 
             
              prerelease: false
         | 
| 24 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 25 | 
            -
                none: false
         | 
| 26 23 | 
             
                requirements:
         | 
| 27 24 | 
             
                - - ~>
         | 
| 28 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 29 | 
            -
                    version: ' | 
| 26 | 
            +
                    version: '4.0'
         | 
| 30 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 31 28 | 
             
              name: hoe
         | 
| 32 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 33 | 
            -
                none: false
         | 
| 34 30 | 
             
                requirements:
         | 
| 35 31 | 
             
                - - ~>
         | 
| 36 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 37 | 
            -
                    version: ' | 
| 33 | 
            +
                    version: '3.6'
         | 
| 38 34 | 
             
              type: :development
         | 
| 39 35 | 
             
              prerelease: false
         | 
| 40 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 41 | 
            -
                none: false
         | 
| 42 37 | 
             
                requirements:
         | 
| 43 38 | 
             
                - - ~>
         | 
| 44 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 45 | 
            -
                    version: ' | 
| 40 | 
            +
                    version: '3.6'
         | 
| 46 41 | 
             
            description: ! 'ywesee user server. Works with the ywesee webframework and all the
         | 
| 47 42 | 
             
              ywesee
         | 
| 48 43 |  | 
| @@ -62,6 +57,7 @@ extra_rdoc_files: | |
| 62 57 | 
             
            - History.txt
         | 
| 63 58 | 
             
            - README.txt
         | 
| 64 59 | 
             
            files:
         | 
| 60 | 
            +
            - .gemtest
         | 
| 65 61 | 
             
            - Guide.txt
         | 
| 66 62 | 
             
            - History.txt
         | 
| 67 63 | 
             
            - LICENSE
         | 
| @@ -87,9 +83,9 @@ files: | |
| 87 83 | 
             
            - test/test_privilege.rb
         | 
| 88 84 | 
             
            - test/test_server.rb
         | 
| 89 85 | 
             
            - test/test_session.rb
         | 
| 90 | 
            -
            - .gemtest
         | 
| 91 86 | 
             
            homepage: http://scm.ywesee.com/?p=yus/.git;a=summary
         | 
| 92 87 | 
             
            licenses: []
         | 
| 88 | 
            +
            metadata: {}
         | 
| 93 89 | 
             
            post_install_message: 
         | 
| 94 90 | 
             
            rdoc_options:
         | 
| 95 91 | 
             
            - --main
         | 
| @@ -97,22 +93,20 @@ rdoc_options: | |
| 97 93 | 
             
            require_paths:
         | 
| 98 94 | 
             
            - lib
         | 
| 99 95 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 100 | 
            -
              none: false
         | 
| 101 96 | 
             
              requirements:
         | 
| 102 97 | 
             
              - - ! '>='
         | 
| 103 98 | 
             
                - !ruby/object:Gem::Version
         | 
| 104 99 | 
             
                  version: '0'
         | 
| 105 100 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 106 | 
            -
              none: false
         | 
| 107 101 | 
             
              requirements:
         | 
| 108 102 | 
             
              - - ! '>='
         | 
| 109 103 | 
             
                - !ruby/object:Gem::Version
         | 
| 110 104 | 
             
                  version: '0'
         | 
| 111 105 | 
             
            requirements: []
         | 
| 112 106 | 
             
            rubyforge_project: yus
         | 
| 113 | 
            -
            rubygems_version:  | 
| 107 | 
            +
            rubygems_version: 2.3.0
         | 
| 114 108 | 
             
            signing_key: 
         | 
| 115 | 
            -
            specification_version:  | 
| 109 | 
            +
            specification_version: 4
         | 
| 116 110 | 
             
            summary: ywesee user server
         | 
| 117 111 | 
             
            test_files:
         | 
| 118 112 | 
             
            - test/test_entity.rb
         |