ffcrm_cloudfuji 0.1.4 → 0.1.5

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/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  pkg/
2
2
  *.gem
3
3
  Gemfile.lock
4
+ spec/internal/log/
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ lang: ruby
2
+
3
+ rvm:
4
+ - 1.9.3
5
+
6
+ before_script:
7
+ - sh -c "psql -c 'create database ffcrm_cloudfuji_test;' -U postgres"
data/Gemfile CHANGED
@@ -1,5 +1,27 @@
1
- source "http://rubygems.org"
1
+ source :rubygems
2
2
 
3
- gem 'fat_free_crm'
3
+ gem 'bundler_local_development', :group => :development, :require => false
4
+ begin
5
+ require 'bundler_local_development'
6
+ rescue LoadError
7
+ end
4
8
 
5
9
  gemspec
10
+
11
+ gem 'fat_free_crm', :git => 'git://github.com/fatfreecrm/fat_free_crm.git'
12
+ gem 'cloudfuji', :git => 'git://github.com/cloudfuji/cloudfuji_client.git'
13
+
14
+ group :test, :development do
15
+ gem 'pg' # Default database for testing
16
+ end
17
+
18
+ group :test do
19
+ gem 'rspec'
20
+ gem 'combustion'
21
+ gem 'factory_girl'
22
+ unless ENV["CI"]
23
+ gem 'ruby-debug', :platform => :mri_18
24
+ gem (RUBY_VERSION == "1.9.2" ? 'ruby-debug19' : 'debugger'), :platform => :mri_19
25
+ end
26
+ end
27
+
data/Rakefile CHANGED
@@ -1,5 +1,27 @@
1
- # Add your own tasks in files placed in lib/tasks ending in .rake,
2
- # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
- require 'rake'
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ Bundler.require :default, :development
4
8
 
5
- require "bundler/gem_tasks"
9
+ task :environment do
10
+ Combustion.initialize!
11
+ end
12
+ Combustion::Application.load_tasks
13
+
14
+ class Combustion::Application
15
+ # Add migrations from all engines
16
+ Railties.engines.each do |engine|
17
+ config.paths['db/migrate'] += engine.paths['db/migrate'].existent
18
+ end
19
+ end
20
+
21
+ desc 'Default: run spec tests.'
22
+ task :default => :spec
23
+
24
+ # Let Combustion handle database preparation
25
+ Rake::Task["spec"].prerequisites.clear
26
+
27
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,8 @@
1
+ # Combustion always runs in test environment.
2
+ test:
3
+ adapter: postgresql
4
+ database: ffcrm_cloudfuji_test
5
+ username:
6
+ password:
7
+ schema_search_path: public
8
+ min_messages: warning
data/config.ru ADDED
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+
4
+ Bundler.require :default, :development
5
+
6
+ Combustion.initialize!
7
+ run Combustion::Application
@@ -12,7 +12,11 @@ Gem::Specification.new do |s|
12
12
  s.files = `git ls-files`.split("\n")
13
13
  s.version = FatFreeCRM::Cloudfuji::VERSION
14
14
 
15
- s.add_dependency 'cloudfuji'
15
+ s.add_development_dependency 'rspec-rails', '~> 2.6'
16
+ s.add_development_dependency 'capybara'
17
+ s.add_development_dependency 'combustion'
18
+
19
+ s.add_dependency 'cloudfuji', '>= 0.0.41'
16
20
  s.add_dependency 'authlogic_cloudfuji', '~> 0.9'
17
21
 
18
22
  end
@@ -3,23 +3,35 @@ module FatFreeCRM
3
3
  module EventObservers
4
4
  class AppObserver < ::Cloudfuji::EventObserver
5
5
  def app_claimed
6
- puts "Updating #{User.first.inspect} with incoming data #{params.inspect}"
7
- puts "Authlogic username column: #{::Authlogic::Cas.cas_username_column}="
8
- puts "Setting username to: #{params.try(:[], 'ido_id')}"
6
+ # Be verbose in development environment
7
+ debug = Rails.env == 'development'
9
8
 
