enju_leaf 1.1.0.rc8 → 1.1.0.rc9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/app/models/user_import_file.rb +19 -1
  3. data/app/views/page/import.html.erb +1 -1
  4. data/app/views/user_import_files/index.html.erb +14 -13
  5. data/app/views/user_import_files/new.html.erb +3 -3
  6. data/app/views/user_import_files/show.html.erb +34 -24
  7. data/app/views/user_import_results/index.csv.erb +4 -0
  8. data/app/views/user_import_results/index.html.erb +45 -26
  9. data/app/views/user_import_results/show.html.erb +21 -7
  10. data/config/routes.rb +4 -2
  11. data/lib/enju_leaf/engine.rb +1 -1
  12. data/lib/enju_leaf/version.rb +1 -1
  13. data/lib/generators/enju_leaf/setup/setup_generator.rb +2 -1
  14. data/lib/tasks/enju_leaf_tasks.rake +5 -0
  15. data/spec/dummy/db/test.sqlite3 +0 -0
  16. data/spec/dummy/solr/default/data/index/_ug.fdt +0 -0
  17. data/spec/dummy/solr/default/data/index/_ug.fdx +0 -0
  18. data/spec/dummy/solr/default/data/index/_ug.fnm +0 -0
  19. data/spec/dummy/solr/default/data/index/_ug.nvd +0 -0
  20. data/spec/dummy/solr/default/data/index/_ug.nvm +0 -0
  21. data/spec/dummy/solr/default/data/index/_ug.si +0 -0
  22. data/spec/dummy/solr/default/data/index/_ug_Lucene41_0.doc +0 -0
  23. data/spec/dummy/solr/default/data/index/_ug_Lucene41_0.pos +0 -0
  24. data/spec/dummy/solr/default/data/index/_ug_Lucene41_0.tim +0 -0
  25. data/spec/dummy/solr/default/data/index/_ug_Lucene41_0.tip +0 -0
  26. data/spec/dummy/solr/default/data/index/segments.gen +0 -0
  27. data/spec/dummy/solr/default/data/index/segments_1td +0 -0
  28. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000002342 +0 -0
  29. data/spec/dummy/solr/default/data/tlog/{tlog.0000000000000002055 → tlog.0000000000000002343} +0 -0
  30. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000002344 +0 -0
  31. data/spec/dummy/solr/default/data/tlog/{tlog.0000000000000002051 → tlog.0000000000000002345} +0 -0
  32. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000002346 +0 -0
  33. data/spec/dummy/solr/default/data/tlog/{tlog.0000000000000002057 → tlog.0000000000000002347} +0 -0
  34. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000002348 +0 -0
  35. data/spec/dummy/solr/default/data/tlog/{tlog.0000000000000002053 → tlog.0000000000000002349} +0 -0
  36. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000002350 +0 -0
  37. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000002351 +0 -0
  38. data/spec/dummy/tmp/cache/assets/test/sprockets/1b984bdbd3204a51a82d0e01a1569e2d +0 -0
  39. data/spec/dummy/tmp/cache/assets/test/sprockets/62899096da1a3e67660f3b88068be8c9 +0 -0
  40. data/spec/dummy/tmp/cache/assets/test/sprockets/65b2e4f67eab21b30217e29075f433b2 +0 -0
  41. data/spec/dummy/tmp/cache/assets/test/sprockets/87d24a3f43f175d4d17babe9203c79a7 +0 -0
  42. data/vendor/assets/javascripts/jquery.colorbox.js +66 -67
  43. data/vendor/assets/stylesheets/colorbox.css +1 -0
  44. metadata +54 -35
  45. data/spec/dummy/solr/default/data/index/segments_1la +0 -0
  46. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000002052 +0 -0
  47. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000002054 +0 -0
  48. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000002056 +0 -0
  49. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000002058 +0 -0
  50. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000002059 +0 -0
  51. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000002060 +0 -0
  52. data/vendor/assets/javascripts/jquery.mobile-1.3.2.js +0 -11215
  53. data/vendor/assets/stylesheets/jquery.mobile-1.3.2.css +0 -3370
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 95c3fa981db703247be47e617af09748f881e0fb
4
- data.tar.gz: 5b30d91bba0f73868770386ed1bf134f8de1785a
3
+ metadata.gz: 8dd72d60431ce017b6e0338731f59395a3bd0e6d
4
+ data.tar.gz: 44a890255ac3e0d19eddd9ecea9e11ece3c94482
5
5
  SHA512:
