configulations 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.4
1
+ 0.1.5
@@ -0,0 +1 @@
1
+ name: "Leon"
@@ -0,0 +1 @@
1
+ { "name": "Mike" }
@@ -0,0 +1 @@
1
+ name: "Marc"
@@ -0,0 +1 @@
1
+ { "name": "Felix" }
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{configulations}
8
- s.version = "0.1.4"
8
+ s.version = "0.1.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Leon Gersing"]
12
- s.date = %q{2011-07-05}
12
+ s.date = %q{2011-07-06}
13
13
  s.description = %q{Auto-create configuration objects for your applications from yml and json files.}
14
14
  s.email = %q{leongersing@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -28,10 +28,15 @@ Gem::Specification.new do |s|
28
28
  "config/development.yml",
29
29
  "config/foo.json",
30
30
  "config/server.yml",
31
+ "config/singles/first.yml",
32
+ "config/singles/fourth.json",
33
+ "config/singles/second.yml",
34
+ "config/singles/third.js",
31
35
  "configulations.gemspec",
32
36
  "lib/configulations.rb",
33
37
  "lib/magic_hash.rb",
34
38
  "spec/configurator_spec.rb",
39
+ "spec/inclusive_spec.rb",
35
40
  "spec/magic_hash_spec.rb",
36
41
  "spec/sample_spec.rb",
37
42
  "spec/spec_helper.rb"
@@ -4,41 +4,55 @@ require 'magic_hash'
4
4
 
5
5
  class Configulations
6
6
  attr_accessor :properties
7
+ attr_accessor :include_pattern
7
8
 
8
9
  def initialize
10
+ @include_pattern = File.expand_path(".") << "/config/**/*.{yml,json}"
11
+ find_properties
12
+ end
13
+
14
+ def self.configure(&blk)
15
+ me = Configulations.new
16
+ blk.call(me)
17
+ me.find_properties
18
+ me
19
+ end
20
+
21
+ def find_properties
9
22
  @properties = {}
10
23
  @properties.extend(MagicHash)
11
24
 
12
- find_yaml_properties
13
- find_json_properties
25
+ Dir[@include_pattern].each do |file|
26
+ ext = File.extname(file)
27
+ base = File.basename(file, ext)
28
+ parser = parser_for_extname(ext)
29
+ @properties[base]= parser.send(:load, File.read(file))
30
+ end
14
31
 
15
32
  @properties.objectify
16
- yield self if block_given?
17
- self
18
33
  end
19
34
 
20
- def find_json_properties
21
- Dir[File.expand_path(".") << "/config/**/*.json"].each do |json_file|
22
- @properties[File.basename(json_file, ".json")] = JSON.load(File.read(json_file))
23
- end
24
- end
25
-
26
- def find_yaml_properties
27
- Dir[File.expand_path(".") << "/config/**/*.yml"].each do |yaml_file|
28
- @properties[File.basename(yaml_file, ".yml")] = YAML.load(File.read(yaml_file))
35
+ def parser_for_extname(extname)
36
+ if(extname =~ /\.js(?:on)?/i)
37
+ return JSON
38
+ elsif(extname =~ /\.ya?ml/i)
39
+ return YAML
40
+ else
41
+ raise "Only files ending in .js, .json, .yml, .yaml have parsers at the moment."
29
42
  end
30
43
  end
31
44
 
32
45
  def method_missing(message_name, *message_arguments, &optional_block)
33
- result = properties.send message_name.to_sym, *message_arguments
34
- return result if result
35
46
  message = message_name.to_s.strip.gsub(/-/,"_")
36
47
  if message =~ /=/
37
- properties[message.gsub(/=/,"").to_sym] = message_arguments.flatten.first
48
+ @properties[message.gsub(/=/,"").to_sym] = message_arguments.flatten.first
38
49
  return
39
50
  elsif message =~ /\?/
40
- return !!(properties[message.gsub(/\?/,"").to_sym])
51
+ return !!(@properties[message.gsub(/\?/,"").to_sym])
52
+ else
53
+ return @properties[message.to_sym] if @properties.has_key? message.to_sym
41
54
  end
55
+
42
56
  super message_name, *message_arguments, &optional_block
43
57
  end
44
58
  end
@@ -0,0 +1,40 @@
1
+ require "spec_helper"
2
+
3
+ YamlSingleConfig = Configulations.configure do |config|
4
+ config.include_pattern = File.expand_path(".") << "/config/singles/*.yml"
5
+ end
6
+
7
+ JsonSingleConfig = Configulations.configure do |config|
8
+ config.include_pattern = File.expand_path(".") << "/config/singles/*.js*"
9
+ end
10
+
11
+ SingleConfig = Configulations.configure do |config|
12
+ config.include_pattern = File.expand_path(".") << "/config/singles/*.*" #DANGER WILL ROBINSON!
13
+ end
14
+
15
+ describe "Inclusion" do
16
+ describe "yaml" do
17
+ it "finds first and second" do
18
+ YamlSingleConfig.first.name.should == "Leon"
19
+ YamlSingleConfig.second.name.should == "Marc"
20
+ lambda{ YamlSingleConfig.third }.should raise_error
21
+ end
22
+ end
23
+
24
+ describe "json" do
25
+ it "finds third and fourth" do
26
+ JsonSingleConfig.third.name.should == "Felix"
27
+ JsonSingleConfig.fourth.name.should == "Mike"
28
+ lambda{ JsonSingleConfig.first }.should raise_error
29
+ end
30
+ end
31
+
32
+ describe "mixing json and yml" do
33
+ it "finds eveything" do
34
+ SingleConfig.first.name.should == "Leon"
35
+ SingleConfig.second.name.should == "Marc"
36
+ SingleConfig.third.name.should == "Felix"
37
+ SingleConfig.fourth.name.should == "Mike"
38
+ end
39
+ end
40
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: configulations
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.4
5
+ version: 0.1.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Leon Gersing
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-07-05 00:00:00 -04:00
13
+ date: 2011-07-06 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -78,10 +78,15 @@ files:
78
78
  - config/development.yml
79
79
  - config/foo.json
80
80
  - config/server.yml
81
+ - config/singles/first.yml
82
+ - config/singles/fourth.json
83
+ - config/singles/second.yml
84
+ - config/singles/third.js
81
85
  - configulations.gemspec
82
86
  - lib/configulations.rb
83
87
  - lib/magic_hash.rb
84
88
  - spec/configurator_spec.rb
89
+ - spec/inclusive_spec.rb
85
90
  - spec/magic_hash_spec.rb
86
91
  - spec/sample_spec.rb
87
92
  - spec/spec_helper.rb
@@ -99,7 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
99
104
  requirements:
100
105
  - - ">="
101
106
  - !ruby/object:Gem::Version
102
- hash: 1173186022694134451
107
+ hash: 2698804338379669907
103
108
  segments:
104
109
  - 0
105
110
  version: "0"