guise 0.2.0 → 0.2.3

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/Appraisals ADDED
@@ -0,0 +1,7 @@
1
+ appraise '3.1' do
2
+ gem 'activerecord', '3.1.4'
3
+ end
4
+
5
+ appraise '3.2' do
6
+ gem 'activerecord', '3.2.3'
7
+ end
data/README.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  An alternative to storing role resources in the database.
4
4
 
5
- guise delegates type information to roles table that determines what a resource
6
- can be instantiated as. In essence, it's similar to single table inheritance,
7
- but with multiple inheritances possible.
5
+ guise delegates type information to a `has_many` association that stores the
6
+ class names a resource can be instantiated as. In essence, it's similar to
7
+ single table inheritance, but with multiple inheritances possible.
8
8
 
9
9
 
10
10
  ## Installation
@@ -33,16 +33,19 @@ $ gem install guise
33
33
  Create a table to store your type information:
34
34
 
35
35
  ```
36
- rails generate model guises user:references title:string
36
+ rails generate model user_role user:references title:string
37
37
  rake db:migrate
38
38
  ```
39
39
 
40
40
  Then add call the `has_guises` method in your model. This will setup the
41
- `has_many` association for you.
41
+ `has_many` association for you. It requires the name of the association and
42
+ name of the column that the sublcass name will be stored in.
42
43
 
43
44
  ```ruby
44
45
  class User < ActiveRecord::Base
45
- has_guises :DeskWorker, :MailFowarder
46
+ has_guises :DeskWorker, :MailFowarder,
47
+ :association => :user_roles,
48
+ :attribute => :title
46
49
  end
47
50
  ```
48
51
 
@@ -55,13 +58,13 @@ This adds the following methods to the `User` class:
55
58
  And creates classes `DeskWorker` and `MailForwarder` that:
56
59
  * Inherit from `User`.
57
60
  * Have default scopes for `:desk_workers` and `:mail_forwarders` respectively.
58
- * Create users with the right associated occupation.
61
+ * Create users with the right associated type.
59
62
 
60
63
 
61
64
  To configure the other end of the association, add `guise_for`:
62
65
 
63
66
  ```ruby
64
- class Guise < ActiveRecord::Base
67
+ class UserRole < ActiveRecord::Base
65
68
  guise_for :user
66
69
  end
67
70
  ```
@@ -74,8 +77,9 @@ This method does the following:
74
77
 
75
78
  ### Customization
76
79
 
77
- If the association doesn't fit what is assumed, you can pass in the options for
78
- `has_many` into `has_guises`. The same applies to `guise_for` with the addition that you can specify not to validate attributes
80
+ If the association doesn't standard association assumptions, you can pass in
81
+ the options for `has_many` into `has_guises`. The same applies to `guise_for`
82
+ with the addition that you can specify not to validate attributes.
79
83
 
80
84
  ```ruby
81
85
  class Person < ActiveRecord::Base
@@ -92,10 +96,3 @@ class JobTitle < ActiveRecord::Base
92
96
  :validate => false # skip setting up validations
93
97
  end
94
98
  ```
95
-
96
-
97
- ## The Future
98
-
99
- * Provide generators for roles table
100
- * Update `has_guises` method to setup `has_many` association
101
- * Adding validations on `guise_attribute` column into association class
data/Rakefile CHANGED
@@ -1,2 +1,10 @@
1
1
  #!/usr/bin/env rake
