easyconf-rails 0.2 → 0.2.1

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 (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