milia 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,42 +1,42 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- actionmailer (3.1.1)
5
- actionpack (= 3.1.1)
4
+ actionmailer (3.1.3)
5
+ actionpack (= 3.1.3)
6
6
  mail (~> 2.3.0)
7
- actionpack (3.1.1)
8
- activemodel (= 3.1.1)
9
- activesupport (= 3.1.1)
7
+ actionpack (3.1.3)
8
+ activemodel (= 3.1.3)
9
+ activesupport (= 3.1.3)
10
10
  builder (~> 3.0.0)
11
11
  erubis (~> 2.7.0)
12
12
  i18n (~> 0.6)
13
- rack (~> 1.3.2)
13
+ rack (~> 1.3.5)
14
14
  rack-cache (~> 1.1)
15
15
  rack-mount (~> 0.8.2)
16
16
  rack-test (~> 0.6.1)
17
- sprockets (~> 2.0.2)
18
- activemodel (3.1.1)
19
- activesupport (= 3.1.1)
17
+ sprockets (~> 2.0.3)
18
+ activemodel (3.1.3)
19
+ activesupport (= 3.1.3)
20
20
  builder (~> 3.0.0)
21
21
  i18n (~> 0.6)
22
- activerecord (3.1.1)
23
- activemodel (= 3.1.1)
24
- activesupport (= 3.1.1)
22
+ activerecord (3.1.3)
23
+ activemodel (= 3.1.3)
24
+ activesupport (= 3.1.3)
25
25
  arel (~> 2.2.1)
26
26
  tzinfo (~> 0.3.29)
27
- activeresource (3.1.1)
28
- activemodel (= 3.1.1)
29
- activesupport (= 3.1.1)
30
- activesupport (3.1.1)
27
+ activeresource (3.1.3)
28
+ activemodel (= 3.1.3)
29
+ activesupport (= 3.1.3)
30
+ activesupport (3.1.3)
31
31
  multi_json (~> 1.0)
32
- ansi (1.3.0)
32
+ ansi (1.4.1)
33
33
  arel (2.2.1)
34
34
  bcrypt-ruby (3.0.1)
35
35
  builder (3.0.0)
36
- devise (1.4.9)
36
+ devise (1.5.1)
37
37
  bcrypt-ruby (~> 3.0)
38
38
  orm_adapter (~> 0.0.3)
39
- warden (~> 1.0.3)
39
+ warden (~> 1.1)
40
40
  erubis (2.7.0)
41
41
  git (1.2.5)
42
42
  hike (1.2.1)
@@ -64,17 +64,17 @@ GEM
64
64
  rack
65
65
  rack-test (0.6.1)
66
66
  rack (>= 1.0)
67
- rails (3.1.1)
68
- actionmailer (= 3.1.1)
69
- actionpack (= 3.1.1)
70
- activerecord (= 3.1.1)
71
- activeresource (= 3.1.1)
72
- activesupport (= 3.1.1)
67
+ rails (3.1.3)
68
+ actionmailer (= 3.1.3)
69
+ actionpack (= 3.1.3)
70
+ activerecord (= 3.1.3)
71
+ activeresource (= 3.1.3)
72
+ activesupport (= 3.1.3)
73
73
  bundler (~> 1.0)
74
- railties (= 3.1.1)
75
- railties (3.1.1)
76
- actionpack (= 3.1.1)
77
- activesupport (= 3.1.1)
74
+ railties (= 3.1.3)
75
+ railties (3.1.3)
76
+ actionpack (= 3.1.3)
77
+ activesupport (= 3.1.3)
78
78
  rack-ssl (~> 1.3.2)
79
79
  rake (>= 0.8.7)
80
80
  rdoc (~> 3.4)
@@ -95,8 +95,8 @@ GEM
95
95
  polyglot (>= 0.3.1)
96
96
  turn (0.8.3)
97
97
  ansi
