current_instance 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in current_instance.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,43 @@
1
+ # Thread Safe Current Class Instance
2
+
3
+ ## Implementation
4
+
5
+ Include the gem:
6
+
7
+ gem 'current_instance'
8
+
9
+ Use Like So:
10
+
11
+ ~~~ruby
12
+ class User < ActiveRecord::Base
13
+ include CurrentInstance
14
+ end
15
+ ~~~
16
+
17
+ ## Function
18
+
19
+ Set User.current by assigning an object
20
+
21
+ ~~~ruby
22
+ User.current = User.first
23
+ User.current #=> <User id: 1, name: "Flinn"...>
24
+
25
+ User.current = nil
26
+ User.current #=> nil
27
+ ~~~
28
+
29
+ Set Food.current by id
30
+
31
+ ~~~ruby
32
+ Food.current_id #=> nil
33
+ Food.current_id = 1
34
+ Food.current #=> <Food id: 1, name: "Fondue"...>
35
+
36
+ Food.current_id = nil
37
+ Food.current #=> nil
38
+ ~~~
39
+
40
+ ## TODO
41
+
42
+ * Tests
43
+ * Caching
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.pattern = "spec/*_spec.rb"
7
+ end
8
+
9
+ task default: :test
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/current_instance/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Quinn"]
6
+ gem.email = ["chaffeqa@gmail.com"]
7
+ gem.description = %q{Thread Safe Current Class Instance}
8
+ gem.summary = <<-DOC
9
+ Thread Safe Current Class Instance. Use Like So:
10
+
11
+ class User < ActiveRecord::Base
12
+ include CurrentInstance
13
+ end
14
+ DOC
15
+ gem.homepage = "https://github.com/chaffeqa/current_instance"
16
+
17
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ gem.files = `git ls-files`.split("\n")
19
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ gem.name = "current_instance"
21
+ gem.require_paths = ["lib"]
22
+ gem.version = CurrentInstance::VERSION
23
+
24
+ gem.add_development_dependency 'rake'
25
+ gem.add_development_dependency 'minitest'
26
+ gem.add_development_dependency 'activesupport'
27
+ gem.add_development_dependency 'i18n'
28
+ end
@@ -0,0 +1,3 @@
1
+ module CurrentInstance
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,12 @@
1
+ require File.join(File.dirname(__FILE__), 'current_instance', 'version')
2
+ require File.join(File.dirname(__FILE__), 'current_instance', 'base')
3
+ require File.join(File.dirname(__FILE__), 'current_instance', 'class_methods')
4
+ # Thread Safe Current Class Instance
5
+ #
6
+ # Use Like So:
7
+ # class User < ActiveRecord::Base
8
+ # include CurrentInstance
9
+ # end
10
+ #
11
+ module CurrentInstance
12
+ end
@@ -0,0 +1,61 @@
1
+ require 'minitest/autorun'
2
+ require File.join(File.dirname(__FILE__), '..' , 'lib', 'current_instance')
3
+ require File.join(File.dirname(__FILE__), 'user')
4
+
5
+
6
+
7
+ describe "A User class that includes CurrentInstance" do
8
+ before do
9
+ @user = User.new({:id => 1, :other => "something"})
10
+ end
11
+
12
+ it '@@current_name = :current_user' do
13
+ User.current_name.must_equal :current_user
14
+ end
15
+
16
+ it '@@current_name_id = :current_user_id' do
17
+ User.current_name_id.must_equal :current_user_id
18
+ end
19
+
20
+ it 'has a current_name class attr' do
21
+ User.must_respond_to :current_name
22
+ User.must_respond_to :current_name=
23
+ end
24
+
25
+ it 'has a current_name_id class attr' do
26
+ User.must_respond_to :current_name_id
27
+ User.must_respond_to :current_name_id=
28
+ end
29
+
30
+
31
+
32
+ describe "#current" do
33
+ it 'exists' do
34
+ User.must_respond_to :current
35
+ end
36
+ it 'can be set' do
37
+ User.current = @user
38
+ User.current.must_equal @user
39
+ end
40
+ it 'sets current_id as well' do
41
+ User.current = @user
42
+ User.current_id.must_equal @user.id
43
+ end
44
+ end
45
+
46
+ describe "#current_id" do
47
+ it 'exists' do
48
+ User.must_respond_to :current_id
49
+ end
50
+ it 'can be set' do
51
+ User.current_id = @user.id
52
+ User.current_id.must_equal @user.id
53
+ end
54
+ it 'does not set current' do
55
+ User.current_id = @user.id
56
+ User.current.wont_equal @user
57
+ end
58
+ end
59
+
60
+
61
+ end
data/spec/user.rb ADDED
@@ -0,0 +1,12 @@
1
+ require 'active_support/core_ext'
2
+ class User
3
+ include CurrentInstance
4
+
5
+ attr_accessor :id, :other
6
+
7
+ def initialize(options)
8
+ @id = options[:id]
9
+ @other = options[:other]
10
+ end
11
+
12
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: current_instance
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Quinn
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-11-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: &70301790920960 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70301790920960
25
+ - !ruby/object:Gem::Dependency
26
+ name: minitest
27
+ requirement: &70301790919840 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70301790919840
36
+ - !ruby/object:Gem::Dependency
37
+ name: activesupport
38
+ requirement: &70301790919120 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70301790919120
47
+ - !ruby/object:Gem::Dependency
48
+ name: i18n
49
+ requirement: &70301790918660 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70301790918660
58
+ description: Thread Safe Current Class Instance
59
+ email:
60
+ - chaffeqa@gmail.com
61
+ executables: []
62
+ extensions: []
63
+ extra_rdoc_files: []
64
+ files:
65
+ - .gitignore
66
+ - Gemfile
67
+ - README.md
68
+ - Rakefile
69
+ - current_instance.gemspec
70
+ - lib/current_instance.rb
71
+ - lib/current_instance/version.rb
72
+ - spec/current_instance_spec.rb
73
+ - spec/user.rb
74
+ homepage: https://github.com/chaffeqa/current_instance
75
+ licenses: []
76
+ post_install_message:
77
+ rdoc_options: []
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ! '>='
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ requirements: []
93
+ rubyforge_project:
94
+ rubygems_version: 1.8.10
95
+ signing_key:
96
+ specification_version: 3
97
+ summary: ! 'Thread Safe Current Class Instance. Use Like So: class User < ActiveRecord::Base
98
+ include CurrentInstance end'
99
+ test_files:
100
+ - spec/current_instance_spec.rb
101
+ - spec/user.rb