mattock 0.2.9 → 0.2.10
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/mattock/configuration-store.rb +80 -0
- data/spec/configuration-store.rb +24 -0
- metadata +8 -8
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'valise'
|
2
|
+
|
3
|
+
module Mattock
|
4
|
+
#Configuration for the set of Tasklibs - useful for when there are settings
|
5
|
+
#that shouldn't be part of the Rakefile, or are specific to a particular
|
6
|
+
#environment rather than a set of tasks - e.g. specific to each developer's
|
7
|
+
#laptop or the server.
|
8
|
+
#
|
9
|
+
#@example How to Use:
|
10
|
+
# module CoolTasks
|
11
|
+
# def config
|
12
|
+
# @config ||= Mattock::ConfigurationStore.new("cool_tasks")
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# def preferences
|
16
|
+
# config.loaded["preferences.yaml"]
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# class AwesomeLib < Mattock::Tasklib
|
20
|
+
# setting :level, CoolTasks.preferences[:level]
|
21
|
+
# end
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
#@example In Rakefile
|
25
|
+
# CoolTasks.config.register_search_path(__FILE__)
|
26
|
+
#
|
27
|
+
#Having done that, any preferences.yaml file in any of several directories
|
28
|
+
#will get merged into a single hash and be available as CoolTasks.preferences
|
29
|
+
#
|
30
|
+
#The search path will look like:
|
31
|
+
#
|
32
|
+
# * /etc/mattock
|
33
|
+
# * /etc/cool_tasks
|
34
|
+
# * /usr/share/mattock
|
35
|
+
# * /usr/share/cool_tasks
|
36
|
+
# * ~/.mattock
|
37
|
+
# * ~/.cool_tasks
|
38
|
+
# * <Rakefile_dir>/.cool_tasks
|
39
|
+
#
|
40
|
+
# Each file found will be merged into the running hash, so preferences.yaml
|
41
|
+
# in the project dir will be able to override everything.
|
42
|
+
#
|
43
|
+
#Last bonus: any file can be added into that search path, and the 'closest'
|
44
|
+
#one will be found and returned by config.loaded[filename]
|
45
|
+
class ConfigurationStore
|
46
|
+
#@param [String] app_name The path component to represent this gem -
|
47
|
+
# consider downcasing your root module
|
48
|
+
#@param [String] library_default_dir If present, a directory containing
|
49
|
+
# default files that come in the gem
|
50
|
+
def initialize(app_name, library_default_dir = nil)
|
51
|
+
@app_name = app_name
|
52
|
+
@valise = Valise::Set.define do
|
53
|
+
rw "~/.#{@app_name}"
|
54
|
+
rw "~/.mattock"
|
55
|
+
rw "/usr/share/#{@app_name}"
|
56
|
+
rw "/usr/share/mattock"
|
57
|
+
rw "/etc/#{@app_name}"
|
58
|
+
rw "/etc/mattock"
|
59
|
+
ro library_default_dir unless library_default_dir.nil?
|
60
|
+
ro from_here("default_configuration")
|
61
|
+
|
62
|
+
handle "preferences.yaml", :yaml, :hash_merge
|
63
|
+
end
|
64
|
+
|
65
|
+
@loaded ||= Hash.new{|h,k| h[k] = @valise.find(k).contents}
|
66
|
+
end
|
67
|
+
|
68
|
+
attr_reader :loaded, :valise
|
69
|
+
|
70
|
+
def register_search_path(from_file)
|
71
|
+
directory = File::expand_path("../.#{@app_name}", from_file)
|
72
|
+
@valise.prepend_search_root(Valise::SearchRoot.new(directory))
|
73
|
+
loaded.clear
|
74
|
+
end
|
75
|
+
|
76
|
+
def user_preferences
|
77
|
+
loaded["preferences.yaml"]
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'mattock/configuration-store'
|
2
|
+
require 'file-sandbox'
|
3
|
+
|
4
|
+
describe Mattock::ConfigurationStore do
|
5
|
+
include FileSandbox
|
6
|
+
let :store do
|
7
|
+
described_class.new("test", "default_configs").tap do |store|
|
8
|
+
store.register_search_path('./Rakefile')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
before :each do
|
13
|
+
sandbox["default_configs/preferences.yaml"].contents = YAML::dump({"defaults" => "a", "local" => "b"})
|
14
|
+
sandbox[".test/preferences.yaml"].contents = YAML::dump({"local" => "c"})
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should make default configs available" do
|
18
|
+
store.user_preferences["defaults"].should == "a"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should make local configs available" do
|
22
|
+
store.user_preferences["local"].should == "c"
|
23
|
+
end
|
24
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: mattock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.2.
|
5
|
+
version: 0.2.10
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Judson Lester
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-03-
|
13
|
+
date: 2012-03-08 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: corundum
|
@@ -28,11 +28,9 @@ dependencies:
|
|
28
28
|
requirement: &id002 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
|
34
|
-
- 0
|
35
|
-
version: "0"
|
33
|
+
version: "0.6"
|
36
34
|
type: :runtime
|
37
35
|
prerelease: false
|
38
36
|
version_requirements: *id002
|
@@ -77,6 +75,7 @@ files:
|
|
77
75
|
- lib/mattock/tasklib.rb
|
78
76
|
- lib/mattock/task.rb
|
79
77
|
- lib/mattock/configurable.rb
|
78
|
+
- lib/mattock/configuration-store.rb
|
80
79
|
- lib/mattock/cascading-definition.rb
|
81
80
|
- lib/mattock.rb
|
82
81
|
- doc/README
|
@@ -85,6 +84,7 @@ files:
|
|
85
84
|
- spec/command-task.rb
|
86
85
|
- spec/tasklib.rb
|
87
86
|
- spec/configurable.rb
|
87
|
+
- spec/configuration-store.rb
|
88
88
|
- spec/yard-extensions.rb
|
89
89
|
- spec/template-host.rb
|
90
90
|
- spec_help/spec_helper.rb
|
@@ -98,7 +98,7 @@ rdoc_options:
|
|
98
98
|
- --main
|
99
99
|
- doc/README
|
100
100
|
- --title
|
101
|
-
- mattock-0.2.
|
101
|
+
- mattock-0.2.10 RDoc
|
102
102
|
require_paths:
|
103
103
|
- lib/
|
104
104
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -106,7 +106,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
106
106
|
requirements:
|
107
107
|
- - ">="
|
108
108
|
- !ruby/object:Gem::Version
|
109
|
-
hash:
|
109
|
+
hash: -164997549
|
110
110
|
segments:
|
111
111
|
- 0
|
112
112
|
version: "0"
|