yaml-methodizer 0.0.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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/yaml-parser.rb +72 -0
  3. metadata +47 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ee5b1a1631e5bacaf480af4339f66921c463dd5b
4
+ data.tar.gz: e34144d31a9993fbd27e10864052a99ab01bd305
5
+ SHA512:
6
+ metadata.gz: 25de8f6c14625d30d6e600d6bfe4381f272ac72783b211b3cbb401d57dc57d553dd73c60ef2c69fa7c4d84d6bcf0db21e720cb9e304022e5296fec6c9f5b5bbe
7
+ data.tar.gz: cd4ec62a77c734313d02e5e7cd95a994f32fb9a0999b61f07616846b197c1618ed1b582cbf60b3c51f626af81636c13cf9aec0f81435c000926d855aad56d957
@@ -0,0 +1,72 @@
1
+ require 'yaml'
2
+
3
+ class YAMLParser
4
+
5
+ @@hash = {}
6
+
7
+ def hash
8
+ @@hash
9
+ end
10
+
11
+ # Implement a method parse the contents of a YAML file and return
12
+ # an object whose values are accessible using the [] operator or method calls
13
+ #
14
+ # Note: Use of the YAML library is fine (encouraged, even) but please don't
15
+ # use any third-party gems that enable the required functionality.
16
+ def self.parse(filename)
17
+ # Open and read the file, store it as a variable 'file'
18
+ file = open(filename, &:read)
19
+
20
+ # Convert the file variable into a hash so that we can use the [] operator
21
+ @@hash = YAML.load(file)
22
+ custom = SpecialObject.new(@@hash)
23
+
24
+ end
25
+ end
26
+
27
+ class SpecialObject < YAMLParser
28
+
29
+ # Save the input object in an instance variable
30
+ def initialize(hash)
31
+ @object_hash = hash
32
+ end
33
+
34
+ # Catch missing method errors here and try to build the ones we need
35
+ def method_missing(meth_sym, *args, &block)
36
+
37
+ # If the object that has been passed in is an array, we have to treat it differently
38
+ if @object_hash.class == Array
39
+
40
+ # We only need to cover the first and last methods for the arrays, so we are going to
41
+ # check what the user called and act accordingly
42
+ if meth_sym.to_s == "first"
43
+
44
+ # If the array.first call returns a string (as opposed to other data types) then that is the answer we want to return
45
+ # Otherwise return a ew SpecialObject with the modified object as the argument
46
+ @object_hash[0].class == String ? @object_hash[0] : SpecialObject.new(@object_hash[0])
47
+ else
48
+ @object_hash[-1].class == String ? @object_hash[-1] : SpecialObject.new(@object_hash[-1])
49
+ end
50
+
51
+ # If the user tries to access the hash with the [] operator, let them, and just return a hash
52
+ elsif meth_sym.to_s == "[]"
53
+ @object_hash[*args]
54
+
55
+ # If the hash has a key that is the same as the method they called, return the value
56
+ elsif @object_hash[meth_sym.to_s]
57
+
58
+ # If the key has a value that is a string, that is the last step in the chain. Otherwise, return a new special object
59
+ @object_hash[meth_sym.to_s].class == String ? @object_hash[meth_sym.to_s] : SpecialObject.new(@object_hash["#{meth_sym}"])
60
+
61
+ # If none of the above is true, throw a no method error
62
+ else
63
+ super
64
+ end
65
+ end
66
+
67
+ # Make sure we respond to the new methods we are creating
68
+ def respond_to?(meth_sym, private_method = false)
69
+ true
70
+ end
71
+ end
72
+
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yaml-methodizer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - "[Sam Barrientos]"
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-23 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Uses the YAML library as well as the method_missing method to parse a
14
+ yaml file and return an object that can be interacted with as a hash with the []
15
+ operator as well as . method calls
16
+ email: sstbarrientos@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/yaml-parser.rb
22
+ homepage: http://rubygems.org/gems/yaml-methodizer
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 2.2.2
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: Parse yaml files and make keys accessible through method calls as well as
46
+ the [] operator
47
+ test_files: []