motion_blender-support 0.2.7
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 +7 -0
- data/.gitignore +13 -0
- data/.yardopts +1 -0
- data/Gemfile +4 -0
- data/HACKS.md +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +359 -0
- data/Rakefile +14 -0
- data/app/app_delegate.rb +5 -0
- data/examples/Inflector/.gitignore +16 -0
- data/examples/Inflector/Gemfile +5 -0
- data/examples/Inflector/Rakefile +13 -0
- data/examples/Inflector/app/app_delegate.rb +8 -0
- data/examples/Inflector/app/inflections.rb +5 -0
- data/examples/Inflector/app/inflector_view_controller.rb +109 -0
- data/examples/Inflector/app/words_view_controller.rb +101 -0
- data/examples/Inflector/resources/Default-568h@2x.png +0 -0
- data/examples/Inflector/spec/main_spec.rb +9 -0
- data/lib/motion-support/callbacks.rb +8 -0
- data/lib/motion-support/concern.rb +4 -0
- data/lib/motion-support/core_ext/array.rb +10 -0
- data/lib/motion-support/core_ext/class.rb +5 -0
- data/lib/motion-support/core_ext/hash.rb +13 -0
- data/lib/motion-support/core_ext/integer.rb +6 -0
- data/lib/motion-support/core_ext/module.rb +11 -0
- data/lib/motion-support/core_ext/numeric.rb +6 -0
- data/lib/motion-support/core_ext/object.rb +12 -0
- data/lib/motion-support/core_ext/range.rb +5 -0
- data/lib/motion-support/core_ext/string.rb +13 -0
- data/lib/motion-support/core_ext/time.rb +16 -0
- data/lib/motion-support/core_ext.rb +13 -0
- data/lib/motion-support/inflector.rb +8 -0
- data/lib/motion-support.rb +81 -0
- data/motion/_stdlib/array.rb +13 -0
- data/motion/_stdlib/cgi.rb +22 -0
- data/motion/_stdlib/date.rb +81 -0
- data/motion/_stdlib/enumerable.rb +9 -0
- data/motion/_stdlib/time.rb +19 -0
- data/motion/callbacks.rb +511 -0
- data/motion/concern.rb +122 -0
- data/motion/core_ext/array/access.rb +28 -0
- data/motion/core_ext/array/conversions.rb +86 -0
- data/motion/core_ext/array/extract_options.rb +11 -0
- data/motion/core_ext/array/grouping.rb +99 -0
- data/motion/core_ext/array/prepend_and_append.rb +7 -0
- data/motion/core_ext/array/wrap.rb +45 -0
- data/motion/core_ext/array.rb +19 -0
- data/motion/core_ext/class/attribute.rb +119 -0
- data/motion/core_ext/class/attribute_accessors.rb +168 -0
- data/motion/core_ext/date/acts_like.rb +8 -0
- data/motion/core_ext/date/calculations.rb +117 -0
- data/motion/core_ext/date/conversions.rb +56 -0
- data/motion/core_ext/date_and_time/calculations.rb +232 -0
- data/motion/core_ext/enumerable.rb +90 -0
- data/motion/core_ext/hash/deep_delete_if.rb +23 -0
- data/motion/core_ext/hash/deep_merge.rb +27 -0
- data/motion/core_ext/hash/except.rb +15 -0
- data/motion/core_ext/hash/indifferent_access.rb +19 -0
- data/motion/core_ext/hash/keys.rb +150 -0
- data/motion/core_ext/hash/reverse_merge.rb +22 -0
- data/motion/core_ext/hash/slice.rb +40 -0
- data/motion/core_ext/integer/inflections.rb +27 -0
- data/motion/core_ext/integer/multiple.rb +10 -0
- data/motion/core_ext/integer/time.rb +41 -0
- data/motion/core_ext/kernel/singleton_class.rb +6 -0
- data/motion/core_ext/metaclass.rb +8 -0
- data/motion/core_ext/module/aliasing.rb +69 -0
- data/motion/core_ext/module/anonymous.rb +19 -0
- data/motion/core_ext/module/attr_internal.rb +38 -0
- data/motion/core_ext/module/attribute_accessors.rb +64 -0
- data/motion/core_ext/module/delegation.rb +175 -0
- data/motion/core_ext/module/introspection.rb +60 -0
- data/motion/core_ext/module/reachable.rb +5 -0
- data/motion/core_ext/module/remove_method.rb +12 -0
- data/motion/core_ext/ns_dictionary.rb +14 -0
- data/motion/core_ext/ns_string.rb +14 -0
- data/motion/core_ext/numeric/bytes.rb +44 -0
- data/motion/core_ext/numeric/conversions.rb +49 -0
- data/motion/core_ext/numeric/time.rb +75 -0
- data/motion/core_ext/object/acts_like.rb +10 -0
- data/motion/core_ext/object/blank.rb +105 -0
- data/motion/core_ext/object/deep_dup.rb +44 -0
- data/motion/core_ext/object/duplicable.rb +87 -0
- data/motion/core_ext/object/inclusion.rb +15 -0
- data/motion/core_ext/object/instance_variables.rb +28 -0
- data/motion/core_ext/object/to_param.rb +58 -0
- data/motion/core_ext/object/to_query.rb +26 -0
- data/motion/core_ext/object/try.rb +78 -0
- data/motion/core_ext/range/include_range.rb +23 -0
- data/motion/core_ext/range/overlaps.rb +8 -0
- data/motion/core_ext/regexp.rb +5 -0
- data/motion/core_ext/string/access.rb +104 -0
- data/motion/core_ext/string/behavior.rb +6 -0
- data/motion/core_ext/string/exclude.rb +11 -0
- data/motion/core_ext/string/filters.rb +55 -0
- data/motion/core_ext/string/indent.rb +43 -0
- data/motion/core_ext/string/inflections.rb +178 -0
- data/motion/core_ext/string/starts_ends_with.rb +4 -0
- data/motion/core_ext/string/strip.rb +24 -0
- data/motion/core_ext/time/acts_like.rb +8 -0
- data/motion/core_ext/time/calculations.rb +215 -0
- data/motion/core_ext/time/conversions.rb +52 -0
- data/motion/descendants_tracker.rb +50 -0
- data/motion/duration.rb +104 -0
- data/motion/hash_with_indifferent_access.rb +253 -0
- data/motion/inflections.rb +67 -0
- data/motion/inflector/inflections.rb +203 -0
- data/motion/inflector/methods.rb +321 -0
- data/motion/logger.rb +47 -0
- data/motion/number_helper.rb +54 -0
- data/motion/version.rb +3 -0
- data/motion_blender-support.gemspec +21 -0
- data/spec/motion-support/_helpers/constantize_test_cases.rb +75 -0
- data/spec/motion-support/_helpers/inflector_test_cases.rb +270 -0
- data/spec/motion-support/callback_spec.rb +702 -0
- data/spec/motion-support/concern_spec.rb +93 -0
- data/spec/motion-support/core_ext/array/access_spec.rb +29 -0
- data/spec/motion-support/core_ext/array/conversion_spec.rb +60 -0
- data/spec/motion-support/core_ext/array/extract_options_spec.rb +15 -0
- data/spec/motion-support/core_ext/array/grouping_spec.rb +85 -0
- data/spec/motion-support/core_ext/array/prepend_and_append_spec.rb +25 -0
- data/spec/motion-support/core_ext/array/wrap_spec.rb +19 -0
- data/spec/motion-support/core_ext/array_spec.rb +16 -0
- data/spec/motion-support/core_ext/class/attribute_accessor_spec.rb +127 -0
- data/spec/motion-support/core_ext/class/attribute_spec.rb +92 -0
- data/spec/motion-support/core_ext/date/acts_like_spec.rb +11 -0
- data/spec/motion-support/core_ext/date/calculation_spec.rb +186 -0
- data/spec/motion-support/core_ext/date/conversion_spec.rb +18 -0
- data/spec/motion-support/core_ext/date_and_time/calculation_spec.rb +336 -0
- data/spec/motion-support/core_ext/enumerable_spec.rb +130 -0
- data/spec/motion-support/core_ext/hash/deep_delete_if_spec.rb +19 -0
- data/spec/motion-support/core_ext/hash/deep_merge_spec.rb +32 -0
- data/spec/motion-support/core_ext/hash/except_spec.rb +43 -0
- data/spec/motion-support/core_ext/hash/key_spec.rb +236 -0
- data/spec/motion-support/core_ext/hash/reverse_merge_spec.rb +26 -0
- data/spec/motion-support/core_ext/hash/slice_spec.rb +61 -0
- data/spec/motion-support/core_ext/integer/inflection_spec.rb +23 -0
- data/spec/motion-support/core_ext/integer/multiple_spec.rb +19 -0
- data/spec/motion-support/core_ext/kernel/singleton_class_spec.rb +9 -0
- data/spec/motion-support/core_ext/metaclass_spec.rb +9 -0
- data/spec/motion-support/core_ext/module/aliasing_spec.rb +143 -0
- data/spec/motion-support/core_ext/module/anonymous_spec.rb +29 -0
- data/spec/motion-support/core_ext/module/attr_internal_spec.rb +104 -0
- data/spec/motion-support/core_ext/module/attribute_accessor_spec.rb +86 -0
- data/spec/motion-support/core_ext/module/delegation_spec.rb +136 -0
- data/spec/motion-support/core_ext/module/introspection_spec.rb +70 -0
- data/spec/motion-support/core_ext/module/reachable_spec.rb +61 -0
- data/spec/motion-support/core_ext/module/remove_method_spec.rb +25 -0
- data/spec/motion-support/core_ext/numeric/bytes_spec.rb +43 -0
- data/spec/motion-support/core_ext/numeric/conversions_spec.rb +40 -0
- data/spec/motion-support/core_ext/object/acts_like_spec.rb +21 -0
- data/spec/motion-support/core_ext/object/blank_spec.rb +54 -0
- data/spec/motion-support/core_ext/object/deep_dup_spec.rb +54 -0
- data/spec/motion-support/core_ext/object/duplicable_spec.rb +31 -0
- data/spec/motion-support/core_ext/object/inclusion_spec.rb +34 -0
- data/spec/motion-support/core_ext/object/instance_variable_spec.rb +19 -0
- data/spec/motion-support/core_ext/object/to_param_spec.rb +75 -0
- data/spec/motion-support/core_ext/object/to_query_spec.rb +37 -0
- data/spec/motion-support/core_ext/object/try_spec.rb +92 -0
- data/spec/motion-support/core_ext/range/include_range_spec.rb +31 -0
- data/spec/motion-support/core_ext/range/overlap_spec.rb +43 -0
- data/spec/motion-support/core_ext/regexp_spec.rb +7 -0
- data/spec/motion-support/core_ext/string/access_spec.rb +53 -0
- data/spec/motion-support/core_ext/string/behavior_spec.rb +7 -0
- data/spec/motion-support/core_ext/string/exclude_spec.rb +8 -0
- data/spec/motion-support/core_ext/string/filter_spec.rb +49 -0
- data/spec/motion-support/core_ext/string/indent_spec.rb +56 -0
- data/spec/motion-support/core_ext/string/inflection_spec.rb +142 -0
- data/spec/motion-support/core_ext/string/starts_end_with_spec.rb +14 -0
- data/spec/motion-support/core_ext/string/strip_spec.rb +34 -0
- data/spec/motion-support/core_ext/string_spec.rb +88 -0
- data/spec/motion-support/core_ext/time/acts_like_spec.rb +11 -0
- data/spec/motion-support/core_ext/time/calculation_spec.rb +201 -0
- data/spec/motion-support/core_ext/time/conversion_spec.rb +53 -0
- data/spec/motion-support/descendants_tracker_spec.rb +58 -0
- data/spec/motion-support/duration_spec.rb +107 -0
- data/spec/motion-support/hash_with_indifferent_access_spec.rb +605 -0
- data/spec/motion-support/inflector_spec.rb +504 -0
- data/spec/motion-support/ns_dictionary_spec.rb +89 -0
- data/spec/motion-support/ns_string_spec.rb +182 -0
- data/spec/motion-support/number_helper_spec.rb +55 -0
- metadata +352 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
describe "String" do
|
|
2
|
+
describe "Inflections" do
|
|
3
|
+
describe "singularize" do
|
|
4
|
+
InflectorTestCases::SingularToPlural.each do |singular, plural|
|
|
5
|
+
it "should pluralize singular #{singular}" do
|
|
6
|
+
singular.pluralize.should == plural
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should pluralize plural" do
|
|
11
|
+
"plurals".pluralize.should == "plurals"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should pluralize with number" do
|
|
15
|
+
"blargle".pluralize(0).should == "blargles"
|
|
16
|
+
"blargle".pluralize(1).should == "blargle"
|
|
17
|
+
"blargle".pluralize(2).should == "blargles"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe "singularize" do
|
|
22
|
+
InflectorTestCases::SingularToPlural.each do |singular, plural|
|
|
23
|
+
it "should singularize plural #{plural}" do
|
|
24
|
+
plural.singularize.should == singular
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe "titleize" do
|
|
30
|
+
InflectorTestCases::MixtureToTitleCase.each do |before, titleized|
|
|
31
|
+
it "should titleize #{before}" do
|
|
32
|
+
before.titleize.should == titleized
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe "camelize" do
|
|
38
|
+
InflectorTestCases::CamelToUnderscore.each do |camel, underscore|
|
|
39
|
+
it "should camelize #{underscore}" do
|
|
40
|
+
underscore.camelize.should == camel
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should lower-camelize" do
|
|
45
|
+
'Capital'.camelize(:lower).should == 'capital'
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
describe "dasherize" do
|
|
50
|
+
InflectorTestCases::UnderscoresToDashes.each do |underscored, dasherized|
|
|
51
|
+
it "should dasherize #{underscored}" do
|
|
52
|
+
underscored.dasherize.should == dasherized
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
describe "underscore" do
|
|
58
|
+
InflectorTestCases::CamelToUnderscore.each do |camel, underscore|
|
|
59
|
+
it "should underscore #{camel}" do
|
|
60
|
+
camel.underscore.should == underscore
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "should underscore acronyms" do
|
|
65
|
+
"HTMLTidy".underscore.should == "html_tidy"
|
|
66
|
+
"HTMLTidyGenerator".underscore.should == "html_tidy_generator"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
InflectorTestCases::UnderscoreToLowerCamel.each do |underscored, lower_camel|
|
|
70
|
+
it "should lower-camelize #{underscored}" do
|
|
71
|
+
underscored.camelize(:lower).should == lower_camel
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "should demodulize" do
|
|
77
|
+
"MyApplication::Billing::Account".demodulize.should == "Account"
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should deconstantize" do
|
|
81
|
+
"MyApplication::Billing::Account".deconstantize.should == "MyApplication::Billing"
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
describe "foreign_key" do
|
|
85
|
+
InflectorTestCases::ClassNameToForeignKeyWithUnderscore.each do |klass, foreign_key|
|
|
86
|
+
it "should build foreign key from #{klass}" do
|
|
87
|
+
klass.foreign_key.should == foreign_key
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
InflectorTestCases::ClassNameToForeignKeyWithoutUnderscore.each do |klass, foreign_key|
|
|
92
|
+
it "should build foreign key from #{klass} without underscore" do
|
|
93
|
+
klass.foreign_key(false).should == foreign_key
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
describe "tableize" do
|
|
99
|
+
InflectorTestCases::ClassNameToTableName.each do |class_name, table_name|
|
|
100
|
+
it "should tableize #{class_name}" do
|
|
101
|
+
class_name.tableize.should == table_name
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
describe "classify" do
|
|
107
|
+
InflectorTestCases::ClassNameToTableName.each do |class_name, table_name|
|
|
108
|
+
it "should classify #{table_name}" do
|
|
109
|
+
table_name.classify.should == class_name
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
describe "humanize" do
|
|
115
|
+
InflectorTestCases::UnderscoreToHuman.each do |underscore, human|
|
|
116
|
+
it "should humanize #{underscore}" do
|
|
117
|
+
underscore.humanize.should == human
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
describe "constantize" do
|
|
123
|
+
extend ConstantizeTestCases
|
|
124
|
+
|
|
125
|
+
it "should constantize" do
|
|
126
|
+
run_constantize_tests_on do |string|
|
|
127
|
+
string.constantize
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
describe "safe_constantize" do
|
|
133
|
+
extend ConstantizeTestCases
|
|
134
|
+
|
|
135
|
+
it "should safe_constantize" do
|
|
136
|
+
run_safe_constantize_tests_on do |string|
|
|
137
|
+
string.safe_constantize
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
describe "String" do
|
|
2
|
+
describe "starts_with?/ends_with?" do
|
|
3
|
+
it "should have starts/ends_with? alias" do
|
|
4
|
+
s = "hello"
|
|
5
|
+
s.starts_with?('h').should.be.true
|
|
6
|
+
s.starts_with?('hel').should.be.true
|
|
7
|
+
s.starts_with?('el').should.be.false
|
|
8
|
+
|
|
9
|
+
s.ends_with?('o').should.be.true
|
|
10
|
+
s.ends_with?('lo').should.be.true
|
|
11
|
+
s.ends_with?('el').should.be.false
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
describe "String" do
|
|
2
|
+
describe "strip_heredoc" do
|
|
3
|
+
it "should strip heredoc on an empty string" do
|
|
4
|
+
''.strip_heredoc.should == ''
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
it "should strip heredoc on a string with no lines" do
|
|
8
|
+
'x'.strip_heredoc.should == 'x'
|
|
9
|
+
' x'.strip_heredoc.should == 'x'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should strip heredoc on a heredoc with no margin" do
|
|
13
|
+
"foo\nbar".strip_heredoc.should == "foo\nbar"
|
|
14
|
+
"foo\n bar".strip_heredoc.should == "foo\n bar"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should strip heredoc on a regular indented heredoc" do
|
|
18
|
+
<<-EOS.strip_heredoc.should == "foo\n bar\nbaz\n"
|
|
19
|
+
foo
|
|
20
|
+
bar
|
|
21
|
+
baz
|
|
22
|
+
EOS
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should strip heredoc on a regular indented heredoc with blank lines" do
|
|
26
|
+
<<-EOS.strip_heredoc.should == "foo\n bar\n\nbaz\n"
|
|
27
|
+
foo
|
|
28
|
+
bar
|
|
29
|
+
|
|
30
|
+
baz
|
|
31
|
+
EOS
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
describe "string" do
|
|
2
|
+
describe "constantize" do
|
|
3
|
+
module Ace
|
|
4
|
+
module Base
|
|
5
|
+
class Case
|
|
6
|
+
class Dice
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
class Fase < Case
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
class Gas
|
|
13
|
+
include Base
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class Object
|
|
18
|
+
module AddtlGlobalConstants
|
|
19
|
+
class Case
|
|
20
|
+
class Dice
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
include AddtlGlobalConstants
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should lookup nested constant" do
|
|
28
|
+
"Ace::Base::Case".constantize.should == Ace::Base::Case
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should lookup nested absolute constant" do
|
|
32
|
+
"::Ace::Base::Case".constantize.should == Ace::Base::Case
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "should lookup nested inherited constant" do
|
|
36
|
+
"Ace::Base::Fase::Dice".constantize.should == Ace::Base::Fase::Dice
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should lookup nested included constant" do
|
|
40
|
+
"Ace::Gas::Case".constantize.should == Ace::Gas::Case
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should lookup nested constant included into Object" do
|
|
44
|
+
"Case::Dice".constantize.should == Case::Dice
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "should lookup nested absolute constant included into Object" do
|
|
48
|
+
"Object::Case::Dice".constantize.should == Case::Dice
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should lookup constant" do
|
|
52
|
+
"String".constantize.should == String
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "should lookup absolute constant" do
|
|
56
|
+
"::Ace".constantize.should == Ace
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "should return Object for empty string" do
|
|
60
|
+
"".constantize.should == Object
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "should return Object for double colon" do
|
|
64
|
+
"::".constantize.should == Object
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "should raise NameError for unknown constant" do
|
|
68
|
+
lambda { "UnknownClass".constantize }.should.raise NameError
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "should raise NameError for unknown nested constant" do
|
|
72
|
+
lambda { "UnknownClass::Ace".constantize }.should.raise NameError
|
|
73
|
+
lambda { "UnknownClass::Ace::Base".constantize }.should.raise NameError
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "should raise NameError for invalid string" do
|
|
77
|
+
lambda { "An invalid string".constantize }.should.raise NameError
|
|
78
|
+
lambda { "InvalidClass\n".constantize }.should.raise NameError
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "should raise NameError for nested unknown constant in known constant" do
|
|
82
|
+
lambda { "Ace::ConstantizeTestCases".constantize }.should.raise NameError
|
|
83
|
+
lambda { "Ace::Base::ConstantizeTestCases".constantize }.should.raise NameError
|
|
84
|
+
lambda { "Ace::Gas::Base".constantize }.should.raise NameError
|
|
85
|
+
lambda { "Ace::Gas::ConstantizeTestCases".constantize }.should.raise NameError
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
describe "Time" do
|
|
2
|
+
describe "calculations" do
|
|
3
|
+
describe "seconds_since_midnight" do
|
|
4
|
+
it "should calculate correctly" do
|
|
5
|
+
Time.local(2005,1,1,0,0,1).seconds_since_midnight.should == 1
|
|
6
|
+
Time.local(2005,1,1,0,1,0).seconds_since_midnight.should == 60
|
|
7
|
+
Time.local(2005,1,1,1,1,0).seconds_since_midnight.should == 3660
|
|
8
|
+
Time.local(2005,1,1,23,59,59).seconds_since_midnight.should == 86399
|
|
9
|
+
Time.local(2005,1,1,0,1,0,10).seconds_since_midnight.should == 60.00001
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "seconds_until_end_of_day" do
|
|
14
|
+
it "should calculate correctly" do
|
|
15
|
+
Time.local(2005,1,1,23,59,59).seconds_until_end_of_day.should == 0
|
|
16
|
+
Time.local(2005,1,1,23,59,58).seconds_until_end_of_day.should == 1
|
|
17
|
+
Time.local(2005,1,1,23,58,59).seconds_until_end_of_day.should == 60
|
|
18
|
+
Time.local(2005,1,1,22,58,59).seconds_until_end_of_day.should == 3660
|
|
19
|
+
Time.local(2005,1,1,0,0,0).seconds_until_end_of_day.should == 86399
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe "beginning_of_day" do
|
|
24
|
+
it "should calculate correctly" do
|
|
25
|
+
Time.local(2005,2,4,10,10,10).beginning_of_day.should == Time.local(2005,2,4,0,0,0)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe "beginning_of_hour" do
|
|
30
|
+
it "should calculate correctly" do
|
|
31
|
+
Time.local(2005,2,4,19,30,10).beginning_of_hour.should == Time.local(2005,2,4,19,0,0)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe "beginning_of_minute" do
|
|
36
|
+
it "should calculate correctly" do
|
|
37
|
+
Time.local(2005,2,4,19,30,10).beginning_of_minute.should == Time.local(2005,2,4,19,30,0)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe "end_of_day" do
|
|
42
|
+
it "should calculate correctly" do
|
|
43
|
+
Time.local(2007,8,12,10,10,10).end_of_day.should == Time.local(2007,8,12,23,59,59,Rational(999999999, 1000))
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
describe "end_of_hour" do
|
|
48
|
+
it "should calculate correctly" do
|
|
49
|
+
Time.local(2005,2,4,19,30,10).end_of_hour.should == Time.local(2005,2,4,19,59,59,Rational(999999999, 1000))
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
describe "end_of_minute" do
|
|
54
|
+
it "should calculate correctly" do
|
|
55
|
+
Time.local(2005,2,4,19,30,10).end_of_minute.should == Time.local(2005,2,4,19,30,59,Rational(999999999, 1000))
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
describe "last_year" do
|
|
60
|
+
it "should calculate correctly" do
|
|
61
|
+
Time.local(2005,6,5,10,0,0).last_year.should == Time.local(2004,6,5,10)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
describe "ago" do
|
|
66
|
+
it "should calculate correctly" do
|
|
67
|
+
Time.local(2005,2,22,10,10,10).ago(1).should == Time.local(2005,2,22,10,10,9)
|
|
68
|
+
Time.local(2005,2,22,10,10,10).ago(3600).should == Time.local(2005,2,22,9,10,10)
|
|
69
|
+
Time.local(2005,2,22,10,10,10).ago(86400*2).should == Time.local(2005,2,20,10,10,10)
|
|
70
|
+
Time.local(2005,2,22,10,10,10).ago(86400*2 + 3600 + 25).should == Time.local(2005,2,20,9,9,45)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe "since" do
|
|
75
|
+
it "should calculate correctly" do
|
|
76
|
+
Time.local(2005,2,22,10,10,10).since(1).should == Time.local(2005,2,22,10,10,11)
|
|
77
|
+
Time.local(2005,2,22,10,10,10).since(3600).should == Time.local(2005,2,22,11,10,10)
|
|
78
|
+
Time.local(2005,2,22,10,10,10).since(86400*2).should == Time.local(2005,2,24,10,10,10)
|
|
79
|
+
Time.local(2005,2,22,10,10,10).since(86400*2 + 3600 + 25).should == Time.local(2005,2,24,11,10,35)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
describe "change" do
|
|
84
|
+
it "should calculate correctly" do
|
|
85
|
+
Time.local(2005,2,22,15,15,10).change(:year => 2006).should == Time.local(2006,2,22,15,15,10)
|
|
86
|
+
Time.local(2005,2,22,15,15,10).change(:month => 6).should == Time.local(2005,6,22,15,15,10)
|
|
87
|
+
Time.local(2005,2,22,15,15,10).change(:year => 2012, :month => 9).should == Time.local(2012,9,22,15,15,10)
|
|
88
|
+
Time.local(2005,2,22,15,15,10).change(:hour => 16).should == Time.local(2005,2,22,16)
|
|
89
|
+
Time.local(2005,2,22,15,15,10).change(:hour => 16, :min => 45).should == Time.local(2005,2,22,16,45)
|
|
90
|
+
Time.local(2005,2,22,15,15,10).change(:min => 45).should == Time.local(2005,2,22,15,45)
|
|
91
|
+
|
|
92
|
+
Time.local(2005,1,2,11,22,33,44).change(:hour => 5).should == Time.local(2005,1,2,5,0,0,0)
|
|
93
|
+
Time.local(2005,1,2,11,22,33,44).change(:min => 6).should == Time.local(2005,1,2,11,6,0,0)
|
|
94
|
+
Time.local(2005,1,2,11,22,33,44).change(:sec => 7).should == Time.local(2005,1,2,11,22,7,0)
|
|
95
|
+
Time.local(2005,1,2,11,22,33,44).change(:usec => 8).should == Time.local(2005,1,2,11,22,33,8)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
describe "advance" do
|
|
100
|
+
it "should calculate correctly" do
|
|
101
|
+
Time.local(2005,2,28,15,15,10).advance(:years => 1).should == Time.local(2006,2,28,15,15,10)
|
|
102
|
+
Time.local(2005,2,28,15,15,10).advance(:months => 4).should == Time.local(2005,6,28,15,15,10)
|
|
103
|
+
Time.local(2005,2,28,15,15,10).advance(:weeks => 3).should == Time.local(2005,3,21,15,15,10)
|
|
104
|
+
Time.local(2005,2,28,15,15,10).advance(:weeks => 3.5).should == Time.local(2005,3,25,3,15,10)
|
|
105
|
+
Time.local(2005,2,28,15,15,10).advance(:days => 5).should == Time.local(2005,3,5,15,15,10)
|
|
106
|
+
Time.local(2005,2,28,15,15,10).advance(:days => 5.5).should == Time.local(2005,3,6,3,15,10)
|
|
107
|
+
Time.local(2005,2,28,15,15,10).advance(:years => 7, :months => 7).should == Time.local(2012,9,28,15,15,10)
|
|
108
|
+
Time.local(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :days => 5).should == Time.local(2013,10,3,15,15,10)
|
|
109
|
+
Time.local(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :weeks => 2, :days => 5).should == Time.local(2013,10,17,15,15,10)
|
|
110
|
+
Time.local(2005,2,28,15,15,10).advance(:years => -3, :months => -2, :days => -1).should == Time.local(2001,12,27,15,15,10)
|
|
111
|
+
Time.local(2004,2,29,15,15,10).advance(:years => 1).should == Time.local(2005,2,28,15,15,10)
|
|
112
|
+
Time.local(2005,2,28,15,15,10).advance(:hours => 5).should == Time.local(2005,2,28,20,15,10)
|
|
113
|
+
Time.local(2005,2,28,15,15,10).advance(:minutes => 7).should == Time.local(2005,2,28,15,22,10)
|
|
114
|
+
Time.local(2005,2,28,15,15,10).advance(:seconds => 9).should == Time.local(2005,2,28,15,15,19)
|
|
115
|
+
Time.local(2005,2,28,15,15,10).advance(:hours => 5, :minutes => 7, :seconds => 9).should == Time.local(2005,2,28,20,22,19)
|
|
116
|
+
Time.local(2005,2,28,15,15,10).advance(:hours => -5, :minutes => -7, :seconds => -9).should == Time.local(2005,2,28,10,8,1)
|
|
117
|
+
Time.local(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :weeks => 2, :days => 5, :hours => 5, :minutes => 7, :seconds => 9).should == Time.local(2013,10,17,20,22,19)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "should advance with nsec" do
|
|
121
|
+
t = Time.at(0, Rational(108635108, 1000))
|
|
122
|
+
t.advance(:months => 0).should == t
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
describe "days_in_month" do
|
|
127
|
+
it "should calculate with year" do
|
|
128
|
+
Time.days_in_month(1, 2005).should == 31
|
|
129
|
+
|
|
130
|
+
Time.days_in_month(2, 2005).should == 28
|
|
131
|
+
Time.days_in_month(2, 2004).should == 29
|
|
132
|
+
Time.days_in_month(2, 2000).should == 29
|
|
133
|
+
Time.days_in_month(2, 1900).should == 28
|
|
134
|
+
|
|
135
|
+
Time.days_in_month(3, 2005).should == 31
|
|
136
|
+
Time.days_in_month(4, 2005).should == 30
|
|
137
|
+
Time.days_in_month(5, 2005).should == 31
|
|
138
|
+
Time.days_in_month(6, 2005).should == 30
|
|
139
|
+
Time.days_in_month(7, 2005).should == 31
|
|
140
|
+
Time.days_in_month(8, 2005).should == 31
|
|
141
|
+
Time.days_in_month(9, 2005).should == 30
|
|
142
|
+
Time.days_in_month(10, 2005).should == 31
|
|
143
|
+
Time.days_in_month(11, 2005).should == 30
|
|
144
|
+
Time.days_in_month(12, 2005).should == 31
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
it "should calculate for february in common year" do
|
|
148
|
+
Time.days_in_month(2, 2007).should == 28
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it "should calculate for february in leap year" do
|
|
152
|
+
Time.days_in_month(2, 2008).should == 29
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
describe "last_month" do
|
|
157
|
+
it "should work on the 31st" do
|
|
158
|
+
Time.local(2004, 3, 31).last_month.should == Time.local(2004, 2, 29)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
describe "<=>" do
|
|
163
|
+
it "should compare with time" do
|
|
164
|
+
(Time.utc(2000) <=> Time.utc(1999, 12, 31, 23, 59, 59, 999)).should == 1
|
|
165
|
+
(Time.utc(2000) <=> Time.utc(2000, 1, 1, 0, 0, 0)).should == 0
|
|
166
|
+
(Time.utc(2000) <=> Time.utc(2000, 1, 1, 0, 0, 0, 001)).should == -1
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
describe "all_day" do
|
|
171
|
+
it "should calculate correctly" do
|
|
172
|
+
Time.local(2011,6,7,10,10,10).all_day.should == (Time.local(2011,6,7,0,0,0)..Time.local(2011,6,7,23,59,59,Rational(999999999, 1000)))
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
describe "all_week" do
|
|
177
|
+
it "should calculate correctly" do
|
|
178
|
+
Time.local(2011,6,7,10,10,10).all_week.should == (Time.local(2011,6,6,0,0,0)..Time.local(2011,6,12,23,59,59,Rational(999999999, 1000)))
|
|
179
|
+
Time.local(2011,6,7,10,10,10).all_week(:sunday).should == (Time.local(2011,6,5,0,0,0)..Time.local(2011,6,11,23,59,59,Rational(999999999, 1000)))
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
describe "all_month" do
|
|
184
|
+
it "should calculate correctly" do
|
|
185
|
+
Time.local(2011,6,7,10,10,10).all_month.should == (Time.local(2011,6,1,0,0,0)..Time.local(2011,6,30,23,59,59,Rational(999999999, 1000)))
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
describe "all_quarter" do
|
|
190
|
+
it "should calculate correctly" do
|
|
191
|
+
Time.local(2011,6,7,10,10,10).all_quarter.should == (Time.local(2011,4,1,0,0,0)..Time.local(2011,6,30,23,59,59,Rational(999999999, 1000)))
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
describe "all_year" do
|
|
196
|
+
it "should calculate correctly" do
|
|
197
|
+
Time.local(2011,6,7,10,10,10).all_year.should == (Time.local(2011,1,1,0,0,0)..Time.local(2011,12,31,23,59,59,Rational(999999999, 1000)))
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
describe "Time" do
|
|
2
|
+
describe "conversions" do
|
|
3
|
+
describe "to_formatted_s" do
|
|
4
|
+
before do
|
|
5
|
+
@time = Time.utc(2005, 2, 21, 17, 44, 30.12345678901)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "should use default conversion if no parameter is given" do
|
|
9
|
+
@time.to_s.should == @time.to_default_s
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should use default conversion if parameter is unknown" do
|
|
13
|
+
@time.to_s(:doesnt_exist).should == @time.to_default_s
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should convert to db format" do
|
|
17
|
+
@time.to_s(:db).should == "2005-02-21 17:44:30"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should convert to short format" do
|
|
21
|
+
@time.to_s(:short).should == "21 Feb 17:44"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should convert to time format" do
|
|
25
|
+
@time.to_s(:time).should == "17:44"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should convert to number format" do
|
|
29
|
+
@time.to_s(:number).should == "20050221174430"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should convert to nsec format" do
|
|
33
|
+
@time.to_s(:nsec).should == "20050221174430123456789"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "should convert to long format" do
|
|
37
|
+
@time.to_s(:long).should == "February 21, 2005 17:44"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "should convert to long_ordinal format" do
|
|
41
|
+
@time.to_s(:long_ordinal).should == "February 21st, 2005 17:44"
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe "custom date format" do
|
|
46
|
+
it "should convert to custom format" do
|
|
47
|
+
Time::DATE_FORMATS[:custom] = '%Y%m%d%H%M%S'
|
|
48
|
+
Time.local(2005, 2, 21, 14, 30, 0).to_s(:custom).should == '20050221143000'
|
|
49
|
+
Time::DATE_FORMATS.delete(:custom)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
module DescendantsTrackerSpec
|
|
2
|
+
class Parent
|
|
3
|
+
extend MotionSupport::DescendantsTracker
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
class Child1 < Parent
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class Child2 < Parent
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class Grandchild1 < Child1
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class Grandchild2 < Child1
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
ALL = [Parent, Child1, Child2, Grandchild1, Grandchild2]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe "DescendatsTracker" do
|
|
22
|
+
describe "descendants" do
|
|
23
|
+
it "should get all descendants from parent class" do
|
|
24
|
+
[DescendantsTrackerSpec::Child1, DescendantsTrackerSpec::Child2, DescendantsTrackerSpec::Grandchild1, DescendantsTrackerSpec::Grandchild2].should == DescendantsTrackerSpec::Parent.descendants
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should get descendants from subclass" do
|
|
28
|
+
[DescendantsTrackerSpec::Grandchild1, DescendantsTrackerSpec::Grandchild2].should == DescendantsTrackerSpec::Child1.descendants
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should return empty array for leaf class" do
|
|
32
|
+
[].should == DescendantsTrackerSpec::Child2.descendants
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe "direct_descendants" do
|
|
37
|
+
it "should get direct descendants from parent class" do
|
|
38
|
+
[DescendantsTrackerSpec::Child1, DescendantsTrackerSpec::Child2].should == DescendantsTrackerSpec::Parent.direct_descendants
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "should get direct descendants from subclass" do
|
|
42
|
+
[DescendantsTrackerSpec::Grandchild1, DescendantsTrackerSpec::Grandchild2].should == DescendantsTrackerSpec::Child1.direct_descendants
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "should return empty array for leaf class" do
|
|
46
|
+
[].should == DescendantsTrackerSpec::Child2.direct_descendants
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe "clear" do
|
|
51
|
+
it "should remove all tracked descendants" do
|
|
52
|
+
MotionSupport::DescendantsTracker.clear
|
|
53
|
+
DescendantsTrackerSpec::ALL.each do |k|
|
|
54
|
+
MotionSupport::DescendantsTracker.descendants(k).should.be.empty
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|