container 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e109ffe065283c8d6753670448d1bead7a9e641f
4
+ data.tar.gz: 34639bc46c3f8d1f356bbb5e9d0f7e125f6220b0
5
+ SHA512:
6
+ metadata.gz: f209a30550e51fd0cbfb669c45324d8f02f87d32345d373ab375e66091caf71921d3452d2fb611d9190edb1228f224c842f63cb4484d6cedb7a2a5ebd73755b8
7
+ data.tar.gz: 4a4de71691b15e68aad6c5e97f52c0b54730c5a3aec737faee53de6e9c2062a87bd7c72d6d2afd2ce4ac01392d39dca90577505d3614a843a80e76f719a01e28
@@ -0,0 +1,3 @@
1
+ class Container
2
+ VERSION = '0.1.0'
3
+ end
data/lib/container.rb ADDED
@@ -0,0 +1,102 @@
1
+ require 'container/version'
2
+
3
+ class Container
4
+ include Enumerable
5
+ attr_accessor :array, :hash
6
+
7
+ def initialize
8
+ @array = []
9
+ @hash = Hash.new { NullObject.new }
10
+ end
11
+
12
+ def empty?
13
+ @array.empty? && @hash.empty?
14
+ end
15
+
16
+ def each(&block)
17
+ @array.each do |member|
18
+ block.call(member)
19
+ end
20
+ end
21
+
22
+ def <<(value)
23
+ @array << value
24
+ end
25
+
26
+ def push(value)
27
+ @array.push(value)
28
+ end
29
+
30
+ def [](key)
31
+ if key.is_a?(Numeric)
32
+ @array[key] || NullObject.new
33
+ else
34
+ @hash[key]
35
+ end
36
+ end
37
+
38
+ def []=(key, value)
39
+ if key.is_a?(Numeric)
40
+ @array[key] = value
41
+ else
42
+ @hash[key] = value
43
+ end
44
+ end
45
+
46
+ def to_hash(*allowed_keys)
47
+ output_hash = Hash.new { NullObject.new }
48
+
49
+ if allowed_keys.blank?
50
+ # return all keys symbolized
51
+ @hash.each do |key, value|
52
+ output_hash[key.to_sym] = value
53
+ end
54
+ else
55
+ @hash.each do |key, value|
56
+ key_sym = key.to_sym
57
+ if allowed_keys.include?(key_sym)
58
+ output_hash[key_sym] = value
59
+ end
60
+ end
61
+ end
62
+
63
+ output_hash
64
+ end
65
+
66
+ def method_missing(method_sym, *arguments, &block)
67
+ method_last_char = method_sym[-1]
68
+ hash_key = method_sym.to_s.gsub('?','').gsub('=','').to_sym
69
+
70
+ if method_last_char == '='
71
+ @hash[hash_key] = arguments.first
72
+ else
73
+ if @hash.keys.include?(hash_key)
74
+ @hash[hash_key]
75
+ else
76
+ NullObject.new
77
+ end
78
+ end
79
+ end
80
+
81
+ class NullObject
82
+ def nil?
83
+ true
84
+ end
85
+
86
+ def empty?
87
+ true
88
+ end
89
+
90
+ def blank?
91
+ true
92
+ end
93
+
94
+ def to_s
95
+ ""
96
+ end
97
+
98
+ def method_missing(method_sym, *arguments, &block)
99
+ return NullObject.new
100
+ end
101
+ end
102
+ end
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: container
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Joshua Arvin Lat
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Handy Ruby object container for cleaner views
42
+ email:
43
+ - joshua.arvin.lat@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - lib/container.rb
49
+ - lib/container/version.rb
50
+ homepage: ''
51
+ licenses:
52
+ - MIT
53
+ metadata: {}
54
+ post_install_message:
55
+ rdoc_options: []
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ requirements: []
69
+ rubyforge_project:
70
+ rubygems_version: 2.4.6
71
+ signing_key:
72
+ specification_version: 4
73
+ summary: Handy Ruby object container for cleaner views
74
+ test_files: []