parameters 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/.gemtest +0 -0
  2. data/.gitignore +10 -0
  3. data/ChangeLog.md +7 -0
  4. data/LICENSE.txt +1 -2
  5. data/README.md +15 -14
  6. data/Rakefile +6 -5
  7. data/gemspec.yml +5 -4
  8. data/lib/parameters/class_methods.rb +61 -22
  9. data/lib/parameters/class_param.rb +23 -0
  10. data/lib/parameters/instance_param.rb +21 -1
  11. data/lib/parameters/param.rb +17 -337
  12. data/lib/parameters/parameters.rb +54 -62
  13. data/lib/parameters/types.rb +17 -0
  14. data/lib/parameters/types/array.rb +83 -0
  15. data/lib/parameters/types/boolean.rb +47 -0
  16. data/lib/parameters/types/class.rb +45 -0
  17. data/lib/parameters/types/date.rb +28 -0
  18. data/lib/parameters/types/date_time.rb +29 -0
  19. data/lib/parameters/types/float.rb +26 -0
  20. data/lib/parameters/types/hash.rb +98 -0
  21. data/lib/parameters/types/integer.rb +31 -0
  22. data/lib/parameters/types/object.rb +50 -0
  23. data/lib/parameters/types/proc.rb +35 -0
  24. data/lib/parameters/types/regexp.rb +26 -0
  25. data/lib/parameters/types/set.rb +28 -0
  26. data/lib/parameters/types/string.rb +22 -0
  27. data/lib/parameters/types/symbol.rb +26 -0
  28. data/lib/parameters/types/time.rb +33 -0
  29. data/lib/parameters/types/type.rb +65 -0
  30. data/lib/parameters/types/types.rb +96 -0
  31. data/lib/parameters/types/uri.rb +41 -0
  32. data/lib/parameters/version.rb +2 -1
  33. data/parameters.gemspec +124 -7
  34. data/spec/class_param_spec.rb +1 -199
  35. data/spec/instance_param_spec.rb +3 -205
  36. data/spec/parameters_spec.rb +81 -58
  37. data/spec/spec_helper.rb +1 -1
  38. data/spec/types/array_spec.rb +39 -0
  39. data/spec/types/boolean_spec.rb +42 -0
  40. data/spec/types/class_spec.rb +31 -0
  41. data/spec/types/date_spec.rb +20 -0
  42. data/spec/types/date_time_spec.rb +20 -0
  43. data/spec/types/float_spec.rb +12 -0
  44. data/spec/types/hash_spec.rb +71 -0
  45. data/spec/types/integer_spec.rb +18 -0
  46. data/spec/types/object_spec.rb +24 -0
  47. data/spec/types/proc_spec.rb +21 -0
  48. data/spec/types/regexp_spec.rb +12 -0
  49. data/spec/types/set_spec.rb +40 -0
  50. data/spec/types/string_spec.rb +12 -0
  51. data/spec/types/symbol_spec.rb +12 -0
  52. data/spec/types/time_spec.rb +25 -0
  53. data/spec/types/types_spec.rb +82 -0
  54. data/spec/types/uri_spec.rb +23 -0
  55. metadata +107 -90
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+ require 'parameters/types/integer'
3
+
4
+ describe Parameters::Types::Integer do
5
+ subject { described_class }
6
+
7
+ describe "coerce" do
8
+ it "should call #to_i" do
9
+ subject.coerce(10.0).should == 10
10
+ end
11
+
12
+ context "when coercing a String" do
13
+ it "should pass 0 to #to_i" do
14
+ subject.coerce('0x10').should == 16
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+ require 'parameters/types/object'
3
+
4
+ describe Parameters::Types::Object do
5
+ describe "to_ruby" do
6
+ it "should lookup the Ruby Class that the Type is named after" do
7
+ described_class.to_ruby.should == ::Object
8
+ end
9
+ end
10
+
11
+ describe "#===" do
12
+ it "should always return true" do
13
+ subject.should === 1
14
+ end
15
+ end
16
+
17
+ describe "#coerce" do
18
+ let(:obj) { Object.new }
19
+
20
+ it "should pass through values" do
21
+ subject.coerce(obj).should == obj
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+ require 'classes/custom_type'
3
+ require 'parameters/types/proc'
4
+
5
+ describe Parameters::Types::Proc do
6
+ let(:callback) { proc { |value| "0x%x" % value } }
7
+
8
+ subject { described_class.new(callback) }
9
+
10
+ describe "#===" do
11
+ it "should always return false" do
12
+ subject.should_not === "0x10"
13
+ end
14
+ end
15
+
16
+ describe "#coerce" do
17
+ it "should pass the value to the callback" do
18
+ subject.coerce(16).should == "0x10"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+ require 'parameters/types/regexp'
3
+
4
+ describe Parameters::Types::Regexp do
5
+ subject { described_class }
6
+
7
+ describe "coerce" do
8
+ it "should parse Strings" do
9
+ subject.coerce('[a-z]').should == /[a-z]/
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+ require 'parameters/types/set'
3
+ require 'parameters/types/integer'
4
+
5
+ describe Parameters::Types::Set do
6
+ let(:array) { [1, 2, 3] }
7
+ let(:set) { Set[1, 2, 3] }
8
+
9
+ subject { described_class }
10
+
11
+ describe "coerce" do
12
+ it "should call #to_set" do
13
+ subject.coerce(array).should == set
14
+ end
15
+ end
16
+
17
+ context "instance" do
18
+ let(:numbers) { %w[1 2 3] }
19
+
20
+ subject { described_class.new(Parameters::Types::Integer.new) }
21
+
22
+ it "should have a Ruby type" do
23
+ subject.to_ruby.should == Set[Integer]
24
+ end
25
+
26
+ describe "#===" do
27
+ it "should check the type of each element" do
28
+ subject.should_not === numbers
29
+
30
+ subject.should === set
31
+ end
32
+ end
33
+
34
+ describe "#coerce" do
35
+ it "should coerce each element" do
36
+ subject.coerce(numbers).should == set
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+ require 'parameters/types/string'
3
+
4
+ describe Parameters::Types::String do
5
+ subject { described_class }
6
+
7
+ describe "coerce" do
8
+ it "should call #to_s" do
9
+ subject.coerce(1).should == '1'
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+ require 'parameters/types/symbol'
3
+
4
+ describe Parameters::Types::Symbol do
5
+ subject { described_class }
6
+
7
+ describe "coerce" do
8
+ it "should call #to_sym" do
9
+ subject.coerce('a').should == :a
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+ require 'parameters/types/time'
3
+
4
+ describe Parameters::Types::Time do
5
+ subject { described_class }
6
+
7
+ describe "coerce" do
8
+ let(:string) { '2011-12-03 19:39:09 -0800' }
9
+ let(:timestamp) { 1322969949 }
10
+ let(:time) { Time.at(1322969949) }
11
+ let(:date) { DateTime.parse(string) }
12
+
13
+ it "should accept Integers" do
14
+ subject.coerce(timestamp).should == time
15
+ end
16
+
17
+ it "should call #to_time when possible" do
18
+ subject.coerce(date).should == time
19
+ end
20
+
21
+ it "should parse Strings" do
22
+ subject.coerce(string).should == time
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,82 @@
1
+ require 'spec_helper'
2
+ require 'classes/custom_type'
3
+ require 'parameters/types'
4
+
5
+ describe Parameters::Types do
6
+ describe "type_defined?" do
7
+ it "should lookup constants" do
8
+ subject.type_defined?('Array').should == true
9
+ end
10
+
11
+ it "should ignore top-level constants" do
12
+ subject.type_defined?('Kernel').should == false
13
+ end
14
+ end
15
+
16
+ describe "type_get" do
17
+ it "should lookup constants" do
18
+ subject.type_get('Array').should == Parameters::Types::Array
19
+ end
20
+
21
+ it "should ignore top-level constants" do
22
+ lambda {
23
+ subject.type_get('Kernel')
24
+ }.should raise_error(NameError)
25
+ end
26
+ end
27
+
28
+ describe "[]" do
29
+ it "should map known Classes to Types" do
30
+ subject[Array].should == Parameters::Types::Array
31
+ end
32
+
33
+ it "should map Arrays to the Array type" do
34
+ type = subject[Array[Integer]]
35
+
36
+ type.class.should == Parameters::Types::Array
37
+ type.element_type.should == Parameters::Types::Integer
38
+ end
39
+
40
+ it "should map Sets to the Set type" do
41
+ type = subject[Set[Symbol]]
42
+
43
+ type.class.should == Parameters::Types::Set
44
+ type.element_type.should == Parameters::Types::Symbol
45
+ end
46
+
47
+ it "should map Hashes to the Hash type" do
48
+ type = subject[Hash[Symbol => Integer]]
49
+
50
+ type.class.should == Parameters::Types::Hash
51
+ type.key_type.should == Parameters::Types::Symbol
52
+ type.value_type.should == Parameters::Types::Integer
53
+ end
54
+
55
+ it "should map unknown Classes to the Class type" do
56
+ type = subject[CustomType]
57
+
58
+ type.class.should == Parameters::Types::Class
59
+ type.base_class.should == CustomType
60
+ end
61
+
62
+ it "should map Procs to the Proc type" do
63
+ type = subject[proc { |value| "0x%x" % value }]
64
+
65
+ type.class.should == Parameters::Types::Proc
66
+ end
67
+
68
+ it "should map true to the Boolean type" do
69
+ subject[true].should == Parameters::Types::Boolean
70
+ end
71
+
72
+ it "should map nil to the Object type" do
73
+ subject[nil].should == Parameters::Types::Object
74
+ end
75
+
76
+ it "should raise a TypeError for unmappable Objects" do
77
+ lambda {
78
+ subject[Object.new]
79
+ }.should raise_error(TypeError)
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+ require 'parameters/types/uri'
3
+
4
+ describe Parameters::Types::URI do
5
+ subject { described_class }
6
+
7
+ let(:url) { 'http://www.example.com/' }
8
+ let(:uri) { URI.parse(url) }
9
+
10
+ describe "===" do
11
+ it "should check if the value is kind of URI::Generic" do
12
+ subject.should_not === URI
13
+
14
+ subject.should === uri
15
+ end
16
+ end
17
+
18
+ describe "coerce" do
19
+ it "should parse Strings" do
20
+ subject.coerce(url).should == uri
21
+ end
22
+ end
23
+ end
metadata CHANGED
@@ -1,91 +1,61 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: parameters
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 2
8
- - 3
9
- version: 0.2.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Postmodern
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2010-10-27 00:00:00 -07:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: ore
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ~>
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
- - 2
31
- - 0
32
- version: 0.2.0
33
- type: :development
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
12
+ date: 2011-12-14 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
36
15
  name: ore-tasks