98
- tzinfo (0.3.30)
99
- warden (1.0.6)
98
+ tzinfo (0.3.31)
99
+ warden (1.1.0)
100
100
  rack (>= 1.0)
101
101
 
102
102
  PLATFORMS
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.7
1
+ 0.3.8
@@ -8,6 +8,8 @@ module Milia
8
8
  # ------------------------------------------------------------------------------
9
9
  # create -- intercept the POST create action upon new sign-up
10
10
  # new tenant account is vetted, then created, then proceed with devise create user
11
+ # CALLBACK: Tenant.create_new_tenant -- prior to completing user account
12
+ # CALLBACK: Tenant.tenant_signup -- after completing user account
11
13
  # ------------------------------------------------------------------------------
12
14
  def create
13
15
 
@@ -18,6 +20,13 @@ module Milia
18
20
 
19
21
  initiate_tenant( @tenant ) # first time stuff for new tenant
20
22
  super # do the rest of the user account creation
23
+
24
+ if user_signed_in?
25
+ Tenant.tenant_signup(current_user,@tenant,params[:coupon])
26
+ else
27
+ puts ">>>>>>>>>>>>> [milia create] false assumption that user signed in upon new registrations <<<<<<<<<<<<"
28
+ raise RuntimeError, "Milia false assumption in reg_ctlr#create"
29
+ end
21
30
 
22
31
  else
23
32
  @user = User.new(params[:user])
@@ -100,17 +100,50 @@ module Milia
100
100
  # ------------------------------------------------------------------------
101
101
  # ------------------------------------------------------------------------
102
102
  def acts_as_universal_and_determines_tenant()
103
- has_and_belongs_to_many :users
103
+ has_and_belongs_to_many :users
104
104
 
105
- acts_as_universal()
106
-
107
- before_destroy do |old_tenant|
108
- old_tenant.users.clear # remove all users from this tenant
109
- true
110
- end # before_destroy do
111
-
105
+ acts_as_universal()
106
+
107
+ before_destroy do |old_tenant|
108
+ old_tenant.users.clear # remove all users from this tenant
109
+ true
110
+ end # before_destroy do
112
111
  end
113
112
 
113
+ # ------------------------------------------------------------------------
114
+ # current_tenant -- returns tenant obj for current tenant
115
+ # ------------------------------------------------------------------------
116
+ def current_tenant()
117
+ return Tenant.find( Thread.current[:tenant_id] )
118
+ end
119
+
120
+ # ------------------------------------------------------------------------
121
+ # current_tenant_id -- returns tenant_id for current tenant
122
+ # ------------------------------------------------------------------------
123
+ def current_tenant_id()
124
+ return Thread.current[:tenant_id]
125
+ end
126
+
127
+ # ------------------------------------------------------------------------
128
+ # set_current_tenant -- model-level ability to set the current tenant
129
+ # NOTE: *USE WITH CAUTION* normally this should *NEVER* be done from
130
+ # the models ... it's only useful and safe WHEN performed at the start
131
+ # of a background job (DelayedJob#perform)
132
+ # ------------------------------------------------------------------------
133
+ def set_current_tenant( tenant )
134
+ # able to handle tenant obj or tenant_id
135
+ case tenant
136
+ when Tenant then tenant_id = tenant.id
137
+ when Integer then tenant_id = tenant
138
+ else
139
+ raise ArgumentError, "invalid tenant object or id"
140
+ end # case
141
+
142
+ Thread.current[:tenant_id] = tenant_id
143
+ end
144
+ # ------------------------------------------------------------------------
145
+ # ------------------------------------------------------------------------
146
+
114
147
  # ------------------------------------------------------------------------
115
148
  # where_restrict_tenant -- gens tenant restrictive where clause for each klass
116
149
  # NOTE: subordinate join tables will not get the default scope by Rails
@@ -137,4 +170,4 @@ module Milia
137
170
  # #############################################################################
138
171
 
