switches 0.1.6 → 0.1.7
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.
- data/README.rdoc +1 -1
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/switches.rb +67 -49
- data/switches.gemspec +6 -6
- metadata +29 -14
data/README.rdoc
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Switches lets you turn on and off sections of your code with <tt>Switches.foobar?</tt> booleans.
|
4
4
|
|
5
|
-
It's an extraction from
|
5
|
+
It's an extraction from http://brighterplanet.com, where we use it as an emergency button to turn on/off API integration with Facebook, Campaign Monitor, etc.
|
6
6
|
|
7
7
|
== Quick start
|
8
8
|
|
data/Rakefile
CHANGED
@@ -35,7 +35,7 @@ It's inspired by ActiveSupport's StringInquirer (e.g. Rails.development?) and tr
|
|
35
35
|
gem.authors = ["Seamus Abshere"]
|
36
36
|
gem.rubyforge_project = "switches"
|
37
37
|
gem.add_development_dependency "rspec", ">= 1.2.9"
|
38
|
-
gem.add_dependency
|
38
|
+
gem.add_dependency 'activesupport', '>=2.3.4'
|
39
39
|
end
|
40
40
|
Jeweler::GemcutterTasks.new
|
41
41
|
Jeweler::RubyforgeTasks.new do |rubyforge|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.7
|
data/lib/switches.rb
CHANGED
@@ -2,21 +2,39 @@ require 'yaml'
|
|
2
2
|
require 'pp'
|
3
3
|
require 'fileutils'
|
4
4
|
require 'active_support'
|
5
|
-
|
6
|
-
# TODO not agnostic, expects RAILS_ROOT
|
5
|
+
require 'active_support/core_ext/module/attribute_accessors'
|
7
6
|
|
8
7
|
module Switches
|
9
|
-
|
10
|
-
RAKE_PATH = File.join RAILS_ROOT, 'lib', 'tasks', 'switches.rake'
|
11
|
-
CAPISTRANO_PATH = File.join CONFIG_DIR, 'capistrano_tasks.rb'
|
12
|
-
CAPISTRANO_LOAD_PATH = CAPISTRANO_PATH.gsub "#{RAILS_ROOT}/", '' # => 'config/switches/capistrano_tasks.rb'
|
13
|
-
CAPFILE_PATH = File.join RAILS_ROOT, 'Capfile'
|
14
|
-
CURRENT_PATH = File.join CONFIG_DIR, 'current.yml'
|
15
|
-
DEFAULT_PATH = File.join CONFIG_DIR, 'default.yml'
|
16
|
-
BACKUP_PATH = File.join CONFIG_DIR, 'backup.yml'
|
17
|
-
TRANSACTION_PID_PATH = File.join CONFIG_DIR, 'transaction.pid'
|
18
|
-
|
8
|
+
mattr_accessor :root_path
|
19
9
|
class << self
|
10
|
+
def config_dir
|
11
|
+
@_config_dir ||= File.join root_path, 'config', 'switches'
|
12
|
+
end
|
13
|
+
def rake_path
|
14
|
+
@_rake_path ||= File.join root_path, 'lib', 'tasks', 'switches.rake'
|
15
|
+
end
|
16
|
+
def capistrano_path
|
17
|
+
@_capistrano_path ||= File.join config_dir, 'capistrano_tasks.rb'
|
18
|
+
end
|
19
|
+
def capistrano_load_path
|
20
|
+
@_capistrano_load_path ||= capistrano_path.gsub "#{root_path}/", '' # => 'config/switches/capistrano_tasks.rb'
|
21
|
+
end
|
22
|
+
def capfile_path
|
23
|
+
@_capfile_path ||= File.join root_path, 'Capfile'
|
24
|
+
end
|
25
|
+
def current_path
|
26
|
+
@_current_path ||= File.join config_dir, 'current.yml'
|
27
|
+
end
|
28
|
+
def default_path
|
29
|
+
@_default_path ||= File.join config_dir, 'default.yml'
|
30
|
+
end
|
31
|
+
def backup_path
|
32
|
+
@_backup_path ||= File.join config_dir, 'backup.yml'
|
33
|
+
end
|
34
|
+
def transaction_pid_path
|
35
|
+
@_transaction_pid_path ||= File.join config_dir, 'transaction.pid'
|
36
|
+
end
|
37
|
+
|
20
38
|
def dump(method)
|
21
39
|
if ENV['SWITCHES_XML'] == 'true'
|
22
40
|
puts send(method).to_xml
|
@@ -26,48 +44,48 @@ module Switches
|
|
26
44
|
end
|
27
45
|
|
28
46
|
def say(str)
|
29
|
-
$stderr.puts "[SWITCHES GEM] #{str.gsub "#{
|
47
|
+
$stderr.puts "[SWITCHES GEM] #{str.gsub "#{root_path}/", ''}"
|
30
48
|
end
|
31
49
|
|
32
50
|
def setup
|
33
|
-
say "Making #{
|
34
|
-
FileUtils.mkdir_p
|
51
|
+
say "Making #{config_dir}."
|
52
|
+
FileUtils.mkdir_p config_dir
|
35
53
|
|
36
|
-
if File.exists?
|
37
|
-
say "Not putting an example default.yml into #{
|
54
|
+
if File.exists? default_path
|
55
|
+
say "Not putting an example default.yml into #{default_path} because you already have one."
|
38
56
|
else
|
39
|
-
say "Putting an example default.yml into #{
|
40
|
-
File.open(
|
57
|
+
say "Putting an example default.yml into #{default_path}."
|
58
|
+
File.open(default_path, 'w') { |f| f.write({ 'quick_brown' => true, 'fox_jumps' => false }.to_yaml) }
|
41
59
|
end
|
42
60
|
|
43
|
-
say "Refreshing gem-related Rake tasks at #{
|
44
|
-
FileUtils.cp File.join(File.dirname(__FILE__), 'tasks', 'switches.rake'),
|
61
|
+
say "Refreshing gem-related Rake tasks at #{rake_path}."
|
62
|
+
FileUtils.cp File.join(File.dirname(__FILE__), 'tasks', 'switches.rake'), rake_path
|
45
63
|
|
46
|
-
say "Refreshing gem-related Capistrano tasks at #{
|
47
|
-
FileUtils.cp File.join(File.dirname(__FILE__), 'tasks', 'capistrano_tasks.rb'),
|
64
|
+
say "Refreshing gem-related Capistrano tasks at #{capistrano_path}."
|
65
|
+
FileUtils.cp File.join(File.dirname(__FILE__), 'tasks', 'capistrano_tasks.rb'), capistrano_path
|
48
66
|
|
49
67
|
needs_append = false
|
50
|
-
if not File.exists?(
|
68
|
+
if not File.exists?(capfile_path)
|
51
69
|
say "Creating a Capfile and including our tasks in it."
|
52
70
|
needs_append = true
|
53
|
-
FileUtils.touch
|
54
|
-
elsif old_capfile = IO.read(
|
71
|
+
FileUtils.touch capfile_path
|
72
|
+
elsif old_capfile = IO.read(capfile_path) and old_capfile.include?(capistrano_load_path)
|
55
73
|
say "Found a Capfile that already includes our tasks. Great!"
|
56
74
|
else
|
57
75
|
say "I'm going to add a line to your existing Capfile. Sorry if I break anything!"
|
58
76
|
needs_append = true
|
59
77
|
end
|
60
78
|
|
61
|
-
File.open(
|
79
|
+
File.open(capfile_path, 'a') do |f|
|
62
80
|
say "Appending a line that loads our Capistrano tasks to your Capfile."
|
63
|
-
f.write "\n# Added by switches gem #{Time.now}\nload '#{
|
81
|
+
f.write "\n# Added by switches gem #{Time.now}\nload '#{capistrano_load_path}'\n"
|
64
82
|
end if needs_append
|
65
83
|
|
66
84
|
say "Don't forget to:"
|
67
|
-
say "* git add #{
|
68
|
-
say "* git add #{
|
69
|
-
say "* git ignore #{
|
70
|
-
say "* git ignore #{
|
85
|
+
say "* git add #{default_path}"
|
86
|
+
say "* git add #{rake_path}"
|
87
|
+
say "* git ignore #{capistrano_path}"
|
88
|
+
say "* git ignore #{current_path}"
|
71
89
|
say "You can refresh the gem tasks with Switches.setup. It won't touch anything else."
|
72
90
|
end
|
73
91
|
|
@@ -92,12 +110,12 @@ module Switches
|
|
92
110
|
|
93
111
|
def default
|
94
112
|
return @_default unless @_default.nil?
|
95
|
-
# say "file system activity #{
|
113
|
+
# say "file system activity #{default_path}"
|
96
114
|
resolve_transaction!
|
97
|
-
@_default = YAML.load(IO.read(
|
115
|
+
@_default = YAML.load(IO.read(default_path))
|
98
116
|
@_default.stringify_keys!
|
99
117
|
rescue Errno::ENOENT
|
100
|
-
say "Couldn't read defaults from #{
|
118
|
+
say "Couldn't read defaults from #{default_path}."
|
101
119
|
say "You probably want to run \"./script/runner 'Switches.setup'\"."
|
102
120
|
raise $!
|
103
121
|
end
|
@@ -105,9 +123,9 @@ module Switches
|
|
105
123
|
def current
|
106
124
|
return @_current unless @_current.nil?
|
107
125
|
resolve_transaction!
|
108
|
-
if File.exist?(
|
109
|
-
# say "file system activity #{
|
110
|
-
@_current = YAML.load(IO.read(
|
126
|
+
if File.exist?(current_path)
|
127
|
+
# say "file system activity #{current_path}"
|
128
|
+
@_current = YAML.load(IO.read(current_path))
|
111
129
|
@_current.stringify_keys!
|
112
130
|
else
|
113
131
|
@_current = default.dup
|
@@ -151,22 +169,22 @@ module Switches
|
|
151
169
|
end
|
152
170
|
|
153
171
|
def reset
|
154
|
-
FileUtils.rm_f
|
172
|
+
FileUtils.rm_f current_path
|
155
173
|
@_current = nil
|
156
174
|
end
|
157
175
|
|
158
176
|
def backup
|
159
177
|
write_current
|
160
178
|
start_transaction!
|
161
|
-
# say "file system activity #{
|
162
|
-
FileUtils.cp
|
179
|
+
# say "file system activity #{backup_path}"
|
180
|
+
FileUtils.cp current_path, backup_path
|
163
181
|
end
|
164
182
|
|
165
183
|
def restore
|
166
|
-
if File.exist?(
|
167
|
-
FileUtils.mv
|
184
|
+
if File.exist?(backup_path)
|
185
|
+
FileUtils.mv backup_path, current_path
|
168
186
|
else
|
169
|
-
raise ArgumentError, "#{
|
187
|
+
raise ArgumentError, "#{backup_path} doesn't exist."
|
170
188
|
end
|
171
189
|
end_transaction!
|
172
190
|
@_current = nil
|
@@ -174,12 +192,12 @@ module Switches
|
|
174
192
|
|
175
193
|
def write_current
|
176
194
|
current # load it first!
|
177
|
-
File.open(
|
195
|
+
File.open(current_path, 'w') { |f| f.write current.stringify_keys.to_yaml }
|
178
196
|
end
|
179
197
|
|
180
198
|
def transaction_pid
|
181
|
-
# say "file system activity #{
|
182
|
-
IO.readlines(
|
199
|
+
# say "file system activity #{transaction_pid_path}"
|
200
|
+
IO.readlines(transaction_pid_path).first.chomp.to_i if File.exists?(transaction_pid_path)
|
183
201
|
end
|
184
202
|
|
185
203
|
def resolve_transaction!
|
@@ -192,12 +210,12 @@ module Switches
|
|
192
210
|
def start_transaction!
|
193
211
|
resolve_transaction!
|
194
212
|
say "Starting transaction"
|
195
|
-
File.open(
|
213
|
+
File.open(transaction_pid_path, 'w') { |f| f.write Process.pid }
|
196
214
|
end
|
197
215
|
|
198
216
|
def end_transaction!
|
199
217
|
say "Finishing transaction"
|
200
|
-
FileUtils.rm_f
|
218
|
+
FileUtils.rm_f transaction_pid_path
|
201
219
|
end
|
202
220
|
end
|
203
221
|
end
|
data/switches.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{switches}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.7"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Seamus Abshere"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2010-03-30}
|
13
13
|
s.description = %q{
|
14
14
|
Switches lets you turn on and off parts of your code from the commandline. There's a defaults.yml and a current.yml in the background.
|
15
15
|
|
@@ -58,7 +58,7 @@ It's inspired by ActiveSupport's StringInquirer (e.g. Rails.development?) and tr
|
|
58
58
|
s.rdoc_options = ["--charset=UTF-8"]
|
59
59
|
s.require_paths = ["lib"]
|
60
60
|
s.rubyforge_project = %q{switches}
|
61
|
-
s.rubygems_version = %q{1.3.
|
61
|
+
s.rubygems_version = %q{1.3.6}
|
62
62
|
s.summary = %q{Turn on and off parts of your code based on yaml files.}
|
63
63
|
s.test_files = [
|
64
64
|
"spec/spec_helper.rb",
|
@@ -71,14 +71,14 @@ It's inspired by ActiveSupport's StringInquirer (e.g. Rails.development?) and tr
|
|
71
71
|
|
72
72
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
73
73
|
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
74
|
-
s.add_runtime_dependency(%q<activesupport>, [">=
|
74
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 2.3.4"])
|
75
75
|
else
|
76
76
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
77
|
-
s.add_dependency(%q<activesupport>, [">=
|
77
|
+
s.add_dependency(%q<activesupport>, [">= 2.3.4"])
|
78
78
|
end
|
79
79
|
else
|
80
80
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
81
|
-
s.add_dependency(%q<activesupport>, [">=
|
81
|
+
s.add_dependency(%q<activesupport>, [">= 2.3.4"])
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: switches
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 7
|
9
|
+
version: 0.1.7
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Seamus Abshere
|
@@ -9,29 +14,37 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date:
|
17
|
+
date: 2010-03-30 00:00:00 -04:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: rspec
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 2
|
30
|
+
- 9
|
23
31
|
version: 1.2.9
|
24
|
-
|
32
|
+
type: :development
|
33
|
+
version_requirements: *id001
|
25
34
|
- !ruby/object:Gem::Dependency
|
26
35
|
name: activesupport
|
27
|
-
|
28
|
-
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
38
|
requirements:
|
31
39
|
- - ">="
|
32
40
|
- !ruby/object:Gem::Version
|
33
|
-
|
34
|
-
|
41
|
+
segments:
|
42
|
+
- 2
|
43
|
+
- 3
|
44
|
+
- 4
|
45
|
+
version: 2.3.4
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
35
48
|
description: "\n\
|
36
49
|
Switches lets you turn on and off parts of your code from the commandline. There's a defaults.yml and a current.yml in the background.\n\n\
|
37
50
|
For example:\n\
|
@@ -83,18 +96,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
83
96
|
requirements:
|
84
97
|
- - ">="
|
85
98
|
- !ruby/object:Gem::Version
|
99
|
+
segments:
|
100
|
+
- 0
|
86
101
|
version: "0"
|
87
|
-
version:
|
88
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
103
|
requirements:
|
90
104
|
- - ">="
|
91
105
|
- !ruby/object:Gem::Version
|
106
|
+
segments:
|
107
|
+
- 0
|
92
108
|
version: "0"
|
93
|
-
version:
|
94
109
|
requirements: []
|
95
110
|
|
96
111
|
rubyforge_project: switches
|
97
|
-
rubygems_version: 1.3.
|
112
|
+
rubygems_version: 1.3.6
|
98
113
|
signing_key:
|
99
114
|
specification_version: 3
|
100
115
|
summary: Turn on and off parts of your code based on yaml files.
|