mooset 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 006161edeef876748ef7483011278a0a26f4098d
4
- data.tar.gz: d93d1a0d851946612246a14b03e694a8743ed29c
3
+ metadata.gz: b093bf686448abfb179a9a60f6c370c476a9f301
4
+ data.tar.gz: b4ecd462864322ac24333f0c0015b3d8457e1ffc
5
5
  SHA512:
6
- metadata.gz: 7077ad440a847771fe16c8b3086b7c0e8d2a5dfff7d464ec96cb7b44279fc94ffc8fec43cf28e559bb127b659ec5cc1561db8a14470086f6824023ba59ea4fc9
7
- data.tar.gz: e69db56d141bf63fbcdfe8c77df1b1cae798e67e9088104d4b6d3786c373456251558238a9ecd8e4d2de571dc7e8b0c2b3aa1dcb8e0f77b8484d6b7bfe59afa5
6
+ metadata.gz: 06001439352cdda129beae947f94bb4c017a1d2bd40efa9cbcf971000424cb9e2e23f07cb25e7e5b5d838294ee2462535d6c98de08e216cbe076d191c1f61fae
7
+ data.tar.gz: 4d4e54909d05db0ddfa47e4767978a51d56b967aa6268b8b90b31711e85589257d44f2fa09abffaf8c32f6683bd1107a6a039423858949a74e96d09845ea761f
data/.drone.yml ADDED
@@ -0,0 +1,15 @@
1
+ image: ruby:2.2.1
2
+ script:
3
+ - declare -x
4
+ - mkdir -p /tmp/bundle
5
+ - bundle install --path /tmp/bundle
6
+ - rspec
7
+
8
+ cache:
9
+ - /tmp/bundle
10
+
11
+ notify:
12
+ email:
13
+ recipients:
14
+ - akeszeg@pitechnologies.ro
15
+
data/.gitignore CHANGED
@@ -12,3 +12,4 @@
12
12
  *.o
13
13
  *.a
14
14
  mkmf.log
15
+ test.log
data/Rakefile CHANGED
@@ -15,7 +15,6 @@ end
15
15
  namespace :gitlab do
16
16
  desc "Login to a gitlab server and get the users private token"
17
17
  task :login => :environment do
18
- require 'pry'; binding.pry
19
18
  ENV["GITLAB_URL"] ||= 'http://gitlab-dev'
20
19
 
21
20
  username = ask("Username? ")
@@ -1,6 +1,6 @@
1
+ require 'logger'
1
2
  require 'optparse'
2
3
  require 'irb'
3
- require 'logger'
4
4
 
5
5
  module Mooset
6
6
  class Application
@@ -8,7 +8,6 @@ module Mooset
8
8
 
9
9
  def define(endpoint_name, factory, opts = {})
10
10
  opts[:endpoint_name] = endpoint_name
11
- opts[:logger] = logger
12
11
 
13
12
  endpoints[endpoint_name] = Mooset::Endpoints::Endpoint.create(factory, opts)
14
13
  end
@@ -17,20 +16,12 @@ module Mooset
17
16
  @endpoints ||= {}
18
17
  end
19
18
 
20
- def logger
21
- @logger ||= begin
22
- l = ::Logger.new(logfile || STDOUT)
23
- l.level = ::Logger::WARN
24
- l
25
- end
26
- end
27
-
28
19
  def instances
29
20
  @instances ||= {}
30
21
  end
31
22
 
32
23
  def synchronize_group(from:, to:, **opts)
33
- operations << Mooset::SynchronizeGroups.new(endpoints[from], endpoints[to], opts)
24
+ operations << Mooset::SynchronizeGroup.new(endpoints[from], endpoints[to], opts)
34
25
  end
35
26
 
36
27
  def operations
@@ -64,7 +55,7 @@ module Mooset
64
55
  opts.banner = "Usage: #{$0} [options]"
65
56
  opts.on("-f", "--logfile FILE", "Logfile", s.method(:logfile=))
66
57
  opts.on("-v", "--verbose", "Verbose") do |x|
67
- s.logger.level = ::Logger::INFO
58
+ s.logger.level = ::Logger::DEBUG
68
59
  end
69
60
 
70
61
  opts.on("-c", "--config FILE", "Config file", s.method(:config_filename=))
@@ -72,6 +63,8 @@ module Mooset
72
63
  opts.parse!(argv)
