doodle 0.1.3 → 0.1.4

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.
@@ -11,9 +11,9 @@ describe Doodle, 'simple' do
11
11
  end
12
12
  it 'should be allow instantiation' do
13
13
  foo = Foo.new 1, 2, 3
14
- foo.var1.should == 1
15
- foo.var2.should == 2
16
- foo.var3.should == 3
14
+ foo.var1.should_be 1
15
+ foo.var2.should_be 2
16
+ foo.var3.should_be 3
17
17
  end
18
18
  end
19
19
  end
@@ -8,11 +8,11 @@ describe Doodle, "singletons" do
8
8
  has :c1
9
9
  end
10
10
  end
11
- Foo.attributes.should == OrderedHash.new
12
- Foo.singleton_class.attributes.should_not == OrderedHash.new
13
- Foo.singleton_class.attributes.map{ |name, attr| name }.should == [:c1]
11
+ Foo.attributes.should_be OrderedHash.new
12
+ Foo.singleton_class.attributes.should_not_be OrderedHash.new
13
+ Foo.singleton_class.attributes.map{ |name, attr| name }.should_be [:c1]
14
14
  Foo.c1 = 1
15
- Foo.c1.should == 1
15
+ Foo.c1.should_be 1
16
16
  end
17
17
 
18
18
  it "should allow creating attributes on classes via module inclusion" do
@@ -22,11 +22,11 @@ describe Doodle, "singletons" do
22
22
  has :c2
23
23
  end
24
24
  end
25
- Foo.attributes.should == OrderedHash.new
26
- Foo.singleton_class.attributes.should_not == OrderedHash.new
27
- Foo.singleton_class.attributes.map{ |name, attr| name }.should == [:c2]
25
+ Foo.attributes.should_be OrderedHash.new
26
+ Foo.singleton_class.attributes.should_not_be OrderedHash.new
27
+ Foo.singleton_class.attributes.map{ |name, attr| name }.should_be [:c2]
28
28
  Foo.c2 = 1
29
- Foo.c2.should == 1
29
+ Foo.c2.should_be 1
30
30
  end
31
31
 
32
32
  it "should allow creating attributes on singletons via inheritance" do
@@ -36,11 +36,11 @@ describe Doodle, "singletons" do
36
36
  class << foo
37
37
  has :i1
38
38
  end
39
- foo.attributes.keys.should == [:i1]
40
- foo.singleton_class.attributes.should_not == OrderedHash.new
41
- foo.singleton_class.attributes.map{ |name, attr| name }.should == [:i1]
39
+ foo.attributes.keys.should_be [:i1]
40
+ foo.singleton_class.attributes.should_not_be OrderedHash.new
41
+ foo.singleton_class.attributes.map{ |name, attr| name }.should_be [:i1]
42
42
  foo.i1 = 1
43
- foo.i1.should == 1
43
+ foo.i1.should_be 1
44
44
  end
45
45
 
46
46
  it "should allow creating attributes on a singleton's singleton via module inclusion" do
@@ -53,11 +53,11 @@ describe Doodle, "singletons" do
53
53
  has :i2
54
54
  end
55
55
  end
56
- foo.attributes.should == OrderedHash.new
57
- foo.singleton_class.singleton_class.attributes.should_not == OrderedHash.new
58
- foo.singleton_class.singleton_class.attributes.map{ |name, attr| name }.should == [:i2]
56
+ foo.attributes.should_be OrderedHash.new
57
+ foo.singleton_class.singleton_class.attributes.should_not_be OrderedHash.new
58
+ foo.singleton_class.singleton_class.attributes.map{ |name, attr| name }.should_be [:i2]
59
59
  foo.singleton_class.i2 = 1
60
- foo.singleton_class.i2.should == 1
60
+ foo.singleton_class.i2.should_be 1
61
61
  end
62
62
  end
63
63
  end
@@ -10,6 +10,16 @@ $:.unshift(File.dirname(__FILE__) + '/../lib')
10
10
  require 'doodle'
11
11
  require 'date'
12
12
 