10
- user = User.first
11
- if user
12
- data = params['data']
9
+ data = params['data']
10
+ ido_id = data.try(:[], 'ido_id')
13
11
 
14
- user.email = data['email']
12
+ if user = User.find_by_email(data['email'])
13
+ puts "Updating #{user.inspect} with incoming data #{params.inspect}" if debug
14
+ else
15
+ user = User.new
16
+ puts "Creating User with incoming data #{params.inspect}" if debug
17
+ end
18
+
19
+ puts "Authlogic username column: #{::Authlogic::Cas.cas_username_column}=" if debug
20
+ puts "Setting username to: #{ido_id}" if debug
21
+
22
+ user.email = data['email']
23
+ # Set first and last name from email if both blank
24
+ if user.first_name.blank? && user.last_name.blank?
15
25
  user.first_name = user.email.split('@').first
16
26
  user.last_name = user.email.split('@').last
17
- user.username = data['email']
18
- user.deleted_at = nil
19
- user.send("#{::Authlogic::Cas.cas_username_column}=".to_sym, params['data'].try(:[], 'ido_id'))
20
- puts user.inspect
21
- user.save!
22
27
  end
28
+ user.username = ido_id
29
+ user.deleted_at = nil
30
+ user.admin = true
31
+ user.send("#{::Authlogic::Cas.cas_username_column}=".to_sym, ido_id)
32
+
33
+ puts user.inspect if debug
34
+ user.save!
23
35
  end
24
36
  end
25
37
  end
@@ -1,5 +1,5 @@
1
1
  module FatFreeCRM
2
2
  module Cloudfuji
3
- VERSION = '0.1.4'
3
+ VERSION = '0.1.5'
4
4
  end
5
5
  end
@@ -0,0 +1,39 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ include FatFreeCRM::Cloudfuji::EventObservers
4
+
5
+ describe AppObserver do
6
+ describe "App Claimed" do
7
+ before do
8
+ @observer = AppObserver.new
9
+ @observer.params = {
10
+ 'data' => {
11
+ 'ido_id' => '57a57c56b57d76e76f',
12
+ 'email' => 'cloudfuji_user@cloudfuji.com'
13
+ }
14
+ }
15
+ end
16
+
17
+ it "should update a known user if app is claimed by a recognized email address" do
18
+ @user = FactoryGirl.create(:user, :email => 'cloudfuji_user@cloudfuji.com', :ido_id => "123456789")
19
+ original_name = [@user.first_name, @user.last_name]
20
+
21
+ @observer.app_claimed
22
+
23
+ # Should not create a new user
24
+ User.find_all_by_email('cloudfuji_user@cloudfuji.com').size.should == 1
25
+
26
+ @user.reload
27
+ [@user.first_name, @user.last_name].should == original_name
28
+ @user.ido_id.should == '57a57c56b57d76e76f'
29
+ end
30
+
31
+ it "should create a new user if app is claimed by an unrecognized email address" do
32
+ @observer.app_claimed
33
+
34
+ @user = User.find_by_email('cloudfuji_user@cloudfuji.com')
35
+ @user.first_name.should == "cloudfuji_user"
36
+ @user.last_name.should == "cloudfuji.com"
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,8 @@
1
+ # Combustion always runs in test environment.
2
+ test:
3
+ adapter: postgresql
4
+ database: ffcrm_cloudfuji_test
5
+ username:
6
+ password:
7
+ schema_search_path: public
8
+ min_messages: warning
@@ -0,0 +1,426 @@
1
+ # encoding: UTF-8
2
+ # This file is auto-generated from the current state of the database. Instead
3
+ # of editing this file, please use the migrations feature of Active Record to
4
+ # incrementally modify your database, and then regenerate this schema definition.
5
+ #
6
+ # Note that this schema.rb definition is the authoritative source for your
7
+ # database schema. If you need to create the application database on another
8
+ # system, you should be using db:schema:load, not running all the migrations
9
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
11
+ #
12
+ # It's strongly recommended to check this file into your version control system.
13
+
14
+ ActiveRecord::Schema.define(:version => 20120510025219) do
15
+
16
+ create_table "account_contacts", :force => true do |t|
17
+ t.integer "account_id"
18
+ t.integer "contact_id"
19
+ t.datetime "deleted_at"
20
+ t.datetime "created_at", :null => false
21
+ t.datetime "updated_at", :null => false
22
+ end
23
+
24
+ create_table "account_opportunities", :force => true do |t|
25
+ t.integer "account_id"
26
+ t.integer "opportunity_id"
27
+ t.datetime "deleted_at"
28
+ t.datetime "created_at", :null => false
29
+ t.datetime "updated_at", :null => false
30
+ end
31
+
32
+ create_table "accounts", :force => true do |t|
33
+ t.integer "user_id"
34
+ t.integer "assigned_to"
35
+ t.string "name", :limit => 64, :default => "", :null => false
36
+ t.string "access", :limit => 8, :default => "Public"
37
+ t.string "website", :limit => 64
38
+ t.string "toll_free_phone", :limit => 32
39
+ t.string "phone", :limit => 32
40
+ t.string "fax", :limit => 32
41
+ t.datetime "deleted_at"
42
+ t.datetime "created_at", :null => false
43
+ t.datetime "updated_at", :null => false
44
+ t.string "email", :limit => 64
45
+ t.string "background_info"
46
+ t.integer "rating", :default => 0, :null => false
47
+ t.string "category", :limit => 32
48
+ t.text "subscribed_users"
49
+ end
50
+
51
+ add_index "accounts", ["assigned_to"], :name => "index_accounts_on_assigned_to"
52
+ add_index "accounts", ["user_id", "name", "deleted_at"], :name => "index_accounts_on_user_id_and_name_and_deleted_at", :unique => true
53
+
54
+ create_table "activities", :force => true do |t|
55
+ t.integer "user_id"
56
+ t.integer "subject_id"
57
+ t.string "subject_type"
58
+ t.string "action", :limit => 32, :default => "created"
59
+ t.string "info", :default => ""
60
+ t.boolean "private", :default => false
61
+ t.datetime "created_at", :null => false
62
+ t.datetime "updated_at", :null => false
63
+ end
64
+
65
+ add_index "activities", ["created_at"], :name => "index_activities_on_created_at"
66
+ add_index "activities", ["user_id"], :name => "index_activities_on_user_id"
67
+
68
+ create_table "addresses", :force => true do |t|
69
+ t.string "street1"
70
+ t.string "street2"
71
+ t.string "city", :limit => 64
72
+ t.string "state", :limit => 64
73
+ t.string "zipcode", :limit => 16
74
+ t.string "country", :limit => 64
75
+ t.string "full_address"
76
+ t.string "address_type", :limit => 16
77
+ t.integer "addressable_id"
78
+ t.string "addressable_type"
79
+ t.datetime "created_at", :null => false
80
+ t.datetime "updated_at", :null => false
81
+ t.datetime "deleted_at"
82
+ end
83
+
84
+ add_index "addresses", ["addressable_id", "addressable_type"], :name => "index_addresses_on_addressable_id_and_addressable_type"
85
+
86
+ create_table "avatars", :force => true do |t|
87
+ t.integer "user_id"
88
+ t.integer "entity_id"
89
+ t.string "entity_type"
90
+ t.integer "image_file_size"
91
+ t.string "image_file_name"
92
+ t.string "image_content_type"
93
+ t.datetime "created_at", :null => false
94
+ t.datetime "updated_at", :null => false
95
+ end
96
+
97
+ create_table "campaigns", :force => true do |t|
98
+ t.integer "user_id"
99
+ t.integer "assigned_to"
100
+ t.string "name", :limit => 64, :default => "", :null => false
101
+ t.string "access", :limit => 8, :default => "Public"
102
+ t.string "status", :limit => 64
103
+ t.decimal "budget", :precision => 12, :scale => 2
104
+ t.integer "target_leads"
105
+ t.float "target_conversion"
106
+ t.decimal "target_revenue", :precision => 12, :scale => 2
107
+ t.integer "leads_count"
108
+ t.integer "opportunities_count"
109
+ t.decimal "revenue", :precision => 12, :scale => 2
110
+ t.date "starts_on"
111
+ t.date "ends_on"
112
+ t.text "objectives"
113
+ t.datetime "deleted_at"
114
+ t.datetime "created_at", :null => false
115
+ t.datetime "updated_at", :null => false
116
+ t.string "background_info"
117
+ t.text "subscribed_users"
118
+ end
119
+
120
+ add_index "campaigns", ["assigned_to"], :name => "index_campaigns_on_assigned_to"
121
+ add_index "campaigns", ["user_id", "name", "deleted_at"], :name => "index_campaigns_on_user_id_and_name_and_deleted_at", :unique => true
122
+
123
+ create_table "comments", :force => true do |t|
124
+ t.integer "user_id"
125
+ t.integer "commentable_id"
126
+ t.string "commentable_type"
127
+ t.boolean "private"
128
+ t.string "title", :default => ""
129
+ t.text "comment"
130
+ t.datetime "created_at", :null => false
131
+ t.datetime "updated_at", :null => false
132
+ t.string "state", :limit => 16, :default => "Expanded", :null => false
133
+ end
134
+
135
+ create_table "contact_opportunities", :force => true do |t|
136
+ t.integer "contact_id"
137
+ t.integer "opportunity_id"
138
+ t.string "role", :limit => 32
139
+ t.datetime "deleted_at"
140
+ t.datetime "created_at", :null => false
141
+ t.datetime "updated_at", :null => false
142
+ end
143
+
144
+ create_table "contacts", :force => true do |t|
145
+ t.integer "user_id"
146
+ t.integer "lead_id"
147
+ t.integer "assigned_to"
148
+ t.integer "reports_to"
149
+ t.string "first_name", :limit => 64, :default => "", :null => false
150
+ t.string "last_name", :limit => 64, :default => "", :null => false
151
+ t.string "access", :limit => 8, :default => "Public"
152
+ t.string "title", :limit => 64
153
+ t.string "department", :limit => 64
154
+ t.string "source", :limit => 32
155
+ t.string "email", :limit => 64
156
+ t.string "alt_email", :limit => 64
157
+ t.string "phone", :limit => 32
158
+ t.string "mobile", :limit => 32
159
+ t.string "fax", :limit => 32
160
+ t.string "blog", :limit => 128
161
+ t.string "linkedin", :limit => 128
162
+ t.string "facebook", :limit => 128
163
+ t.string "twitter", :limit => 128
164
+ t.date "born_on"
165
+ t.boolean "do_not_call", :default => false, :null => false
166
+ t.datetime "deleted_at"
167
+ t.datetime "created_at", :null => false
168
+ t.datetime "updated_at", :null => false
169
+ t.string "background_info"
170
+ t.string "skype", :limit => 128
171
+ t.text "subscribed_users"
172
+ end
173
+
174
+ add_index "contacts", ["assigned_to"], :name => "index_contacts_on_assigned_to"
175
+ add_index "contacts", ["user_id", "last_name", "deleted_at"], :name => "id_last_name_deleted", :unique => true
176
+
177
+ create_table "emails", :force => true do |t|
178
+ t.string "imap_message_id", :null => false
179
+ t.integer "user_id"
180
+ t.integer "mediator_id"
181
+ t.string "mediator_type"
182
+ t.string "sent_from", :null => false
183
+ t.string "sent_to", :null => false
184
+ t.string "cc"
185
+ t.string "bcc"
186
+ t.string "subject"
187
+ t.text "body"
188
+ t.text "header"
189
+ t.datetime "sent_at"
190
+ t.datetime "received_at"
191
+ t.datetime "deleted_at"
192
+ t.datetime "created_at", :null => false
193
+ t.datetime "updated_at", :null => false
194
+ t.string "state", :limit => 16, :default => "Expanded", :null => false
195
+ end
196
+
197
+ add_index "emails", ["mediator_id", "mediator_type"], :name => "index_emails_on_mediator_id_and_mediator_type"
198
+
199
+ create_table "field_groups", :force => true do |t|
200
+ t.string "name", :limit => 64
201
+ t.string "label", :limit => 128
202
+ t.integer "position"
203
+ t.string "hint"
204
+ t.datetime "created_at", :null => false
205
+ t.datetime "updated_at", :null => false
206
+ t.integer "tag_id"
207
+ t.string "klass_name", :limit => 32
208
+ end
209
+
210
+ create_table "fields", :force => true do |t|
211
+ t.string "type"
212
+ t.integer "field_group_id"
213
+ t.integer "position"
214
+ t.string "name", :limit => 64
215
+ t.string "label", :limit => 128
216
+ t.string "hint"
217
+ t.string "placeholder"
218
+ t.string "as", :limit => 32
219
+ t.text "collection"
220
+ t.boolean "disabled"
221
+ t.boolean "required"
222
+ t.integer "maxlength"
223
+ t.datetime "created_at", :null => false
224
+ t.datetime "updated_at", :null => false
225
+ end
226
+
227
+ add_index "fields", ["field_group_id"], :name => "index_fields_on_field_group_id"
228
+ add_index "fields", ["name"], :name => "index_fields_on_name"
229
+
230
+ create_table "leads", :force => true do |t|
231
+ t.integer "user_id"
232
+ t.integer "campaign_id"
233
+ t.integer "assigned_to"
234
+ t.string "first_name", :limit => 64, :default => "", :null => false
235
+ t.string "last_name", :limit => 64, :default => "", :null => false
236
+ t.string "access", :limit => 8, :default => "Public"
237
+ t.string "title", :limit => 64
238
+ t.string "company", :limit => 64
239
+ t.string "source", :limit => 32
240
+ t.string "status", :limit => 32
241
+ t.string "referred_by", :limit => 64
242
+ t.string "email", :limit => 64
243
+ t.string "alt_email", :limit => 64
244
+ t.string "phone", :limit => 32
245
+ t.string "mobile", :limit => 32
246
+ t.string "blog", :limit => 128
247
+ t.string "linkedin", :limit => 128
248
+ t.string "facebook", :limit => 128
249
+ t.string "twitter", :limit => 128
250
+ t.integer "rating", :default => 0, :null => false
251
+ t.boolean "do_not_call", :default => false, :null => false
252
+ t.datetime "deleted_at"
253
+ t.datetime "created_at", :null => false
254
+ t.datetime "updated_at", :null => false
255
+ t.string "background_info"
256
+ t.string "skype", :limit => 128
257
+ t.text "subscribed_users"
258
+ end
259
+
260
+ add_index "leads", ["assigned_to"], :name => "index_leads_on_assigned_to"
261
+ add_index "leads", ["user_id", "last_name", "deleted_at"], :name => "index_leads_on_user_id_and_last_name_and_deleted_at", :unique => true
262
+
263
+ create_table "lists", :force => true do |t|
264
+ t.string "name"
265
+ t.text "url"
266
+ t.datetime "created_at", :null => false
267
+ t.datetime "updated_at", :null => false
268
+ end
269
+
270
+ create_table "opportunities", :force => true do |t|
271
+ t.integer "user_id"
272
+ t.integer "campaign_id"
273
+ t.integer "assigned_to"
274
+ t.string "name", :limit => 64, :default => "", :null => false
275
+ t.string "access", :limit => 8, :default => "Public"
276
+ t.string "source", :limit => 32
277
+ t.string "stage", :limit => 32
278
+ t.integer "probability"
279
+ t.decimal "amount", :precision => 12, :scale => 2
280
+ t.decimal "discount", :precision => 12, :scale => 2
281
+ t.date "closes_on"
282
+ t.datetime "deleted_at"
283
+ t.datetime "created_at", :null => false
284
+ t.datetime "updated_at", :null => false
285
+ t.string "background_info"
286
+ t.text "subscribed_users"
287
+ end
288
+
289
+ add_index "opportunities", ["assigned_to"], :name => "index_opportunities_on_assigned_to"
290
+ add_index "opportunities", ["user_id", "name", "deleted_at"], :name => "id_name_deleted", :unique => true
291
+
292
+ create_table "permissions", :force => true do |t|
293
+ t.integer "user_id"
294
+ t.integer "asset_id"
295
+ t.string "asset_type"
296
+ t.datetime "created_at", :null => false
297
+ t.datetime "updated_at", :null => false
298
+ end
299
+
300
+ add_index "permissions", ["asset_id", "asset_type"], :name => "index_permissions_on_asset_id_and_asset_type"
301
+ add_index "permissions", ["user_id"], :name => "index_permissions_on_user_id"
302
+
303
+ create_table "preferences", :force => true do |t|
304
+ t.integer "user_id"
305
+ t.string "name", :limit => 32, :default => "", :null => false
306
+ t.text "value"
307
+ t.datetime "created_at", :null => false
308
+ t.datetime "updated_at", :null => false
309
+ end
310
+
311
+ add_index "preferences", ["user_id", "name"], :name => "index_preferences_on_user_id_and_name"
312
+
313
+ create_table "sessions", :force => true do |t|
314
+ t.string "session_id", :null => false
315
+ t.text "data"
316
+ t.datetime "created_at", :null => false
317
+ t.datetime "updated_at", :null => false
318
+ end
319
+
320
+ add_index "sessions", ["session_id"], :name => "index_sessions_on_session_id"
321
+ add_index "sessions", ["updated_at"], :name => "index_sessions_on_updated_at"
322
+
323
+ create_table "settings", :force => true do |t|
324
+ t.string "name", :limit => 32, :default => "", :null => false
325
+ t.text "value"
326
+ t.datetime "created_at", :null => false
327
+ t.datetime "updated_at", :null => false
328
+ end
329
+
330
+ add_index "settings", ["name"], :name => "index_settings_on_name"
331
+
332
+ create_table "taggings", :force => true do |t|
333
+ t.integer "tag_id"
334
+ t.integer "taggable_id"
335
+ t.integer "tagger_id"
336
+ t.string "tagger_type"
337
+ t.string "taggable_type"
338
+ t.string "context"
339
+ t.datetime "created_at"
340
+ end
341
+
342
+ add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id"
343
+ add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context"
344
+
345
+ create_table "tags", :force => true do |t|
346
+ t.string "name"
347
+ end
348
+
349
+ create_table "tasks", :force => true do |t|
350
+ t.integer "user_id"
351
+ t.integer "assigned_to"
352
+ t.integer "completed_by"
353
+ t.string "name", :default => "", :null => false
354
+ t.integer "asset_id"
355
+ t.string "asset_type"
356
+ t.string "priority", :limit => 32
357
+ t.string "category", :limit => 32
358
+ t.string "bucket", :limit => 32
359
+ t.datetime "due_at"
360
+ t.datetime "completed_at"
361
+ t.datetime "deleted_at"
362
+ t.datetime "created_at", :null => false
363
+ t.datetime "updated_at", :null => false
364
+ t.string "background_info"
365
+ t.text "subscribed_users"
366
+ end
367
+
368
+ add_index "tasks", ["assigned_to"], :name => "index_tasks_on_assigned_to"
369
+ add_index "tasks", ["user_id", "name", "deleted_at"], :name => "index_tasks_on_user_id_and_name_and_deleted_at", :unique => true
370
+
371
+ create_table "users", :force => true do |t|
372
+ t.string "username", :limit => 32, :default => "", :null => false
373
+ t.string "email", :limit => 64, :default => "", :null => false
374
+ t.string "first_name", :limit => 32
375
+ t.string "last_name", :limit => 32
376
+ t.string "title", :limit => 64
377
+ t.string "company", :limit => 64
378
+ t.string "alt_email", :limit => 64
379
+ t.string "phone", :limit => 32
380
+ t.string "mobile", :limit => 32
381
+ t.string "aim", :limit => 32
382
+ t.string "yahoo", :limit => 32
383
+ t.string "google", :limit => 32
384
+ t.string "skype", :limit => 32
385
+ t.string "password_hash", :default => "", :null => false
386
+ t.string "password_salt", :default => "", :null => false
387
+ t.string "persistence_token", :default => "", :null => false
388
+ t.string "perishable_token", :default => "", :null => false
389
+ t.datetime "last_request_at"
390
+ t.datetime "last_login_at"
391
+ t.datetime "current_login_at"
392
+ t.string "last_login_ip"
393
+ t.string "current_login_ip"
394
+ t.integer "login_count", :default => 0, :null => false
395
+ t.datetime "deleted_at"
396
+ t.datetime "created_at", :null => false
397
+ t.datetime "updated_at", :null => false
398
+ t.boolean "admin", :default => false, :null => false
399
+ t.datetime "suspended_at"
400
+ t.string "single_access_token"
401
+ t.text "ido_id"
402
+ t.string "locale"
403
+ end
404
+
405
+ add_index "users", ["email"], :name => "index_users_on_email"
406
+ add_index "users", ["last_request_at"], :name => "index_users_on_last_request_at"
407
+ add_index "users", ["perishable_token"], :name => "index_users_on_perishable_token"
408
+ add_index "users", ["persistence_token"], :name => "index_users_on_remember_token"
409
+ add_index "users", ["username", "deleted_at"], :name => "index_users_on_username_and_deleted_at", :unique => true
410
+
411
+ create_table "versions", :force => true do |t|
412
+ t.string "item_type", :null => false
413
+ t.integer "item_id", :null => false
414
+ t.string "event", :null => false
415
+ t.string "whodunnit"
416
+ t.text "object"
417
+ t.datetime "created_at"
418
+ t.text "object_changes"
419
+ t.integer "related_id"
420
+ t.string "related_type"
421
+ end
422
+
423
+ add_index "versions", ["item_type", "item_id"], :name => "index_versions_on_item_type_and_item_id"
424
+ add_index "versions", ["whodunnit"], :name => "index_versions_on_whodunnit"
425
+
426
+ end
@@ -0,0 +1,26 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ require 'rails/all'
4
+
5
+ Bundler.require :default, :development
6
+
7
+ require 'rspec/rails'
8
+ require 'factory_girl'
9
+ require 'ffaker'
10
+
11
+ # Load factories from fat_free_crm
12
+ ffcrm_spec = Gem::Specification.find_by_name("fat_free_crm")
13
+ Dir[ffcrm_spec.gem_dir + "/spec/factories/*.rb"].each {|factory| require factory }
14
+
15
+ Combustion.initialize!
16
+ # Reload User model after schema is loaded,
17
+ # so that Authlogic detects password fields
18
+ load 'user.rb'
19
+
20
+ RSpec.configure do |config|
21
+ config.use_transactional_fixtures = true
22
+ end
23
+
24
+ # Cloudfuji::Platform.on_cloudfuji? is false,
25
+ # so we need to enable it manually
26
+ FatFreeCRM::Cloudfuji.enable_cloudfuji!
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffcrm_cloudfuji
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,17 +10,49 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-05-12 00:00:00.000000000 Z
13
+ date: 2012-05-14 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: cloudfuji
16
+ name: rspec-rails
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: '2.6'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: '2.6'
31
+ - !ruby/object:Gem::Dependency
32
+ name: capybara
17
33
  requirement: !ruby/object:Gem::Requirement