73
64
  end
74
65
 
66
+ LSpace[:logger] = s.logger
67
+
75
68
  if s.config_filename
76
69
  s.read_config
77
70
  s.run! unless s.interactive
@@ -80,5 +73,11 @@ module Mooset
80
73
  s.start_irb if s.interactive
81
74
  end
82
75
 
76
+ def logger
77
+ @logger ||= ::Logger.new(logfile || STDOUT).tap do |l|
78
+ l.level = ::Logger::INFO
79
+ end
80
+ end
81
+
83
82
  end
84
83
  end
@@ -31,7 +31,7 @@ module Mooset
31
31
  end
32
32
 
33
33
  def <<(user)
34
- @logger.info "add_group_member #{id} #{user.id} DEVELOPER"
34
+ logger.info "#{self} << #{user}"
35
35
 
36
36
  endpoint.groups.add_group_member(id, user.id, DEVELOPER)
37
37
  end
@@ -1,9 +1,8 @@
1
1
  module Mooset
2
2
  module Endpoints
3
3
  class Gitlab
4
- class GroupSearch
4
+ class GroupSearch < Resource
5
5
  include Paginate
6
- include Findable
7
6
 
8
7
  attr_reader :endpoint
9
8
 
@@ -1,9 +1,8 @@
1
1
  module Mooset
2
2
  module Endpoints
3
3
  class Gitlab
4
- class UserSearch
4
+ class UserSearch < Resource
5
5
  include Paginate
6
- include Findable
7
6
 
8
7
  attr_reader :endpoint
9
8
 
@@ -20,16 +20,6 @@ module Mooset
20
20
  resource :groups do
21
21
  GroupSearch.new(self)
22
22
  end
23
-
24
- def write(user)
25
- unless storage.exists?(user)
26
- connection.create_user(user.email, '123123123',{
27
- extern_uid: user.extern_uid,
28
- username: user.username,
29
- provider: 'ldap',
30
- })
31
- end
32
- end
33
23
  end
34
24
  end
35
25
  end
@@ -1,8 +1,7 @@
1
1
  module Mooset
2
2
  module Endpoints
3
3
  class Ldap
4
- class LdapSearch
5
- include Findable
4
+ class LdapSearch < Resource
6
5
  GROUP_FILTER = "(objectClass=group)"
7
6
 
8
7
  attr_reader :endpoint
@@ -21,10 +21,6 @@ module Mooset
21
21
  connection
22
22
  }
23
23
 
24
- def write(*user)
25
- raise "Read only endpoint"
26
- end
27
-
28
24
  resource :users do
29
25
  LdapSearch.new(self, "(objectClass=person)")
30
26
  end
@@ -0,0 +1,9 @@
1
+ module Mooset
2
+ module Endpoints
3
+ class Null
4
+ class Group < Models::Group
5
+ attribute :provider, String, default: "null"
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,32 @@
1
+ module Mooset
2
+ module Endpoints
3
+ class Null
4
+ class GroupSearch < Resource
5
+ def create(u)
6
+ model = Group.new(u.attributes)
7
+ model.send :define_singleton_method, :'<<' do |other|
8
+ logger.info "#{self} << #{other}"
9
+ end
10
+
11
+ model
12
+ end
13
+
14
+ import :gitlab do |gr|
15
+ g = create(gr)
16
+ g.send :define_singleton_method, :members do
17
+ []
18
+ end
19
+ g
20
+ end
21
+
22
+ import :ldap do |gr|
23
+ g = create(gr)
24
+ g.send :define_singleton_method, :members do
25
+ []
26
+ end
27
+ g
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,9 @@
1
+ module Mooset
2
+ module Endpoints
3
+ class Null
4
+ class User < Models::User
5
+ attribute :provider, String, default: "null"
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,23 @@
1
+ module Mooset
2
+ module Endpoints
3
+ class Null
4
+ class UserSearch < Resource
5
+ def create(u)
6
+ User.new(id: u.id, username: u.username, email: u.email)
7
+ end
8
+
9
+ def import(from, *args)
10
+ User.new(args)
11
+ end
12
+
13
+ def find_from_hash(hash)
14
+ User.new(hash)
15
+ end
16
+
17
+ def find_from_object(object, *args)
18
+ User.new(object.attributes)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,54 +1,12 @@
1
1
  module Mooset