13
+ class Object
14
+ # try to get rid of those annoying warnings about useless ==
15
+ def should_be(other)
16
+ should == other
17
+ end
18
+ def should_not_be(other)
19
+ should_not == other
20
+ end
21
+ end
22
+
13
23
  # functions to help clean up namespace after defining classes
14
24
  def undefine_const(*consts)
15
25
  consts.each do |const|
@@ -0,0 +1,111 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ require 'doodle/datatypes'
4
+
5
+ describe 'Doodle', 'specialized attributes' do
6
+ temporary_constant :Foo, :SpecializedAttribute do
7
+ before :each do
8
+ class SpecializedAttribute < Doodle::Attribute
9
+ end
10
+
11
+ class Foo < Doodle
12
+ end
13
+ end
14
+
15
+ it 'should allow :using keyword' do
16
+ proc {
17
+ Foo.class_eval do
18
+ has :ivar1, :kind => String, :using => SpecializedAttribute
19
+ end
20
+ }.should_not raise_error
21
+ end
22
+
23
+ it 'should interpret :using keyword and return a specialized attribute of correct class' do
24
+ class Foo < Doodle
25
+ rv = has(:ivar1, :kind => String, :using => SpecializedAttribute)
26
+ rv.class.should_be SpecializedAttribute
27
+ end
28
+ end
29
+
30
+ it 'should allow additional attributes belonging to specialized attribute of correct class' do
31
+ class SpecializedAttribute
32
+ has :flag, :kind => String
33
+ end
34
+ class Foo < Doodle
35
+ rv = has(:ivar1, :kind => String, :using => SpecializedAttribute, :flag => "sflag")
36
+ rv.class.should_be SpecializedAttribute
37
+ rv.flag.should_be 'sflag'
38
+ end
39
+ end
40
+
41
+ it 'should allow additional directives invoking specialized attribute of correct class' do
42
+ class SpecializedAttribute
43
+ has :flag, :kind => String
44
+ end
45
+ class Foo < Doodle
46
+ class << self
47
+ def option(*args, &block)
48
+ # this is how to add extra options onto args array for has
49
+ # - all hashes get merged into one
50
+ args << { :using => SpecializedAttribute }
51
+ has(*args, &block)
52
+ end
53
+ end
54
+ rv = option(:ivar1, :kind => String, :flag => "sflag")
55
+ rv.class.should_be SpecializedAttribute
56
+ rv.flag.should_be 'sflag'
57
+ end
58
+ Foo.attributes[:ivar1].flag.should_be "sflag"
59
+ foo = Foo.new('hi')
60
+ foo.attributes[:ivar1].flag.should_be "sflag"
61
+ end
62
+
63
+ it 'should allow using datatypes in additional directives invoking specialized attribute of correct class' do
64
+ class SpecializedAttribute
65
+ doodle do
66
+ string :flag, :max => 1
67
+ end
68
+ end
69
+ class Foo < Doodle
70
+ class << self
71
+ def option(*args, &block)
72
+ # this is how to add extra options onto args array for has
73
+ # - all hashes get merged into one
74
+ args << { :using => SpecializedAttribute }
75
+ has(*args, &block)
76
+ end
77
+ end
78
+ rv = option(:ivar1, :kind => String, :flag => "x")
79
+ rv.class.should_be SpecializedAttribute
80
+ rv.flag.should_be 'x'
81
+ end
82
+ Foo.attributes[:ivar1].flag.should_be "x"
83
+ foo = Foo.new('hi')
84
+ foo.attributes[:ivar1].flag.should_be "x"
85
+ end
86
+
87
+ it 'should allow using datatypes in additional directives invoking specialized attribute of correct class and raise error if incorrect value supplied' do
88
+ class SpecializedAttribute
89
+ doodle do
90
+ string :flag, :max => 1
91
+ end
92
+ end
93
+ class Foo < Doodle
94
+ class << self
95
+ def option(*args, &block)
96
+ args << { :using => SpecializedAttribute }
97
+ has(*args, &block)
98
+ end
99
+ end
100
+ end
101
+ proc { Foo.class_eval { option(:ivar1, :kind => String, :flag => "ab") }}.should raise_error(Doodle::ValidationError)
102
+ end
103
+
104
+ it 'should allow specifying name as named parameter' do
105
+ class Foo < Doodle
106
+ has :name => :ivar
107
+ end
108
+ end
109
+ end
110
+ end
111
+
@@ -16,10 +16,10 @@ describe 'Doodle', 'parents' do
16
16
  @sc.parents.should == []