6
- metadata.gz: ecadaccd2485fc27abb73d6207f57d10735daa262cc201fe623096f341c9c01999e5805a33477f630bcad7e33ca8df73e807507df2923016485b9ca190ac9469
7
- data.tar.gz: ee5d4c22f1ff9126f8148796125c551c556caca31f371252745ac7207e5af5a51bfb2a559a56a2decbd79eae5bb1ae6235d2897f92f14fc1d02d70681869c1e0
6
+ metadata.gz: 337ff6f9b61732c1ab2154bb8710dd4cc3e48c303d8ab0291e5011a7519c35150e78609d42dbcf4ae30e903fff0f80f9275d243952232d4901994a44aaa94a18
7
+ data.tar.gz: 9698e2603a8815bd5e47ff35343776990c7125e6f18882a781acad7f2bfdd3a5d094ded545c54586f00c1ff9ded54f489e71c1d96bd81579dd85bacf7022b60d
@@ -105,12 +105,22 @@ class UserImportFile < ActiveRecord::Base
105
105
 
106
106
  if new_user.save!
107
107
  num[:user_imported] += 1
108
+ import_result.user = new_user
109
+ import_result.save!
108
110
  else
109
111
  num[:failed] += 1
110
112
  end
111
113
  end
112
114
  end
115
+
116
+ rows.close
117
+ sm_complete!
118
+ Sunspot.commit
113
119
  num
120
+ rescue => e
121
+ self.error_message = "line #{row_num}: #{e.message}"
122
+ sm_fail!
123
+ raise e
114
124
  end
115
125
 
116
126
  def modify