139
172
  end # module Base
140
- end # module Milia
173
+ end # module Milia
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "milia"
8
- s.version = "0.3.7"
8
+ s.version = "0.3.8"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["David Anderson"]
12
- s.date = "2011-11-05"
12
+ s.date = "2011-11-24"
13
13
  s.description = "Transparent Multi-tenanting for hosted Rails 3.1+/Ruby 1.9.2 applications"
14
14
  s.email = "dsaronin@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -34,6 +34,7 @@ Gem::Specification.new do |s|
34
34
  "lib/milia/railtie.rb",
35
35
  "lib/milia/tasks.rb",
36
36
  "milia.gemspec",
37
+ "pkg/milia-0.3.8.gem",
37
38
  "test/helper.rb",
38
39
  "test/rails_app/.gitignore",
39
40
  "test/rails_app/Gemfile",
Binary file
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../../../milia
3
3
  specs:
4
- milia (0.3.6)
4
+ milia (0.3.7)
5
5
  devise (>= 1.4.8)
6
6
  rails (>= 3.1)
7
7
 
@@ -27,7 +27,7 @@ RailsApp::Application.configure do
27
27
  # config.logger = Logger.new(STDOUT)
28
28
  config.log_level = :debug
29
29
  config.assets.logger = nil
30
- config.active_record.logger = Logger.new(STDOUT)
30
+ # config.active_record.logger = Logger.new(STDOUT)
31
31
 
32
32
  # Disable request forgery protection in test environment
33
33
  config.action_controller.allow_forgery_protection = false
@@ -76,7 +76,7 @@ FactoryGirl.define do |binding|
76
76
 
77
77
  factory :post do |f|
78
78
  f.tenant_id binding.current_tenant
79
- f.sequence( :content ) {|n| CONTENT[n % 3] + n.to_s }
79
+ f.sequence( :content ) {|n| CONTENT[n % 3] + "_#{n}" }
80
80
  f.association :author
81
81
  f.association :zine
82
82
  end
@@ -85,8 +85,8 @@ class ActiveSupport::TestCase
85
85
  user = Factory(:user)
86
86
 
87
87
  if (w.zero? && i == 2) # special case for multiple tenants
88
- @jemell = user # jemell will be in two different tenants
89
- setup_author_posts(@jemell,1,1)
88
+ @target = user # jemell will be in two different tenants
89
+ setup_author_posts(@target,1,1)
90
90
  end
91
91
 
92
92
  # create extra authors w/o associated user
@@ -98,9 +98,9 @@ class ActiveSupport::TestCase
98
98
  end # users, authors, posts
99
99
 
100
100
  # pick a user and put in multiple tenants
101
- if (!@jemell.nil? && w == 2) # last world
102
- world.users << @jemell # add to current tenant users
103
- setup_author_posts(@jemell,0,0)
101
+ if (!@target.nil? && w == 2) # last world
102
+ world.users << @target # add to current tenant users
103
+ setup_author_posts(@target,0,0)
104
104
  end
105
105
 
106
106
  end # setup each world
@@ -32,7 +32,8 @@ class PostTest < ActiveSupport::TestCase
32
32
 
33
33
  should "get only author posts in mangoland" do
34
34
  ActiveSupport::TestCase.set_tenant( @mangoland )
35
- x = Author.all[1] # pick an author
35
+ x = Author.all.detect{|a| !a.user.nil? } # pick an author
36
+ assert x
36
37
  assert_equal 1, x.posts.size
37
38
  end
38
39
 
@@ -43,10 +44,13 @@ class PostTest < ActiveSupport::TestCase
43
44
  end
44
45
 
45
46
  should "see jemell in two tenants with dif posts" do
46
- ActiveSupport::TestCase.set_tenant( @mangoland )
47
- assert_equal 2, @jemell.posts.size
48
47
  ActiveSupport::TestCase.set_tenant( @islesmile )
