ns-options 0.1.0
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.
- data/.gitignore +17 -0
- data/Gemfile +8 -0
- data/README.markdown +151 -0
- data/Rakefile +5 -0
- data/lib/ns-options/has_options.rb +36 -0
- data/lib/ns-options/helper.rb +34 -0
- data/lib/ns-options/namespace.rb +136 -0
- data/lib/ns-options/namespaces.rb +22 -0
- data/lib/ns-options/option/boolean.rb +27 -0
- data/lib/ns-options/option.rb +70 -0
- data/lib/ns-options/options.rb +65 -0
- data/lib/ns-options/version.rb +3 -0
- data/lib/ns-options.rb +9 -0
- data/ns-options.gemspec +19 -0
- data/test/helper.rb +14 -0
- data/test/integration/app_test.rb +63 -0
- data/test/integration/user_test.rb +57 -0
- data/test/support/app.rb +12 -0
- data/test/support/user.rb +13 -0
- data/test/unit/ns-options/has_options_test.rb +67 -0
- data/test/unit/ns-options/helper_test.rb +63 -0
- data/test/unit/ns-options/namespace_test.rb +232 -0
- data/test/unit/ns-options/namespaces_test.rb +55 -0
- data/test/unit/ns-options/option/boolean_test.rb +67 -0
- data/test/unit/ns-options/option_test.rb +191 -0
- data/test/unit/ns-options/options_test.rb +227 -0
- metadata +117 -0
@@ -0,0 +1,191 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
class NsOptions::Option
|
4
|
+
|
5
|
+
class BaseTest < Assert::Context
|
6
|
+
desc "NsOptions::Option"
|
7
|
+
setup do
|
8
|
+
@rules = { :default => "development", :require => true }
|
9
|
+
@option = NsOptions::Option.new(:stage, String, @rules)
|
10
|
+
end
|
11
|
+
subject{ @option }
|
12
|
+
|
13
|
+
should have_accessors :name, :value, :type_class, :rules
|
14
|
+
|
15
|
+
should "have set the name" do
|
16
|
+
assert_equal "stage", subject.name
|
17
|
+
end
|
18
|
+
should "have set the type class" do
|
19
|
+
assert_equal String, subject.type_class
|
20
|
+
end
|
21
|
+
should "have set the rules" do
|
22
|
+
assert_equal(@rules, subject.rules)
|
23
|
+
end
|
24
|
+
should "have defaulted value based on the rules" do
|
25
|
+
assert_equal subject.rules[:default], subject.value
|
26
|
+
end
|
27
|
+
should "return true with a call to #required?" do
|
28
|
+
assert_equal true, subject.required?
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class IsSetTest < BaseTest
|
33
|
+
desc "is_set method"
|
34
|
+
setup do
|
35
|
+
@type_class = Class.new(String) do
|
36
|
+
|
37
|
+
def is_set?
|
38
|
+
self.gsub(/\s+/, '').size != 0
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
@special = NsOptions::Option.new(:no_blank, @type_class)
|
43
|
+
end
|
44
|
+
|
45
|
+
should "return true/false appropriately for a boolean option with true or false" do
|
46
|
+
@option.value = true
|
47
|
+
assert_equal true, @option.is_set?
|
48
|
+
@option.value = false
|
49
|
+
assert_equal true, @option.is_set?
|
50
|
+
@option.value = nil
|
51
|
+
assert_equal false, @option.is_set?
|
52
|
+
end
|
53
|
+
should "return true/false based on type class's is_set method" do
|
54
|
+
@special.value = "not blank"
|
55
|
+
assert_equal true, @special.is_set?
|
56
|
+
@special.value = " "
|
57
|
+
assert_equal false, @special.is_set?
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class EqualityOperatorTest < BaseTest
|
62
|
+
desc "== operator"
|
63
|
+
setup do
|
64
|
+
@first = NsOptions::Option.new(:stage, String)
|
65
|
+
@first.value = "test"
|
66
|
+
@second = NsOptions::Option.new(:stage, String)
|
67
|
+
@second.value = "test"
|
68
|
+
end
|
69
|
+
|
70
|
+
should "return true if their attributes are equal" do
|
71
|
+
[ :name, :type_class, :value, :rules ].each do |attribute|
|
72
|
+
assert_equal @first.send(attribute), @second.send(attribute)
|
73
|
+
end
|
74
|
+
assert_equal @first, @second
|
75
|
+
@first.value = "staging"
|
76
|
+
assert_not_equal @first, @second
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
class WithNativeTypeClassTest < BaseTest
|
81
|
+
desc "with a native type class (Float)"
|
82
|
+
setup do
|
83
|
+
@option = NsOptions::Option.new(:something, Float)
|
84
|
+
end
|
85
|
+
subject{ @option }
|
86
|
+
|
87
|
+
should "allow setting it's value with a float" do
|
88
|
+
new_value = 12.5
|
89
|
+
subject.value = new_value
|
90
|
+
assert_equal new_value, subject.value
|
91
|
+
end
|
92
|
+
should "allow setting it's value with a string and convert it" do
|
93
|
+
new_value = "13.4"
|
94
|
+
subject.value = new_value
|
95
|
+
assert_equal new_value.to_f, subject.value
|
96
|
+
end
|
97
|
+
should "allow setting it's value with an integer and convert it" do
|
98
|
+
new_value = 1
|
99
|
+
subject.value = new_value
|
100
|
+
assert_equal new_value.to_f, subject.value
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
class WithTypeClassFixnumTest < BaseTest
|
105
|
+
desc "with the Fixnum as a type class (happens through dynamic writers)"
|
106
|
+
setup do
|
107
|
+
@option = NsOptions::Option.new(:something, Fixnum)
|
108
|
+
end
|
109
|
+
subject{ @option }
|
110
|
+
|
111
|
+
should "have used Integer for it's type class" do
|
112
|
+
assert_equal Integer, subject.type_class
|
113
|
+
end
|
114
|
+
should "allow setting it's value with an integer" do
|
115
|
+
new_value = 1
|
116
|
+
subject.value = new_value
|
117
|
+
assert_equal new_value, subject.value
|
118
|
+
end
|
119
|
+
should "allow setting it's value with a float and convert it" do
|
120
|
+
new_value = 12.5
|
121
|
+
subject.value = new_value
|
122
|
+
assert_equal new_value.to_i, subject.value
|
123
|
+
end
|
124
|
+
should "allow setting it's value with a string and convert it" do
|
125
|
+
new_value = "13"
|
126
|
+
subject.value = new_value
|
127
|
+
assert_equal new_value.to_i, subject.value
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
class WithHashTypeClassTest < BaseTest
|
132
|
+
desc "with a Hash as a type class"
|
133
|
+
setup do
|
134
|
+
@option = NsOptions::Option.new(:something, Hash)
|
135
|
+
end
|
136
|
+
subject{ @option }
|
137
|
+
|
138
|
+
should "allow setting it with a hash" do
|
139
|
+
new_value = { :another => true }
|
140
|
+
subject.value = new_value
|
141
|
+
assert_equal new_value, subject.value
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
class WithArrayTypeClassTest < BaseTest
|
146
|
+
desc "with an Array as a type class"
|
147
|
+
setup do
|
148
|
+
@option = NsOptions::Option.new(:something, Array)
|
149
|
+
end
|
150
|
+
subject{ @option }
|
151
|
+
|
152
|
+
should "allow setting it with a array" do
|
153
|
+
new_value = [ :something, :else, :another ]
|
154
|
+
subject.value = new_value
|
155
|
+
assert_equal new_value, subject.value
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
class WithTrueFalseClassTest < BaseTest
|
160
|
+
desc "with a TrueClass/FalseClass as a type class (happens with dynamic writers)"
|
161
|
+
setup do
|
162
|
+
@true_option = NsOptions::Option.new(:something, TrueClass)
|
163
|
+
@true_option.value = true
|
164
|
+
@false_option = NsOptions::Option.new(:else, FalseClass)
|
165
|
+
@false_option.value = false
|
166
|
+
end
|
167
|
+
subject{ @true_option }
|
168
|
+
|
169
|
+
should "have used NsOptions::Option::Boolean for their type class" do
|
170
|
+
assert_equal NsOptions::Option::Boolean, @true_option.type_class
|
171
|
+
assert_equal NsOptions::Option::Boolean, @false_option.type_class
|
172
|
+
end
|
173
|
+
should "return the 'true' or 'false' value instead of the NsOptions::Option::Boolean object" do
|
174
|
+
assert_equal true, @true_option.value
|
175
|
+
assert_equal false, @false_option.value
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
class WithoutTypeClassTest < BaseTest
|
180
|
+
desc "without a type class provided"
|
181
|
+
setup do
|
182
|
+
@option = NsOptions::Option.new(:something, nil)
|
183
|
+
end
|
184
|
+
subject{ @option }
|
185
|
+
|
186
|
+
should "have default it to String" do
|
187
|
+
assert_equal String, subject.type_class
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
end
|
@@ -0,0 +1,227 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
class NsOptions::Options
|
4
|
+
|
5
|
+
class BaseTest < Assert::Context
|
6
|
+
desc "NsOptions::Options"
|
7
|
+
setup do
|
8
|
+
@options = NsOptions::Options.new(:something)
|
9
|
+
end
|
10
|
+
subject{ @options }
|
11
|
+
|
12
|
+
should have_accessors :key, :parent, :children
|
13
|
+
should have_instance_method :namespaces, :add, :del, :remove, :get, :set, :fetch, :is_defined?,
|
14
|
+
:parent_options
|
15
|
+
|
16
|
+
should "be a kind of Hash" do
|
17
|
+
assert_kind_of Hash, subject
|
18
|
+
end
|
19
|
+
should "only use symbols for keys" do
|
20
|
+
subject["string_key"] = true
|
21
|
+
subject[:symbol_key] = true
|
22
|
+
|
23
|
+
assert_includes :string_key, subject.keys
|
24
|
+
assert_includes :symbol_key, subject.keys
|
25
|
+
assert_not_includes "string_key", subject.keys
|
26
|
+
end
|
27
|
+
should "have set the key" do
|
28
|
+
assert_equal "something", subject.key
|
29
|
+
end
|
30
|
+
should "have set the parent to nil" do
|
31
|
+
assert_nil subject.parent
|
32
|
+
end
|
33
|
+
should "return a kind of NsOption::Namespaces with a call to #children" do
|
34
|
+
assert_kind_of NsOptions::Namespaces, subject.children
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class AddTest < BaseTest
|
39
|
+
desc "add method"
|
40
|
+
setup do
|
41
|
+
@options.add(:my_string)
|
42
|
+
@options.add(:my_integer, Integer)
|
43
|
+
@options.add(:my_float, Float, { :default => 1.0 })
|
44
|
+
end
|
45
|
+
subject{ @options }
|
46
|
+
|
47
|
+
should "have added a string option on itself when adding :my_string" do
|
48
|
+
assert(option = subject[:my_string])
|
49
|
+
assert_equal String, option.type_class
|
50
|
+
assert_equal({}, option.rules)
|
51
|
+
end
|
52
|
+
should "have added an integer option on itself when adding :my_integer" do
|
53
|
+
assert(option = subject[:my_integer])
|
54
|
+
assert_equal Integer, option.type_class
|
55
|
+
assert_equal({}, option.rules)
|
56
|
+
end
|
57
|
+
should "have added a float option on itself when adding :my_float" do
|
58
|
+
assert(option = subject[:my_float])
|
59
|
+
assert_equal Float, option.type_class
|
60
|
+
assert_equal({ :default => 1.0 }, option.rules)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
class DelTest < BaseTest
|
65
|
+
desc "add method"
|
66
|
+
setup do
|
67
|
+
@options.add(:my_string)
|
68
|
+
@options.del(:my_string)
|
69
|
+
end
|
70
|
+
subject{ @options }
|
71
|
+
|
72
|
+
should "remove the option definition from the collection" do
|
73
|
+
assert_nil subject[:my_string]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
class GetTest < BaseTest
|
78
|
+
desc "get method"
|
79
|
+
setup do
|
80
|
+
option = @options.add(:my_string)
|
81
|
+
option.value = @value = "something"
|
82
|
+
@result = @options.get(:my_string)
|
83
|
+
end
|
84
|
+
subject{ @result }
|
85
|
+
|
86
|
+
should "have returned the option's value" do
|
87
|
+
assert_equal @value, subject
|
88
|
+
end
|
89
|
+
|
90
|
+
class WithParentTest < GetTest
|
91
|
+
desc "with a parent"
|
92
|
+
setup do
|
93
|
+
@parent = NsOptions::Namespace.new(:child)
|
94
|
+
@parent.options = @options
|
95
|
+
@options = NsOptions::Options.new(:child, @parent)
|
96
|
+
@result = @options.get(:my_string)
|
97
|
+
end
|
98
|
+
subject{ @result }
|
99
|
+
|
100
|
+
should "have returned the parent's option's value" do
|
101
|
+
assert_equal @value, subject
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
class SetTest < BaseTest
|
107
|
+
desc "set method"
|
108
|
+
setup do
|
109
|
+
option = @options.add(:my_string)
|
110
|
+
@options.set(:my_string, "something")
|
111
|
+
end
|
112
|
+
subject{ @options }
|
113
|
+
|
114
|
+
should "have set the option's value" do
|
115
|
+
assert_equal "something", subject.get(:my_string)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
class FetchTest < BaseTest
|
120
|
+
desc "fetch method"
|
121
|
+
setup do
|
122
|
+
option = @options.add(:my_string)
|
123
|
+
@result = @options.fetch(:my_string)
|
124
|
+
end
|
125
|
+
subject{ @result }
|
126
|
+
|
127
|
+
should "return the option definition for my_string" do
|
128
|
+
assert_kind_of NsOptions::Option, subject
|
129
|
+
assert_equal "my_string", subject.name
|
130
|
+
end
|
131
|
+
|
132
|
+
class WithAParentTest < FetchTest
|
133
|
+
desc "with a parent"
|
134
|
+
setup do
|
135
|
+
@parent = NsOptions::Namespace.new(:child)
|
136
|
+
@parent.options = @options
|
137
|
+
@options = NsOptions::Options.new(:child, @parent)
|
138
|
+
@result = @options.fetch(:my_string)
|
139
|
+
end
|
140
|
+
subject{ @result }
|
141
|
+
|
142
|
+
should "return the option definition for my_string from it's parent" do
|
143
|
+
assert_kind_of NsOptions::Option, subject
|
144
|
+
assert_equal "my_string", subject.name
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
class IsDefinedTest < BaseTest
|
150
|
+
desc "fetch method"
|
151
|
+
setup do
|
152
|
+
option = @options.add(:my_string)
|
153
|
+
end
|
154
|
+
subject{ @options }
|
155
|
+
|
156
|
+
should "return true for a defined option" do
|
157
|
+
assert_equal true, subject.is_defined?(:my_string)
|
158
|
+
end
|
159
|
+
should "return false for an undefined option" do
|
160
|
+
assert_equal false, subject.is_defined?(:undefined)
|
161
|
+
end
|
162
|
+
|
163
|
+
class WithAParentTest < IsDefinedTest
|
164
|
+
desc "with a parent"
|
165
|
+
setup do
|
166
|
+
@parent = NsOptions::Namespace.new(:child)
|
167
|
+
@parent.options = @options
|
168
|
+
@options = NsOptions::Options.new(:child, @parent)
|
169
|
+
end
|
170
|
+
|
171
|
+
should "return true for an option defined on it's parent" do
|
172
|
+
assert_equal true, subject.is_defined?(:my_string)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
class ParentOptionsTest < BaseTest
|
178
|
+
desc "parent_options method"
|
179
|
+
subject{ @options }
|
180
|
+
|
181
|
+
should "return nil" do
|
182
|
+
assert_nil subject.parent_options
|
183
|
+
end
|
184
|
+
|
185
|
+
class WithAParentTest < ParentOptionsTest
|
186
|
+
desc "with a parent"
|
187
|
+
setup do
|
188
|
+
@parent = NsOptions::Namespace.new(:child)
|
189
|
+
@parent.options = @options
|
190
|
+
@options = NsOptions::Options.new(:child, @parent)
|
191
|
+
end
|
192
|
+
|
193
|
+
should "return it's parent's options" do
|
194
|
+
assert_equal @parent.options, subject.parent_options
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
class RequiredSetTest < BaseTest
|
200
|
+
desc "required_set? method"
|
201
|
+
setup do
|
202
|
+
@options.add(:first, String, { :require => true })
|
203
|
+
@options.add(:second, String, { :required => true })
|
204
|
+
@options.add(:third, String)
|
205
|
+
end
|
206
|
+
|
207
|
+
should "return true when all required options are set" do
|
208
|
+
@options.set(:first, "first")
|
209
|
+
@options.set(:second, "second")
|
210
|
+
assert_equal true, subject.required_set?
|
211
|
+
end
|
212
|
+
should "return false if one required option is not set" do
|
213
|
+
@options.set(:first, "first")
|
214
|
+
@options.set(:third, "third")
|
215
|
+
assert_equal false, subject.required_set?
|
216
|
+
end
|
217
|
+
should "not change because of options that aren't required" do
|
218
|
+
@options.set(:first, "first")
|
219
|
+
@options.set(:second, "second")
|
220
|
+
@options.set(:third, "third")
|
221
|
+
assert_equal true, subject.required_set?
|
222
|
+
@options.set(:third, nil)
|
223
|
+
assert_equal true, subject.required_set?
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
end
|
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ns-options
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Collin Redding
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-09-30 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 7
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
- 6
|
32
|
+
- 0
|
33
|
+
version: 0.6.0
|
34
|
+
version_requirements: *id001
|
35
|
+
name: assert
|
36
|
+
description: Define and use namespaced options with a clean interface.
|
37
|
+
email:
|
38
|
+
- collin.redding@reelfx.com
|
39
|
+
executables: []
|
40
|
+
|
41
|
+
extensions: []
|
42
|
+
|
43
|
+
extra_rdoc_files: []
|
44
|
+
|
45
|
+
files:
|
46
|
+
- .gitignore
|
47
|
+
- Gemfile
|
48
|
+
- README.markdown
|
49
|
+
- Rakefile
|
50
|
+
- lib/ns-options.rb
|
51
|
+
- lib/ns-options/has_options.rb
|
52
|
+
- lib/ns-options/helper.rb
|
53
|
+
- lib/ns-options/namespace.rb
|
54
|
+
- lib/ns-options/namespaces.rb
|
55
|
+
- lib/ns-options/option.rb
|
56
|
+
- lib/ns-options/option/boolean.rb
|
57
|
+
- lib/ns-options/options.rb
|
58
|
+
- lib/ns-options/version.rb
|
59
|
+
- ns-options.gemspec
|
60
|
+
- test/helper.rb
|
61
|
+
- test/integration/app_test.rb
|
62
|
+
- test/integration/user_test.rb
|
63
|
+
- test/support/app.rb
|
64
|
+
- test/support/user.rb
|
65
|
+
- test/unit/ns-options/has_options_test.rb
|
66
|
+
- test/unit/ns-options/helper_test.rb
|
67
|
+
- test/unit/ns-options/namespace_test.rb
|
68
|
+
- test/unit/ns-options/namespaces_test.rb
|
69
|
+
- test/unit/ns-options/option/boolean_test.rb
|
70
|
+
- test/unit/ns-options/option_test.rb
|
71
|
+
- test/unit/ns-options/options_test.rb
|
72
|
+
homepage:
|
73
|
+
licenses: []
|
74
|
+
|
75
|
+
post_install_message:
|
76
|
+
rdoc_options: []
|
77
|
+
|
78
|
+
require_paths:
|
79
|
+
- lib
|
80
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
hash: 3
|
86
|
+
segments:
|
87
|
+
- 0
|
88
|
+
version: "0"
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
hash: 3
|
95
|
+
segments:
|
96
|
+
- 0
|
97
|
+
version: "0"
|
98
|
+
requirements: []
|
99
|
+
|
100
|
+
rubyforge_project:
|
101
|
+
rubygems_version: 1.8.10
|
102
|
+
signing_key:
|
103
|
+
specification_version: 3
|
104
|
+
summary: Define and use namespaced options with a clean interface.
|
105
|
+
test_files:
|
106
|
+
- test/helper.rb
|
107
|
+
- test/integration/app_test.rb
|
108
|
+
- test/integration/user_test.rb
|
109
|
+
- test/support/app.rb
|
110
|
+
- test/support/user.rb
|
111
|
+
- test/unit/ns-options/has_options_test.rb
|
112
|
+
- test/unit/ns-options/helper_test.rb
|
113
|
+
- test/unit/ns-options/namespace_test.rb
|
114
|
+
- test/unit/ns-options/namespaces_test.rb
|
115
|
+
- test/unit/ns-options/option/boolean_test.rb
|
116
|
+
- test/unit/ns-options/option_test.rb
|
117
|
+
- test/unit/ns-options/options_test.rb
|