2
- require "bundler/gem_tasks"
2
+ require 'bundler/gem_tasks'
3
+ require 'bundler/setup'
4
+ require 'rspec/core/rake_task'
5
+ require 'appraisal'
6
+
7
+ desc "Run specs"
8
+ RSpec::Core::RakeTask.new('spec') do |task|
9
+ task.pattern = 'spec/**/*_spec.rb'
10
+ end
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "3.1.4"
6
+
7
+ gemspec :path=>"../"
@@ -0,0 +1,56 @@
1
+ PATH
2
+ remote: /Users/edd_d/dev/guise
3
+ specs:
4
+ guise (0.2.0)
5
+ activerecord (~> 3.1)
6
+ activesupport (~> 3.1)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activemodel (3.1.4)
12
+ activesupport (= 3.1.4)
13
+ builder (~> 3.0.0)
14
+ i18n (~> 0.6)
15
+ activerecord (3.1.4)
16
+ activemodel (= 3.1.4)
17
+ activesupport (= 3.1.4)
18
+ arel (~> 2.2.3)
19
+ tzinfo (~> 0.3.29)
20
+ activesupport (3.1.4)
21
+ multi_json (~> 1.0)
22
+ appraisal (0.4.1)
23
+ bundler
24
+ rake
25
+ arel (2.2.3)
26
+ builder (3.0.0)
27
+ diff-lcs (1.1.3)
28
+ factory_girl (3.2.0)
29
+ activesupport (>= 3.0.0)
30
+ i18n (0.6.0)
31
+ multi_json (1.3.4)
32
+ rake (0.9.2.2)
33
+ rspec (2.10.0)
34
+ rspec-core (~> 2.10.0)
35
+ rspec-expectations (~> 2.10.0)
36
+ rspec-mocks (~> 2.10.0)
37
+ rspec-core (2.10.0)
38
+ rspec-expectations (2.10.0)
39
+ diff-lcs (~> 1.1.3)
40
+ rspec-mocks (2.10.1)
41
+ shoulda-matchers (1.1.0)
42
+ activesupport (>= 3.0.0)
43
+ sqlite3 (1.3.6)
44
+ tzinfo (0.3.33)
45
+
46
+ PLATFORMS
47
+ ruby
48
+
49
+ DEPENDENCIES
50
+ activerecord (= 3.1.4)
51
+ appraisal
52
+ factory_girl (~> 3.2)
53
+ guise!
54
+ rspec (~> 2.9)
55
+ shoulda-matchers (~> 1.1)
56
+ sqlite3 (~> 1.3.3)
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "3.2.3"
6
+
7
+ gemspec :path=>"../"
@@ -0,0 +1,56 @@
1
+ PATH
2
+ remote: /Users/edd_d/dev/guise
3
+ specs:
4
+ guise (0.2.0)
5
+ activerecord (~> 3.1)
6
+ activesupport (~> 3.1)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activemodel (3.2.3)
12
+ activesupport (= 3.2.3)
13
+ builder (~> 3.0.0)
14
+ activerecord (3.2.3)
15
+ activemodel (= 3.2.3)
16
+ activesupport (= 3.2.3)
17
+ arel (~> 3.0.2)
18
+ tzinfo (~> 0.3.29)
19
+ activesupport (3.2.3)
20
+ i18n (~> 0.6)
21
+ multi_json (~> 1.0)
22
+ appraisal (0.4.1)
23
+ bundler
24
+ rake
25
+ arel (3.0.2)
26
+ builder (3.0.0)
27
+ diff-lcs (1.1.3)
28
+ factory_girl (3.2.0)
29
+ activesupport (>= 3.0.0)
30
+ i18n (0.6.0)
31
+ multi_json (1.3.4)
32
+ rake (0.9.2.2)
33
+ rspec (2.10.0)
34
+ rspec-core (~> 2.10.0)
35
+ rspec-expectations (~> 2.10.0)
36
+ rspec-mocks (~> 2.10.0)
37
+ rspec-core (2.10.0)
38
+ rspec-expectations (2.10.0)
39
+ diff-lcs (~> 1.1.3)
40
+ rspec-mocks (2.10.1)
41
+ shoulda-matchers (1.1.0)
42
+ activesupport (>= 3.0.0)
43
+ sqlite3 (1.3.6)
44
+ tzinfo (0.3.33)
45
+
46
+ PLATFORMS
47
+ ruby
48
+
49
+ DEPENDENCIES
50
+ activerecord (= 3.2.3)
51
+ appraisal
52
+ factory_girl (~> 3.2)
53
+ guise!
54
+ rspec (~> 2.9)
55
+ shoulda-matchers (~> 1.1)
56
+ sqlite3 (~> 1.3.3)
data/guise.gemspec CHANGED
@@ -4,8 +4,11 @@ require File.expand_path('../lib/guise/version', __FILE__)
4
4
  Gem::Specification.new do |gem|
5
5
  gem.authors = ["Eduardo Gutierrez"]
6
6
  gem.email = ["edd_d@mit.edu"]
7
- gem.description = %q{ Database-indempotent roles (mostly) }
8
- gem.summary = %q{ Guise provides a (hopefully) reasonable paradigm for user roles on top of ActiveRecord }
7
+ gem.description = %q{ Multiple inheritance STI }
8
+ gem.summary = %q{
9
+ Guise provides methods to setup single table
10
+ inheritance with multiple inheritances possible.
11
+ }
9
12
  gem.homepage = "https://github.com/ecbypi/guise"
10
13
 
11
14
  gem.files = `git ls-files`.split($\)
@@ -15,9 +18,11 @@ Gem::Specification.new do |gem|
15
18
  gem.require_paths = ["lib"]
16
19
  gem.version = Guise::VERSION
17
20
 
18
- gem.add_dependency "activerecord", "~> 3.2"
21
+ gem.add_dependency "activerecord", "~> 3.1"
22
+ gem.add_dependency "activesupport", "~> 3.1"
19
23
  gem.add_development_dependency "rspec", "~> 2.9"
20
24
  gem.add_development_dependency "sqlite3", "~> 1.3.3"
21
25
  gem.add_development_dependency "factory_girl", "~> 3.2"
22
26
  gem.add_development_dependency "shoulda-matchers", "~> 1.1"