18
34
  none: false
19
35
  requirements:
20
36
  - - ! '>='
21
37
  - !ruby/object:Gem::Version
22
38
  version: '0'
23
- type: :runtime
39
+ type: :development
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: combustion
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
24
56
  prerelease: false
25
57
  version_requirements: !ruby/object:Gem::Requirement
26
58
  none: false
@@ -28,6 +60,22 @@ dependencies:
28
60
  - - ! '>='
29
61
  - !ruby/object:Gem::Version
30
62
  version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: cloudfuji
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: 0.0.41
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: 0.0.41
31
79
  - !ruby/object:Gem::Dependency
32
80
  name: authlogic_cloudfuji
33
81
  requirement: !ruby/object:Gem::Requirement
@@ -51,10 +99,13 @@ extensions: []
51
99
  extra_rdoc_files: []
52
100
  files:
53
101
  - .gitignore
102
+ - .travis.yml
54
103
  - Gemfile
55
104
  - MIT-LICENSE
56
105
  - README
57
106
  - Rakefile
107
+ - config.ru
108
+ - config/database.yml
58
109
  - config/initializers/cloudfuji.rb
59
110
  - config/routes.rb
60
111
  - config/settings.yml
@@ -68,9 +119,12 @@ files:
68
119
  - lib/fat_free_crm/cloudfuji/event_observers/email_observer.rb