37
- prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
16
+ requirement: &21296660 !ruby/object:Gem::Requirement
39
17
  none: false
40
- requirements:
18
+ requirements:
41
19
  - - ~>
42
- - !ruby/object:Gem::Version
43
- segments:
44
- - 0
45
- - 1
46
- - 2
47
- version: 0.1.2
20
+ - !ruby/object:Gem::Version
21
+ version: '0.4'
48
22
  type: :development
49
- version_requirements: *id002
50
- - !ruby/object:Gem::Dependency
51
- name: rspec
52
23
  prerelease: false
53
- requirement: &id003 !ruby/object:Gem::Requirement
24
+ version_requirements: *21296660
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &21296120 !ruby/object:Gem::Requirement
54
28
  none: false
55
- requirements:
29
+ requirements:
56
30
  - - ~>
57
- - !ruby/object:Gem::Version
58
- segments:
59
- - 2
60
- - 0
61
- - 0
62
- version: 2.0.0
31
+ - !ruby/object:Gem::Version
32
+ version: '2.4'
63
33
  type: :development
64
- version_requirements: *id003
65
- - !ruby/object:Gem::Dependency
66
- name: yard
67
34
  prerelease: false
68
- requirement: &id004 !ruby/object:Gem::Requirement
35
+ version_requirements: *21296120
36
+ - !ruby/object:Gem::Dependency
37
+ name: yard
38
+ requirement: &21295620 !ruby/object:Gem::Requirement
69
39
  none: false
