immutable_struct 1.0.0 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,10 +1,13 @@
1
+ # encoding: utf-8
2
+
1
3
  class ImmutableStruct
2
- VERSION = '1.0.1'
4
+ VERSION = '1.0.2'
3
5
 
4
6
  def self.new(*attrs)
5
7
  struct = Struct.new(*attrs)
6
8
  make_immutable!(struct)
7
9
  optionalize_constructor!(struct)
10
+ extend_dup!(struct)
8
11
  struct
9
12
  end
10
13
 
@@ -37,4 +40,12 @@ private
37
40
  end
38
41
  end
39
42
  end
43
+
44
+ def self.extend_dup!(struct)
45
+ struct.class_eval do
46
+ def dup(overrides={})
47
+ self.class.new(to_h.merge(overrides))
48
+ end
49
+ end
50
+ end
40
51
  end
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: immutable_struct
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
5
4
  prerelease: false
6
5
  segments:
7
6
  - 1
8
7
  - 0
9
- - 0
10
- version: 1.0.0
8
+ - 2
9
+ version: 1.0.2
11
10
  platform: ruby
12
11
  authors:
13
12
  - Theo Hultberg
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-03-13 00:00:00 +01:00
17
+ date: 2010-09-26 00:00:00 +02:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
@@ -26,12 +25,9 @@ dependencies:
26
25
  requirements:
27
26
  - - ">="
28
27
  - !ruby/object:Gem::Version
29
- hash: 13
30
28
  segments:
31
- - 1
32
- - 2
33
- - 9
34
- version: 1.2.9
29
+ - 0
30
+ version: "0"
35
31
  type: :development
36
32
  version_requirements: *id001
37
33
  - !ruby/object:Gem::Dependency
@@ -42,38 +38,31 @@ dependencies:
42
38
  requirements:
43
39
  - - ">="
44
40
  - !ruby/object:Gem::Version
45
- hash: 3
46
41
  segments:
47
42
  - 0
48
43
  version: "0"
49
44
  type: :development
50
45
  version_requirements: *id002
51
- description: An immutable implementation of Ruby's `Struct` class. It works just as Struct, but there are no setters, and you can't use `[]=`. As a bonus feature the constructor of classes inheriting from ImmutableStruct can take named parameters in the form of a hash.
52
- email: theo@iconara.net
46
+ description: A version of Ruby's Struct class that creates classes whose instances are immutable. It works just as Struct, but there are no setters, and you can't use []=. As a bonus feature the constructor of classes inheriting from ImmutableStruct can take named parameters in the form of a hash.
47
+ email:
48
+ - theo@iconara.net
53
49
  executables: []
54
50
 
55
51
  extensions: []
56
52
 
57
- extra_rdoc_files:
58
- - LICENSE
59
- - README.mdown
53
+ extra_rdoc_files: []
54
+
60
55
  files:
61
- - .document
62
- - .gitignore
56
+ - lib/immutable_struct.rb
63
57
  - LICENSE
64
58
  - README.mdown
65
- - Rakefile
66
- - lib/immutable_struct.rb
67
- - spec/immutable_struct_spec.rb
68
- - spec/spec.opts
69
- - spec/spec_helper.rb
70
59
  has_rdoc: true
71
60
  homepage: http://github.com/iconara/immutable_struct
72
61
  licenses: []
73
62
 
74
63
  post_install_message:
75
- rdoc_options:
76
- - --charset=UTF-8
64
+ rdoc_options: []
65
+
77
66
  require_paths:
78
67
  - lib
79
68
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -81,7 +70,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
81
70
  requirements:
82
71
  - - ">="
83
72
  - !ruby/object:Gem::Version
84
- hash: 3
85
73
  segments:
86
74
  - 0
87
75
  version: "0"
@@ -90,17 +78,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
78
  requirements:
91
79
  - - ">="
92
80
  - !ruby/object:Gem::Version
93
- hash: 3
94
81
  segments:
95
- - 0
96
- version: "0"
82
+ - 1
83
+ - 3
84
+ - 6
85
+ version: 1.3.6
97
86
  requirements: []
98
87
 
99
- rubyforge_project:
88
+ rubyforge_project: immutable_struct
100
89
  rubygems_version: 1.3.7
101
90
  signing_key:
102
91
  specification_version: 3
103
- summary: An immutable version of Ruby's Struct class
104
- test_files:
105
- - spec/immutable_struct_spec.rb
106
- - spec/spec_helper.rb
92
+ summary: A version of Ruby's Struct class that creates classes whose instances are immutable
93
+ test_files: []
94
+
data/.document DELETED
@@ -1,5 +0,0 @@
1
- README.mdown
2
- lib/**/*.rb
3
- bin/*
4
- features/**/*.feature
5
- LICENSE
data/.gitignore DELETED
@@ -1,21 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC
data/Rakefile DELETED
@@ -1,48 +0,0 @@
1
- require 'rubygems'
2
- require 'rake'
3
-
4
-
5
- begin
6
- require 'lib/immutable_struct'
7
- require 'jeweler'
8
- Jeweler::Tasks.new do |gem|
9
- gem.name = 'immutable_struct'
10
- gem.summary = %Q{An immutable version of Ruby's Struct class}
11
- gem.description = %Q{An immutable implementation of Ruby's `Struct` class. It works just as Struct, but there are no setters, and you can't use `[]=`. As a bonus feature the constructor of classes inheriting from ImmutableStruct can take named parameters in the form of a hash.}
12
- gem.email = 'theo@iconara.net'
13
- gem.homepage = 'http://github.com/iconara/immutable_struct'
14
- gem.authors = ['Theo Hultberg']
15
- gem.add_development_dependency 'rspec', '>= 1.2.9'
16
- gem.add_development_dependency 'yard', '>= 0'
17
- gem.version = ImmutableStruct::VERSION
18
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
19
- end
20
- Jeweler::GemcutterTasks.new
21
- rescue LoadError
22
- puts 'Jeweler (or a dependency) not available. Install it with: gem install jeweler'
23
- end
24
-
25
- require 'spec/rake/spectask'
26
- Spec::Rake::SpecTask.new(:spec) do |spec|
27
- spec.libs << 'lib' << 'spec'
28
- spec.spec_files = FileList['spec/**/*_spec.rb']
29
- end
30
-
31
- Spec::Rake::SpecTask.new(:rcov) do |spec|
32
- spec.libs << 'lib' << 'spec'
33
- spec.pattern = 'spec/**/*_spec.rb'
34
- spec.rcov = true
35
- end
36
-
37
- task :spec => :check_dependencies
38
-
39
- task :default => :spec
40
-
41
- begin
42
- require 'yard'
43
- YARD::Rake::YardocTask.new
44
- rescue LoadError
45
- task :yardoc do
46
- abort 'YARD is not available. In order to run yardoc, you must: sudo gem install yard'
47
- end
48
- end
@@ -1,47 +0,0 @@
1
- require File.expand_path('../spec_helper', __FILE__)
2
-
3
-
4
- describe ImmutableStruct do
5
-
6
- class ImmutableItem < ImmutableStruct.new(:a, :b); end
7
-
8
- it 'can be used as a superclass just like Struct' do
9
- obj = ImmutableItem.new(1, 2)
10
- obj.a.should == 1
11
- end
12
-
13
- it 'creates no setters' do
14
- obj = ImmutableItem.new(1, 2)
15
- running { obj.a = 3 }.should raise_error
16
- end
17
-
18
- it 'does not allow [] to be used to mutate the instance' do
19
- obj = ImmutableItem.new(1, 2)
20
- running { obj[:a] = 3 }.should raise_error
21
- end
22
-
23
- it 'creates a constructor that works like the one Struct creates' do
24
- obj = ImmutableItem.new(1, 2)
25
- obj.a.should == 1
26
- obj.b.should == 2
27
- obj = ImmutableItem.new(1)
28
- obj.a.should == 1
29
- obj.b.should == nil
30
- end
31
-
32
- it 'creates a constructor that takes a hash' do
33
- obj = ImmutableItem.new(:a => 1, :b => 2)
34
- obj.a.should == 1
35
- obj.b.should == 2
36
- obj = ImmutableItem.new(:b => 2)
37
- obj.a.should == nil
38
- obj.b.should == 2
39
- end
40
-
41
- it 'adds #to_h that returns a hash representation of the object' do
42
- obj = ImmutableItem.new(:a => 1, :b => 2)
43
- obj.to_h.should have_key(:a)
44
- obj.to_h.should have_key(:b)
45
- end
46
-
47
- end
data/spec/spec.opts DELETED
@@ -1 +0,0 @@
1
- --color
data/spec/spec_helper.rb DELETED
@@ -1,13 +0,0 @@
1
- $: << File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
2
-
3
- require 'spec'
4
- require 'spec/autorun'
5
-
6
- require 'immutable_struct'
7
-
8
-
9
- alias :running :lambda
10
-
11
- Spec::Runner.configure do |config|
12
-
13
- end