union 1.0.2 → 1.0.3

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.
Files changed (7) hide show
  1. data/CHANGES +5 -0
  2. data/README +16 -16
  3. data/Rakefile +16 -18
  4. data/lib/union.rb +40 -40
  5. data/test/test_union.rb +38 -38
  6. data/union.gemspec +16 -17
  7. metadata +19 -9
data/CHANGES CHANGED
@@ -1,3 +1,8 @@
1
+ == 1.0.3 - 22-Sep-2011
2
+ * Refactored the Rakefile. Removed the old install task, added
3
+ a default task, and reorganized the gem related tasks.
4
+ * Minor fix/update for gemspec.
5
+
1
6
  == 1.0.2 - 3-Oct-2009
2
7
  * Some gemspec updates and one fix.
3
8
  * Added the :gem rake task.
data/README CHANGED
@@ -1,31 +1,31 @@
1
1
  = Description
2
- The union library is the Ruby analog of a C union.
2
+ The union library provides the Ruby analog of a C union.
3
3
 
4
4
  = Installation
5
- rake test (optional)
6
- rake install (standard) or rake install_gem (rubygems)
5
+ gem install union
7
6
 
8
7
  = Synopsis
9
- require 'union'
8
+ require 'union'
10
9
 
11
- Union.new('Human', :name, :age, :height)
12
- h = Union::Human.new
10
+ Union.new('Human', :name, :age, :height)
11
+ h = Union::Human.new
13
12
 
14
- # Only one attribute of the union may be set
15
- h.name = 'Daniel' # => #<struct Union::Human name="Daniel", age=nil>
16
- h.age = 38 # => #<struct Union::Human name=nil, age=38>
13
+ # Only one attribute of the union may be set
14
+ h.name = 'Daniel' # => #<struct Union::Human name="Daniel", age=nil>
15
+ h.age = 38 # => #<struct Union::Human name=nil, age=38>
17
16
 
18
17
  = Known issues or bugs
19
- None that I'm aware of. Please report any bugs you find on the project page
20
- at http://www.rubyforge.org/projects/shards
18
+ None that I'm aware of. Please report any bugs you find on the project
19
+ page at http://www.rubyforge.org/projects/shards or on the github
20
+ project page at https://github.com/djberg96/union.
21
21
 
22
22
  = License
23
- Artistic 2.0
23
+ Artistic 2.0
24
24
 
25
25
  = Warranty
26
- This package is provided "as is" and without any express or
27
- implied warranties, including, without limitation, the implied
28
- warranties of merchantability and fitness for a particular purpose.
26
+ This package is provided "as is" and without any express or
27
+ implied warranties, including, without limitation, the implied
28
+ warranties of merchantability and fitness for a particular purpose.
29
29
 
30
30
  = Author
31
- * Daniel J. Berger
31
+ Daniel J. Berger
data/Rakefile CHANGED
@@ -1,27 +1,25 @@
1
1
  require 'rake'
2
+ require 'rake/clean'
2
3
  require 'rake/testtask'
3
- require 'rbconfig'
4
- include Config
5
4
 
6
- desc 'Install the union library (non-gem)'
7
- task :install do
8
- sitelibdir = CONFIG["sitelibdir"]
9
- file = "lib/union.rb"
10
- FileUtils.cp(file, sitelibdir, :verbose => true)
11
- end
5
+ CLEAN.include("**/*.gem", "**/*.rbc")
12
6
 
13
- desc 'Build the union gem'
14
- task :gem do
15
- spec = eval(IO.read('union.gemspec'))
16
- Gem::Builder.new(spec).build
17
- end
7
+ namespace :gem do
8
+ desc 'Build the union gem'
9
+ task :create do
10
+ spec = eval(IO.read('union.gemspec'))
11
+ Gem::Builder.new(spec).build
12
+ end
18
13
 