70
- requirements:
40
+ requirements:
71
41
  - - ~>
72
- - !ruby/object:Gem::Version
73
- segments:
74
- - 0
75
- - 6
76
- - 0
77
- version: 0.6.0
42
+ - !ruby/object:Gem::Version
43
+ version: '0.7'
78
44
  type: :development
79
- version_requirements: *id004
80
- description: Parameters allows you to add annotated variables to your classes which may have configurable default values.
45
+ prerelease: false
46
+ version_requirements: *21295620
47
+ description: Parameters allows you to add annotated variables to your classes which
48
+ may have configurable default values.
81
49
  email: postmodern.mod3@gmail.com
82
50
  executables: []
83
-
84
51
  extensions: []
85
-
86
- extra_rdoc_files:
52
+ extra_rdoc_files:
53
+ - ChangeLog.md
54
+ - LICENSE.txt
87
55
  - README.md
88
- files:
56
+ files:
57
+ - .gemtest
58
+ - .gitignore
89
59
  - .rspec
90
60
  - .yardopts
91
61
  - ChangeLog.md
@@ -105,6 +75,25 @@ files:
105
75
  - lib/parameters/instance_param.rb
106
76
  - lib/parameters/param.rb
107
77
  - lib/parameters/parameters.rb
78
+ - lib/parameters/types.rb
79
+ - lib/parameters/types/array.rb
80
+ - lib/parameters/types/boolean.rb
81
+ - lib/parameters/types/class.rb
82
+ - lib/parameters/types/date.rb
83
+ - lib/parameters/types/date_time.rb
84
+ - lib/parameters/types/float.rb
85
+ - lib/parameters/types/hash.rb
86
+ - lib/parameters/types/integer.rb
87
+ - lib/parameters/types/object.rb
88
+ - lib/parameters/types/proc.rb
89
+ - lib/parameters/types/regexp.rb
90
+ - lib/parameters/types/set.rb
91
+ - lib/parameters/types/string.rb
92
+ - lib/parameters/types/symbol.rb
93
+ - lib/parameters/types/time.rb
94
+ - lib/parameters/types/type.rb
95
+ - lib/parameters/types/types.rb
96
+ - lib/parameters/types/uri.rb
108
97
  - lib/parameters/version.rb