17
17
  end
18
18
 
19
- it "should have singleton class's singleton class parents == []" do
20
- expected_parents = RUBY_VERSION <= "1.8.6" ? [] : [Module, Object, BasicObject]
21
- @scc.parents.should == expected_parents
22
- end
19
+ # it "should have singleton class's singleton class parents == []" do
20
+ # expected_parents = RUBY_VERSION <= "1.8.6" ? [] : [Module, Object, BasicObject]
21
+ # @scc.parents.should == expected_parents
22
+ # end
23
23
  end
24
24
  end
25
25
 
@@ -63,26 +63,26 @@ describe :DateRange, 'validation & conversions' do
63
63
 
64
64
  it 'should have two validations' do
65
65
  d = DateRange.new
66
- d.attributes[:start_date].validations.size.should == 2
67
- d.attributes[:start_date].validations(false).size.should == 2
66
+ d.attributes[:start_date].validations.size.should_be 2
67
+ d.attributes[:start_date].validations(false).size.should_be 2
68
68
  end
69
69
 
70
70
  it 'should have two conversions' do
71
71
  d = DateRange.new
72
- d.attributes[:start_date].conversions.size.should == 3
73
- d.attributes[:start_date].conversions(false).size.should == 3
72
+ d.attributes[:start_date].conversions.size.should_be 3
73
+ d.attributes[:start_date].conversions(false).size.should_be 3
74
74
  end
75
75
 
76
76
  it 'should convert from Array' do
77
77
  d = DateRange.new [2007,01,01], [2007,01,02]
78
- d.start_date.should == Date.new(2007,01,01)
79
- d.end_date.should == Date.new(2007,01,02)
78
+ d.start_date.should_be Date.new(2007,01,01)
79
+ d.end_date.should_be Date.new(2007,01,02)
80
80
  end
81
81
 
82
82
  it 'should convert Integer representing Julian date to Date' do
83
83
  d = DateRange.new 2454428, 2454429
84
- d.start_date.should == Date.new(2007,11,23)
85
- d.end_date.should == Date.new(2007,11,24)
84
+ d.start_date.should_be Date.new(2007,11,23)
85
+ d.end_date.should_be Date.new(2007,11,24)
86
86
  end
87
87
  end
88
88
  end
@@ -1,5 +1,5 @@
1
- desc 'Release the website and new gem version'
2
- task :deploy => [:check_version, :website, :release] do
1
+ desc 'Release the new gem version'
2
+ task :deploy => [:check_version, :release] do
3
3
  puts "Remember to create SVN tag:"
4
4
  puts "svn copy svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/trunk " +
5
5
  "svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
@@ -7,8 +7,8 @@ task :deploy => [:check_version, :website, :release] do
7
7
  puts "Tagging release #{CHANGES}"
8
8
  end
9
9
 
10
- desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
11
- task :local_deploy => [:website_generate, :install_gem]
10
+ desc 'Runs task install_gem as a local deployment of the gem'
11
+ task :local_deploy => [:install_gem]
12
12
 
13
13
  task :check_version do
14
14
  unless ENV['VERSION']
@@ -31,4 +31,4 @@ namespace :manifest do
31
31
  task :refresh do
32
32
  `rake check_manifest | patch -p0 > Manifest.txt`
33
33
  end
34
- end
34
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: doodle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean O'Halpin
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-05-01 00:00:00 +01:00
12
+ date: 2008-05-06 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -24,36 +24,39 @@ extra_rdoc_files:
24
24
  - History.txt
25
25
  - License.txt
26
26
  - Manifest.txt
27
+ - PostInstall.txt
27
28
  - README.txt
28
29
  files:
30
+ - COPYING
31
+ - CREDITS
29
32
  - History.txt
30
33
  - License.txt
31
34
  - Manifest.txt
35
+ - PostInstall.txt
32
36
  - README.txt
33
- - CREDITS
34
37
  - Rakefile
35
38
  - config/hoe.rb
