fun_with_configurations 0.0.4 → 0.0.6

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,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZDQ0ZTVhMmQwOTQ1ZmQ2NWZkMTM2ZWYwMzRkNjdiZTAxNDRjOGI0ZQ==
5
+ data.tar.gz: !binary |-
6
+ MWRkNmYxNTNmNDRjMTJiMzhlYTE2ZDBhYTY2NDFhZGI4ODE4OTc4NQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MWI0YWQ0MzNjZTFjMzg4ZGQxODg2N2NlN2JkMzRmY2E1ZDcwODgyMmI0ZjNl
10
+ MjNiNjE3Nzk5N2E1MWU5M2YzOTdkZDQ0ZTU5ZWQwYjA2ZGM3OGMwMzZmOWQy
11
+ ZmIzOWI4OThkN2JjZDVjMDcyODE2ZDc4ZDIxMDM3OGFiN2IzOWE=
12
+ data.tar.gz: !binary |-
13
+ OGExZjIwOWUzNjE5OWQ5N2VhNTc2ODQ5NWY4ZGE1ZGE2MWFkNjI1ZmVhMWQ3
14
+ OGFmZTFiYzlmNTNhNTQ3MGM2NGI1NDMyOTNiYTkyNzk3NjM2NzU5ZTkxOTNm
15
+ Yjk2Mjk0ODc2NDE1Y2Q2NDZmOGIzYjIwNTYwYzg1MjdmNjdiZmQ=
data/Gemfile CHANGED
@@ -6,11 +6,12 @@ source "http://rubygems.org"
6
6
  # Add dependencies to develop your gem here.
7
7
  # Include everything needed to run rake, tests, features, etc.
8
8
  group :development do
9
- gem "shoulda", ">= 0"
10
- gem "rdoc", "~> 3.12"
11
- gem "bundler", "~> 1.3.0"
12
- gem "jeweler", "~> 1.8.4"
13
- gem "debugger"
9
+ # gem "shoulda", ">= 3.5"
10
+ # gem "rdoc", "~> 3.12"
11
+ # gem "bundler", "~> 1.5"
12
+ # gem "jeweler", "~> 2.0"
13
+ # gem "debugger"
14
+ gem "fun_with_testing", "~> 0.0"
14
15
  end
15
16
 
16
- gem "fun_with_files"
17
+ gem "fun_with_gems", "~> 0.0"
data/README.rdoc CHANGED
@@ -2,68 +2,163 @@
2
2
 
3
3
  Configuration and settings are the beating heart and dark, twisted soul of your operation.
4
4
 
5
- Let's do some example code:
6
-
7
- """class Computer; end;
8
-
9
- Computers.install_fwc_config do
10
- servers do
11
- hopeful_host do
12
- ip "192.168.0.25"
13
- services :mysql, :memcached, :email, :backup
14
- uptime `uptime`.strip
15
- config_script "/var/configurations/hopeful.conf"
16
- end
17
-
18
- squishy_host do
19
- ip "192.168.0.27"
20
- services :postresql, :couchdb
21
- uptime `uptime`.strip
22
- config_script "/var/configurations/squishy.conf"
23
- end
24
- end
5
+ Let's look at some example code:
6
+
7
+ class Computer; end;
8
+
9
+ Computer.install_fwc_config do
10
+ servers do
11
+ hopeful_host do
12
+ ip "192.168.0.25"
13
+ services :mysql, :memcached, :email, :backup
14
+ uptime `uptime`.strip
15
+ config_script "/var/configurations/hopeful.conf"
16
+ end
17
+
18
+ squishy_host do
19
+ ip "192.168.0.27"
20
+ services :postresql, :couchdb
21
+ uptime `uptime`.strip
22
+ config_script "/var/configurations/squishy.conf"
23
+ end
24
+ end
25
25
 
26
- workstations do
27
- betty do
28
- ip "192.168.0.14"
29
- os "Ubuntu Linux 13.04"
30
- end
26
+ workstations do
27
+ betty do
28
+ ip "192.168.0.14"
29
+ os "Ubuntu Linux 13.04"
30
+ end
31
31
 
32
- veronica do
33
- ip "192.168.0.15"
34
- os "Solaris 10"
32
+ veronica do
33
+ ip "192.168.0.15"
34
+ os "Solaris 10"
35
+ end
36
+ end
35
37
  end
36
- end
37
- end
38
38
 
39
- Computers.config.servers.hopeful_host.ip # "192.168.0.25"
40
- Computers.config.workstations.betty.ip # "192.168.0.14"
41
- Computers.config.try.servers.grumpy_host.ip.success? # false (doesn't have that configuration setting)
42
- """
39
+ Computers.config.servers.hopeful_host.ip # "192.168.0.25"
40
+ Computers.config.workstations.betty.ip # "192.168.0.14"
41
+ Computers.config.try.servers.grumpy_host.ip.success? # false (doesn't have that configuration setting)
43
42
 