2
2
  module Endpoints
3
3
  class Null < Endpoint
4
- class U
5
- #include Findable
6
-
7
- def create(u)
8
- Models::User.new(id: u.id, username: u.username, email: u.email)
9
- end
10
-
11
- def import(from, *args)
12
- @logger.info(from, *args)
13
- end
14
-
15
- #import :ldap do |u|
16
- #create(u)
17
- #end
18
- end
19
-
20
- class G
21
- include Findable
22
-
23
- def create(u)
24
- model = Models::Group.new(id: u.id, name: u.name)
25
- model.send :define_singleton_method, :'<<' do |other|
26
- @logger.info "#{self.id} << #{other.id}"
27
- end
28
-
29
- model
30
- end
31
-
32
- import :gitlab do |o|
33
- logger.info o
34
- end
35
-
36
- import :ldap do |gr|
37
- g = create(gr)
38
- g.send :define_singleton_method, :members do
39
- []
40
- end
41
- g
42
- end
43
-
44
- end
45
-
46
4
  resource :users do
47
- U.new
5
+ UserSearch.new
48
6
  end
49
7
 
50
8
  resource :groups do
51
- G.new
9
+ GroupSearch.new
52
10
  end
53
11
  end
54
12
  end
@@ -0,0 +1,9 @@
1
+ module Mooset
2
+ module Endpoints
3
+ class Resource
4
+ include Findable
5
+
6
+ lspace_reader :logger
7
+ end
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
1
  require 'mooset/endpoints/endpoint'
2
- require 'mooset/endpoints/findable'
2
+ require 'mooset/endpoints/resource'
3
3
  require 'mooset/endpoints/gitlab'
4
4
  require 'mooset/endpoints/gitlab/user'
5
5
  require 'mooset/endpoints/gitlab/group'
@@ -11,7 +11,12 @@ require 'mooset/endpoints/ldap/user'
11
11
  require 'mooset/endpoints/ldap/group'
12
12
  require 'mooset/endpoints/ldap/ou'
13
13
  require 'mooset/endpoints/ldap/ldap_search'
14
+
14
15
  require 'mooset/endpoints/null'
16
+ require 'mooset/endpoints/null/user'
17
+ require 'mooset/endpoints/null/group'
18
+ require 'mooset/endpoints/null/user_search'
19
+ require 'mooset/endpoints/null/group_search'
15
20
 
16
21
  module Mooset
17
22
  module Endpoints
@@ -0,0 +1,64 @@
1
+ module Mooset
2
+ module Findable
3
+ module ClassMethods
4
+ def import(name, &block)
5
+ define_method(import_method_name(name), &block)
6
+ end
7
+
8
+ def finder(name, &block)
9
+ define_method(finder_method_name(name), &block)
10
+ end
11
+
12
+ def finder_method_name(name)
13
+ "find_by_#{name}"
14
+ end
15
+
16
+ def import_method_name(name)
17
+ "import_from_#{name}"
18
+ end
19
+ end
20
+
21
+ module InstanceMethods
22
+ def import(object)
23
+ logger.debug "import #{object}"
24
+
25
+ method = self.class.import_method_name(object.provider)
26
+
27
+ public_send(method, object)
28
+ end
29
+
30
+ def find_from_object(object, *args)
31
+ finder = object.finders.find { |x| respond_to? self.class.finder_method_name(x) }
32
+
33
+ if finder && object[finder]
34
+ public_send(self.class.finder_method_name(finder), object[finder], *args)
35
+ end
36
+ end
37
+
38
+ def find_from_hash(hash)
39
+ key, value = hash.find { |(k, _)| respond_to? self.class.finder_method_name(k) }
40
+
41
+ args = hash.tap do |h|
42
+ h.delete(key)
43
+ end
44
+
45
+ if key && value
46
+ public_send(self.class.finder_method_name(key), value, args)
47
+ end
48
+ end
49
+
50
+ def find(opts, *args)
51
+ logger.debug "find #{opts}"
52
+
53
+ return find_from_hash(opts, *args) if opts.is_a? Hash
54
+
55
+ find_from_object(opts, args)
56
+ end
57
+ end
58
+
59
+ def self.included(receiver)
60
+ receiver.extend ClassMethods
61
+ receiver.send :include, InstanceMethods
62
+ end
63
+ end
64
+ end
@@ -1,8 +1,9 @@
1
1
  module Mooset
