easyconf-rails 0.2 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/README.md +30 -0
  2. data/lib/easyconf-rails.rb +62 -4
  3. data.tar.gz.sig +0 -0
  4. metadata +32 -45
  5. metadata.gz.sig +0 -0
data/README.md CHANGED
@@ -58,3 +58,33 @@ Now you're ready to use `config` in your application.
58
58
 
59
59
  # You can reload your configuration file by with .reload!.
60
60
  $config.reload!
61
+
62
+ BIG RED WARNING
63
+ ---------------
64
+
65
+ `$config` is a *mutable global variable*, and should therefore be treated with
66
+ extreme caution. In particular, `$config.reload!` will reset the value of
67
+ `$config` in *all* threads; it is therefore important to ensure that a program's
68
+ corrent functioning does not rely on subsequent accesses to the `$config` value
69
+ to be consistent.
70
+
71
+ THE WRONG WAY
72
+ ^^^^^^^^^^^^^
73
+
74
+ Person[$config.good_guy].kill(Person[$config.bad_guy])
75
+
76
+ is wrong because `$config.reload!` could have been called after evaluating the
77
+ value of `Person[$config.good_guy]`, but *before* calling its _kill()_ method.
78
+ If `$config.bad_guy` was set to the former value of `$config.good_guy`, we would
79
+ be asking `Person[$config.bad_guy]` to kill itself.
80
+
81
+ THE RIGHT WAY
82
+ ^^^^^^^^^^^^^
83
+
84
+ $config.lock do
85
+ Person[config.good_guy].kill(Person[config.bad_guy])
86
+ end
87
+
88
+ is correct because this gaurantees that `config.bad_guy` and `config.good_guy`
89
+ are consistent. Even if they're switched in the interim, no one will ever be
90
+ asked to kill themselves.
@@ -41,6 +41,47 @@ class SemiOpenStruct < OpenStruct
41
41
  end
42
42
 
43
43
  class EasyConfRails < Rails::Railtie
44
+ # This is a base class for easyconf errors.
45
+ class EasyConfError < Exception
46
+ end
47
+
48
+ # NonexistentConfig is raise when config.yml doesn't exist.
49
+ class NonexistentConfig < EasyConfError
50
+ def initialize(msg="config.yml doesn't exist.")
51
+ super(msg)
52
+ end
53
+ end
54
+
55
+ # InvalidConfig is raised when config.yml is invalid YAML.
56
+ class InvalidConfig < EasyConfError
57
+ # @line is the line where the syntax error occurred.
58
+ attr_reader :line
59
+ # @coulumn is the column where the syntax error occurred.
60
+ attr_reader :column
61
+
62
+ def initialize(line, column, msg="Syntax error in config.yml at line "\
63
+ "#{line}, column #{column}")
64
+ @line = line
65
+ @column = column
66
+ super(msg)
67
+ end
68
+ end
69
+
70
+ # InvalidDefaults is raised when config/defaults.yml is invalid YAML.
71
+ class InvalidDefaults < EasyConfError
72
+ # @line is the line where the syntax error occurred.
73
+ attr_reader :line
74
+ # @coulumn is the column where the syntax error occurred.
75
+ attr_reader :column
76
+
77
+ def initialize(line, column, msg="Syntax error in config/defaults.yml at "\
78
+ "line #{line}, column #{column}")
79
+ @line = line
80
+ @column = column
81
+ super(msg)
82
+ end
83
+ end
84
+
44
85
  # Turn a Hash or Array and all of its Hash children into OpenStructs.
45
86
  def hash_to_openstruct(hash)
46
87
  (hash.is_a?(Hash) ? hash.keys : (0...hash.length)).each do |key|
@@ -81,14 +122,22 @@ class EasyConfRails < Rails::Railtie
81
122
  def load_config()
82
123
  config_location = Rails.root + 'config.yml'
83
124
  if File.exists?(config_location)
84
- config_hash = YAML.load_file(config_location)
125
+ begin
126
+ config_hash = YAML.load_file(config_location)
127
+ rescue Psych::SyntaxError => ex
128
+ raise InvalidConfig.new(ex.line, ex.column)
129
+ end
85
130
  else
86
- config_hash = {}
131
+ raise(NonexistentConfig)
87
132
  end
88
133
 
89
134
  defaults_location = Rails.root + 'config' + 'defaults.yml'
