appenv 0.0.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.
@@ -0,0 +1 @@
1
+ .screenrc
@@ -0,0 +1,35 @@
1
+ # APPENV
2
+
3
+ A simple gem that gives you an application environment configuration object.
4
+ Values are loaded from ENV or from an environment file such as `.env`.
5
+
6
+ Similar to the `.env` feature in Foreman, but these values will be available
7
+ to your application no matter how you launch it (script/rails, Passenger,
8
+ Unicorn, rake, etc).
9
+
10
+ For convenience, there is also compatibility with Bash-style environment
11
+ declarations in your `.env` file; ie: `export ENV_VAR_NAME="foo"`.
12
+
13
+ ## Example
14
+
15
+ You'd typically create your configuration object in `config/application.rb`.
16
+
17
+ ```ruby
18
+ module ExampleProjectName
19
+
20
+ Env = AppEnv::Environment.new { |env, src|
21
+ env.domain = src.my_domain_variable || 'example.com'
22
+ env.set(:access_codes) {
23
+ src.access_codes ? src.access_codes.split : nil
24
+ }
25
+ }
26
+
27
+ # class Application < Rails::Application
28
+ # ... etc ...
29
+ #
30
+ # Your config is available globally in ExampleProjectName::Env.
31
+ #
32
+
33
+ end
34
+
35
+ ```
@@ -0,0 +1,10 @@
1
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new { |t|
4
+ t.libs << 'test'
5
+ t.test_files = FileList['test/unit/test*.rb']
6
+ t.verbose = true
7
+ }
8
+
9
+ desc("Run tests")
10
+ task(:default => :test)
@@ -0,0 +1,18 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/appenv/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ['Joseph Pearson']
6
+ gem.email = ['joseph@booki.sh']
7
+ gem.description = 'Environment-variable compatible application configuration.'
8
+ gem.summary = 'Application environment configuration'
9
+ gem.homepage = ''
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = 'appenv'
15
+ gem.require_paths = ['lib']
16
+ gem.version = AppEnv::VERSION
17
+ gem.add_dependency('activesupport')
18
+ end
@@ -0,0 +1,3 @@
1
+ require 'active_support'
2
+ require 'appenv/version'
3
+ require 'appenv/environment'
@@ -0,0 +1,48 @@
1
+ class AppEnv::Environment < ActiveSupport::OrderedOptions
2
+
3
+ def initialize(file = '.env', &blk)
4
+ super()
5
+ @file = file
6
+ source = _compile_source_env
7
+ blk.call(self, source)
8
+ end
9
+
10
+
11
+ def set(property, &blk)
12
+ self.send("#{property}=", blk.call)
13
+ end
14
+
15
+
16
+ private
17
+
18
+ def _compile_source_env
19
+ src = ActiveSupport::OrderedOptions.new
20
+ _source_env_from_file.each_pair { |k, v| src[k] = v; src[k.downcase] = v }
21
+ ENV.each_pair { |k, v| src[k] = v; src[k.downcase] = v }
22
+ src
23
+ end
24
+
25
+
26
+ def _source_env_from_file
27
+ src = {}
28
+ return src unless File.exists?(@file)
29
+ File.open(@file, 'r').each_line { |ln|
30
+ cln = ln.strip.sub(/^export\s+/, '')
31
+ next if cln.match(/^#/)
32
+ if m = cln.match(/\A([A-Za-z_0-9]+)=(.*)\z/)
33
+ k = m[1]
34
+ v = m[2]
35
+ if v =~ /\A'(.*)'\z/
36
+ v = $1
37
+ elsif v =~ /\A"(.*)"\z/
38
+ v = $1.gsub(/\\(.)/, '\1')
39
+ end
40
+ src[k] = v
41
+ else
42
+ raise ".env parse error: #{ln}"
43
+ end
44
+ }
45
+ src
46
+ end
47
+
48
+ end
@@ -0,0 +1,5 @@
1
+ module AppEnv
2
+
3
+ VERSION = '0.0.1'
4
+
5
+ end
@@ -0,0 +1,3 @@
1
+ VAR_ONE="foo"
2
+ export VAR_TWO="bar"
3
+ # VAR_THREE="garply"
@@ -0,0 +1,2 @@
1
+ require 'appenv'
2
+ require 'test/unit'
@@ -0,0 +1,18 @@
1
+ require 'test_helper'
2
+
3
+ class AppEnv::TestEnvironment < Test::Unit::TestCase
4
+
5
+ def test_sanity
6
+ assert_nothing_raised {
7
+ @env = AppEnv::Environment.new('test/data/env') { |env, src|
8
+ env.var1 = src.var_one
9
+ env.set(:var2) { src.var_two }
10
+ env.var3 = src.var_three || 'grault'
11
+ }
12
+ }
13
+ assert_equal('foo', @env.var1)
14
+ assert_equal('bar', @env.var2)
15
+ assert_equal('grault', @env.var3)
16
+ end
17
+
18
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: appenv
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Joseph Pearson
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2012-09-27 00:00:00 +10:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: activesupport
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :runtime
31
+ version_requirements: *id001
32
+ description: Environment-variable compatible application configuration.
33
+ email:
34
+ - joseph@booki.sh
35
+ executables: []
36
+
37
+ extensions: []
38
+
39
+ extra_rdoc_files: []
40
+
41
+ files:
42
+ - .gitignore
43
+ - README.md
44
+ - Rakefile
45
+ - appenv.gemspec
46
+ - lib/appenv.rb
47
+ - lib/appenv/environment.rb
48
+ - lib/appenv/version.rb
49
+ - test/data/env
50
+ - test/test_helper.rb
51
+ - test/unit/test_environment.rb
52
+ has_rdoc: true
53
+ homepage: ""
54
+ licenses: []
55
+
56
+ post_install_message:
57
+ rdoc_options: []
58
+
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ segments:
66
+ - 0
67
+ version: "0"
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ requirements: []
76
+
77
+ rubyforge_project:
78
+ rubygems_version: 1.3.6
79
+ signing_key:
80
+ specification_version: 3
81
+ summary: Application environment configuration
82
+ test_files:
83
+ - test/data/env
84
+ - test/test_helper.rb
85
+ - test/unit/test_environment.rb