2
- class Resource
2
+ class Model
3
3
  include Virtus.model
4
4
 
5
5
  attr_reader :endpoint
6
+ lspace_reader :logger
6
7
 
7
8
  def self.finders(finder_list)
8
9
  define_method :finders do
@@ -11,12 +12,10 @@ module Mooset
11
12
  end
12
13
 
13
14
  def initialize(*args)
14
- @endpoint = args[0][:endpoint]
15
+ hash = args[0] || {}
16
+ @endpoint = hash.delete(:endpoint)
15
17
 
16
18
  super(*args)
17
-
18
- @logger = ::Logger.new(STDOUT)
19
- @logger.info "{endpoint_name} -- build #{self.class.name} #{args.join(" ")}"
20
19
  end
21
20
 
22
21
  def to_json(*args)
@@ -26,5 +25,9 @@ module Mooset
26
25
  def finders
27
26
  []
28
27
  end
28
+
29
+ def to_s
30
+ "#{self.class.name.split('::').last}[#{provider}]"
31
+ end
29
32
  end
30
33
  end
@@ -1,9 +1,13 @@
1
1
  module Mooset
2
2
  module Models
3
- class Group < Resource
3
+ class Group < Model
4
4
  attribute :id
5
5
  attribute :name
6
6
  attribute :members
7
+
8
+ def to_s
9
+ "#{super}::[#{self.name}](#{self.id})"
10
+ end
7
11
  end
8
12
  end
9
13
  end
@@ -1,12 +1,16 @@
1
1
  module Mooset
2
2
  module Models
3
- class User < Resource
3
+ class User < Model
4
4
  attribute :id
5
5
  attribute :username
6
6
  attribute :email
7
7
  attribute :full_name
8
8
  attribute :memberof
9
9
  attribute :useraccountcontrol
10
+
11
+ def to_s
12
+ "#{super}::[#{self.username}](#{self.id})"
13
+ end
10
14
  end
11
15
  end
12
16
  end
@@ -1,5 +1,5 @@
1
1
  module Mooset
2
- class SynchronizeGroups
2
+ class SynchronizeGroup
3
3
  attr_accessor :from, :to, :opts
4
4
 
5
5
  def initialize(from, to, opts)
@@ -1,3 +1,3 @@
1
1
  module Mooset
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/mooset.rb CHANGED
@@ -2,10 +2,12 @@ module Mooset
2
2
  end
3
3
 
4
4
  require "virtus"
5
+ require "lspace"
5
6
  require "mooset/version"
6
7
  require "mooset/monads"
7
8
 
8
- require "mooset/resource"
9
+ require "mooset/findable"
10
+ require "mooset/model"
9
11
  require "mooset/models/user"
10
12
  require "mooset/models/group"
11
13
 
data/mooset.gemspec CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency "gitlab", "~> 3.3.0"
22
22
  spec.add_dependency "virtus", "~> 1.0.3"
23
23
  spec.add_dependency "net-ldap", "~> 0.10"
24
+ spec.add_dependency "lspace", "~> 0.13"
24
25
 
25
26
  spec.add_development_dependency "bundler", "~> 1.7"
26
27
  spec.add_development_dependency "rake", "~> 10.0"