109
98
  - parameters.gemspec
110
99
  - spec/class_param_spec.rb
@@ -117,39 +106,67 @@ files:
117
106
  - spec/instance_param_spec.rb
118
107
  - spec/parameters_spec.rb
119
108
  - spec/spec_helper.rb
120
- has_rdoc: yard
109
+ - spec/types/array_spec.rb
110
+ - spec/types/boolean_spec.rb
111
+ - spec/types/class_spec.rb
112
+ - spec/types/date_spec.rb
113
+ - spec/types/date_time_spec.rb
114
+ - spec/types/float_spec.rb
115
+ - spec/types/hash_spec.rb
116
+ - spec/types/integer_spec.rb
117
+ - spec/types/object_spec.rb
118
+ - spec/types/proc_spec.rb
119
+ - spec/types/regexp_spec.rb
120
+ - spec/types/set_spec.rb
121
+ - spec/types/string_spec.rb
122
+ - spec/types/symbol_spec.rb
123
+ - spec/types/time_spec.rb
124
+ - spec/types/types_spec.rb
125
+ - spec/types/uri_spec.rb
121
126
  homepage: http://github.com/postmodern/parameters
122
- licenses:
127
+ licenses:
123
128
  - MIT
124
129
  post_install_message:
125
130
  rdoc_options: []
126
-
127
- require_paths:
131
+ require_paths:
128
132
  - lib
129
- required_ruby_version: !ruby/object:Gem::Requirement
133
+ required_ruby_version: !ruby/object:Gem::Requirement
130
134
  none: false
131
- requirements:
132
- - - ">="
133
- - !ruby/object:Gem::Version
134
- segments:
135
- - 0
136
- version: "0"
137
- required_rubygems_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ! '>='
137
+ - !ruby/object:Gem::Version
138
+ version: 1.8.7
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
138
140
  none: false
139
- requirements:
140
- - - ">="
141
- - !ruby/object:Gem::Version
142
- segments:
143
- - 0
144
- version: "0"
141
+ requirements:
142
+ - - ! '>='
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
145
  requirements: []
146
-
147
- rubyforge_project: parameters
148
- rubygems_version: 1.3.7
146
+ rubyforge_project:
147
+ rubygems_version: 1.8.10
149
148
  signing_key:
150
149
  specification_version: 3
151
150
  summary: Allows you to add annotated variables to your classes
152
- test_files:
153
- - spec/parameters_spec.rb
154
- - spec/instance_param_spec.rb
151
+ test_files:
155
152
  - spec/class_param_spec.rb
153
+ - spec/instance_param_spec.rb
154
+ - spec/parameters_spec.rb
155
+ - spec/types/array_spec.rb
156
+ - spec/types/boolean_spec.rb
157
+ - spec/types/class_spec.rb
158
+ - spec/types/date_spec.rb
159
+ - spec/types/date_time_spec.rb
160
+ - spec/types/float_spec.rb
161
+ - spec/types/hash_spec.rb
162
+ - spec/types/integer_spec.rb
163
+ - spec/types/object_spec.rb
164
+ - spec/types/proc_spec.rb
165
+ - spec/types/regexp_spec.rb
166
+ - spec/types/set_spec.rb
167
+ - spec/types/string_spec.rb
168
+ - spec/types/symbol_spec.rb
169
+ - spec/types/time_spec.rb
170
+ - spec/types/types_spec.rb
171
+ - spec/types/uri_spec.rb
172
+ has_rdoc: