ldif-dsl 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ea39ff30661175f50949c7af00144b08ae4f001f
4
+ data.tar.gz: 568323afda404f244bef5512b0d1307fbd7d5a63
5
+ SHA512:
6
+ metadata.gz: 1f72bd3f6c3cb8aaafb238d38f95bc1cee3dc29d7197e563803f6f9d60104b9913dabdd788948d4ae64e74b10d87be9dc6eb0e2c535dc24a105ae36ddeeaa508
7
+ data.tar.gz: c26b552b0dac3e55d79e4084ae390e7eb895e5d2369e0337aa670547f481bef6dfad2cfefb007845f0fd17724b90f2b2a116acac1f853c2f71c980aa0d75f607
data/.gitignore ADDED
@@ -0,0 +1,41 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /test/tmp/
9
+ /test/version_tmp/
10
+ /tmp/
11
+
12
+ ## Specific to RubyMotion:
13
+ .dat*
14
+ .repl_history
15
+ build/
16
+
17
+ ## Documentation cache and generated files:
18
+ /.yardoc/
19
+ /_yardoc/
20
+ /doc/
21
+ /rdoc/
22
+
23
+ ## Environment normalisation:
24
+ /.bundle/
25
+ /lib/bundler/man/
26
+
27
+ # for a library or gem, you might want to ignore these files since the code is
28
+ # intended to run in multiple environments; otherwise, check them in:
29
+ # Gemfile.lock
30
+ # .ruby-version
31
+ # .ruby-gemset
32
+
33
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
34
+ .rvmrc
35
+ .idea/
36
+ .bundle
37
+ .config
38
+ .rspec
39
+ .ruby-version
40
+ .ruby-gemset
41
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/README.md ADDED
@@ -0,0 +1,4 @@
1
+ ldif-dsl
2
+ ========
3
+
4
+ Generate ldif config with dsl
data/ldif_dsl.gemspec ADDED
@@ -0,0 +1,21 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+ require "ldif/version"
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "ldif-dsl"
6
+ s.version = LDIF::VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ['Ivan Yurchenko']
9
+ s.email = ['vanya.yu@gmail.com']
10
+ s.homepage = ''
11
+ s.summary = %q{DSL for building ldif config for ladle server}
12
+ s.description = %q{DSL for building ldif config for ladle server}
13
+
14
+ s.add_dependency 'docile'
15
+ s.add_development_dependency 'rspec'
16
+ s.add_development_dependency 'rspec-its'
17
+
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ s.require_paths = %w[lib]
21
+ end
@@ -0,0 +1,47 @@
1
+ require 'docile'
2
+ require_relative 'group'
3
+ require_relative 'person'
4
+
5
+ module LDIF
6
+ module DSL
7
+ class ContentBuilder
8
+ def initialize
9
+ @groups = []
10
+ @people = []
11
+ end
12
+
13
+ def person(&block)
14
+ @people.push(Docile.dsl_eval(Person::Builder.new, &block).build)
15
+ self
16
+ end
17
+
18
+ def group(&block)
19
+ @groups.push(Docile.dsl_eval(Group::Builder.new, &block).build)
20
+ self
21
+ end
22
+
23
+ def build
24
+ billet = "version: 1\n\n"
25
+ billet << organizational_unit('people')
26
+ billet << "\n"
27
+ billet << organizational_unit('groups')
28
+ billet << "\n"
29
+ billet << @groups.join("\n")
30
+ billet << "\n"
31
+ billet << @people.join("\n")
32
+ end
33
+
34
+ private
35
+ attr_accessor :people, :groups
36
+
37
+ def organizational_unit(name)
38
+ <<-TEXT
39
+ dn: ou=#{name},dc=test
40
+ ou: #{name}
41
+ objectClass: top
42
+ objectClass: organizationalUnit
43
+ TEXT
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,37 @@
1
+ module LDIF
2
+ module DSL
3
+ class Group < Struct.new(:name, :members)
4
+ def to_s
5
+ billet = <<-TEXT
6
+ dn: cn=#{name},ou=groups,dc=test
7
+ objectClass: top
8
+ objectClass: groupOfUniqueNames
9
+ cn: #{name}
10
+ ou: groups
11
+ TEXT
12
+ billet << members.map { |m| "uniqueMember: cn=#{m},ou=people,dc=test" }.join("\n")
13
+ billet << "\n"
14
+ end
15
+
16
+ class Builder
17
+ def initialize
18
+ @members = []
19
+ end
20
+
21
+ def name(name)
22
+ @name = name
23
+ self
24
+ end
25
+
26
+ def member(email)
27
+ @members.push(email)
28
+ self
29
+ end
30
+
31
+ def build
32
+ Group.new(@name, @members)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,50 @@
1
+ module LDIF
2
+ module DSL
3
+ class Person < Struct.new(:first_name, :second_name, :password)
4
+ def to_s
5
+ <<-TEXT
6
+ dn: cn=#{username},ou=people,dc=test
7
+ cn: #{username}
8
+ sn: #{second_name}
9
+ givenName: #{first_name}
10
+ mail: #{mail}
11
+ userPassword: #{password}
12
+ objectClass: top
13
+ objectClass: person
14
+ objectClass: organizationalPerson
15
+ objectClass: inetOrgPerson
16
+ TEXT
17
+ end
18
+
19
+ class Builder
20
+ def first_name(first_name)
21
+ @first_name = first_name
22
+ self
23
+ end
24
+
25
+ def second_name(second_name)
26
+ @second_name = second_name
27
+ self
28
+ end
29
+
30
+ def password(plain_password)
31
+ @password = "{SHA}#{Digest::SHA1.base64digest(plain_password)}"
32
+ self
33
+ end
34
+
35
+ def build
36
+ Person.new(@first_name, @second_name, @password)
37
+ end
38
+ end
39
+
40
+ private
41
+ def username
42
+ @username ||= [first_name, second_name].join('_')
43
+ end
44
+
45
+ def mail
46
+ @mail ||= "#{username}@example.com"
47
+ end
48
+ end
49
+ end
50
+ end
data/lib/ldif/dsl.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'docile'
2
+ require_relative 'dsl/content_builder'
3
+
4
+ module LDIF
5
+ module DSL
6
+ def ldif(&block)
7
+ Docile.dsl_eval(ContentBuilder.new, &block).build
8
+ end
9
+ module_function :ldif
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ module LDIF
2
+ VERSION = '0.1.1'
3
+ end
data/lib/ldif.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'ldif/version'
2
+ require 'ldif/dsl'
3
+
4
+ module LDIF
5
+ end
@@ -0,0 +1,90 @@
1
+ require 'spec_helper'
2
+
3
+ module LDIF
4
+ module DSL
5
+ describe ContentBuilder do
6
+ let(:content_builder) { ContentBuilder.new }
7
+ let(:email) { 'John_Doe' }
8
+ let(:group_name) { 'administrators'}
9
+ let(:first_name) { 'John' }
10
+ let(:second_name) { 'Doe' }
11
+ let(:password) { '123qwe' }
12
+
13
+ let(:result_string) do
14
+ <<-TEXT
15
+ version: 1
16
+
17
+ dn: ou=people,dc=test
18
+ ou: people
19
+ objectClass: top
20
+ objectClass: organizationalUnit
21
+
22
+ dn: ou=groups,dc=test
23
+ ou: groups
24
+ objectClass: top
25
+ objectClass: organizationalUnit
26
+
27
+ dn: cn=administrators,ou=groups,dc=test
28
+ objectClass: top
29
+ objectClass: groupOfUniqueNames
30
+ cn: administrators
31
+ ou: groups
32
+ uniqueMember: cn=John_Doe,ou=people,dc=test
33
+
34
+ dn: cn=John_Doe,ou=people,dc=test
35
+ cn: John_Doe
36
+ sn: Doe
37
+ givenName: John
38
+ mail: John_Doe@example.com
39
+ userPassword: {SHA}Bf50YcYHwzIpdy1AJQVgEBan0Oo=
40
+ objectClass: top
41
+ objectClass: person
42
+ objectClass: organizationalPerson
43
+ objectClass: inetOrgPerson
44
+ TEXT
45
+ end
46
+
47
+ subject { content_builder }
48
+
49
+ context 'Set people' do
50
+ before do
51
+ content_builder.person do
52
+ first_name 'John'
53
+ second_name 'Doe'
54
+ password '123qwe'
55
+ end
56
+ end
57
+ its(:people) { should == [Person.new(first_name, second_name, "{SHA}#{Digest::SHA1.base64digest(password)}")] }
58
+ end
59
+
60
+ context 'Set group' do
61
+ before do
62
+ content_builder.group do
63
+ name group_name
64
+ member "#{first_name}_#{second_name}"
65
+ end
66
+ end
67
+ its(:groups) { should == [Group.new(group_name, [email])] }
68
+ end
69
+
70
+ context 'build' do
71
+ before do
72
+ content_builder.person do
73
+ first_name 'John'
74
+ second_name 'Doe'
75
+ password '123qwe'
76
+ end
77
+
78
+ content_builder.group do
79
+ name group_name
80
+ member "#{first_name}_#{second_name}"
81
+ end
82
+
83
+ end
84
+ its(:build) { should == result_string }
85
+ end
86
+
87
+
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,75 @@
1
+ module LDIF
2
+ module DSL
3
+ describe Group do
4
+ let(:builder) { Group::Builder.new }
5
+ let(:group) { builder.build }
6
+ let(:name) { 'Name' }
7
+ let(:email) { 'email@example.com' }
8
+ let(:result_string_without_members) do
9
+ <<-TEXT
10
+ dn: cn=#{name},ou=groups,dc=test
11
+ objectClass: top
12
+ objectClass: groupOfUniqueNames
13
+ cn: #{name}
14
+ ou: groups
15
+
16
+ TEXT
17
+ end
18
+
19
+ let(:result_string_with_one_member) do
20
+ <<-TEXT
21
+ dn: cn=#{name},ou=groups,dc=test
22
+ objectClass: top
23
+ objectClass: groupOfUniqueNames
24
+ cn: #{name}
25
+ ou: groups
26
+ uniqueMember: cn=#{email},ou=people,dc=test
27
+ TEXT
28
+ end
29
+
30
+ subject { group }
31
+
32
+ context 'Initialize' do
33
+ let(:g) { Group.new(name, [email]) }
34
+ subject { g }
35
+ its(:name) { should eq name }
36
+ its(:members) { should match_array([email]) }
37
+ end
38
+
39
+ context 'name = #{name}' do
40
+ before { builder.name name }
41
+ its(:name) { should == name }
42
+ end
43
+
44
+ context 'group without members' do
45
+ its(:members) { should be_empty }
46
+ end
47
+
48
+ context 'group with one member' do
49
+ before { builder.member(email) }
50
+ its(:members) { should == [email] }
51
+ end
52
+
53
+ context 'to_s with one member' do
54
+ before { builder.name(name) }
55
+ its(:to_s) { should == result_string_without_members }
56
+ end
57
+
58
+ context 'to_s with one member' do
59
+ before do
60
+ builder.name(name)
61
+ builder.member(email)
62
+ end
63
+ its(:to_s) { should == result_string_with_one_member }
64
+ end
65
+
66
+ context 'build' do
67
+ before do
68
+ builder.name name
69
+ builder.member email
70
+ end
71
+ it { expect(group).to eq Group.new(name, [email]) }
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,84 @@
1
+ module LDIF
2
+ module DSL
3
+
4
+ describe Person do
5
+ let(:builder) { Person::Builder.new }
6
+ let(:person) { builder.build }
7
+ let(:first_name) { 'Name' }
8
+ let(:second_name) { 'Second_Name' }
9
+ let(:username) { [first_name, second_name].join('_') }
10
+ let(:password) { 'password' }
11
+ let(:mail) { "#{username}@example.com" }
12
+ subject { person }
13
+
14
+ context 'Initialize' do
15
+ let(:p) { Person.new(first_name, second_name, password) }
16
+ subject { p }
17
+
18
+ its(:first_name) { should eq first_name }
19
+ its(:second_name) { should eq second_name }
20
+ its(:password) { should eq password }
21
+ end
22
+
23
+ context 'first name = #{first_name}' do
24
+ before { builder.first_name first_name }
25
+ its(:first_name) { should == first_name }
26
+ end
27
+
28
+ context 'second name = #{second_name}' do
29
+ before { builder.second_name second_name }
30
+ its(:second_name) { should == second_name }
31
+ end
32
+
33
+ context 'password = #{password}' do
34
+ before { builder.password password }
35
+ its(:password) { should == "{SHA}#{Digest::SHA1.base64digest(password)}" }
36
+ end
37
+
38
+ context 'build' do
39
+ before do
40
+ builder.first_name first_name
41
+ builder.second_name second_name
42
+ builder.password password
43
+ end
44
+ it { expect(person).to eq Person.new(first_name, second_name, "{SHA}#{Digest::SHA1.base64digest(password)}") }
45
+ end
46
+
47
+ context 'username = #{username}' do
48
+ before do
49
+ builder.first_name first_name
50
+ builder.second_name second_name
51
+ end
52
+ its(:username) { should == username }
53
+ end
54
+
55
+ context 'mail = #{mail}' do
56
+ before do
57
+ builder.first_name first_name
58
+ builder.second_name second_name
59
+ end
60
+ its(:mail) { should == mail }
61
+ end
62
+
63
+ context 'to_s' do
64
+ let(:result_string) do
65
+ <<-TEXT
66
+ dn: cn=#{username},ou=people,dc=test
67
+ cn: #{username}
68
+ sn: #{second_name}
69
+ givenName: #{first_name}
70
+ mail: #{mail}
71
+ userPassword: #{password}
72
+ objectClass: top
73
+ objectClass: person
74
+ objectClass: organizationalPerson
75
+ objectClass: inetOrgPerson
76
+ TEXT
77
+ end
78
+ subject { Person.new(first_name, second_name, password) }
79
+ its(:to_s) { should == result_string }
80
+ end
81
+ end
82
+ end
83
+
84
+ end
@@ -0,0 +1,75 @@
1
+ describe '.ldif' do
2
+ let(:for_empty_block) do
3
+ <<-TEXT
4
+ version: 1
5
+
6
+ dn: ou=people,dc=test\nou: people
7
+ objectClass: top
8
+ objectClass: organizationalUnit
9
+
10
+ dn: ou=groups,dc=test
11
+ ou: groups
12
+ objectClass: top
13
+ objectClass: organizationalUnit
14
+
15
+
16
+ TEXT
17
+ end
18
+
19
+ let(:for_no_empty_block) do
20
+ <<-TEXT
21
+ version: 1
22
+
23
+ dn: ou=people,dc=test
24
+ ou: people
25
+ objectClass: top
26
+ objectClass: organizationalUnit
27
+
28
+ dn: ou=groups,dc=test
29
+ ou: groups
30
+ objectClass: top
31
+ objectClass: organizationalUnit
32
+
33
+ dn: cn=administrators,ou=groups,dc=test
34
+ objectClass: top
35
+ objectClass: groupOfUniqueNames
36
+ cn: administrators
37
+ ou: groups
38
+ uniqueMember: cn=John_Doe,ou=people,dc=test
39
+
40
+ dn: cn=John_Doe,ou=people,dc=test
41
+ cn: John_Doe\nsn: Doe
42
+ givenName: John
43
+ mail: John_Doe@example.com
44
+ userPassword: {SHA}Bf50YcYHwzIpdy1AJQVgEBan0Oo=
45
+ objectClass: top
46
+ objectClass: person
47
+ objectClass: organizationalPerson
48
+ objectClass: inetOrgPerson
49
+ TEXT
50
+ end
51
+
52
+ let(:block) do
53
+ proc do
54
+ person do
55
+ first_name 'John'
56
+ second_name 'Doe'
57
+ password '123qwe'
58
+ end
59
+
60
+ group do
61
+ name 'administrators'
62
+ member 'John_Doe'
63
+ end
64
+ end
65
+ end
66
+
67
+ context 'empty block' do
68
+ it { expect(LDIF::DSL.ldif {}).to eq for_empty_block}
69
+ end
70
+
71
+ context 'with block' do
72
+ it { expect(LDIF::DSL.ldif(&block)).to eq for_no_empty_block}
73
+ end
74
+
75
+ end
@@ -0,0 +1,6 @@
1
+ require 'ldif'
2
+ require 'rspec/its'
3
+
4
+ RSpec.configure do |config|
5
+ # some (optional) config here
6
+ end
metadata ADDED
@@ -0,0 +1,100 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ldif-dsl
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Ivan Yurchenko
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: docile
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec-its
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: DSL for building ldif config for ladle server
56
+ email:
57
+ - vanya.yu@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - Gemfile
64
+ - README.md
65
+ - ldif_dsl.gemspec
66
+ - lib/ldif.rb
67
+ - lib/ldif/dsl.rb
68
+ - lib/ldif/dsl/content_builder.rb
69
+ - lib/ldif/dsl/group.rb
70
+ - lib/ldif/dsl/person.rb
71
+ - lib/ldif/version.rb
72
+ - spec/lib/ldif/dsl/content_builder_spec.rb
73
+ - spec/lib/ldif/dsl/groups_spec.rb
74
+ - spec/lib/ldif/dsl/persons_spec.rb
75
+ - spec/lib/ldif/dsl_spec.rb
76
+ - spec/spec_helper.rb
77
+ homepage: ''
78
+ licenses: []
79
+ metadata: {}
80
+ post_install_message:
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubyforge_project:
96
+ rubygems_version: 2.2.2
97
+ signing_key:
98
+ specification_version: 4
99
+ summary: DSL for building ldif config for ladle server
100
+ test_files: []