@@ -148,7 +158,7 @@ class UserImportFile < ActiveRecord::Base
148
158
  f.each{|line|
149
159
  if defined?(CharlockHolmes::EncodingDetector)
150
160
  begin
151
- string = line.encode('UTF-8', CharlockHolmes::EncodingDetector.detect(line)[:encoding])
161
+ string = line.encode('UTF-8', CharlockHolmes::EncodingDetector.detect(line)[:encoding], universal_newline: true)
152
162
  rescue StandardError
153
163
  string = NKF.nkf('-w -Lu', line)
154
164
  end
@@ -168,4 +178,12 @@ class UserImportFile < ActiveRecord::Base
168
178
  file.close
169
179
  rows
170
180
  end
181
+
182
+ def self.import
183
+ UserImportFile.not_imported.each do |file|
184
+ file.import_start
185
+ end
186
+ rescue
187
+ Rails.logger.info "#{Time.zone.now} importing resources failed!"
188
+ end
171
189
  end
@@ -4,7 +4,7 @@
4
4
 
5
5
  <ul>
6
6
  <li><%= link_to t('activerecord.models.user'), user_import_files_path -%>
7
- <li><%= link_to t('page.resource'), new_resource_import_file_path -%></li>
7
+ <li><%= link_to t('page.resource'), resource_import_files_path -%></li>
8
8
  <li><%= link_to t('activerecord.models.event'), event_import_files_path -%></li>
9
9
  <!--
10
10
  <li><%= link_to t('activerecord.models.agent'), agent_import_files_path -%></li>
@@ -1,32 +1,33 @@
1
- <div id="content_detail" class="ui-corner-all">
1
+ <div id="content_detail" class="ui-corner-all ui-widget-content">
2
2
  <h1 class="title"><%= t('page.listing', :model => t('activerecord.models.user_import_file')) -%></h1>
3
3
  <div id="content_list">
4
4
 
5
5
  <table class="table table-striped index">
6
6
  <thead>
7
7
  <tr>
8
+ <th>ID</th>
8
9
  <th><%= t('activerecord.attributes.user_import_file.user_import_file_name') -%></th>
9
10
  <th><%= t('activerecord.attributes.user_import_file.executed_at') -%></th>
10
11
  <th><%= t('activerecord.models.user') -%></th>
11
12
  <th><%= t('activerecord.attributes.user_import_file.edit_mode') -%></th>
12
13
  <th><%= t('activerecord.attributes.user_import_file.state') -%></th>
13
14
  <th></th>
14
- <th></th>
15
- <th></th>
16
15
  </tr>
17
16
  </thead>
18
17
 
19
18
  <tbody>
20
19
  <% @user_import_files.each do |user_import_file| %>
21
- <tr>
22
- <td><%= user_import_file.user_import_file_name %></td>
23
- <td><%= user_import_file.executed_at %></td>
24
- <td><%= link_to user_import_file.user.username, user_import_file.user if user_import_file.user %></td>
25
- <td><%= user_import_file.edit_mode %></td>
26
- <td><%= user_import_file.state %></td>
27
- <td><%= link_to 'Show', user_import_file %></td>
28
- <td><%= link_to 'Edit', edit_user_import_file_path(user_import_file) %></td>
29
- <td><%= link_to 'Destroy', user_import_file, method: :delete, data: { confirm: 'Are you sure?' } %></td>
20
+ <tr class="line<%= cycle("0", "1") -%>">
21
+ <td><%= link_to user_import_file.id, user_import_file -%></td>
22
+ <td><%= link_to user_import_file.user_import_file_name, user_import_file -%></td>
23
+ <td><%= l(user_import_file.executed_at) if user_import_file.executed_at -%></td>
24
+ <td><%= link_to user_import_file.user.username, user_import_file.user -%></td>
25
+ <td><%= user_import_file.edit_mode -%></td>
26
+ <td><%= localized_state(user_import_file.state) -%></td>
27
+ <td>
28
+ <%= link_to t('page.show'), user_import_file -%>
29
+ <%= link_to t('page.destroy'), user_import_file, :data => {:confirm => t('page.are_you_sure')}, :method => :delete -%>
30
+ </td>
30
31
  </tr>
31
32
  <% end %>
32
33
  </tbody>
@@ -36,7 +37,7 @@
36
37
  </div>
37
38
  </div>
38
39
 
39
- <div id="submenu" class="ui-corner-all">
40
+ <div id="submenu" class="ui-corner-all ui-widget-content">
40
41
  <ul>
41
42
  <li><%= link_to t('page.new', :model => t('activerecord.models.user_import_file')), new_user_import_file_path -%></li>
42
43
  </ul>
@@ -1,5 +1,5 @@
1
- <div id="content_detail" class="ui-corner-all">
2
- <h1 class="title"><%= t('page.new', :model => t('activerecord.models.resource_import_file')) -%></h1>
1
+ <div id="content_detail" class="ui-corner-all ui-widget-content">
2
+ <h1 class="title"><%= t('page.new', :model => t('activerecord.models.user_import_file')) -%></h1>
3
3
  <div id="content_list">
4
4
 
5
5
  <%= form_for(@user_import_file, :html => { :multipart => true }) do |f| %>
@@ -28,7 +28,7 @@
28
28
  </div>
29
29
  </div>
30
30
 
31
- <div id="submenu" class="ui-corner-all">
31
+ <div id="submenu" class="ui-corner-all ui-widget-content">
32
32
  <ul>
33
33
  <li><%= back_to_index(flash[:page_info]) %></li>
34
34
  </ul>
@@ -1,59 +1,69 @@
1
+ <div id="content_detail" class="ui-corner-all ui-widget-content">
2
+ <h1 class="title"><%= t('page.showing', :model => t('activerecord.models.user_import_file')) -%></h1>
3
+ <div id="content_list">
1
4
  <p id="notice"><%= notice %></p>
2
5
 
3
6
  <p>
4
- <strong>User:</strong>
5
- <%= @user_import_file.user_id %>
7
+ <strong>Id:</strong>
8
+ <%= @user_import_file.id -%>
6
9
  </p>
7
10
 
8
11
  <p>
9
- <strong>Note:</strong>
10
- <%= @user_import_file.note %>
12
+ <strong><%= t('activerecord.attributes.user_import_file.user_import_file_name') -%>:</strong>
13
+ <%= link_to @user_import_file.user_import_file_name, user_import_file_path(@user_import_file, :format => :download) -%>
11
14
  </p>
12
15
 
13
16
  <p>
14
- <strong>Executed at:</strong>
15
- <%= @user_import_file.executed_at %>
17
+ <strong><%= t('activerecord.attributes.user_import_file.user_import_content_type') -%>:</strong>
18
+ <%= @user_import_file.user_import_content_type -%>
16
19
  </p>
17
20
 
18
21
  <p>
19
- <strong>State:</strong>
20
- <%= @user_import_file.state %>
22
+ <strong><%= t('activerecord.attributes.user_import_file.user_import_file_size') -%>:</strong>
23
+ <%= @user_import_file.user_import_file_size -%>
21
24
  </p>
22
25
 
23
26
  <p>
24
- <strong>User import file name:</strong>
25
- <%= @user_import_file.user_import_file_name %>
27
+ <strong><%= t('activerecord.attributes.user_import_file.user_import_fingerprint') -%>:</strong>
28
+ <%= @user_import_file.user_import_fingerprint -%>
26
29
  </p>
27
30
 
28
31
  <p>
29
- <strong>User import content type:</strong>
30
- <%= @user_import_file.user_import_content_type %>
32
+ <strong><%= t('page.created_at') -%>:</strong>
33
+ <%= l(@user_import_file.created_at) if @user_import_file.created_at -%>
31
34
  </p>
32
35
 
33
36
  <p>
34
- <strong>User import file size:</strong>
35
- <%= @user_import_file.user_import_file_size %>
37
+ <strong><%= t('activerecord.attributes.user_import_file.executed_at') -%>:</strong>
38
+ <%= l(@user_import_file.executed_at) if @user_import_file.executed_at -%>
36
39
  </p>
37
40
 
38
41
  <p>
39
- <strong>User import updated at:</strong>
40
- <%= @user_import_file.user_import_updated_at %>
42
+ <strong><%= t('activerecord.attributes.user_import_file.edit_mode') -%>:</strong>
43
+ <%= @user_import_file.edit_mode -%>
41
44
  </p>
42
45
 
43
46
  <p>
44
- <strong>User import fingerprint:</strong>
45
- <%= @user_import_file.user_import_fingerprint %>
47
+ <strong><%= t('activerecord.attributes.user_import_file.state') -%>:</strong>
48
+ <%= localized_state(@user_import_file.state) -%>
46
49
  </p>
47
50
 
48
51
  <p>
49
- <strong>Edit mode:</strong>
50
- <%= @user_import_file.edit_mode %>
52
+ <strong><%= t('activerecord.attributes.user_import_file.error_message') -%>:</strong>
53
+ <%= @user_import_file.error_message -%>
51
54
  </p>
52
55
 
53
56
  <p>
54
- <strong>Error message:</strong>
55
- <%= @user_import_file.error_message %>
57
+ <strong><%= t('activerecord.models.user') -%>:</strong>
58
+ <%= link_to @user_import_file.user.username, @user_import_file.user -%>
56
59
  </p>
57
60
 
58
- <%= link_to 'Edit', edit_user_import_file_path(@user_import_file) %> |
59
- <%= link_to 'Back', user_import_files_path %>
61
+ </div>
62
+ </div>
63
+
64
+ <div id="submenu" class="ui-corner-all ui-widget-content">
65
+ <ul>
66
+ <li><%= link_to t('activerecord.models.user_import_result'), user_import_file_user_import_results_path(@user_import_file) -%></li>
67
+ <li><%= back_to_index(flash[:page_info]) -%></li>
68
+ </ul>
69
+ </div>
@@ -0,0 +1,4 @@
1
+ username
2
+ <%- @user_import_results.each do |user_import_result| -%>
3
+ <%= user_import_result.user.try(:username) %> <%= user_import_result.body %>
4
+ <%- end -%>
@@ -1,31 +1,50 @@
1
- <h1>Listing user_import_results</h1>
1
+ <div id="content_detail" class="ui-corner-all ui-widget-content">
2
+ <h1 class="title"><%= t('page.listing', :model => t('activerecord.models.user_import_result')) -%></h1>
3
+ <div id="content_list">
4
+ <% if @user_import_file %>
5
+ <h2 class="resource_title">
6
+ <%= link_to @user_import_file.user_import_file_name, @user_import_file %>
7
+ </h2>
8
+ <% end %>
2
9
 
3
- <table>
4
- <thead>
5
- <tr>
6
- <th>User import file</th>
7
- <th>User</th>
8
- <th>Body</th>
9
- <th></th>
10
- <th></th>
11
- <th></th>
12
- </tr>
13
- </thead>
10
+ <table class="table table-striped index">
11
+ <tr>
12
+ <th><%= t('activerecord.models.user_import_file') %></th>
13
+ <th><%= t('activerecord.models.user') %></th>
14
+ <th></th>
15
+ </tr>
14
16
 
15
- <tbody>
16
- <% @user_import_results.each do |user_import_result| %>
17
- <tr>
18
- <td><%= user_import_result.user_import_file_id %></td>
19
- <td><%= user_import_result.user_id %></td>
20
- <td><%= user_import_result.body %></td>
21
- <td><%= link_to 'Show', user_import_result %></td>
22
- <td><%= link_to 'Edit', edit_user_import_result_path(user_import_result) %></td>
23
- <td><%= link_to 'Destroy', user_import_result, method: :delete, data: { confirm: 'Are you sure?' } %></td>
24
- </tr>
25
- <% end %>
26
- </tbody>
17
+ <% @user_import_results.each do |user_import_result| %>
18
+ <tr class="line<%= cycle("0", "1") -%>">
19
+ <td>
20
+ <%= link_to user_import_result.user_import_file.user_import_file_name, user_import_result.user_import_file %>
21
+ <br />
22
+ <%=l user_import_result.created_at %>
23
+ </td>
24
+ <td><%= link_to user_import_result.user.username, user_import_result.user if user_import_result.user %></td>
25
+ <td>
26
+ <%= link_to t('page.show'), user_import_result %>
27
+ <%= link_to t('page.destroy'), user_import_result, :data => {:confirm => t('page.are_you_sure')}, :method => :delete %>
28
+ </td>
29
+ </tr>
30
+ <% end %>
27
31
  </table>
28
32
 
29
- <br>
33
+ <%= paginate(@user_import_results) %>
34
+
35
+ </div>
36
+ </div>
30
37
 
31
- <%= link_to 'New User import result', new_user_import_result_path %>
38
+ <div id="submenu" class="ui-corner-all ui-widget-content">
39
+ <ul>
40
+ <li>
41
+ <% if @user_import_file %>
42
+ <%= link_to((image_tag 'icons/page_white_excel.png', :size => '16x16', :alt => 'TSV', :class => 'icon'), user_import_file_user_import_results_path(@user_import_file, :format => :csv, :locale => @locale.to_s)) -%>
43
+ (<%= link_to 'CSV', user_import_file_user_import_results_path(:format => :csv, :locale => @locale.to_s) -%>)
44
+ <% else %>
45
+ <%= link_to((image_tag 'icons/page_white_excel.png', :size => '16x16', :alt => 'CSV', :class => 'icon'), user_import_results_path(:format => :csv, :locale => @locale.to_s)) -%>
46
+ (<%= link_to 'CSV', user_import_results_path(:format => :csv, :locale => @locale.to_s) -%>)
47
+ <% end %>
48
+ </li>
49
+ </ul>
50
+ </div>
@@ -1,19 +1,33 @@
1
+ <div id="content_detail" class="ui-corner-all ui-widget-content">
2
+ <h1 class="title"><%= t('page.showing', :model => t('activerecord.models.user_import_result')) -%></h1>
3
+ <div id="content_list">
1
4
  <p id="notice"><%= notice %></p>
2
5
 
3
6
  <p>
4
- <strong>User import file:</strong>
5
- <%= @user_import_result.user_import_file_id %>
7
+ <b><%= t('activerecord.models.user_import_file') %></b>
8
+ <%= @user_import_result.user_import_file.user_import_file_name %>
6
9
  </p>
7
10
 
8
11
  <p>
9
- <strong>User:</strong>
10
- <%= @user_import_result.user_id %>
12
+ <b><%= t('activerecord.models.user') %></b>
13
+ <%= link_to @user_import_result.user.username, @user_import_result.user if @user_import_result.user %>
11
14
  </p>
12
15
 
13
16
  <p>
14
- <strong>Body:</strong>
17
+ <b><%= t('activerecord.attributes.agent_import_result.body') %></b>
15
18
  <%= @user_import_result.body %>
16
19
  </p>
17
20
 
18
- <%= link_to 'Edit', edit_user_import_result_path(@user_import_result) %> |
19
- <%= link_to 'Back', user_import_results_path %>
21
+ <p>
22
+ <b><%= t('page.created_at') %></b>
23
+ <%=l @user_import_result.created_at %>
24
+ </p>
25
+
26
+ </div>
27
+ </div>
28
+
29
+ <div id="submenu" class="ui-corner-all ui-widget-content">
30
+ <ul>
31
+ <li><%= back_to_index(flash[:page_info]) -%></li>
32
+ </ul>
33
+ </div>
data/config/routes.rb CHANGED
@@ -3,9 +3,11 @@ Rails.application.routes.draw do
3
3
  mount Resque::Server.new, :at => "/resque", :as => :resque
4
4
  end
5
5
 
6
- resources :user_import_results
6
+ resources :user_import_results, :only => [:index, :show, :destroy]
7
7
 
8
- resources :user_import_files
8
+ resources :user_import_files do
9
+ resources :user_import_results, :only => [:index, :show, :destroy]
10
+ end
9
11
 
10
12
  resource :my_account
11
13
 
@@ -9,7 +9,7 @@ require 'sitemap_generator'
9
9
  require 'redis-rails'
10
10
  require 'jquery-rails'
11
11
  require 'jquery-ui-rails'
12
- require 'resque_scheduler/server'
12
+ require 'resque/scheduler/server'
13
13
 
14
14
  module EnjuLeaf
15
15
  class Engine < ::Rails::Engine
@@ -1,3 +1,3 @@
1
1
  module EnjuLeaf
2
- VERSION = "1.1.0.rc8"
2
+ VERSION = "1.1.0.rc9"
3
3
  end
@@ -14,7 +14,7 @@ class EnjuLeaf::SetupGenerator < Rails::Generators::Base
14
14
  "config.time_zone = 'Tokyo'"
15
15
  gsub_file 'config/schedule.rb', /\/path\/to\/enju_leaf/, Rails.root.to_s
16
16
  append_to_file("Rakefile", "require 'resque/tasks'\n")
17
- append_to_file("Rakefile", "require 'resque_scheduler/tasks'")
17
+ append_to_file("Rakefile", "require 'resque/scheduler/tasks'")
18
18
  append_to_file("db/seeds.rb", File.open(File.expand_path('../templates', __FILE__) + '/db/seeds.rb').read)
19
19
  append_to_file 'config/initializers/inflections.rb', <<EOS
20
20
  ActiveSupport::Inflector.inflections do |inflect|
@@ -40,6 +40,7 @@ EOS
40
40
  gsub_file 'config/routes.rb', /devise_for :users$/, "devise_for :users, :path => 'accounts'"
41
41
  gsub_file 'config/initializers/devise.rb', '# config.email_regexp = /\A[^@]+@[^@]+\z/', 'config.email_regexp = /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\Z/i'
42
42
  gsub_file 'config/initializers/devise.rb', '# config.authentication_keys = [ :email ]', 'config.authentication_keys = [ :username ]'
43
+ gsub_file 'config/initializers/devise.rb', '# config.secret_key', 'config.secret_key'
43
44
  gsub_file 'app/models/user.rb', /, :registerable,$/, ', #:registerable,'
44
45
  gsub_file 'app/models/user.rb', /, :trackable, :validatable$/, <<EOS
45
46
  , :trackable, #:validatable,
@@ -20,4 +20,9 @@ namespace :enju_leaf do
20
20
 
21
21
  puts 'indexing completed.'
22
22
  end
23
+
24
+ desc "import users from a TSV file"
25
+ task :user_import => :environment do
26
+ UserImportFile.import
27
+ end
23
28
  end
Binary file