burger_fixins 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.
- data/.document +5 -0
- data/README.mdown +41 -0
- data/Rakefile +37 -0
- data/VERSION +1 -0
- data/autotest/discover.rb +1 -0
- data/burger_fixins.gemspec +56 -0
- data/lib/burger_fixins/burger_fixins.rb +83 -0
- data/lib/burger_fixins.rb +5 -0
- data/spec/burger_fixins_spec.rb +59 -0
- data/spec/spec_helper.rb +4 -0
- metadata +139 -0
data/.document
ADDED
data/README.mdown
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# burger_fixins
|
2
|
+
|
3
|
+
Simple, yet, flexible redis-backed site/application settings manager. Works with Rails, Sinatra, or just plain old Ruby.
|
4
|
+
|
5
|
+
There's so many different options for burger fixins.
|
6
|
+
|
7
|
+
## Sample Use
|
8
|
+
|
9
|
+
require 'burger_fixins'
|
10
|
+
|
11
|
+
class SiteSettings
|
12
|
+
include BurgerFixins
|
13
|
+
|
14
|
+
setting :bacon, :boolean
|
15
|
+
setting :lettuce_types, :array
|
16
|
+
setting :burger_limit, :integer
|
17
|
+
end
|
18
|
+
|
19
|
+
SiteSettings.bacon = true
|
20
|
+
SiteSettings.bacon #=> true
|
21
|
+
SiteSettings.lettuce_types = ['iceberg', 'romaine']
|
22
|
+
SiteSettings.lettuce_types #=> ["iceberg", "romaine"]
|
23
|
+
|
24
|
+
## Notes
|
25
|
+
|
26
|
+
* redis/objects is used so you can store complex data types.
|
27
|
+
* redis/namespace is used so that you can create multiple settings classes (APISettings, SiteSettings, GuestSettings).
|
28
|
+
|
29
|
+
## Note on Patches/Pull Requests
|
30
|
+
|
31
|
+
* Fork the project.
|
32
|
+
* Make your feature addition or bug fix.
|
33
|
+
* Add tests for it. This is important so I don't break it in a
|
34
|
+
future version unintentionally.
|
35
|
+
* Commit, do not mess with rakefile, version, or history.
|
36
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
37
|
+
* Send me a pull request. Bonus points for topic branches.
|
38
|
+
|
39
|
+
## Copyright
|
40
|
+
|
41
|
+
Copyright (c) 2011 Patrick Tulskie. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "burger_fixins"
|
8
|
+
gem.summary = %Q{Simple gem for creating site-wide or application settings.}
|
9
|
+
gem.description = %Q{Simple, yet, flexible redis-backed site/application settings manager. Works with Rails, Sinatra, or just plain old Ruby.}
|
10
|
+
gem.email = "patricktulskie@gmail.com"
|
11
|
+
gem.homepage = "http://github.com/PatrickTulskie/burger_fixins"
|
12
|
+
gem.authors = ["Patrick Tulskie"]
|
13
|
+
gem.files.include 'burger_fixins.gemspec'
|
14
|
+
gem.add_development_dependency "rspec", ">= 2.5.0"
|
15
|
+
gem.add_dependency "redis", ">= 2.2.0"
|
16
|
+
gem.add_dependency "redis-namespace", ">= 0.10.0"
|
17
|
+
gem.add_dependency "redis-objects", ">= 0.5.0"
|
18
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
19
|
+
end
|
20
|
+
Jeweler::GemcutterTasks.new
|
21
|
+
rescue LoadError
|
22
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
23
|
+
end
|
24
|
+
|
25
|
+
task :test => :check_dependencies
|
26
|
+
|
27
|
+
task :default => :test
|
28
|
+
|
29
|
+
require 'rake/rdoctask'
|
30
|
+
Rake::RDocTask.new do |rdoc|
|
31
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
32
|
+
|
33
|
+
rdoc.rdoc_dir = 'rdoc'
|
34
|
+
rdoc.title = "burger_fixins #{version}"
|
35
|
+
rdoc.rdoc_files.include('README*')
|
36
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
37
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
@@ -0,0 +1 @@
|
|
1
|
+
Autotest.add_discovery { "rspec2" }
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{burger_fixins}
|
8
|
+
s.version = "0.0.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Patrick Tulskie"]
|
12
|
+
s.date = %q{2011-05-04}
|
13
|
+
s.description = %q{Simple, yet, flexible redis-backed site/application settings manager. Works with Rails, Sinatra, or just plain old Ruby.}
|
14
|
+
s.email = %q{patricktulskie@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README.mdown"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".document",
|
20
|
+
"README.mdown",
|
21
|
+
"Rakefile",
|
22
|
+
"VERSION",
|
23
|
+
"autotest/discover.rb",
|
24
|
+
"burger_fixins.gemspec",
|
25
|
+
"lib/burger_fixins.rb",
|
26
|
+
"lib/burger_fixins/burger_fixins.rb",
|
27
|
+
"spec/burger_fixins_spec.rb",
|
28
|
+
"spec/spec_helper.rb"
|
29
|
+
]
|
30
|
+
s.homepage = %q{http://github.com/PatrickTulskie/burger_fixins}
|
31
|
+
s.require_paths = ["lib"]
|
32
|
+
s.rubygems_version = %q{1.5.3}
|
33
|
+
s.summary = %q{Simple gem for creating site-wide or application settings.}
|
34
|
+
|
35
|
+
if s.respond_to? :specification_version then
|
36
|
+
s.specification_version = 3
|
37
|
+
|
38
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
39
|
+
s.add_development_dependency(%q<rspec>, [">= 2.5.0"])
|
40
|
+
s.add_runtime_dependency(%q<redis>, [">= 2.2.0"])
|
41
|
+
s.add_runtime_dependency(%q<redis-namespace>, [">= 0.10.0"])
|
42
|
+
s.add_runtime_dependency(%q<redis-objects>, [">= 0.5.0"])
|
43
|
+
else
|
44
|
+
s.add_dependency(%q<rspec>, [">= 2.5.0"])
|
45
|
+
s.add_dependency(%q<redis>, [">= 2.2.0"])
|
46
|
+
s.add_dependency(%q<redis-namespace>, [">= 0.10.0"])
|
47
|
+
s.add_dependency(%q<redis-objects>, [">= 0.5.0"])
|
48
|
+
end
|
49
|
+
else
|
50
|
+
s.add_dependency(%q<rspec>, [">= 2.5.0"])
|
51
|
+
s.add_dependency(%q<redis>, [">= 2.2.0"])
|
52
|
+
s.add_dependency(%q<redis-namespace>, [">= 0.10.0"])
|
53
|
+
s.add_dependency(%q<redis-objects>, [">= 0.5.0"])
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
@@ -0,0 +1,83 @@
|
|
1
|
+
module BurgerFixins
|
2
|
+
|
3
|
+
def self.included(a_module)
|
4
|
+
a_module.module_eval do
|
5
|
+
extend ClassMethods
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
def redis_instance
|
11
|
+
$fixins_storage ||= Redis.current
|
12
|
+
end
|
13
|
+
|
14
|
+
def settings_store
|
15
|
+
Redis::Namespace.new(self.to_s, :redis => redis_instance)
|
16
|
+
end
|
17
|
+
|
18
|
+
def setting(setting_name, setting_type = :value)
|
19
|
+
case setting_type
|
20
|
+
when :string
|
21
|
+
create_burger_fixins_string(setting_name)
|
22
|
+
when :integer
|
23
|
+
create_burger_fixins_integer(setting_name)
|
24
|
+
when :array
|
25
|
+
create_burger_fixins_array(setting_name)
|
26
|
+
when :hash
|
27
|
+
create_burger_fixins_hash(setting_name)
|
28
|
+
when :boolean
|
29
|
+
create_burger_fixins_boolean(setting_name)
|
30
|
+
else
|
31
|
+
create_burger_fixins_value(setting_name)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def create_burger_fixins_string(setting_name)
|
38
|
+
module_eval <<-STR
|
39
|
+
def self.#{setting_name}; settings_store['#{setting_name.to_s}'] ; end
|
40
|
+
def self.#{setting_name}=(v); settings_store['#{setting_name.to_s}'] = v ; end
|
41
|
+
STR
|
42
|
+
end
|
43
|
+
|
44
|
+
def create_burger_fixins_integer(setting_name)
|
45
|
+
module_eval <<-STR
|
46
|
+
def self.#{setting_name}; settings_store['#{setting_name.to_s}'].to_i ; end
|
47
|
+
def self.#{setting_name}=(v); settings_store['#{setting_name.to_s}'] = v.to_i ; end
|
48
|
+
STR
|
49
|
+
end
|
50
|
+
|
51
|
+
# TODO Consider moving this over to Redis::List
|
52
|
+
def create_burger_fixins_array(setting_name)
|
53
|
+
module_eval <<-STR
|
54
|
+
def self.#{setting_name}; Redis::Value.new('#{setting_name}', settings_store, :marshal => true).value ; end
|
55
|
+
def self.#{setting_name}=(v); Redis::Value.new('#{setting_name}', settings_store, :marshal => true).value = v ; end
|
56
|
+
STR
|
57
|
+
end
|
58
|
+
|
59
|
+
# TODO Consider moving this over to Redis::HashKey
|
60
|
+
def create_burger_fixins_hash(setting_name)
|
61
|
+
module_eval <<-STR
|
62
|
+
def self.#{setting_name}; Redis::Value.new('#{setting_name}', settings_store, :marshal => true).value ; end
|
63
|
+
def self.#{setting_name}=(v); Redis::Value.new('#{setting_name}', settings_store, :marshal => true).value = v ; end
|
64
|
+
STR
|
65
|
+
end
|
66
|
+
|
67
|
+
def create_burger_fixins_boolean(setting_name)
|
68
|
+
module_eval <<-STR
|
69
|
+
def self.#{setting_name}; Redis::Value.new('#{setting_name}', settings_store).value ; end
|
70
|
+
def self.#{setting_name}=(v); Redis::Value.new('#{setting_name}', settings_store).value = v ; end
|
71
|
+
def self.#{setting_name}?; !!settings_store['#{setting_name.to_s}'] ; end
|
72
|
+
STR
|
73
|
+
end
|
74
|
+
|
75
|
+
def create_burger_fixins_value(setting_name)
|
76
|
+
module_eval <<-STR
|
77
|
+
def self.#{setting_name}; Redis::Value.new('#{setting_name}', settings_store, :marshal => true).value ; end
|
78
|
+
def self.#{setting_name}=(v); Redis::Value.new('#{setting_name}', settings_store, :marshal => true).value = v ; end
|
79
|
+
STR
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'burger_fixins'
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
describe 'burger_fixins' do
|
6
|
+
|
7
|
+
before(:all) do
|
8
|
+
class TestSettings
|
9
|
+
include BurgerFixins
|
10
|
+
|
11
|
+
setting :bacon, :boolean
|
12
|
+
setting :lettuce_types, :array
|
13
|
+
setting :burger_limit, :integer
|
14
|
+
|
15
|
+
def self.redis_instance
|
16
|
+
Redis.new(:db => 15)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
before(:each) do
|
22
|
+
TestSettings.redis_instance.flushdb
|
23
|
+
end
|
24
|
+
|
25
|
+
after(:each) do
|
26
|
+
TestSettings.redis_instance.flushdb
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should save a setting" do
|
30
|
+
TestSettings.bacon = true
|
31
|
+
Redis.new(:db => 15)['TestSettings:bacon'].should == "true"
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should retrieve a setting" do
|
35
|
+
TestSettings.bacon = true
|
36
|
+
TestSettings.bacon.should be_true
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should answer boolean questions" do
|
40
|
+
TestSettings.bacon = true
|
41
|
+
TestSettings.bacon?.should == true
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should not break arrays" do
|
45
|
+
TestSettings.lettuce_types = ['foo', 'bar']
|
46
|
+
TestSettings.lettuce_types.should == ['foo', 'bar']
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should not break hashes" do
|
50
|
+
TestSettings.lettuce_types = { :type1 => 'iceberg' }
|
51
|
+
TestSettings.lettuce_types.should == { :type1 => 'iceberg' }
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should return proper integers" do
|
55
|
+
TestSettings.burger_limit = 20
|
56
|
+
TestSettings.burger_limit.should == 20
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: burger_fixins
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Patrick Tulskie
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-05-04 00:00:00 -04:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: rspec
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 27
|
30
|
+
segments:
|
31
|
+
- 2
|
32
|
+
- 5
|
33
|
+
- 0
|
34
|
+
version: 2.5.0
|
35
|
+
type: :development
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: redis
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 7
|
46
|
+
segments:
|
47
|
+
- 2
|
48
|
+
- 2
|
49
|
+
- 0
|
50
|
+
version: 2.2.0
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: redis-namespace
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 55
|
62
|
+
segments:
|
63
|
+
- 0
|
64
|
+
- 10
|
65
|
+
- 0
|
66
|
+
version: 0.10.0
|
67
|
+
type: :runtime
|
68
|
+
version_requirements: *id003
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: redis-objects
|
71
|
+
prerelease: false
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
hash: 11
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
- 5
|
81
|
+
- 0
|
82
|
+
version: 0.5.0
|
83
|
+
type: :runtime
|
84
|
+
version_requirements: *id004
|
85
|
+
description: Simple, yet, flexible redis-backed site/application settings manager. Works with Rails, Sinatra, or just plain old Ruby.
|
86
|
+
email: patricktulskie@gmail.com
|
87
|
+
executables: []
|
88
|
+
|
89
|
+
extensions: []
|
90
|
+
|
91
|
+
extra_rdoc_files:
|
92
|
+
- README.mdown
|
93
|
+
files:
|
94
|
+
- .document
|
95
|
+
- README.mdown
|
96
|
+
- Rakefile
|
97
|
+
- VERSION
|
98
|
+
- autotest/discover.rb
|
99
|
+
- burger_fixins.gemspec
|
100
|
+
- lib/burger_fixins.rb
|
101
|
+
- lib/burger_fixins/burger_fixins.rb
|
102
|
+
- spec/burger_fixins_spec.rb
|
103
|
+
- spec/spec_helper.rb
|
104
|
+
has_rdoc: true
|
105
|
+
homepage: http://github.com/PatrickTulskie/burger_fixins
|
106
|
+
licenses: []
|
107
|
+
|
108
|
+
post_install_message:
|
109
|
+
rdoc_options: []
|
110
|
+
|
111
|
+
require_paths:
|
112
|
+
- lib
|
113
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
hash: 3
|
119
|
+
segments:
|
120
|
+
- 0
|
121
|
+
version: "0"
|
122
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
hash: 3
|
128
|
+
segments:
|
129
|
+
- 0
|
130
|
+
version: "0"
|
131
|
+
requirements: []
|
132
|
+
|
133
|
+
rubyforge_project:
|
134
|
+
rubygems_version: 1.5.3
|
135
|
+
signing_key:
|
136
|
+
specification_version: 3
|
137
|
+
summary: Simple gem for creating site-wide or application settings.
|
138
|
+
test_files: []
|
139
|
+
|