19
- task :install_gem => [:gem] do
20
- file = Dir["*.gem"].first
21
- sh "gem install #{file}"
14
+ task :install => [:create] do
15
+ file = Dir["*.gem"].first
16
+ sh "gem install #{file}"
17
+ end
22
18
  end
23
19
 
24
20
  Rake::TestTask.new do |t|
25
- t.verbose = true
26
- t.warning = true
21
+ t.verbose = true
22
+ t.warning = true
27
23
  end
24
+
25
+ task :default => :test
@@ -2,46 +2,46 @@
2
2
  # a Union object can be set to a non-nil value at a time.
3
3
  #
4
4
  class Union < Struct
5
- # The version of the union library
6
- VERSION = '1.0.2'
7
-
8
- # Creates and returns a new Union. Unlike Struct::Class.new, this does not
9
- # take any arguments. You must assign attributes individually.
10
- #
11
- # Union.new('Human', :name, :age)
12
- # h = Union::Human.new
13
- #
14
- # h.name = 'Daniel' # => #<struct Union::Human name="Daniel", age=nil>
15
- # h.age = 38 # => #<struct Union::Human name=nil, age=38>
16
- #--
17
- # The semantics of Union.new(arg1, arg2, ...) would be non-sensical. Which
18
- # attribute should be set while the rest are ignored? The first one or the
19
- # last one? I decided to disallow it altogether.
20
- #
21
- def initialize
22
- super
23
- members.each{ |attribute|
24
- m = %Q{
25
- def #{attribute}=(value)
26
- self['#{attribute}'] = value
27
- end
28
- }
29
- instance_eval(m)
5
+ # The version of the union library
6
+ VERSION = '1.0.3'
7
+
8
+ # Creates and returns a new Union. Unlike Struct::Class.new, this does not
9
+ # take any arguments. You must assign attributes individually.
10
+ #
11
+ # Union.new('Human', :name, :age)
12
+ # h = Union::Human.new
13
+ #
14
+ # h.name = 'Daniel' # => #<struct Union::Human name="Daniel", age=nil>
15
+ # h.age = 38 # => #<struct Union::Human name=nil, age=38>
16
+ #--
17
+ # The semantics of Union.new(arg1, arg2, ...) would be non-sensical. Which
18
+ # attribute should be set while the rest are ignored? The first one or the
19
+ # last one? I decided to disallow it altogether.
20
+ #
21
+ def initialize
22
+ super
23
+ members.each{ |attribute|
24
+ m = %Q{
25
+ def #{attribute}=(value)
26
+ self['#{attribute}'] = value
27
+ end
30
28
  }
31
- end
29
+ instance_eval(m)
30
+ }
31
+ end
32
32
 
33
- # Identical to Struct attribute assignment, except that setting one instance
34
- # variable sets all other instance variables to nil. Also, you cannot use a
35
- # numeric index. You must use a string or symbol.
36
- #
37
- # Union.new('Human', :name, :age)
38
- # h = Union::Human.new
39
- #
40
- # h[:name] = 'Daniel' # => #<struct Union::Human name="Daniel", age=nil>
41
- # h[:age] = 38 # => #<struct Union::Human name=nil, age=38>
42
- #
43
- def []=(symbol, value)
44
- super(symbol, value)
45
- members.each{ |m| super(m, nil) unless m.to_s == symbol.to_s }
46
- end
33
+ # Identical to Struct attribute assignment, except that setting one instance
34
+ # variable sets all other instance variables to nil. Also, you cannot use a
35
+ # numeric index. You must use a string or symbol.
36
+ #
37
+ # Union.new('Human', :name, :age)
38
+ # h = Union::Human.new
39
+ #
40
+ # h[:name] = 'Daniel' # => #<struct Union::Human name="Daniel", age=nil>
41
+ # h[:age] = 38 # => #<struct Union::Human name=nil, age=38>
42
+ #
43
+ def []=(symbol, value)
44
+ super(symbol, value)
45
+ members.each{ |m| super(m, nil) unless m.to_s == symbol.to_s }
46
+ end
47
47
  end
@@ -2,49 +2,49 @@ require 'union'
2
2
  require 'test/unit'
3
3
 
4
4
  class TC_Union < Test::Unit::TestCase
5
- def setup
6
- Union.new('Human', :name, :age, :height) unless defined? Union::Human
7
- @union = Union::Human.new
8
- end
5
+ def setup
6
+ Union.new('Human', :name, :age, :height) unless defined? Union::Human
7
+ @union = Union::Human.new
8
+ end
9
9
 
10
- def test_union_version
11
- assert_equal('1.0.2', Union::VERSION)
12
- end
10
+ def test_union_version
11
+ assert_equal('1.0.3', Union::VERSION)
12
+ end
13
13
 
14
- def test_union_constructor
15
- assert_raise(ArgumentError){ Union::Human.new('Matz') }
16
- end
14
+ def test_union_constructor
15
+ assert_raise(ArgumentError){ Union::Human.new('Matz') }
16
+ end
17
17
 
18
- def test_union_attribute_assignment_basic
19
- assert_nothing_raised{ @union.name = 'Daniel' }
20
- assert_equal('Daniel', @union.name)
21
- end
18
+ def test_union_attribute_assignment_basic
19
+ assert_nothing_raised{ @union.name = 'Daniel' }
20
+ assert_equal('Daniel', @union.name)
21
+ end
22
22
 
23
- def test_union_attribute_assignment_by_method_name
24
- assert_nothing_raised{ @union.name = 'Daniel' }
25
- assert_nothing_raised{ @union.age = 38 }
26
- assert_nil(@union.name)
27
- assert_nil(@union.height)
28
- assert_equal(38, @union.age)
29
- end
23
+ def test_union_attribute_assignment_by_method_name
24
+ assert_nothing_raised{ @union.name = 'Daniel' }
25
+ assert_nothing_raised{ @union.age = 38 }
26
+ assert_nil(@union.name)
27
+ assert_nil(@union.height)
28
+ assert_equal(38, @union.age)
29
+ end
30
30
 
31
- def test_union_attribute_assignment_by_string_ref
32
- assert_nothing_raised{ @union['name'] = 'Daniel' }
33
- assert_nothing_raised{ @union['age'] = 38 }
34
- assert_nil(@union['name'])
35
- assert_nil(@union['height'])
36
- assert_equal(38, @union['age'])
37
- end
31
+ def test_union_attribute_assignment_by_string_ref
32
+ assert_nothing_raised{ @union['name'] = 'Daniel' }
33
+ assert_nothing_raised{ @union['age'] = 38 }
34
+ assert_nil(@union['name'])
35
+ assert_nil(@union['height'])
36
+ assert_equal(38, @union['age'])
37
+ end
38
38
 
39
- def test_union_attribute_assignment_by_symbol_ref
40
- assert_nothing_raised{ @union[:name] = 'Daniel' }
41
- assert_nothing_raised{ @union[:age] = 38 }
42
- assert_nil(@union[:name])
43
- assert_nil(@union[:height])
44
- assert_equal(38, @union[:age])
45
- end
39
+ def test_union_attribute_assignment_by_symbol_ref
40
+ assert_nothing_raised{ @union[:name] = 'Daniel' }
41
+ assert_nothing_raised{ @union[:age] = 38 }
42
+ assert_nil(@union[:name])
43
+ assert_nil(@union[:height])
44
+ assert_equal(38, @union[:age])
45
+ end
46
46
 
47
- def teardown
48
- @union = nil
49
- end
47
+ def teardown
48
+ @union = nil
49
+ end
50
50
  end
@@ -1,23 +1,22 @@
1
1
  require 'rubygems'
2
2
 
3
3
  Gem::Specification.new do |gem|
4
- gem.name = 'union'
5
- gem.version = '1.0.2'
6
- gem.author = 'Daniel J. Berger'
7
- gem.license = 'Artistic 2.0'
8
- gem.email = 'djberg96@gmail.com'
9
- gem.homepage = 'http://www.rubyforge.org/projects/shards'
10
- gem.summary = 'A struct-like C union for Ruby'
11
- gem.test_file = 'test/test_union.rb'
12
- gem.has_rdoc = true
13
- gem.files = Dir['**/*'].reject{ |f| f.include?('CVS') }
4
+ gem.name = 'union'
5
+ gem.version = '1.0.3'
6
+ gem.author = 'Daniel J. Berger'
7
+ gem.license = 'Artistic 2.0'
8
+ gem.email = 'djberg96@gmail.com'
9
+ gem.homepage = 'http://www.rubyforge.org/projects/shards'
10
+ gem.summary = 'A struct-like C union for Ruby'
11
+ gem.test_file = 'test/test_union.rb'
12
+ gem.files = Dir['**/*'].reject{ |f| f.include?('git') }
14
13
 
15
- gem.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
14
+ gem.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
16
15
 
17
- gem.description = <<-EOF
18
- The union library provides an analog to a C/C++ union for Ruby.
19
- In this implementation a union is a kind of struct where multiple
20
- members may be defined, but only one member ever contains a non-nil
21
- value at any given time.
22
- EOF
16
+ gem.description = <<-EOF
17
+ The union library provides an analog to a C/C++ union for Ruby.
18
+ In this implementation a union is a kind of struct where multiple
19
+ members may be defined, but only one member ever contains a non-nil
20
+ value at any given time.
21
+ EOF
23
22
  end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: union
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ hash: 17
5
+ prerelease:
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 3
10
+ version: 1.0.3
5
11
  platform: ruby
6
12
  authors:
7
13
  - Daniel J. Berger
@@ -9,11 +15,10 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2009-10-03 00:00:00 -06:00
13
- default_executable:
18
+ date: 2011-09-23 00:00:00 Z
14
19
  dependencies: []
15
20
 
16
- description: " The union library provides an analog to a C/C++ union for Ruby.\n In this implementation a union is a kind of struct where multiple\n members may be defined, but only one member ever contains a non-nil\n value at any given time.\n"
21
+ description: " The union library provides an analog to a C/C++ union for Ruby.\n In this implementation a union is a kind of struct where multiple\n members may be defined, but only one member ever contains a non-nil\n value at any given time.\n"
17
22
  email: djberg96@gmail.com
18
23
  executables: []
19
24
 
@@ -31,7 +36,6 @@ files:
31
36
  - README
32
37
  - test/test_union.rb
33
38
  - union.gemspec
34
- has_rdoc: true
35
39
  homepage: http://www.rubyforge.org/projects/shards
36
40
  licenses:
37
41
  - Artistic 2.0
@@ -41,21 +45,27 @@ rdoc_options: []
41
45
  require_paths:
42
46
  - lib
43
47
  required_ruby_version: !ruby/object:Gem::Requirement
48
+ none: false
44
49
  requirements:
45
50
  - - ">="
46
51
  - !ruby/object:Gem::Version
52
+ hash: 3
53
+ segments:
54
+ - 0
47
55
  version: "0"
48
- version:
49
56
  required_rubygems_version: !ruby/object:Gem::Requirement
57
+ none: false
50
58
  requirements:
51
59
  - - ">="
52
60
  - !ruby/object:Gem::Version
61
+ hash: 3
62
+ segments:
63
+ - 0
53
64
  version: "0"
54
- version:
55
65
  requirements: []
56
66
 
57
- rubyforge_project: shards
58
- rubygems_version: 1.3.5
67
+ rubyforge_project:
68
+ rubygems_version: 1.8.10
59
69
  signing_key:
60
70
  specification_version: 3
61
71
  summary: A struct-like C union for Ruby