milia 0.3.7 → 0.3.8

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.
@@ -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: