hash_struct 0.1

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.
data/README.textile ADDED
@@ -0,0 +1,12 @@
1
+ h1. About
2
+
3
+ HashStruct is similar to Struct from Ruby standard library, the difference is that HashStruct.new creates a class which takes a hash with attributes rather than just positional arguments as Struct.new does.
4
+
5
+ The point is that this is behaviour which all the model have, so you can use HashStruct to test thinks which expect something what quacks like a model class.
6
+
7
+ h1. Usage
8
+
9
+ <pre>
10
+ User = HashStruct.new(:first_name, :last_name)
11
+ @user = User.new(first_name: "Jakub", last_name: "Stastny")
12
+ </pre>
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+
3
+ class HashStruct
4
+ # User = HashStruct.new(:first_name, :last_name)
5
+ # @user = User.new(first_name: "Jakub", last_name: "Stastny")
6
+ def self.new(*attributes)
7
+ raise ArgumentError, "you have to specify some attributes" if attributes.empty?
8
+ Class.new do
9
+ # setup accessors
10
+ attributes.each do |attribute|
11
+ attr_accessor attribute
12
+ end
13
+
14
+ # initialize
15
+ def initialize(attributes = Hash.new)
16
+ attributes.each do |attribute, value|
17
+ self.send("#{attribute}=", value)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+
3
+ require "spec"
4
+ require_relative "../lib/hash_struct"
5
+
6
+ describe HashStruct do
7
+ before(:each) do
8
+ @struct = HashStruct.new(:first_name, :last_name)
9
+ end
10
+
11
+ describe ".new" do
12
+ it "should raise ArgumentError if any attributes given" do
13
+ lambda { HashStruct.new }.should raise_error(ArgumentError)
14
+ end
15
+
16
+ it "should create a new class" do
17
+ @struct.class.should eql(Class)
18
+ end
19
+
20
+ it "should description" do
21
+ instance = @struct.new(first_name: "Jakub", last_name: "Stastny")
22
+ instance.first_name.should eql("Jakub")
23
+ instance.last_name.should eql("Stastny")
24
+ end
25
+
26
+ it "should create instance method writer and reader method" do
27
+ instance = @struct.new
28
+ instance.first_name = "Jakub"
29
+ instance.first_name.should eql("Jakub")
30
+ end
31
+ end
32
+ end
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hash_struct
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.1"
5
+ platform: ruby
6
+ authors:
7
+ - "Jakub \xC5\xA0\xC5\xA5astn\xC3\xBD aka Botanicus"
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ date: 2009-11-28 00:00:00 +00:00
12
+ default_executable:
13
+ dependencies: []
14
+
15
+ description: ""
16
+ email: knava.bestvinensis@gmail.com
17
+ executables: []
18
+
19
+ extensions: []
20
+
21
+ extra_rdoc_files: []
22
+
23
+ files:
24
+ - README.textile
25
+ - lib/hash_struct.rb
26
+ - spec/hash_struct_spec.rb
27
+ has_rdoc: true
28
+ homepage: http://github.com/botanicus/hash_struct
29
+ licenses: []
30
+
31
+ post_install_message:
32
+ rdoc_options: []
33
+
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.9.1
41
+ version:
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ version:
48
+ requirements: []
49
+
50
+ rubyforge_project: hash_struct
51
+ rubygems_version: 1.3.5
52
+ signing_key:
53
+ specification_version: 3
54
+ summary: HashStruct is similar to Struct from Ruby standard library, the difference is that HashStruct.new creates a class which takes a hash with attributes rather than just positional arguments as Struct.new does.
55
+ test_files: []
56
+