reference_book 0.0.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.
@@ -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