69
120
  - lib/fat_free_crm/cloudfuji/event_observers/payment_observer.rb
70
121
  - lib/fat_free_crm/cloudfuji/event_observers/user_observer.rb
71
- - lib/fat_free_crm/cloudfuji/mail_routes.rb
72
122
  - lib/fat_free_crm/cloudfuji/version.rb
73
123
  - lib/ffcrm_cloudfuji.rb
124
+ - spec/event_observers/app_observer_spec.rb
125
+ - spec/internal/config/database.yml
126
+ - spec/internal/db/schema.rb
127
+ - spec/spec_helper.rb
74
128
  - uninstall.rb
75
129
  homepage: http://cloudfuji.com
76
130
  licenses: []
@@ -86,7 +140,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
86
140
  version: '0'
87
141
  segments:
88
142
  - 0
89
- hash: 318352335
143
+ hash: -478798927
90
144
  required_rubygems_version: !ruby/object:Gem::Requirement
91
145
  none: false
92
146
  requirements:
@@ -95,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
149
  version: '0'
96
150
  segments:
97
151
  - 0
98
- hash: 318352335
152
+ hash: -478798927
99
153
  requirements: []
100
154
  rubyforge_project:
101
155
  rubygems_version: 1.8.24
@@ -1,24 +0,0 @@
1
- # Mail routes
2
- Cloudfuji::Mailroute.map do |m|
3
- m.route("mail.new_comment") do
4
- m.subject('{:project_title}: {:mock_title} #{:mock_version} comment {:parent_comment_id}',
5
- :project_title => m.words_and_spaces,
6
- :mock_title => m.words_and_spaces,
7
- :mock_version => m.number,
8
- :parent_comment_id => m.number)
9
-
10
-
11
- # Must be replying to send a new comment via email
12
- m.add_constraint(:reply, :required)
13
- end
14
-
15
- m.route("mail.new_project") do
16
- m.subject("{:project_title}: {:mock_title}",
17
- :project_title => m.words_and_spaces,
18
- :mock_title => m.words_and_spaces)
19
- end
20
-
21
- m.route("mail.simple") do
22
- m.subject("hello")
23
- end
24
- end