27
+ gem.add_development_dependency "appraisal"
23
28
  end
@@ -8,7 +8,7 @@ module Guise
8
8
  raise NameError, "no such guise #{name}"
9
9
  end
10
10
 
11
- guises.pluck(guise_attribute).include?(name)
11
+ guises.map(&guise_attribute).include?(name)
12
12
  end
13
13
 
14
14
  def has_any_roles?(*names)
data/lib/guise/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Guise
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.3"
3
3
  end
data/lib/guise.rb CHANGED
@@ -24,7 +24,7 @@ module Guise
24
24
 
25
25
  def guise_for(name, options = {})
26
26
  association = Object.const_get(name.to_s.classify)
27
- foreign_key = options[:foreign_key] || "#{association.name}_id"
27
+ foreign_key = options[:foreign_key] || "#{association.name.underscore}_id"
28
28
 
29
29
  belongs_to name, options
30
30
 
@@ -74,4 +74,6 @@ module Guise
74
74
  end
75
75
  end
76
76
 
77
- ActiveRecord::Base.extend Guise
77
+ if defined?(ActiveRecord)
78
+ ActiveRecord::Base.extend Guise
79
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guise
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,18 +13,29 @@ date: 2012-05-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
16
- requirement: &70304078344960 !ruby/object:Gem::Requirement
16
+ requirement: &70169931214160 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: '3.2'
21
+ version: '3.1'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70169931214160
25
+ - !ruby/object:Gem::Dependency
26
+ name: activesupport
27
+ requirement: &70169931213600 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '3.1'
22
33
  type: :runtime
23
34
  prerelease: false
24
- version_requirements: *70304078344960
35
+ version_requirements: *70169931213600
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: rspec
27
- requirement: &70304078344320 !ruby/object:Gem::Requirement
38
+ requirement: &70169931213120 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ~>
@@ -32,10 +43,10 @@ dependencies:
32
43
  version: '2.9'
33
44
  type: :development
34
45
  prerelease: false
35
- version_requirements: *70304078344320
46
+ version_requirements: *70169931213120
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: sqlite3
38
- requirement: &70304078343680 !ruby/object:Gem::Requirement
49
+ requirement: &70169931212520 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ~>
@@ -43,10 +54,10 @@ dependencies:
43
54
  version: 1.3.3
44
55
  type: :development
45
56
  prerelease: false
46
- version_requirements: *70304078343680
57
+ version_requirements: *70169931212520
47
58
  - !ruby/object:Gem::Dependency
48
59
  name: factory_girl
49
- requirement: &70304078342460 !ruby/object:Gem::Requirement
60
+ requirement: &70169931211960 !ruby/object:Gem::Requirement
50
61
  none: false
51
62
  requirements:
52
63
  - - ~>
@@ -54,10 +65,10 @@ dependencies:
54
65
  version: '3.2'
55
66
  type: :development
56
67
  prerelease: false
57
- version_requirements: *70304078342460
68
+ version_requirements: *70169931211960
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: shoulda-matchers
60
- requirement: &70304078341900 !ruby/object:Gem::Requirement
71
+ requirement: &70169931234980 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ~>
@@ -65,8 +76,19 @@ dependencies:
65
76
  version: '1.1'
66
77
  type: :development
67
78
  prerelease: false
68
- version_requirements: *70304078341900
69
- description: ! ' Database-indempotent roles (mostly) '
79
+ version_requirements: *70169931234980
80
+ - !ruby/object:Gem::Dependency
81
+ name: appraisal
82
+ requirement: &70169931234440 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70169931234440
91
+ description: ! ' Multiple inheritance STI '
70
92
  email:
71
93
  - edd_d@mit.edu
72
94
  executables: []
@@ -75,10 +97,15 @@ extra_rdoc_files: []
75
97
  files:
76
98
  - .gitignore
77
99
  - .rspec
100
+ - Appraisals
78
101
  - Gemfile
79
102
  - LICENSE
80
103
  - README.md
81
104
  - Rakefile
105
+ - gemfiles/3.1.gemfile
106
+ - gemfiles/3.1.gemfile.lock
107
+ - gemfiles/3.2.gemfile
108
+ - gemfiles/3.2.gemfile.lock
82
109
  - guise.gemspec
83
110
  - lib/guise.rb
84
111
  - lib/guise/introspection.rb
@@ -111,8 +138,8 @@ rubyforge_project:
111
138
  rubygems_version: 1.8.11
112
139
  signing_key:
113
140
  specification_version: 3
114
- summary: Guise provides a (hopefully) reasonable paradigm for user roles on top of
115
- ActiveRecord
141
+ summary: Guise provides methods to setup single table inheritance with multiple inheritances
142
+ possible.
116
143
  test_files:
117
144
  - spec/factories.rb
118
145
  - spec/guise_spec.rb