@@ -0,0 +1,142 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mooset::Endpoints::Gitlab::UserSearch do
4
+ let(:connection) { double }
5
+ subject(:user_search) { Mooset::Endpoints::Gitlab::UserSearch.new(double(connection: connection)) }
6
+
7
+ let(:user1) { OpenStruct.new({
8
+ name: "Admin",
9
+ username: 'root',
10
+ id: 1,
11
+ state: 'active',
12
+ avatar_url: '',
13
+ email: 'root@gitlab',
14
+ identities: [OpenStruct.new({extern_uid: 'ldap_id', provider: 'ldap'})]
15
+ }) }
16
+
17
+ let(:user2) { OpenStruct.new({
18
+ name: "User2",
19
+ username: 'user2',
20
+ id: 1,
21
+ state: 'active',
22
+ avatar_url: '',
23
+ email: 'user2@local',
24
+ identities: [OpenStruct.new({extern_uid: 'ldap_user2', provider: 'ldap'})]
25
+ }) }
26
+
27
+ describe 'find' do
28
+ describe '#all' do
29
+ context 'without a block' do
30
+ it 'returns an Enumerator' do
31
+ expect(user_search.all).to be_a(Enumerator)
32
+ end
33
+ end
34
+
35
+ it 'returns all the users' do
36
+ expect(connection).to receive(:users).with(page: 1).and_return([user1])
37
+ expect(connection).to receive(:users).with(page: 2).and_return([])
38
+
39
+ @users = user_search.all.to_a
40
+ expect(@users.length).to eq(1)
41
+
42
+ expect(@users.first.id).to eq(1)
43
+ expect(@users.first.gitlab_id).to eq(1)
44
+ expect(@users.first.username).to eq('root')
45
+ expect(@users.first.full_name).to eq('Admin')
46
+ expect(@users.first.state).to eq('active')
47
+ expect(@users.first.email).to eq('root@gitlab')
48
+ expect(@users.first.access_level).to eq(nil)
49
+ expect(@users.first.ldap_id).to eq('ldap_id')
50
+ end
51
+
52
+ describe ':id' do
53
+ before do
54
+ expect(connection).to receive(:user).with(1).and_return(user1)
55
+ @user = user_search.find(id: 1)
56
+ end
57
+
58
+ it "returns the user resource" do
59
+ expect(@user.id).to eq(1)
60
+ expect(@user.gitlab_id).to eq(1)
61
+ expect(@user.username).to eq('root')
62
+ expect(@user.full_name).to eq('Admin')
63
+ expect(@user.state).to eq('active')
64
+ expect(@user.email).to eq('root@gitlab')
65
+ expect(@user.access_level).to eq(nil)
66
+ expect(@user.ldap_id).to eq('ldap_id')
67
+ end
68
+ end
69
+
70
+ describe 'slow finders' do
71
+ before do
72
+ expect(connection).to receive(:users).with(page: 1).and_return([user1, user2])
73
+ expect(connection).to receive(:users).with(page: 2).and_return([])
74
+ end
75
+
76
+ describe ':username' do
77
+ it 'returns the correct user' do
78
+ @user = user_search.find(username: 'user2')
79
+ expect(@user.username).to eq('user2')
80
+ end
81
+ end
82
+
83
+ describe ':email' do
84
+ it 'returns the correct user' do
85
+ @user = user_search.find(email: 'user2@local')
86
+ expect(@user.email).to eq('user2@local')
87
+ end
88
+ end
89
+
90
+ describe ':dn' do
91
+ it 'returns the correct user' do
92
+ @user = user_search.find(dn: 'ldap_user2')
93
+ expect(@user.ldap_id).to eq('ldap_user2')
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
99
+
100
+ describe '#create' do
101
+ it 'creates a gitlab user' do
102
+ expect(connection).to receive(:create_user).with('email@local', 'password', {}).and_return(user1)
103
+ @user = user_search.create('email@local', 'password')
104
+
105
+ expect(@user.username).to eq('root')
106
+ end
107
+ end
108
+
109
+ describe '#import' do
110
+ describe 'from ldap' do
111
+ before do
112
+ @ldap_user = OpenStruct.new({
113
+ full_name: 'Full name',
114
+ username: 'username',
115
+ dn: 'dn',
116
+ provider: 'ldap',
117
+ email: 'email@local'
118
+ })
119
+ end
120
+
121
+ it 'creates a gitlab user' do
122
+ expect(connection).to receive(:create_user).with('email@local', anything, {
123
+ name: 'Full name',
124
+ username: 'username',
125
+ extern_uid: 'dn',
126
+ provider: 'ldap'
127
+ }).and_return(user1)
128
+
129
+ @user = user_search.import(@ldap_user)
130
+ end
131
+ end
132
+ end
133
+
134
+ describe '#group_members' do
135
+ context 'without block' do
136
+ it 'returns an Enumerator' do
137
+ expect(user_search.group_members(1)).to be_a(Enumerator)
138
+ end
139
+ end
140
+ end
141
+ end
142
+
@@ -0,0 +1,9 @@
1
+ require "spec_helper"
2
+
3
+ describe Mooset::Endpoints::Gitlab do
4
+ let(:connection) { double }
5
+ subject(:gitlab) { Mooset::Endpoints::Gitlab.new(connection: connection) }
6
+
7
+ it { should have_resource(:users) }
8
+ it { should have_resource(:groups) }
9
+ end
@@ -5,7 +5,10 @@ describe Mooset::Endpoints::Ldap do
5
5
  let(:bind_dn) { double }