44
43
  You can also load from a hash:
45
44
 
46
- """@obj.install_fwc_config_from_hash({
47
- servers: {
48
- hopeful_host: {
49
- ip: "192.168.0.25",
50
- services :mysql, :memcached, :email, :backup
45
+ @obj.install_fwc_config_from_hash({
46
+ servers: {
47
+ hopeful_host: {
48
+ ip: "192.168.0.25",
49
+ services :mysql, :memcached, :email, :backup # stores args as an array
51
50
 
52
- ... (and so on)
53
- }
54
- }
55
- })
51
+ ... (and so on)
52
+ }
53
+ }
54
+ })
55
+
56
+ @obj.config.servers.hopeful_host.services # [:mysql, :memcached, :email, :backup]
56
57
 
57
- @obj.config.servers.hopeful_host.services # [:mysql, :memcached, :email, :backup]
58
- """
59
58
 
60
59
  Or from a yaml string:
61
60
 
62
- """@obj.install_fwc_config_from_yaml( YAML.load( File.read( "~/data/configs/circumstantial.yml" ) ) )
63
- """
61
+ @obj.install_fwc_config_from_file( "~/data/configs/circumstantial.yml" ) # looks for .yml or .yaml as the file extension
64
62
 
65
63
  The file should represent hashes of hashes. Anything not a hash will be treated as a leaf setting (arrays, etc.).
66
64
 
65
+ Last and best, you can load a pure Ruby configuration:
66
+
67
+ @obj.install_fwc_config_from_file( "~/data/configs/rubicon.rb" )
68
+
69
+ Contents of rubicon.rb would be similar to what appears in the install_fwc_config block:
70
+
71
+ server do
72
+ thor do
73
+ ip "212.36.64.10"
74
+ role "mysql"
75
+ end
76
+
77
+ loki do
78
+ ip "212.36.64.11"
79
+ role "web"
80
+ end
81
+
82
+ odin do
83
+ ip "212.36.64.12"
84
+ role "bitcoin_mining"
85
+ end
86
+
87
+ fenrir do
88
+ ip "212.36.64.13"
89
+ role "igniting_ragnarok"
90
+ end
91
+ end
92
+
93
+
94
+ == Other features
95
+
96
+ There are a couple of affordances for assigning variables to an object from a config. The first is fwc_assign!(), which takes an object and assigns its instance_vars. More code!
97
+
98
+ require "fun_with_configurations"
99
+ class Person
100
+ attr_accessor :ssn, :birthdate, :password
101
+ end
102
+
103
+ p = Person.new
104
+ p.install_fwc_config do
105
+ age 51
106
+
107
+ data do
108
+ personal do
109
+ ssn "555-555-5555"
110
+ birthdate "2001-03-01"
111
+ password "mice"
112
+ end
113
+ end
114
+ end
115
+
116
+ p.config.data.personal.fwc_assign!
117
+
118
+ p.ssn # => "555-555-5555"
119
+ p.birthdate # => "2001-03-01"
120
+ (and so on)
121
+
122
+ By default, fwc_assign!() assigns the instance variables of the config's object (the object you call object.config on). But you can also pass fwc_assign a different object to config instead.
123
+
124
+ class Computer; end
125
+
126
+ Computer.install_fwc_config_from_file( file )
127
+
128
+
129
+ betty = Computer.config.betty.fwc_assign!( Computer.new )
130
+ veronica = Computer.config.veronica.fwc_assign!( Computer.new )
131
+ odin = Computer.config.odin.fwc_assign!( Computer.new )
132
+
133
+ computers = {}
134
+
135
+ # Alternately
136
+ Computer.config.fwc do |c| # You'll meet .fwc() soon
137
+ c.each do |k, config|
138
+ computers[k] = config.fwc_assign!( Computer.new )
139
+ end
140
+ end
141
+
142
+ odin.ip # "192.168.0.15"
143
+
144
+
145
+ Another convenience method lets
146
+
147
+ MyRails.config.constant_contact.fwc do |config|
148
+ @key = config.oauth.key
149
+ @secret = config.oauth.secret
150
+ @redir = config.oauth.redirect_url
151
+ @user = config.user
152
+ @password = config.password
153
+ end
154
+
155
+ Basically, this is meant to spare you from typing the longhand form:
156
+
157
+ @key = MyRails.config.constant_contact.oauth.key
158
+ @secret = MyRails.config.constant_contact.oauth.secret
159
+ @redir = MyRails.config.constant_contact.oauth.redirect_url
160
+ @user = MyRails.config.constant_contact.user
161
+ @password = MyRails.config.constant_contact.password
67
162
 