36
39
  - config/requirements.rb
37
- - examples/smtp_tls.rb
38
- - examples/example-01.rdoc
39
- - examples/profile-options.rb
40
40
  - examples/doodle-errors.rb
41
41
  - examples/event-location.rb
42
- - examples/parent.rb
42
+ - examples/example-01.rb
43
+ - examples/example-01.rdoc
43
44
  - examples/example-02.rb
44
45
  - examples/example-02.rdoc
45
- - examples/example-01.rb
46
+ - examples/mail-datatypes.rb
46
47
  - examples/mail.rb
47
- - examples/yaml-example2.rb
48
- - examples/yaml-example.rb
48
+ - examples/parent.rb
49
+ - examples/profile-options.rb
50
+ - examples/smtp_tls.rb
49
51
  - examples/test-datatypes.rb
50
- - examples/mail-datatypes.rb
52
+ - examples/yaml-example.rb
53
+ - examples/yaml-example2.rb
51
54
  - lib/doodle.rb
52
- - lib/molic_orderedhash.rb
53
55
  - lib/doodle/datatypes.rb
54
56
  - lib/doodle/rfc822.rb
55
57
  - lib/doodle/utils.rb
56
58
  - lib/doodle/version.rb
59
+ - lib/molic_orderedhash.rb
57
60
  - log/debug.log
58
61
  - script/console
59
62
  - script/destroy
@@ -64,6 +67,7 @@ files:
64
67
  - spec/attributes_spec.rb
65
68
  - spec/bugs_spec.rb
66
69
  - spec/class_spec.rb
70
+ - spec/class_validation_spec.rb
67
71
  - spec/class_var_spec.rb
68
72
  - spec/collector_spec.rb
69
73
  - spec/conversion_spec.rb
@@ -73,6 +77,7 @@ files:
73
77
  - spec/extra_args_spec.rb
74
78
  - spec/factory_spec.rb
75
79
  - spec/flatten_first_level_spec.rb
80
+ - spec/inheritance_spec.rb
76
81
  - spec/init_spec.rb
77
82
  - spec/new_doodle_spec.rb
78
83
  - spec/required_spec.rb
@@ -80,13 +85,13 @@ files:
80
85
  - spec/singleton_spec.rb
81
86
  - spec/spec.opts
82
87
  - spec/spec_helper.rb
88
+ - spec/specialized_attribute_class_spec.rb
83
89
  - spec/superclass_spec.rb
84
- - spec/validation_spec.rb
85
90
  - spec/validation2_spec.rb
91
+ - spec/validation_spec.rb
86
92
  - tasks/deployment.rake
87
93
  - tasks/environment.rake
88
94
  - tasks/rspec.rake
89
- - tasks/website.rake
90
95
  has_rdoc: true
91
96
  homepage: http://doodle.rubyforge.org
92
97
  post_install_message: |
@@ -118,7 +123,9 @@ specification_version: 2
118
123
  summary: "Doodle is a gem for simplifying the definition of Ruby classes by making attributes and their properties more declarative. Doodle is eco-friendly: it does not globally modify Object, Class or Module."
119
124
  test_files:
120
125
  - spec/bugs_spec.rb
126
+ - spec/specialized_attribute_class_spec.rb
121
127
  - spec/class_var_spec.rb
128
+ - spec/inheritance_spec.rb
122
129
  - spec/factory_spec.rb
123
130
  - spec/flatten_first_level_spec.rb
124
131
  - spec/new_doodle_spec.rb
@@ -1,17 +0,0 @@
1
- desc 'Generate website files'
2
- task :website_generate => :ruby_env do
3
- (Dir['website/**/*.txt'] - Dir['website/version*.txt']).each do |txt|
4
- sh %{ #{RUBY_APP} script/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
5
- end
6
- end
7
-
8
- desc 'Upload website files to rubyforge'
9
- task :website_upload do
10
- host = "#{rubyforge_username}@rubyforge.org"
11
- remote_dir = "/var/www/gforge-projects/#{PATH}/"
12
- local_dir = 'website'
13
- sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}}
14
- end
15
-
16
- desc 'Generate and upload website files'
17
- task :website => [:website_generate, :website_upload, :publish_docs]