blinkbox-common_config 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/CHANGELOG.md +53 -0
- data/README.md +17 -0
- data/VERSION +1 -0
- data/lib/blinkbox/common_config.rb +98 -0
- data/lib/java_properties/data_types.rb +29 -0
- metadata +120 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NmMzMTM2YmJmY2I5OWIyM2Y4YWJhMTY1M2QxMGZhZGRiY2U4NmNmYQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MzI5NmJiZjFmMjFiNmUzNmE3NWM2Yzc5MmZlZWUzM2NkNzhkM2EwZQ==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NGUzYTcxNjY5OTg1ZTI0NWRkNWIwYmRmZGZkMjI3NDgyZWI3MDYzODUxOWVk
|
10
|
+
NTQ0YThkNWY2NWIwNzM0Y2QzNjAyYWYzNDA1NDY4ZGNhN2I5NTJlMzk4NmRk
|
11
|
+
MDUwZmY1OTU4M2YwNTE1NGE3N2M3ZmEyMjgzMjhlMTkyZTdkMDQ=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
Njc1ZGIxNzBhZGExMzAxNTNmNWM5NDU0OThkZjcxZjRmZjI5MTk0NTJlY2Uy
|
14
|
+
YWM3NzMwMDM0MmY2YjgzMGFhOTkyYmQ5MDc1NTJhOGExZDk3MmJhNjdlY2Ey
|
15
|
+
OGYzYjA5MDc0NjY2MjkxYmU2ZjcyNGRmMjZjN2U0MGM5NTU2Yjk=
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## Open Source release (2015-01-28 14:11:21)
|
4
|
+
|
5
|
+
Today we have decided to publish parts of our codebase on Github under the [MIT licence](LICENCE). The licence is very permissive, but we will always appreciate hearing if and where our work is used!
|
6
|
+
|
7
|
+
## 0.4.0 ([#6](https://git.mobcastdev.com/Platform/common_config.rb/pull/6) 2014-10-03 15:41:55)
|
8
|
+
|
9
|
+
No deep setting
|
10
|
+
|
11
|
+
### Breaking change
|
12
|
+
|
13
|
+
- Should not have changed this to using deep setting (other apps depend on it being single keys, and this is more flexible)
|
14
|
+
|
15
|
+
## 0.3.1 ([#3](https://git.mobcastdev.com/Platform/common_config.rb/pull/3) 2014-08-18 09:46:37)
|
16
|
+
|
17
|
+
Depth
|
18
|
+
|
19
|
+
### Clarification
|
20
|
+
|
21
|
+
- Made improvements to the tests and code so that the form of nested properties when using the `tree` method is well defined.
|
22
|
+
|
23
|
+
## 0.3.0 ([#4](https://git.mobcastdev.com/Platform/common_config.rb/pull/4) 2014-09-25 10:00:48)
|
24
|
+
|
25
|
+
Symbols and booleans
|
26
|
+
|
27
|
+
### New feature
|
28
|
+
|
29
|
+
- Converts `"true"` and `"false"` to boolean values.
|
30
|
+
- Converts `":thing"` to `:thing` symbols.
|
31
|
+
|
32
|
+
## 0.2.0 ([#2](https://git.mobcastdev.com/Platform/common_config.rb/pull/2) 2014-08-13 16:33:04)
|
33
|
+
|
34
|
+
Use units in properties
|
35
|
+
|
36
|
+
### New Feature
|
37
|
+
|
38
|
+
- Properties in the format `5 seconds` will be converted to [Unit](https://github.com/olbrich/ruby-units) objects so that they can be easily manipulated:
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
property = Unit("6 minutes")
|
42
|
+
|
43
|
+
p property.convert_to("seconds").scalar
|
44
|
+
### => 360
|
45
|
+
```
|
46
|
+
|
47
|
+
## 0.1.0
|
48
|
+
|
49
|
+
Initial release
|
50
|
+
|
51
|
+
### New features
|
52
|
+
|
53
|
+
- Reads `config/reference.properties`, overwrites with `config/application.properties` (if it exists) then overwrites with contents of the file or URL at `ENV['CONFIG_URL']` (if it exists/responds with HTTP 200)
|
data/README.md
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# Blinkbox::CommonConfig
|
2
|
+
|
3
|
+
Put your reference properties in `config/reference.properties` and any environmental stuff which makes sense for a development environment in `config/application.properties`, then load them and access them with:
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
# $ gem install blinkbox-common_config
|
7
|
+
require "blinkbox/common_config"
|
8
|
+
|
9
|
+
properties = Blinkbox::CommonConfig.new
|
10
|
+
|
11
|
+
# Accessible with symbols
|
12
|
+
properties[:'rabbitmq.url']
|
13
|
+
# Or strings
|
14
|
+
properties["rabbitmq.url"]
|
15
|
+
```
|
16
|
+
|
17
|
+
It will also load the properties file referenced in the environment variable `CONFIG_URL` so long as the file exists, or the http(s) URI responds with a 200 status code.
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.4.0
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require "java_properties"
|
2
|
+
require "java_properties/data_types"
|
3
|
+
require "net/http"
|
4
|
+
require "tempfile"
|
5
|
+
|
6
|
+
module Blinkbox
|
7
|
+
class CommonConfig
|
8
|
+
# List of sources where properties have been loaded, with the most important first
|
9
|
+
attr_reader :sources
|
10
|
+
|
11
|
+
# Generates a CommonConfig object assuming that there is a `reference.properties` in the `config_fir` specified. If
|
12
|
+
# an `application.properties` is also present it will load that too (overwriting any repeated property keys) and finally
|
13
|
+
# if the environment variable `CONFIG_URL` is set it will load the properties from that (overwriting the others) whether
|
14
|
+
# the URL is an absolute, relative (to the working directory, not the `config_dir`) or an HTTP URI.
|
15
|
+
#
|
16
|
+
# @param [String] config_dir The directory where a `reference.properties` exists and optionally an `application.conf` exists. Relative paths are taken from the working directory.
|
17
|
+
# @param [#info, NilClass] logger A logger to which information about what properties have been loaded will be sent. Must respond to #info, can also be `nil`.
|
18
|
+
def initialize(config_dir: "config", logger: nil)
|
19
|
+
raise ArgumentError, "The logger given doesn't respond to #info." unless logger.nil? || logger.respond_to?(:info)
|
20
|
+
|
21
|
+
reference_prop_file = File.expand_path(File.join(config_dir, "reference.properties"))
|
22
|
+
application_prop_file = File.expand_path(File.join(config_dir, "application.properties"))
|
23
|
+
raise RuntimeError, "No reference file at #{reference_prop_file}" unless File.exist?(reference_prop_file)
|
24
|
+
|
25
|
+
@options = JavaProperties::Properties.new(reference_prop_file)
|
26
|
+
logger.info "Loaded configuration from #{reference_prop_file}" unless logger.nil?
|
27
|
+
@sources = [reference_prop_file]
|
28
|
+
|
29
|
+
if File.exist?(application_prop_file)
|
30
|
+
@options.load(application_prop_file)
|
31
|
+
logger.info "Loaded configuration from #{application_prop_file}" unless logger.nil?
|
32
|
+
@sources.unshift(application_prop_file)
|
33
|
+
end
|
34
|
+
|
35
|
+
if ENV['CONFIG_URL']
|
36
|
+
if ENV['CONFIG_URL'] =~ %r{^https?://}
|
37
|
+
res = Net::HTTP.get_response(URI.parse(ENV['CONFIG_URL']))
|
38
|
+
raise "The CONFIG_URL points to a resource that returns an HTTP Status code of #{res.code}, not a 200." unless res.code == "200"
|
39
|
+
|
40
|
+
remote_props = Tempfile.new('remote_properties')
|
41
|
+
begin
|
42
|
+
remote_props.write(res.body)
|
43
|
+
remote_props.close
|
44
|
+
@options.load(remote_props)
|
45
|
+
ensure
|
46
|
+
remote_props.unlink
|
47
|
+
end
|
48
|
+
else
|
49
|
+
@options.load(ENV['CONFIG_URL'])
|
50
|
+
end
|
51
|
+
logger.info "Loaded configuration from #{ENV['CONFIG_URL']}" unless logger.nil?
|
52
|
+
@sources.unshift(ENV['CONFIG_URL'])
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Creates a CommonConfig object from a hash.
|
57
|
+
#
|
58
|
+
# @params [Hash] hash The hash which will become the config. Symbol or string key values are cool.
|
59
|
+
def self.from_hash(hash)
|
60
|
+
config = self.allocate
|
61
|
+
config.instance_variable_set(:'@options', hash)
|
62
|
+
config
|
63
|
+
end
|
64
|
+
|
65
|
+
# Accessor for the properties stored in the instance. Accepts strings or symbols indifferently.
|
66
|
+
#
|
67
|
+
# @params [String, Symbol] key The name of the property to retrieve.
|
68
|
+
def [](key)
|
69
|
+
@options[key]
|
70
|
+
end
|
71
|
+
alias :get :[]
|
72
|
+
|
73
|
+
# Retrieves a hash of all properties which are beneath this starting element in the tree.
|
74
|
+
#
|
75
|
+
# # logging.udp.host = "127.0.0.1"
|
76
|
+
# # logging.udp.port = 1234
|
77
|
+
# # logging = this won't be returned
|
78
|
+
#
|
79
|
+
# properties.tree(:logging)
|
80
|
+
# # => { :'udp.host' => "127.0.0.1", :'udp.port' => 1234 }
|
81
|
+
#
|
82
|
+
# properties.tree(:log)
|
83
|
+
# # => {}
|
84
|
+
#
|
85
|
+
# @params [String, Symbol] root The root key to look underneath.
|
86
|
+
# @returns [Hash] Returns a has
|
87
|
+
def tree(root)
|
88
|
+
hash = {}
|
89
|
+
@options.each { |key, value|
|
90
|
+
len = root.length + 1
|
91
|
+
if key.to_s.slice(0, len) == root.to_s + '.'
|
92
|
+
hash[key.to_s[len..-1].to_sym] = value
|
93
|
+
end
|
94
|
+
}
|
95
|
+
hash
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require "ruby_units"
|
2
|
+
|
3
|
+
module JavaProperties
|
4
|
+
module Encoding
|
5
|
+
class << self
|
6
|
+
alias :raw_decode :decode
|
7
|
+
def decode(string)
|
8
|
+
string = raw_decode(string)
|
9
|
+
|
10
|
+
case string
|
11
|
+
when /^:(\w+)$/
|
12
|
+
Regexp.last_match[1].to_sym
|
13
|
+
when /^(?:true|false)$/i
|
14
|
+
string.downcase == "true"
|
15
|
+
when /^\d+\ .+$/
|
16
|
+
Unit(string)
|
17
|
+
when /^\d+$/
|
18
|
+
string.to_i
|
19
|
+
when /^\d+\.\d+$/
|
20
|
+
string.to_f
|
21
|
+
when /^"(.*)"$/
|
22
|
+
Regexp.last_match[1]
|
23
|
+
else
|
24
|
+
string
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: blinkbox-common_config
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- JP Hastings-Spital
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-01-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: java_properties
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ! '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ruby-units
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.4'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.4'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: Simple helper for loading configuration in the blinkbox Books format
|
84
|
+
email:
|
85
|
+
- jphastings@blinkbox.com
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files:
|
89
|
+
- CHANGELOG.md
|
90
|
+
- README.md
|
91
|
+
files:
|
92
|
+
- CHANGELOG.md
|
93
|
+
- README.md
|
94
|
+
- VERSION
|
95
|
+
- lib/blinkbox/common_config.rb
|
96
|
+
- lib/java_properties/data_types.rb
|
97
|
+
homepage: ''
|
98
|
+
licenses: []
|
99
|
+
metadata: {}
|
100
|
+
post_install_message:
|
101
|
+
rdoc_options: []
|
102
|
+
require_paths:
|
103
|
+
- lib
|
104
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - ! '>='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ! '>='
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
requirements: []
|
115
|
+
rubyforge_project:
|
116
|
+
rubygems_version: 2.4.5
|
117
|
+
signing_key:
|
118
|
+
specification_version: 4
|
119
|
+
summary: Simple helper for loading configuration in the blinkbox Books format
|
120
|
+
test_files: []
|