90
135
  if File.exists?(defaults_location)
91
- defaults_hash = YAML.load_file(defaults_location)
136
+ begin
137
+ defaults_hash = YAML.load_file(defaults_location)
138
+ rescue Psych::SyntaxError => ex
139
+ raise InvalidDefaults.new(ex.line, ex.column)
140
+ end
92
141
  else
93
142
  defaults_hash = {}
94
143
  end
@@ -104,6 +153,15 @@ class EasyConfRails < Rails::Railtie
104
153
  end
105
154
 
106
155
  config.before_initialize do
107
- assign_config()
156
+ begin
157
+ assign_config()
158
+ rescue NonexistentConfig, InvalidConfig, InvalidDefaults
159
+ warn($!.message)
160
+ exit(1)
161
+ end
162
+ end
163
+
164
+ trap(:HUP) do
165
+ $config.reload!
108
166
  end
109
167
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easyconf-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.2'
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,52 +9,39 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain:
12
- - ! '-----BEGIN CERTIFICATE-----
13
-
14
- MIIDQDCCAiigAwIBAgIBADANBgkqhkiG9w0BAQUFADBGMRgwFgYDVQQDDA90aGUu
15
-
16
- bWFnaWNhbC5rYXQxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixk
17
-
18
- ARkWA2NvbTAeFw0xMTA4MjEyMjMyMDFaFw0xMjA4MjAyMjMyMDFaMEYxGDAWBgNV
19
-
20
- BAMMD3RoZS5tYWdpY2FsLmthdDEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYK
21
-
22
- CZImiZPyLGQBGRYDY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
23
-
24
- pBt20nwjs5W03djpRN6FAbpiio286NHMTk6HhmjV6GZKOi5ZUX5onTnKUg2Vc35z
25
-
26
- /nK+aIPReyRfBgIcfSjhoXh1A1Dp+2laNgTtU/3eMupruatgORAPCSaG9Ns+HSyR
27
-
28
- vySbz1QUrwvlvF0qkhhApNQ6dsLl2LMOV3QcluY+Y3CVccOWOSHdQcnAbPuzM9Hf
29
-
30
- 4ChI4OGL7+DwLA5OK2S5uewRAa2iLkJSN0WugnQlJqMT59GRaqTDOtnYQpiyKEBy
31
-
32
- QjVPO4LNk7iDsJP22YBrveIzm8/YYRBTU4LTHMEMOyCszrYqD2S1Lwp2rtCJzQCl
33
-
34
- BA0LtBKrZl5mwZm7qyj+TwIDAQABozkwNzAJBgNVHRMEAjAAMB0GA1UdDgQWBBSm
35
-
36
- s5arhjp61kmGl6wsmLYkqerdqDALBgNVHQ8EBAMCBLAwDQYJKoZIhvcNAQEFBQAD
37
-
38
- ggEBAA6cQNQMOPRy4yrj7Nh5Mb9qq8t/8ho/JQvjzVof9qRd+kfKrOoOhXfEO+Rm
39
-
40
- sWcaOnBCVC4DnZuNDSLygVhCDtMnHjg/JsfO/GBF/QlNTJOO1jkoQiS6w0KARlBm
41
-
42
- cpXaWg/oMtXJ2PaUga6WkNeXYf9Mad36P4yuGQScjs+WkUUy7DNZvTGReIcCWOR8
43
-
44
- jteSvvCMobQKGr2DfFOU9Jiddh2FPpz/KOM2ijzwsVNUMUr7R58LoCnQZrZ/YaRW
45
-
46
- ob6QnVgwqu5SUAKQxlFJ/aKlPMj735z8EogaZC1ZHgg3vkgGGyu57N/8BDDG0TzC
47
-
48
- Zn3u2leVae/fJ03zYGArhuJKPgc=
49
-
50
- -----END CERTIFICATE-----
51
-
52
- '
53
- date: 2012-02-25 00:00:00.000000000 Z
12
+ - !binary |-
13
+ LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURRRENDQWlpZ0F3SUJB
14
+ Z0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREJHTVJnd0ZnWURWUVFEREE5MGFH
15
+ VXUKYldGbmFXTmhiQzVyWVhReEZUQVRCZ29Ka2lhSmsvSXNaQUVaRmdWbmJX
16
+ RnBiREVUTUJFR0NnbVNKb21UOGl4awpBUmtXQTJOdmJUQWVGdzB4TVRBNE1q
17
+ RXlNak15TURGYUZ3MHhNakE0TWpBeU1qTXlNREZhTUVZeEdEQVdCZ05WCkJB
18
+ TU1EM1JvWlM1dFlXZHBZMkZzTG10aGRERVZNQk1HQ2dtU0pvbVQ4aXhrQVJr
19
+ V0JXZHRZV2xzTVJNd0VRWUsKQ1pJbWlaUHlMR1FCR1JZRFkyOXRNSUlCSWpB
20
+ TkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQQpwQnQyMG53
21
+ anM1VzAzZGpwUk42RkFicGlpbzI4Nk5ITVRrNkhobWpWNkdaS09pNVpVWDVv
22
+ blRuS1VnMlZjMzV6Ci9uSythSVBSZXlSZkJnSWNmU2pob1hoMUExRHArMmxh
23
+ TmdUdFUvM2VNdXBydWF0Z09SQVBDU2FHOU5zK0hTeVIKdnlTYnoxUVVyd3Zs
24
+ dkYwcWtoaEFwTlE2ZHNMbDJMTU9WM1FjbHVZK1kzQ1ZjY09XT1NIZFFjbkFi
25
+ UHV6TTlIZgo0Q2hJNE9HTDcrRHdMQTVPSzJTNXVld1JBYTJpTGtKU04wV3Vn
26
+ blFsSnFNVDU5R1JhcVRET3RuWVFwaXlLRUJ5ClFqVlBPNExOazdpRHNKUDIy
27
+ WUJydmVJem04L1lZUkJUVTRMVEhNRU1PeUNzenJZcUQyUzFMd3AycnRDSnpR
28
+ Q2wKQkEwTHRCS3JabDVtd1ptN3F5aitUd0lEQVFBQm96a3dOekFKQmdOVkhS
29
+ TUVBakFBTUIwR0ExVWREZ1FXQkJTbQpzNWFyaGpwNjFrbUdsNndzbUxZa3Fl
30
+ cmRxREFMQmdOVkhROEVCQU1DQkxBd0RRWUpLb1pJaHZjTkFRRUZCUUFECmdn
31
+ RUJBQTZjUU5RTU9QUnk0eXJqN05oNU1iOXFxOHQvOGhvL0pRdmp6Vm9mOXFS
32
+ ZCtrZktyT29PaFhmRU8rUm0Kc1djYU9uQkNWQzREblp1TkRTTHlnVmhDRHRN
33
+ bkhqZy9Kc2ZPL0dCRi9RbE5USk9PMWprb1FpUzZ3MEtBUmxCbQpjcFhhV2cv
34
+ b010WEoyUGFVZ2E2V2tOZVhZZjlNYWQzNlA0eXVHUVNjanMrV2tVVXk3RE5a
35
+ dlRHUmVJY0NXT1I4Cmp0ZVN2dkNNb2JRS0dyMkRmRk9VOUppZGRoMkZQcHov
36
+ S09NMmlqendzVk5VTVVyN1I1OExvQ25RWnJaL1lhUlcKb2I2UW5WZ3dxdTVT
37
+ VUFLUXhsRkovYUtsUE1qNzM1ejhFb2dhWkMxWkhnZzN2a2dHR3l1NTdOLzhC
38
+ RERHMFR6QwpabjN1MmxlVmFlL2ZKMDN6WUdBcmh1SktQZ2M9Ci0tLS0tRU5E
39
+ IENFUlRJRklDQVRFLS0tLS0K
40
+ date: 2012-05-07 00:00:00.000000000 Z
54
41
  dependencies:
55
42
  - !ruby/object:Gem::Dependency
56
43
  name: rails
57
- requirement: &78323930 !ruby/object:Gem::Requirement
44
+ requirement: &74240240 !ruby/object:Gem::Requirement
58
45
  none: false
59
46
  requirements:
60
47
  - - ! '>='
@@ -62,7 +49,7 @@ dependencies:
62
49
  version: '0'
63
50
  type: :runtime
64
51
  prerelease: false
65
- version_requirements: *78323930
52
+ version_requirements: *74240240
66
53
  description: Configure Rails apps with a simple YAML file.
67
54
  email: the.magical.kat@gmail.com
68
55
  executables: []
metadata.gz.sig CHANGED
Binary file