container 0.1.0

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.
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: []