entity 0.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/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'rake'
4
+
5
+ gemspec
6
+
data/README.md ADDED
@@ -0,0 +1,13 @@
1
+ # Entity
2
+
3
+ It's a tiny wrapper for OpenStruct
4
+
5
+ ```ruby
6
+ class Company < Entity
7
+ ensure_attributes :name, :address
8
+ end
9
+
10
+ c = Company.new(name: 'Acme')
11
+ c.attributes # => { name: 'Acme', address: nil }
12
+ ```
13
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require 'rubygems'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
data/init.rb ADDED
@@ -0,0 +1,21 @@
1
+ require 'ostruct'
2
+ require 'set'
3
+
4
+ class Entity < OpenStruct
5
+ alias attributes marshal_dump
6
+ @@ensured_attributes = Set.new
7
+
8
+ def initialize(attributes = {})
9
+ super(attributes)
10
+ @@ensured_attributes.each do |key|
11
+ unless attributes.has_key?(key)
12
+ self.public_send("#{key}=", nil)
13
+ end
14
+ end
15
+ end
16
+
17
+ def self.ensure_attributes(*attribute_names)
18
+ @@ensured_attributes.merge(attribute_names)
19
+ end
20
+ end
21
+
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ class Foo < Entity
4
+ ensure_attributes :foo, :bar, :buz
5
+ end
6
+
7
+ describe 'Entity' do
8
+ it 'assigns attributes' do
9
+ entity = Entity.new(foo: 'foo')
10
+ entity.foo.should == 'foo'
11
+ end
12
+
13
+ it 'ensures ensured attributes' do
14
+ entity = Entity.new()
15
+ entity.attributes.has_key?(:foo).should be_true
16
+ end
17
+
18
+ it 'returns all attributes' do
19
+ entity = Entity.new(foo: 'moo')
20
+ entity.attributes.should == { foo: 'moo', bar: nil, buz: nil }
21
+ end
22
+ end
23
+
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ $LOAD_PATH << File.expand_path('../../', __FILE__)
5
+
6
+ require 'init'
7
+
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: entity
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jan Bernacki
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-18 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 2.9.0
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 2.9.0
30
+ description: A useful struct class
31
+ email: releu@restonelabs.cz
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - spec/entity_spec.rb
37
+ - spec/spec_helper.rb
38
+ - Gemfile
39
+ - Rakefile
40
+ - README.md
41
+ - init.rb
42
+ homepage: http://github.com/redstonelabs/entity
43
+ licenses: []
44
+ post_install_message:
45
+ rdoc_options: []
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ! '>='
58
+ - !ruby/object:Gem::Version
59
+ version: 1.3.4
60
+ requirements: []
61
+ rubyforge_project: entity
62
+ rubygems_version: 1.8.23
63
+ signing_key:
64
+ specification_version: 3
65
+ summary: A useful struct class
66
+ test_files: []