68
163
 
69
164
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.6
@@ -0,0 +1,6 @@
1
+ module FunWith
2
+ module Configurations
3
+ class ChainError < Exception
4
+ end
5
+ end
6
+ end
@@ -1,29 +1,5 @@
1
1
  module FunWith
2
2
  module Configurations
3
- class KeyError < Exception
4
- end
5
-
6
- class ChainError < Exception
7
- end
8
-
9
- module ConfigOverriddenMethods
10
- def self.override_method( sym )
11
- eval <<-EOS
12
- def #{sym}( *args, &block )
13
- self.method_missing(:sym, *args, &block)
14
- end
15
-
16
- def #{sym}=( *args, &block )
17
- self.method_missing( :#{sym}, *args, &block )
18
- end
19
- EOS
20
- end
21
-
22
- for sym in [:test]
23
- override_method( sym )
24
- end
25
- end
26
-
27
3
  class Config
28
4
  include ConfigOverriddenMethods
29
5
 
@@ -129,6 +105,8 @@ module FunWith
129
105
  self.to_hash.inspect
130
106
  when :ruby
131
107
  self.to_ruby_code
108
+ when :yaml
109
+ Psych.dump( self.to_hash )
132
110
  else
133
111
  super
134
112
  end
@@ -158,6 +136,89 @@ module FunWith
158
136
  def fwc_overridden_methods
159
137
  self.class.fwc_overridden_methods
160
138
  end
139
+
140
+ # Assigns the topmost set of configuration symbols as instance variables.
141
+ # Translates any subconfigurations into a hash.
142
+ #
143
+ # Example:
144
+ #
145
+ # config.set.subset.subsubset.fwc_assign!( obj )
146
+ #
147
+ # Say that the referenced config had keys :name, :height, :gravatar, :public_key,
148
+ # then the object would be assigned the corresponding instance_vars, @name, @height, etc.
149
+ def fwc_assign!( obj = self.fwc_configured_object )
150
+ for k, v in self
151
+ obj.instance_variable_set( "@#{k}", v.is_a?( Config ) ? v.to_hash : v )
152
+ end
153
+
154
+ obj
155
+ end
156
+
157
+ # returns the topmost configuration, obviously
158
+ def fwc_root
159
+ root = self
160
+
161
+ while true
162
+ if root.fwc_parent.is_a?(Config)
163
+ root = root.fwc_parent
164
+ else
165
+ return root
166
+ end
167
+ end
168
+ end
169
+
170
+ def fwc_root?
171
+ self == self.fwc_root
172
+ end
173
+
174
+ def fwc_parent
175
+ @parent
176
+ end
177
+
178
+ # Every subtree / subconfig in the config hierarchy will share the same configured object.
179
+ def fwc_configured_object
180
+ if self.fwc_root?
181
+ @configured_object
182
+ else
183
+ self.fwc_root.fwc_configured_object
184
+ end
185
+ end
186
+
187
+ # used for assigning the configured
188
+ def fwc_configured_object=( obj )
189
+ if self.fwc_root?
190
+ @configured_object = obj
191
+ else
192
+ self.fwc_root.fwc_configured_object = obj
193
+ end
194
+ end
195
+
196
+
197
+
198
+ # Useful when assigning selective settings from a config tree. Example:
199
+ #
200
+ # RailsSite.config.constant_contact.fwc do |config|
201
+ # @key = config.oauth.key
202
+ # @secret = config.oauth.secret
203
+ # @redir = config.oauth.redirect_url
204
+ # @user = config.user
205
+ # @password = config.password
206
+ # end
207
+ #
208
+ def fwc( &block )
209
+ yield self if block_given?
210
+ self
211
+ end
212
+
213
+
214
+ def fwc_save( file = nil )
215
+ raise "NOT TESTED!"
216
+
217
+ root = self.fwc_root
218
+ file = (file || root.fwc_configuration_file).fwf_filepath
219
+
220
+ file.write( root.to_s )
221
+ end
161
222
  end
162
223
  end
163
224
  end
@@ -0,0 +1,21 @@
1
+ module FunWith
2
+ module Configurations
3
+ module ConfigOverriddenMethods
4
+ def self.override_method( sym )
5
+ eval <<-EOS
6
+ def #{sym}( *args, &block )
7
+ self.method_missing(:sym, *args, &block)
8
+ end
9
+
10
+ def #{sym}=( *args, &block )
11
+ self.method_missing( :#{sym}, *args, &block )
12
+ end
13
+ EOS
14
+ end
15
+
16
+ for sym in [:test]
17
+ override_method( sym )
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,26 @@
1
+ # methods available to a configuration-having object.
2
+
3
+ module FunWith
4
+ module Configurations
5
+ module Configurable
6
+ # Replaces existing configuration
7
+ def config=( config )
8
+ @fwc_config = config
9
+ end
10
+
11
+ def config( &block )
12
+ yield @fwc_config if block_given?
13
+ @fwc_config
14
+ end
15
+
16
+ def fwc_configuration_file
17
+ @fwc_configuration_file
18
+ end
19
+
20
+ def fwc_configuration_file=( file )
21
+ @fwc_configuration_file = file.fwf_filepath
22
+ end
23
+ end
24
+ end
25
+ end
26
+
@@ -0,0 +1,6 @@
1
+ module FunWith
2
+ module Configurations
3
+ class KeyError < Exception
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,40 @@
1
+ module FunWith
2
+ module Configurations
3
+ module ModuleIncludes
4
+ def configure( object, config = nil, &block )
5
+ if block_given?
6
+ object.install_fwc_config( config, &block )
7
+ else
8
+ case config
9
+ when String
10
+ case yaml_or_filepath?( config )
11
+ when :filepath
12
+ object.install_fwc_config_from_file( config )
13
+ when :yaml
14
+ object.install_fwc_config_from_yaml( config )
15
+ end
16
+ when Pathname, FunWith::Files::FilePath
17
+ object.install_fwc_config_from_file( config )
18
+ when Hash, NilClass
19
+ end
20
+ end
21
+ end
22
+
23
+ protected
24
+ def configuration_argument_type?( arg )
25
+ case arg
26
+ when String
27
+ if str.fwf_filepath.exist?
28
+ :filepath
29
+ elsif str =~ /\n/
30
+ :yaml
31
+ else
32
+ :filepath
33
+ end
34
+ when Hash
35
+ :hash
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -2,18 +2,34 @@ class Object
2
2
  def install_fwc_config( config = nil, &block )
3
3
  extend FunWith::Configurations::Configurable
4
4
  self.config = config || FunWith::Configurations::Config.new( nil, &block )
5
+ self.config.fwc_configured_object = self
5
6
  self.config
6
7
  end
7
8
 
8
- def install_fwc_config_from_file( filename )
9
- install_fwc_config( eval( File.read( filename ) ) ) # TODO: Has to be a better way than eval(). Dangerous.
9
+ def install_fwc_config_from_file( file )
10
+ file = file.fwf_filepath
11
+
12
+ case file.ext
13
+ when "rb"
14
+ self.install_fwc_config do
15
+ eval( file.read )
16
+ end
17
+ when "yml", "yaml"
18
+ self.install_fwc_config_from_yaml( file.read )
19
+ end
20
+
21
+ self.fwc_configuration_file = file
22
+ self.config
10
23
  end
11
24
 
12
25
  def install_fwc_config_from_hash( hash )
13
- install_fwc_config( FunWith::Configurations::Config.from_hash( hash ) )
26
+ self.install_fwc_config( FunWith::Configurations::Config.from_hash( hash ) )
27
+ self.config
14
28
  end
15
29
 
16
30
  def install_fwc_config_from_yaml( yaml_string )
17
- install_fwc_config_from_hash( YAML.load( yaml_string ) )
31
+ self.install_fwc_config_from_hash( Psych.load( yaml_string ) )
32
+ self.config
18
33
  end
19
- end
34
+ end
35
+
@@ -1,17 +1,5 @@
1
1
  module FunWith
2
2
  module Configurations
3
- class TryResult
4
- attr_accessor :config
5
- def initialize( config, success )
6
- @config = config
7
- @success = success
8
- end
9
-
10
- def success?
11
- @success
12
- end
13
- end
14
-
15
3
  class TryObject
16
4
  # takes a Config object
17
5
  def initialize( config )
@@ -0,0 +1,15 @@
1
+ module FunWith
2
+ module Configurations
3
+ class TryResult
4
+ attr_accessor :config
5
+ def initialize( config, success )
6
+ @config = config
7
+ @success = success
8
+ end
9
+
10
+ def success?
11
+ @success
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,13 +1,10 @@
1
1
  require 'fun_with_files'
2
+
2
3
  module FunWith
3
4
  module Configurations
4
5
  end
5
6
  end
6
7
 
7
8
  FunWith::Files::RootPath.rootify( FunWith::Configurations, __FILE__.fwf_filepath.dirname.up )
8
-
9
- require_relative File.join( "fun_with", "configurations", "config" )
10
- require_relative File.join( "fun_with", "configurations", "configurations" )
11
- require_relative File.join( "fun_with", "configurations", "object" )
12
- require_relative File.join( "fun_with", "configurations", "try_object" )
13
-
9
+ FunWith::Configurations.root( "lib", "fun_with", "configurations" ).requir
10
+ FunWith::Configurations.extend( FunWith::Configurations::ModuleIncludes )
@@ -0,0 +1,28 @@
1
+ # An example configuration file.
2
+ servers do
3
+ hopeful_host do
4
+ ip "192.168.0.25"
5
+ services :mysql, :memcached, :email, :backup
6
+ uptime `uptime`.strip
7
+ config_script "/var/configurations/hopeful.conf"
8
+ end
9
+
10
+ squishy_host do
11
+ ip "192.168.0.27"
12
+ services :postresql, :couchdb
13
+ uptime `uptime`.strip
14
+ config_script "/var/configurations/squishy.conf"
15
+ end
16
+ end
17
+
18
+ workstations do
19
+ betty do
20
+ ip "192.168.0.14"
21
+ os "Ubuntu Linux 13.04"
22
+ end
23
+
24
+ veronica do
25
+ ip "192.168.0.15"
26
+ os "Solaris 10"
27
+ end
28
+ end
@@ -0,0 +1,12 @@
1
+ servers:
2
+ puppymonster:
3
+ commands:
4
+ - flicker
5
+ - snortular
6
+ - shortify
7
+
8
+ services:
9
+ mysql: nope
10
+ memcached: sure
11
+ oauth: definitely
12
+ twitter: not bloody likely
data/test/data/config.yml CHANGED
@@ -1,3 +1,6 @@
1
+ # A configuration can be represented as a YAML hash,
2
+ # though pure ruby offers more flexibility.
3
+
1
4
  servers:
2
5
  puppymonster:
3
6
  commands:
@@ -9,4 +12,4 @@ servers:
9
12
  mysql: yep
10
13
  memcached: sure
11
14
  oauth: definitely
12
- twitter: no
15
+ twitter: "no" # Weird thing: YAML interprets unquoted 'no' as false. Interesting design choice.
data/test/helper.rb CHANGED
@@ -1,18 +1,24 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- begin
4
- Bundler.setup(:default, :development)
5
- rescue Bundler::BundlerError => e
6
- $stderr.puts e.message
7
- $stderr.puts "Run `bundle install` to install missing gems"
8
- exit e.status_code
9
- end
10
- require 'test/unit'
11
- require 'shoulda'
12
-
13
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
- $LOAD_PATH.unshift(File.dirname(__FILE__))
1
+ # require 'rubygems'
2
+ # require 'bundler'
3
+ # require 'debugger'
4
+ #
5
+ # begin
6
+ # Bundler.setup(:default, :development)
7
+ # rescue Bundler::BundlerError => e
8
+ # $stderr.puts e.message
9
+ # $stderr.puts "Run `bundle install` to install missing gems"
10
+ # exit e.status_code
11
+ # end
12
+ # require 'test/unit'
13
+ # require 'shoulda'
14
+ #
15
+ # $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
16
+ # $LOAD_PATH.unshift(File.dirname(__FILE__))
17
+ require 'fun_with_testing'
15
18
  require 'fun_with_configurations'
16
19
 
17
- class Test::Unit::TestCase
18
- end
20
+ # class Test::Unit::TestCase
21
+ # end
22
+
23
+ class FunWith::Configurations::TestCase < FunWith::Testing::TestCase
24
+ end
@@ -0,0 +1,59 @@
1
+ require 'helper'
2
+
3
+ module FunWith
4
+ module Configurations
5
+ class TestClass
6
+ attr_accessor :name, :rank, :serial_number
7
+
8
+ def initialize( config = nil)
9
+ unless config.nil?
10
+ self.install_fwc_config( config )
11
+ self.config.set.subset.subsubset.fwc_assign!
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+
19
+ class TestFunWithConfigurations < FunWith::Configurations::TestCase
20
+ context "testing the block form for assignments" do
21
+ setup do
22
+ @config = FunWith::Configurations::Config.new do
23
+ set do
24
+ subset do
25
+ subsubset do
26
+ name "Leonard Morgan"
27
+ rank "Lieutenant"
28
+ serial_number "513-555-1024"
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ assert_equal "Leonard Morgan", @config.set.subset.subsubset.name
35
+ end
36
+
37
+ should "execute fwc_assign! properly" do
38
+ obj = FunWith::Configurations::TestClass.new( @config )
39
+
40
+ assert_equal "Leonard Morgan", obj.name
41
+ assert_equal "Lieutenant", obj.rank
42
+ assert_equal "513-555-1024", obj.serial_number
43
+ end
44
+
45
+ should "run a config block" do
46
+ obj = FunWith::Configurations::TestClass.new( nil )
47
+
48
+ @config.set.subset.subsubset.fwc do |c|
49
+ obj.name = c.name
50
+ obj.rank = c.rank
51
+ obj.serial_number = c.serial_number
52
+ end
53
+
54
+ assert_equal "Leonard Morgan", obj.name
55
+ assert_equal "Lieutenant", obj.rank
56
+ assert_equal "513-555-1024", obj.serial_number
57
+ end
58
+ end
59
+ end
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- class TestFunWithConfigurations < Test::Unit::TestCase
3
+ class TestFunWithConfigurations < FunWith::Configurations::TestCase
4
4
  should "configurize a class" do
5
5
  o = Object.new
6
6
  o.install_fwc_config do
@@ -0,0 +1,34 @@
1
+ require 'helper'
2
+
3
+ module FunWith
4
+ module Configurations
5
+ class ServerManager
6
+ end
7
+ end
8
+ end
9
+
10
+ class TestLoadingFromFile < FunWith::Configurations::TestCase
11
+ should "load from a .rb file" do
12
+ @srvman.install_fwc_config_from_file( @config_root.join("config.rb") )
13
+ assert @srvman.respond_to?(:config)
14
+ assert_equal "192.168.0.27", @srvman.config.servers.squishy_host.ip
15
+ end
16
+
17
+ should "load from a .yaml file" do
18
+ @srvman.install_fwc_config_from_file( @config_root.join("config.yaml") )
19
+ assert_equal "not bloody likely", @srvman.config.servers.puppymonster.services.twitter
20
+ end
21
+
22
+ should "load from a .yml file" do
23
+ @srvman.install_fwc_config_from_file( @config_root.join("config.yml") )
24
+ assert_equal "no", @srvman.config.servers.puppymonster.services.twitter
25
+ end
26
+
27
+ def setup
28
+ @srvman = FunWith::Configurations::ServerManager.new
29
+ assert !( @srvman.respond_to?(:config) )
30
+ @config_root = FunWith::Configurations.root( "test", "data" )
31
+ end
32
+ end
33
+
34
+
@@ -0,0 +1,10 @@
1
+ require 'helper'
2
+
3
+ class TestSetupBasics < FunWith::Configurations::TestCase
4
+ context "testing basics" do
5
+ context "FunWith::Configurations module"
6
+ should "respond to :configure" do
7
+ assert FunWith::Configurations.respond_to?(:configure)
8
+ end
9
+ end
10
+ end
metadata CHANGED
@@ -1,112 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fun_with_configurations
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
5
- prerelease:
4
+ version: 0.0.6
6
5
  platform: ruby
7
6
  authors:
8
7
  - Bryce Anderson
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-05-22 00:00:00.000000000 Z
11
+ date: 2014-05-31 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: fun_with_files
14
+ name: fun_with_gems
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: shoulda
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: rdoc
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ~>
52
- - !ruby/object:Gem::Version
53
- version: '3.12'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: '3.12'
62
- - !ruby/object:Gem::Dependency
63
- name: bundler
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
16
  requirements:
67
17
  - - ~>
68
18
  - !ruby/object:Gem::Version
69
- version: 1.3.0
70
- type: :development
19
+ version: '0.0'
20
+ type: :runtime
71
21
  prerelease: false
72
22
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
23
  requirements:
75
24
  - - ~>
76
25
  - !ruby/object:Gem::Version
77
- version: 1.3.0
26
+ version: '0.0'
78
27
  - !ruby/object:Gem::Dependency
79
- name: jeweler
28
+ name: fun_with_testing
80
29
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
30
  requirements:
83
31
  - - ~>
84
32
  - !ruby/object:Gem::Version
85
- version: 1.8.4
33
+ version: '0.0'
86
34
  type: :development
87
35
  prerelease: false
88
36
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
37
  requirements:
91
38
  - - ~>
92
39
  - !ruby/object:Gem::Version
93
- version: 1.8.4
94
- - !ruby/object:Gem::Dependency
95
- name: debugger
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: '0'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
40
+ version: '0.0'
110
41
  description: ! "Attach a configuration object to any object or class with code like
111
42
  this:\n spy.install_fwc_config do\n spy_id \"74 Baker\"\n"
112
43
  email: keeputahweird@gmail.com
@@ -116,14 +47,24 @@ extra_rdoc_files:
116
47
  - LICENSE.txt
117
48
  - README.rdoc
118
49
  files:
50
+ - ./lib/fun_with/configurations/chain_error.rb
119
51
  - ./lib/fun_with/configurations/config.rb
120
- - ./lib/fun_with/configurations/configurations.rb
52
+ - ./lib/fun_with/configurations/config_overridden_methods.rb
53
+ - ./lib/fun_with/configurations/configurable.rb
54
+ - ./lib/fun_with/configurations/key_error.rb
55
+ - ./lib/fun_with/configurations/module_includes.rb
121
56
  - ./lib/fun_with/configurations/object.rb
122
57
  - ./lib/fun_with/configurations/try_object.rb
58
+ - ./lib/fun_with/configurations/try_result.rb
123
59
  - ./lib/fun_with_configurations.rb
60
+ - ./test/data/config.rb
61
+ - ./test/data/config.yaml
124
62
  - ./test/data/config.yml
125
63
  - ./test/helper.rb
64
+ - ./test/test_block_style_assignment.rb
126
65
  - ./test/test_fun_with_configurations.rb
66
+ - ./test/test_loading_from_file.rb
67
+ - ./test/test_setup_basics.rb
127
68
  - Gemfile
128
69
  - LICENSE.txt
129
70
  - README.rdoc
@@ -132,29 +73,25 @@ files:
132
73
  homepage: http://github.com/darthschmoo/fun_with_configurations
133
74
  licenses:
134
75
  - MIT
76
+ metadata: {}
135
77
  post_install_message:
136
78
  rdoc_options: []
137
79
  require_paths:
138
80
  - lib
139
81
  required_ruby_version: !ruby/object:Gem::Requirement
140
- none: false
141
82
  requirements:
142
83
  - - ! '>='
143
84
  - !ruby/object:Gem::Version
144
85
  version: '0'
145
- segments:
146
- - 0
147
- hash: -502379231947070580
148
86
  required_rubygems_version: !ruby/object:Gem::Requirement
149
- none: false
150
87
  requirements:
151
88
  - - ! '>='
152
89
  - !ruby/object:Gem::Version
153
90
  version: '0'
154
91
  requirements: []
155
92
  rubyforge_project:
156
- rubygems_version: 1.8.25
93
+ rubygems_version: 2.2.2
157
94
  signing_key:
158
- specification_version: 3
95
+ specification_version: 4
159
96
  summary: A quick and feisty configuration creator (e.g. MyClass.config)
160
97
  test_files: []
@@ -1,15 +0,0 @@
1
- module FunWith
2
- module Configurations
3
- module Configurable
4
- def config=( config )
5
- @fwc_config = config
6
- end
7
-
8
- def config( &block )
9
- yield @fwc_config if block_given?
10
- @fwc_config
11
- end
12
- end
13
- end
14
- end
15
-