reference_book 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,96 @@
1
+ require 'test_helper'
2
+
3
+ class CollectorTest < Minitest::Test
4
+
5
+ def setup
6
+ super
7
+ @collector = ReferenceBook::Setup::Collector.new
8
+ end
9
+
10
+
11
+
12
+ def test_undefined_keys
13
+ assert_nil @collector.foobar
14
+ assert_empty @collector.to_h
15
+ end
16
+
17
+
18
+ def test_direct_assignement
19
+ assert_nil @collector.foo
20
+ assert_nil @collector.bar
21
+
22
+ @collector.foo = "ciao"
23
+
24
+ assert_equal "ciao", @collector.foo
25
+ assert_nil @collector.bar
26
+ end
27
+
28
+
29
+ def test_hash_assignement
30
+ assert_nil @collector.foo
31
+ assert_nil @collector.bar
32
+
33
+ @collector[:foo] = "ciao"
34
+
35
+ assert_equal "ciao", @collector.foo
36
+ assert_nil @collector.bar
37
+ end
38
+
39
+
40
+
41
+ def test_to_hash
42
+ assert_empty @collector.to_h
43
+ assert_equal Hash, @collector.to_h.class
44
+
45
+ @collector.foo = "hello"
46
+ @collector.bar = "ciao"
47
+
48
+ refute_empty @collector.to_h
49
+ assert_equal 2, @collector.to_h.size
50
+ assert_equal "hello", @collector.to_h[:foo]
51
+ assert_equal "ciao", @collector.to_h[:bar]
52
+ assert_nil @collector.to_h[:baz]
53
+ end
54
+
55
+
56
+ def test_assign_nil
57
+ assert_nil @collector.foo
58
+ assert_empty @collector.to_h
59
+
60
+ @collector.foo = nil
61
+
62
+ assert_nil @collector.foo
63
+ assert_equal 1, @collector.to_h.size
64
+ assert_includes @collector.to_h.keys, :foo
65
+ end
66
+
67
+
68
+
69
+ def test_set_title_direct
70
+ assert_raises ReferenceBook::BookDefinitionError do
71
+ @collector.title = 'anything'
72
+ end
73
+ end
74
+
75
+
76
+ def test_set_library_key_direct
77
+ assert_raises ReferenceBook::BookDefinitionError do
78
+ @collector.library_key = 'anything'
79
+ end
80
+ end
81
+
82
+
83
+ def test_set_title_hash
84
+ assert_raises ReferenceBook::BookDefinitionError do
85
+ @collector[:title] = 'anything'
86
+ end
87
+ end
88
+
89
+
90
+ def test_set_library_key_hash
91
+ assert_raises ReferenceBook::BookDefinitionError do
92
+ @collector[:library_key] = 'anything'
93
+ end
94
+ end
95
+
96
+ end
@@ -0,0 +1,117 @@
1
+ require 'test_helper'
2
+
3
+ class LockedBookSpecTest < Minitest::Test
4
+
5
+
6
+ def test_constructor
7
+ result = ReferenceBook::Setup::LockedBookSpec.new([:one])
8
+ assert result
9
+ assert_equal ReferenceBook::Setup::LockedBookSpec, result.class
10
+
11
+ assert_raises ReferenceBook::LockedBookSpecError do
12
+ ReferenceBook::Setup::LockedBookSpec.new([])
13
+ end
14
+
15
+ assert_raises ArgumentError do
16
+ ReferenceBook::Setup::LockedBookSpec.new
17
+ end
18
+ end
19
+
20
+
21
+
22
+ def test_verify_keys_pass
23
+ spec = make_locked_spec
24
+
25
+ assert spec.verify_keys!([:foo, :bar, :baz])
26
+ assert spec.verify_keys!([:bar, :baz, :foo])
27
+ end
28
+
29
+
30
+
31
+ def test_verify_keys_fail_missing
32
+ spec = make_locked_spec
33
+
34
+ error_1 = assert_raises ReferenceBook::BookDefinitionError do
35
+ spec.verify_keys!([:foo, :bar])
36
+ end
37
+
38
+ reported_missing = extract_missing_keys(error_1.message)
39
+ assert_equal reported_missing.sort, %w(baz)
40
+
41
+ error_2 = assert_raises ReferenceBook::BookDefinitionError do
42
+ spec.verify_keys!([])
43
+ end
44
+
45
+ reported_missing = extract_missing_keys(error_2.message)
46
+ assert_equal reported_missing.sort, %w(bar baz foo)
47
+ end
48
+
49
+
50
+
51
+ def test_verify_keys_fail_unexpected
52
+ spec = make_locked_spec
53
+
54
+ error_1 = assert_raises ReferenceBook::BookDefinitionError do
55
+ spec.verify_keys!([:foo, :bar, :baz, :hello])
56
+ end
57
+
58
+ reported_unexpected = extract_unexpected_keys(error_1.message)
59
+ assert_equal reported_unexpected.sort, %w(hello)
60
+
61
+ error_2 = assert_raises ReferenceBook::BookDefinitionError do
62
+ spec.verify_keys!([:foo, :baz, :one, :two, :bar])
63
+ end
64
+
65
+ reported_unexpected = extract_unexpected_keys(error_2.message)
66
+ assert_equal reported_unexpected.sort, %w(one two)
67
+ end
68
+
69
+
70
+
71
+ def test_verify_keys_fail_missing_and_unexpected
72
+ spec = make_locked_spec
73
+
74
+ error_1 = assert_raises ReferenceBook::BookDefinitionError do
75
+ spec.verify_keys!([:bar, :hello, :foo])
76
+ end
77
+
78
+ reported_missing = extract_missing_keys(error_1.message)
79
+ assert_equal reported_missing.sort, %w(baz)
80
+
81
+ reported_unexpected = extract_unexpected_keys(error_1.message)
82
+ assert_equal reported_unexpected.sort, %w(hello)
83
+
84
+ error_2 = assert_raises ReferenceBook::BookDefinitionError do
85
+ spec.verify_keys!([:one, :two, :three])
86
+ end
87
+
88
+ reported_missing = extract_missing_keys(error_2.message)
89
+ assert_equal reported_missing.sort, %w(bar baz foo)
90
+
91
+ reported_unexpected = extract_unexpected_keys(error_2.message)
92
+ assert_equal reported_unexpected.sort, %w(one three two)
93
+ end
94
+
95
+
96
+ private
97
+
98
+ def make_locked_spec(keys = nil)
99
+ keys ||= [:foo, :bar, :baz]
100
+ ReferenceBook::Setup::LockedBookSpec.new(keys)
101
+ end
102
+
103
+
104
+ def extract_missing_keys(msg)
105
+ reg = /missing keys\: \[([a-zA-Z_\-\, ]+)\]/
106
+ data = reg.match msg
107
+ data[1].split(', ')
108
+ end
109
+
110
+
111
+ def extract_unexpected_keys(msg)
112
+ reg = /unexpected keys\: \[([a-zA-Z_\-\, ]+)\]/
113
+ data = reg.match msg
114
+ data[1].split(', ')
115
+ end
116
+
117
+ end
@@ -0,0 +1,202 @@
1
+ require 'test_helper'
2
+
3
+ class WriterTest < Minitest::Test
4
+
5
+ def test_initialize_with_locked_spec
6
+ assert ReferenceBook::Setup::Writer.new(make_locked_spec)
7
+ end
8
+
9
+
10
+ def test_initialize_with_nil
11
+ assert ReferenceBook::Setup::Writer.new(nil)
12
+ assert ReferenceBook::Setup::Writer.new
13
+ end
14
+
15
+
16
+ def test_create_book_normal
17
+ writer = ReferenceBook::Setup::Writer.new
18
+ collector = make_collector
19
+
20
+ book = writer.create_book_with('title', 'key', collector)
21
+
22
+ assert book.is_a?(ReferenceBook::Book)
23
+ assert_equal "ReferenceBook::Book::Title", book.class.name
24
+ assert book.frozen?
25
+ assert_equal "Title", book.title
26
+ assert_equal :key, book.library_key
27
+ end
28
+
29
+
30
+
31
+ def test_attributes_of_created_book
32
+ collector = make_collector one: 1, two: 2, three: '3'
33
+ writer = ReferenceBook::Setup::Writer.new
34
+ book = writer.create_book_with('CheckAttrs', nil, collector)
35
+
36
+ assert_equal collector.one, book.one
37
+ assert_equal collector.two, book.two
38
+ assert_equal collector.three, book.three
39
+
40
+ assert_equal "CheckAttrs", book.title
41
+ assert_equal :check_attrs, book.library_key
42
+ end
43
+
44
+
45
+
46
+ def test_create_book_without_title
47
+ writer = ReferenceBook::Setup::Writer.new
48
+ collector = make_collector
49
+
50
+ book = writer.create_book_with(nil, nil, collector)
51
+
52
+ assert book.is_a?(ReferenceBook::Book)
53
+ assert_equal "ReferenceBook::Book::Default", book.class.name
54
+ assert book.frozen?
55
+ assert_equal "Default", book.title
56
+ assert_equal :default, book.library_key
57
+ end
58
+
59
+
60
+
61
+ def test_create_book_without_explicit_key
62
+ writer = ReferenceBook::Setup::Writer.new
63
+ collector = make_collector
64
+
65
+ book = writer.create_book_with('MyTitle', nil, collector)
66
+
67
+ assert book.is_a?(ReferenceBook::Book)
68
+ assert book.frozen?
69
+ assert_equal "MyTitle", book.title
70
+ assert_equal :my_title, book.library_key
71
+ end
72
+
73
+
74
+
75
+ def test_create_book_with_symbol_key_parameter
76
+ writer = ReferenceBook::Setup::Writer.new
77
+ collector = make_collector
78
+
79
+ book = writer.create_book_with('titlea', :"Not Nice", collector)
80
+
81
+ assert book.is_a?(ReferenceBook::Book)
82
+ assert book.frozen?
83
+ assert_equal "Titlea", book.title
84
+ assert_equal :"Not Nice", book.library_key
85
+ end
86
+
87
+
88
+
89
+
90
+ def test_create_book_with_duplicated_library_key
91
+ writer = ReferenceBook::Setup::Writer.new
92
+ collector = make_collector
93
+
94
+ book = writer.create_book_with('TitleOne', :existing_key, collector)
95
+ ReferenceBook::Library.store(book)
96
+
97
+ assert_raises ReferenceBook::BookDefinitionError do
98
+ writer.create_book_with('TitleTwo', :existing_key, collector)
99
+ end
100
+
101
+ book = writer.create_book_with('TitleThree', :new_key, collector)
102
+ assert book.is_a?(ReferenceBook::Book)
103
+
104
+ ReferenceBook::Library.empty!
105
+ end
106
+
107
+
108
+
109
+ def test_create_book_with_spec_pass
110
+ spec = make_locked_spec [:one, :two, :three]
111
+ writer = ReferenceBook::Setup::Writer.new(spec)
112
+ collector = make_collector one: 1, two: 2, three: 3
113
+
114
+ book = writer.create_book_with('with spec pass', nil, collector)
115
+
116
+ assert book.is_a?(ReferenceBook::Book)
117
+ assert_equal "ReferenceBook::Book::Withspecpass", book.class.name
118
+ assert book.frozen?
119
+ assert_equal "Withspecpass", book.title
120
+ assert_equal :with_spec_pass, book.library_key
121
+ end
122
+
123
+
124
+
125
+ def test_create_book_with_spec_fail_missing
126
+ spec = make_locked_spec [:one, :two, :three]
127
+ writer = ReferenceBook::Setup::Writer.new(spec)
128
+ collector = make_collector one: 1, two: 2
129
+
130
+ assert_raises ReferenceBook::BookDefinitionError do
131
+ writer.create_book_with('with spec fail', nil, collector)
132
+ end
133
+
134
+ empty_collector = ReferenceBook::Setup::Collector.new
135
+
136
+ assert_raises ReferenceBook::BookDefinitionError do
137
+ writer.create_book_with('with spec fail', nil, empty_collector)
138
+ end
139
+ end
140
+
141
+
142
+ def test_create_book_with_spec_fail_unexpected
143
+ spec = make_locked_spec [:one, :two, :three]
144
+ writer = ReferenceBook::Setup::Writer.new(spec)
145
+ collector = make_collector one: 1, two: 2, three: 3, four: 4
146
+
147
+ assert_raises ReferenceBook::BookDefinitionError do
148
+ writer.create_book_with('with spec fail', nil, collector)
149
+ end
150
+
151
+
152
+ collector = make_collector foo: 1, bar: 2
153
+
154
+ assert_raises ReferenceBook::BookDefinitionError do
155
+ writer.create_book_with('with spec fail', nil, collector)
156
+ end
157
+ end
158
+
159
+
160
+ def test_create_book_with_spec_fail_missing_and_unexpected
161
+ spec = make_locked_spec [:one, :two, :three]
162
+ writer = ReferenceBook::Setup::Writer.new(spec)
163
+ collector = make_collector one: 1, two: 2, four: 4
164
+
165
+ assert_raises ReferenceBook::BookDefinitionError do
166
+ writer.create_book_with('with spec fail', nil, collector)
167
+ end
168
+ end
169
+
170
+
171
+
172
+ private
173
+
174
+ def make_collector(keys = {})
175
+ collector = ReferenceBook::Setup::Collector.new
176
+ if keys.any?
177
+ keys.each_pair { |k, v| collector[k] = v }
178
+ else
179
+ collector.foo = 11
180
+ collector.bar = 22
181
+ collector.baz = 33
182
+ end
183
+ collector
184
+ end
185
+
186
+
187
+ def make_locked_spec(keys = nil)
188
+ keys ||= [:foo, :bar, :baz]
189
+ ReferenceBook::Setup::LockedBookSpec.new(keys)
190
+ end
191
+
192
+
193
+
194
+ def debug(book)
195
+ puts <<-EOS
196
+
197
+ ----
198
+ book: #{book}
199
+ ----
200
+ EOS
201
+ end
202
+ end
@@ -0,0 +1,4 @@
1
+ require 'reference_book'
2
+
3
+ require 'minitest/autorun'
4
+ require 'minitest/pride'
metadata ADDED
@@ -0,0 +1,121 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: reference_book
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Tommaso Pavese
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ version_requirements: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ requirement: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: '1.6'
25
+ prerelease: false
26
+ type: :development
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ~>
37
+ - !ruby/object:Gem::Version
38
+ version: '10.0'
39
+ prerelease: false
40
+ type: :development
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '5.3'
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ~>
51
+ - !ruby/object:Gem::Version
52
+ version: '5.3'
53
+ prerelease: false
54
+ type: :development
55
+ description: A multi-context configuration library and DSL. ReferenceBook provides an easy interface to define, validate and query multi-context configuration data.
56
+ email:
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - .gitignore
62
+ - Gemfile
63
+ - LICENSE.txt
64
+ - README.md
65
+ - Rakefile
66
+ - examples/config.rb
67
+ - examples/interface_and_use.rb
68
+ - examples/rails_controllers_and_views.rb
69
+ - examples/rails_models.rb
70
+ - lib/reference_book.rb
71
+ - lib/reference_book/book.rb
72
+ - lib/reference_book/errors.rb
73
+ - lib/reference_book/inflector.rb
74
+ - lib/reference_book/library.rb
75
+ - lib/reference_book/setup.rb
76
+ - lib/reference_book/setup/collector.rb
77
+ - lib/reference_book/setup/locked_book_spec.rb
78
+ - lib/reference_book/setup/writer.rb
79
+ - lib/reference_book/version.rb
80
+ - reference_book.gemspec
81
+ - test/book_test.rb
82
+ - test/inflector_test.rb
83
+ - test/library_test.rb
84
+ - test/reference_book_test.rb
85
+ - test/setup/collector_test.rb
86
+ - test/setup/locked_book_spec_test.rb
87
+ - test/setup/writer_test.rb
88
+ - test/test_helper.rb
89
+ homepage: https://github.com/tompave/reference_book
90
+ licenses:
91
+ - MIT
92
+ metadata: {}
93
+ post_install_message:
94
+ rdoc_options: []
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - '>='
100
+ - !ruby/object:Gem::Version
101
+ version: 2.0.0
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - '>='
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ requirements: []
108
+ rubyforge_project:
109
+ rubygems_version: 2.2.2
110
+ signing_key:
111
+ specification_version: 4
112
+ summary: A multi-context configuration library and DSL.
113
+ test_files:
114
+ - test/book_test.rb
115
+ - test/inflector_test.rb
116
+ - test/library_test.rb
117
+ - test/reference_book_test.rb
118
+ - test/setup/collector_test.rb
119
+ - test/setup/locked_book_spec_test.rb
120
+ - test/setup/writer_test.rb
121
+ - test/test_helper.rb