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 ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
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,5 @@
1
+ require 'redis'
2
+ require 'redis/namespace'
3
+ require 'redis/objects'
4
+ require 'redis/value'
5
+ require 'burger_fixins/burger_fixins'
@@ -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
@@ -0,0 +1,4 @@
1
+ require 'rubygems'
2
+ require 'redis'
3
+ $TESTING = true
4
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
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
+