6
6
  let(:port) { double }
7
7
  let(:host) { double }
8
- let(:ldap) { Mooset::Endpoints::Ldap.new(:ldap, host: host, port: port, bind_dn: bind_dn, bind_password: bind_password) }
8
+ subject(:ldap) { Mooset::Endpoints::Ldap.new(endpoint_name: :ldap, host: host, port: port, bind_dn: bind_dn, bind_password: bind_password) }
9
+
10
+ it { should have_resource(:users) }
11
+ it { should have_resource(:groups) }
9
12
 
10
13
  describe "#connection" do
11
14
  subject(:connection) { ldap.connection }
@@ -17,4 +20,3 @@ describe Mooset::Endpoints::Ldap do
17
20
  end
18
21
  end
19
22
  end
20
-
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,19 @@
1
1
  require 'rubygems'
2
2
  require 'rspec'
3
+ require 'logger'
4
+ require 'lspace/rspec'
3
5
 
4
6
  ROOT = Pathname(File.expand_path(File.join(File.dirname(__FILE__), '..')))
5
7
  $LOAD_PATH << File.join(ROOT, 'lib')
6
8
 
7
9
  require 'mooset'
10
+
11
+ Dir[File.join(ROOT, "spec/support/**/*.rb")].each {|f| require f}
12
+
13
+ RSpec.configure do |config|
14
+ config.color = true
15
+
16
+ config.before(:each) do
17
+ LSpace[:logger] = Logger.new('test.log')
18
+ end
19
+ end
@@ -0,0 +1,10 @@
1
+ RSpec.shared_examples "an endpoint" do |names|
2
+ it 'does things' do
3
+ expect(subject.class.respond_to?(:resources)).to eq(true)
4
+ expect(subject.class.resources).to eq(names)
5
+
6
+ names.each do |name|
7
+ expect(subject.send(name)).to be_a(::Mooset::Endpoints::Resource)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,8 @@
1
+ RSpec::Matchers.define :have_resource do |expected|
2
+ match do |actual|
3
+ expect(actual).to respond_to(expected)
4
+ resource = actual.send(expected)
5
+
6
+ expect(resource).to be_a(Mooset::Endpoints::Resource)
7
+ end
8
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mooset
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandru Keszeg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-30 00:00:00.000000000 Z
11
+ date: 2015-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gitlab
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.10'
55
+ - !ruby/object:Gem::Dependency
56
+ name: lspace
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.13'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.13'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -130,6 +144,7 @@ executables:
130
144
  extensions: []
131
145
  extra_rdoc_files: []
132
146
  files:
147
+ - ".drone.yml"
133
148
  - ".gitignore"
134
149
  - Gemfile
135
150
  - LICENSE.txt
@@ -139,10 +154,8 @@ files:
139
154
  - config/sample
140
155
  - lib/mooset.rb
141
156
  - lib/mooset/application.rb
142
- - lib/mooset/configuration.rb
143
157
  - lib/mooset/endpoints.rb
144
158
  - lib/mooset/endpoints/endpoint.rb
145
- - lib/mooset/endpoints/findable.rb
146
159
  - lib/mooset/endpoints/gitlab.rb
147
160
  - lib/mooset/endpoints/gitlab/group.rb
148
161
  - lib/mooset/endpoints/gitlab/group_search.rb
@@ -155,16 +168,25 @@ files:
155
168
  - lib/mooset/endpoints/ldap/ou.rb
156
169
  - lib/mooset/endpoints/ldap/user.rb
157
170
  - lib/mooset/endpoints/null.rb
171
+ - lib/mooset/endpoints/null/group.rb
172
+ - lib/mooset/endpoints/null/group_search.rb
173
+ - lib/mooset/endpoints/null/user.rb
174
+ - lib/mooset/endpoints/null/user_search.rb
175
+ - lib/mooset/endpoints/resource.rb
176
+ - lib/mooset/findable.rb
177
+ - lib/mooset/model.rb
158
178
  - lib/mooset/models/group.rb
159
179
  - lib/mooset/models/user.rb
160
180
  - lib/mooset/monads.rb
161
- - lib/mooset/resource.rb
162
- - lib/mooset/storage/memory.rb
163
181
  - lib/mooset/synchronize_group.rb