49
- assert_equal 1, @jemell.posts.size
48
+ assert_equal 1, @target.posts.size
49
+ assert_equal 'mellow_yellow', @target.posts.first.content.sub(/_\d+/,"")
50
+
51
+ ActiveSupport::TestCase.set_tenant( @mangoland )
52
+ assert_equal 2, @target.posts.size
53
+ assert_equal %w(mellow_yellow wild_blue), @target.posts.map{|p| p.content.sub(/_\d+/,"") }.sort
50
54
  end
51
55
 
52
56
  should "zoom get all team posts" do
@@ -55,6 +59,19 @@ class PostTest < ActiveSupport::TestCase
55
59
  assert_equal 3,list.size
56
60
  end
57
61
 
62
+ should "exception if tenant not set up yet" do
63
+ ActiveSupport::TestCase.void_tenant
64
+ assert_raise(ActiveRecord::RecordNotFound,"should RecordNotFound if world incorrect"){Post.find( @post.id )}
65
+ end
66
+
67
+ should "exception if tenant different" do
68
+ ActiveSupport::TestCase.set_tenant( @mangoland )
69
+ assert_raise(ActiveRecord::RecordNotFound,"should RecordNotFound if world incorrect"){Post.find( @post.id )}
70
+ end
71
+
72
+
73
+
74
+
58
75
  end # context post
59
76
 
60
77
  # _____________________________________________________________________________
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: milia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.3.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-05 00:00:00.000000000 Z
12
+ date: 2011-11-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &73897630 !ruby/object:Gem::Requirement
16
+ requirement: &75971770 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.1'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *73897630
24
+ version_requirements: *75971770
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: devise
27
- requirement: &73896940 !ruby/object:Gem::Requirement
27
+ requirement: &75971150 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.4.8
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *73896940
35
+ version_requirements: *75971150
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: pg
38
- requirement: &73896110 !ruby/object:Gem::Requirement
38
+ requirement: &75970060 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *73896110
46
+ version_requirements: *75970060
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: shoulda
49
- requirement: &73894450 !ruby/object:Gem::Requirement
49
+ requirement: &75967630 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *73894450
57
+ version_requirements: *75967630
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: bundler
60
- requirement: &73910280 !ruby/object:Gem::Requirement
60
+ requirement: &75966580 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.0.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *73910280
68
+ version_requirements: *75966580
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: jeweler
71
- requirement: &73909880 !ruby/object:Gem::Requirement
71
+ requirement: &75965900 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 1.6.4
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *73909880
79
+ version_requirements: *75965900
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rcov
82
- requirement: &73909540 !ruby/object:Gem::Requirement
82
+ requirement: &75965430 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *73909540
90
+ version_requirements: *75965430
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rdoc
93
- requirement: &73909030 !ruby/object:Gem::Requirement
93
+ requirement: &75964970 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *73909030
101
+ version_requirements: *75964970
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: turn
104
- requirement: &73908220 !ruby/object:Gem::Requirement
104
+ requirement: &75996480 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,7 +109,7 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *73908220
112
+ version_requirements: *75996480
113
113
  description: Transparent Multi-tenanting for hosted Rails 3.1+/Ruby 1.9.2 applications
114
114
  email: dsaronin@gmail.com
115
115
  executables: []
@@ -135,6 +135,7 @@ files:
135
135
  - lib/milia/railtie.rb
136
136
  - lib/milia/tasks.rb
137
137
  - milia.gemspec
138
+ - pkg/milia-0.3.8.gem
138
139
  - test/helper.rb
139
140
  - test/rails_app/.gitignore
140
141
  - test/rails_app/Gemfile
@@ -237,7 +238,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
237
238
  version: '0'
238
239
  segments:
239
240
  - 0
240
- hash: -201367885
241
+ hash: -965767377
241
242
  required_rubygems_version: !ruby/object:Gem::Requirement
242
243
  none: false
243
244
  requirements: