yaml-ostruct 0.1 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,24 @@
1
+ require 'yaml/yaml_ostruct_impl'
2
+
3
+ # YamlOstruct module
4
+ module YamlOstruct
5
+ attr_reader :config
6
+
7
+ def self.new
8
+ YamlOstructImpl.new
9
+ end
10
+
11
+ def self.clear
12
+ @config = nil
13
+ end
14
+
15
+ def self.method_missing(method_sym, *args)
16
+ @config ||= YamlOstructImpl.new
17
+ @config.send method_sym, *args
18
+ end
19
+
20
+ def self.load(dir)
21
+ @config ||= YamlOstructImpl.new
22
+ @config.load(dir)
23
+ end
24
+ end
@@ -0,0 +1,4 @@
1
+ # yaml-ostruct gem version
2
+ module YamlOstruct
3
+ VERSION = '0.1.1'
4
+ end
@@ -0,0 +1,50 @@
1
+ require 'find'
2
+ require 'yaml'
3
+ require 'ostruct'
4
+ require 'hashugar'
5
+
6
+ module YamlOstruct
7
+ # YamlOstructImpl class
8
+ class YamlOstructImpl
9
+ attr_reader :config
10
+ extend Gem::Deprecate
11
+
12
+ def initialize
13
+ @config = OpenStruct.new
14
+ end
15
+
16
+ def method_missing(method_sym, *args)
17
+ if @config.respond_to? method_sym
18
+ @config.send method_sym, *args
19
+ elsif method_sym.to_s.end_with?('=')
20
+ @config.send method_sym, *args
21
+ elsif method_sym == :clear
22
+ @config = OpenStruct.new
23
+ else
24
+ nil
25
+ end
26
+ end
27
+
28
+ def load(dir)
29
+ fail "Parameter #{File.join(Dir.pwd, dir)} is not a valid directory" unless File.directory? dir
30
+ load_recursively(dir, @config)
31
+ end
32
+
33
+ def load_recursively(dir, config)
34
+ files = Dir.entries(dir)
35
+ files.each do |file_name|
36
+ next if file_name.start_with?('.')
37
+ if File.directory?("#{dir}/#{file_name}")
38
+ new_config = OpenStruct.new
39
+ config.send("#{file_name}=", load_recursively("#{dir}/#{file_name}", new_config))
40
+ end
41
+
42
+ extension = File.extname(file_name)
43
+ next unless extension == '.yml' or extension == '.yaml'
44
+ new_config = YAML.load_file("#{dir}/#{file_name}")
45
+ config.send("#{File.basename(file_name, extension)}=", new_config.to_hashugar)
46
+ end
47
+ config
48
+ end
49
+ end
50
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yaml-ostruct
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -33,7 +33,10 @@ email: hex0cter@gmail.com
33
33
  executables: []
34
34
  extensions: []
35
35
  extra_rdoc_files: []
36
- files: []
36
+ files:
37
+ - lib/yaml/ostruct.rb
38
+ - lib/yaml/version.rb
39
+ - lib/yaml/yaml_ostruct_impl.rb
37
40
  homepage: https://github.com/hex0cter/yaml-ostruct
38
41
  licenses:
39
42
  - MIT
@@ -58,6 +61,5 @@ rubyforge_project:
58
61
  rubygems_version: 1.8.23.2
59
62
  signing_key:
60
63
  specification_version: 3
61
- summary: Read yaml files recursively from a given directory and return an OpenStruct
62
- retaining the path
64
+ summary: Read yaml files with path into an OpenStruct
63
65
  test_files: []