164
182
  - lib/mooset/version.rb
165
183
  - mooset.gemspec
184
+ - spec/mooset/endpoints/gitlab/user_search_spec.rb
185
+ - spec/mooset/endpoints/gitlab_spec.rb
166
186
  - spec/mooset/endpoints/ldap_spec.rb
167
187
  - spec/spec_helper.rb
188
+ - spec/support/an_endpoint.rb
189
+ - spec/support/has_resource.rb
168
190
  homepage: ''
169
191
  licenses:
170
192
  - MIT
@@ -185,10 +207,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
207
  version: '0'
186
208
  requirements: []
187
209
  rubyforge_project:
188
- rubygems_version: 2.2.2
210
+ rubygems_version: 2.4.6
189
211
  signing_key:
190
212
  specification_version: 4
191
213
  summary: A Ruby library and client for user migration.
192
214
  test_files:
215
+ - spec/mooset/endpoints/gitlab/user_search_spec.rb
216
+ - spec/mooset/endpoints/gitlab_spec.rb
193
217
  - spec/mooset/endpoints/ldap_spec.rb
194
218
  - spec/spec_helper.rb
219
+ - spec/support/an_endpoint.rb
220
+ - spec/support/has_resource.rb
@@ -1,21 +0,0 @@
1
- module Mooset
2
- class Configuration
3
- attr_reader :definitions, :tasks, :config_filename
4
-
5
- def initialize(config_filename)
6
- @config_filename = config_filename
7
- @definitions = {}
8
- @tasks = []
9
-
10
- instance_eval File.read(@config_filename), @config_filename
11
- end
12
-
13
- def define(name, factory, *args)
14
- @definitions[name] = Mooset::Endpoints::Endpoint.create(factory, *args)
15
- end
16
-
17
- def synchronize_users(from: nil, to: nil, query: nil)
18
- @tasks << { from: from, to: to, query: query }
19
- end
20
- end
21
- end
@@ -1,62 +0,0 @@
1
- module Mooset
2
- module Endpoints
3
- module Findable
4
- module ClassMethods
5
- def import(name, &block)
6
- define_method(import_method_name(name), &block)
7
- end
8
-
9
- def finder(name, &block)
10
- define_method(finder_method_name(name), &block)
11
- end
12
-
13
- def finder_method_name(name)
14
- "find_by_#{name}"
15
- end
16
-
17
- def import_method_name(name)
18
- "import_from_#{name}"
19
- end
20
- end
21
-
22
- module InstanceMethods
23
- def import(object)
24
- method = self.class.import_method_name(object.provider)
25
-
26
- public_send(method, object)
27
- end
28
-
29
- def find_from_object(object, *args)
30
- finder = object.finders.find { |x| respond_to? self.class.finder_method_name(x) }
31
-
32
- if finder && object[finder]
33
- public_send(self.class.finder_method_name(finder), object[finder], *args)
34
- end
35
- end
36
-
37
- def find_from_hash(hash)
38
- key, value = hash.find { |(k, _)| respond_to? self.class.finder_method_name(k) }
39
-
40
- args = hash.tap do |h|
41
- h.delete(key)
42
- end
43
-
44
- if key && value
45
- public_send(self.class.finder_method_name(key), value, args)
46
- end
47
- end
48
-
49
- def find(opts, *args)
50
- return find_from_hash(opts, *args) if opts.is_a? Hash
51
-
52
- find_from_object(opts, args)
53
- end
54
- end
55
-
56
- def self.included(receiver)
57
- receiver.extend ClassMethods
58
- receiver.send :include, InstanceMethods
59
- end
60
- end
61
- end
62
- end
@@ -1,34 +0,0 @@
1
- module Mooset
2
- module Storage
3
- class Memory
4
- attr_reader :name
5
-
6
- def initialize(name)
7
- @name = name
8
- @objects = {}
9
- end
10
-
11
- def set(id, object)
12
- @objects[id] = object
13
- end
14
-
15
- def exists?(id)
16
- !@objects[id].nil?
17
- end
18
-
19
- def get(id)
20
- @objects[id]
21
- end
22
-
23
- def fetch(id, &block)
24
- if exists?(id)
25
- get(id)
26
- else
27
- object = block.call
28
- set(id, object)
29
- object
30
- end
31
- end
32
- end
33
- end
34
- end