enju_circulation 0.1.0.pre31 → 0.1.0.pre32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/app/models/enju_circulation/ability.rb +4 -1
  3. data/app/models/reserve.rb +2 -2
  4. data/app/models/use_restriction.rb +13 -3
  5. data/app/views/checkins/_checkin.html.erb +10 -8
  6. data/lib/enju_circulation/item.rb +1 -1
  7. data/lib/enju_circulation/version.rb +1 -1
  8. data/lib/generators/enju_circulation/setup/templates/config/schedule.rb +4 -4
  9. data/lib/tasks/enju_circulation_tasks.rake +21 -1
  10. data/spec/dummy/config/initializers/devise.rb +2 -0
  11. data/spec/dummy/db/test.sqlite3 +0 -0
  12. data/spec/dummy/solr/conf/schema.xml +19 -2
  13. data/spec/dummy/solr/conf/solrconfig.xml +588 -855
  14. data/spec/dummy/solr/default/data/index/_4b.fdt +0 -0
  15. data/spec/dummy/solr/default/data/index/_4b.fdx +0 -0
  16. data/spec/dummy/solr/default/data/index/_4b.fnm +0 -0
  17. data/spec/dummy/solr/default/data/index/_4b.nvd +0 -0
  18. data/spec/dummy/solr/default/data/index/_4b.nvm +0 -0
  19. data/spec/dummy/solr/default/data/index/_4b.si +0 -0
  20. data/spec/dummy/solr/default/data/index/_4b_Lucene41_0.doc +0 -0
  21. data/spec/dummy/solr/default/data/index/_4b_Lucene41_0.pos +0 -0
  22. data/spec/dummy/solr/default/data/index/_4b_Lucene41_0.tim +0 -0
  23. data/spec/dummy/solr/default/data/index/_4b_Lucene41_0.tip +0 -0
  24. data/spec/dummy/solr/default/data/index/segments.gen +0 -0
  25. data/spec/dummy/solr/default/data/index/segments_8p +0 -0
  26. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000000303 +0 -0
  27. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000000304 +0 -0
  28. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000000305 +0 -0
  29. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000000306 +0 -0
  30. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000000307 +0 -0
  31. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000000308 +0 -0
  32. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000000309 +0 -0
  33. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000000310 +0 -0
  34. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000000311 +0 -0
  35. data/spec/dummy/solr/{data/test/spellchecker → development/data/index}/segments.gen +0 -0
  36. data/spec/dummy/solr/development/data/index/segments_1 +0 -0
  37. data/spec/dummy/solr/solr.xml +8 -0
  38. data/spec/dummy/solr/test/data/index/segments.gen +0 -0
  39. data/spec/dummy/solr/test/data/index/segments_1 +0 -0
  40. metadata +59 -33
  41. data/spec/dummy/db/development.sqlite3 +0 -0
  42. data/spec/dummy/solr/data/test/index/_3ed.fdt +0 -0
  43. data/spec/dummy/solr/data/test/index/_3ed.fdx +0 -0
  44. data/spec/dummy/solr/data/test/index/_3ed.fnm +0 -4
  45. data/spec/dummy/solr/data/test/index/_3ed.frq +0 -1
  46. data/spec/dummy/solr/data/test/index/_3ed.nrm +0 -1
  47. data/spec/dummy/solr/data/test/index/_3ed.prx +0 -0
  48. data/spec/dummy/solr/data/test/index/_3ed.tii +0 -0
  49. data/spec/dummy/solr/data/test/index/_3ed.tis +0 -0
  50. data/spec/dummy/solr/data/test/index/segments.gen +0 -0
  51. data/spec/dummy/solr/data/test/index/segments_6sj +0 -0
  52. data/spec/dummy/solr/data/test/spellchecker/segments_1 +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dedd68808f1e7f2e922af5529be97237a6aeefe2
4
- data.tar.gz: f4d2cb455f03830eb8059167a47762ecde58af11
3
+ metadata.gz: 87e73feef512a6ef555f86982f59f541dbfd1efa
4
+ data.tar.gz: 0d66f70320f865bea09fb0f432327975fa8f4836
5
5
  SHA512:
6
- metadata.gz: 74e721f2f556d8cd3d760bf45defb81504693e1b99cf636c6d5355969513985f0bb8e44bc7bf8402d02fa12fcd261a1b47fbdcce9429ddb1d09f3820ebb2849d
7
- data.tar.gz: 8fd577120312b000da5151c4120e18ddce9180060be9191660a3e9e3ee87eee81ee44014ace44c29afac6995eafd64e7055b53553f82cfb566353d2c61092afc
6
+ metadata.gz: 98223a49ba2217082f9fb50dad9399474bbf6a1a0c6532a173cf7ac1d0703375c862077f58fd433a3bb068617abbe9aca5aaaa18d11e3e719fae8a10c0af0a20
7
+ data.tar.gz: 33e5f44becadde09fcd0bbffc840fcb9007abffa1bc7c0d4b0d1ae41e98cb8c5c93e1d25893b36b095d0473e78f35d5c407ae1d1986117f055583fa5dd8b699e
@@ -8,6 +8,9 @@ module EnjuCirculation
8
8
  can [:destroy, :delete], Manifestation do |manifestation|
9
9
  manifestation.items.empty? and !manifestation.series_master? and !manifestation.is_reserved?
10
10
  end
11
+ can [:destroy, :delete], Item do |item|
12
+ true if item.removable?
13
+ end
11
14
  can :manage, [
12
15
  Basket,
13
16
  CarrierTypeHasCheckoutType,
@@ -38,7 +41,7 @@ module EnjuCirculation
38
41
  can [:destroy, :delete], LendingPolicy
39
42
  when 'Librarian'
40
43
  can [:destroy, :delete], Item do |item|
41
- item.checkouts.not_returned.empty?
44
+ true if item.removable?
42
45
  end
43
46
  can [:destroy, :delete], Manifestation do |manifestation|
44
47
  manifestation.items.empty? and !manifestation.series_master? and !manifestation.is_reserved?
@@ -318,7 +318,7 @@ class Reserve < ActiveRecord::Base
318
318
 
319
319
  def checked_out_now?
320
320
  if user and manifestation
321
- true if !(user.checkouts.not_returned.pluck(:item_id) & manifestation.items.pluck(:item_id)).empty?
321
+ true if !(user.checkouts.not_returned.pluck(:item_id) & manifestation.items.pluck('items.id')).empty?
322
322
  end
323
323
  end
324
324
 
@@ -337,7 +337,7 @@ class Reserve < ActiveRecord::Base
337
337
 
338
338
  expired_period = manifestation.try(:reservation_expired_period, user)
339
339
  if expired_period.nil?
340
- errors[:base] << I18n.t('reserve.this_agent_cannot_reserve')
340
+ errors[:base] << I18n.t('reserve.this_patron_cannot_reserve')
341
341
  end
342
342
  end
343
343
  end
@@ -1,10 +1,20 @@
1
1
  class UseRestriction < ActiveRecord::Base
2
2
  attr_accessible :name, :display_name, :note
3
- include MasterModel
4
- default_scope :order => 'use_restrictions.position'
5
- scope :available, where(:name => ['Not For Loan', 'Limited Circulation, Normal Loan Period'])
3
+ #include MasterModel
4
+ acts_as_list
5
+ validates :name, :presence => true, :format => {:with => /\A[0-9A-Za-z][0-9A-Za-z_\-\s,]*[0-9a-z]\Z/}
6
+ validates :display_name, :presence => true
7
+ before_validation :set_display_name, :on => :create
8
+ normalize_attributes :name
9
+
10
+ default_scope {order('use_restrictions.position')}
11
+ scope :available, -> {where(:name => ['Not For Loan', 'Limited Circulation, Normal Loan Period'])}
6
12
  has_many :item_has_use_restrictions
7
13
  has_many :items, :through => :item_has_use_restrictions
14
+
15
+ def set_display_name
16
+ self.display_name = "#{I18n.locale}: #{name}" if display_name.blank?
17
+ end
8
18
  end
9
19
 
10
20
  # == Schema Information
@@ -9,17 +9,19 @@
9
9
  <%- @checkins.each_with_index do |checkin, i| -%>
10
10
  <tr class="line<%= cycle("0", "1") -%>">
11
11
  <td>
12
- <%= render 'manifestations/show_index', :manifestation => checkin.item.manifestation if checkin.item.manifestation -%>
12
+ <%= render 'manifestations/show_index', :manifestation => checkin.item.manifestation if checkin.item.try(:manifestation) -%>
13
13
  </td>
14
14
  <td>
15
- <%= link_to checkin.item.item_identifier, checkin.item -%>
16
- <br />
17
- (<%= link_to checkin.item.shelf.library.display_name.localize, checkin.item.shelf.library %>)
18
- <% if defined?(EnjuInterLibraryLoan) %>
15
+ <% if checkin.item %>
16
+ <%= link_to checkin.item.item_identifier, checkin.item -%>
19
17
  <br />
20
- <%- unless checkin.item.shelf.library == current_user.library -%>
21
- <span style="color: red"><%= link_to t('activerecord.models.inter_library_loan'), item_inter_library_loans_path(checkin.item) -%></span>
22
- <%- end -%>
18
+ (<%= link_to checkin.item.shelf.library.display_name.localize, checkin.item.shelf.library %>)
19
+ <% if defined?(EnjuInterLibraryLoan) %>
20
+ <br />
21
+ <%- unless checkin.item.shelf.library == current_user.library -%>
22
+ <span style="color: red"><%= link_to t('activerecord.models.inter_library_loan'), item_inter_library_loans_path(checkin.item) -%></span>
23
+ <%- end -%>
24
+ <% end %>
23
25
  <% end %>
24
26
  </td>
25
27
  <td>
@@ -34,7 +34,7 @@ module EnjuCirculation
34
34
  scope :removed, includes(:circulation_status).where('circulation_statuses.name' => 'Removed')
35
35
  has_many :checkouts
36
36
  has_many :reserves
37
- has_many :checked_items, :dependent => :destroy
37
+ has_many :checked_items
38
38
  has_many :baskets, :through => :checked_items
39
39
  belongs_to :circulation_status, :validate => true
40
40
  belongs_to :checkout_type
@@ -1,3 +1,3 @@
1
1
  module EnjuCirculation
2
- VERSION = "0.1.0.pre31"
2
+ VERSION = "0.1.0.pre32"
3
3
  end
@@ -1,17 +1,17 @@
1
1
 
2
2
  every 5.minute do
3
- rake "enju:message:send"
3
+ rake "enju_message:send"
4
4
  end
5
5
 
6
6
  every 1.day, :at => '0:00 am' do
7
- rake "enju:circulation:expire"
7
+ rake "enju_circulation:expire"
8
8
  runner "User.lock_expired_users"
9
9
  end
10
10
 
11
11
  every 1.day, :at => '1:00 am' do
12
- rake "enju:circulation:stat"
12
+ rake "enju_circulation:stat"
13
13
  end
14
14
 
15
15
  every 1.day, :at => '5:00 am' do
16
- rake "enju:circulation:send_notification"
16
+ rake "enju_circulation:send_notification"
17
17
  end
@@ -1,6 +1,6 @@
1
1
  require 'active_record/fixtures'
2
- desc "create initial records for enju_circulation"
3
2
  namespace :enju_circulation do
3
+ desc "create initial records for enju_circulation"
4
4
  task :setup => :environment do
5
5
  Dir.glob(Rails.root.to_s + '/db/fixtures/enju_circulation/*.yml').each do |file|
6
6
  ActiveRecord::Fixtures.create_fixtures('db/fixtures/enju_circulation', File.basename(file, '.*'))
@@ -11,4 +11,24 @@ namespace :enju_circulation do
11
11
 
12
12
  puts 'initial fixture files loaded.'
13
13
  end
14
+
15
+ desc 'Calculate stats'
16
+ task :stat => :environment do
17
+ UserCheckoutStat.calculate_stat
18
+ UserReserveStat.calculate_stat
19
+ ManifestationCheckoutStat.calculate_stat
20
+ ManifestationReserveStat.calculate_stat
21
+ end
22
+
23
+ desc 'Expire circulations and reservations'
24
+ task :expire => :environment do
25
+ Reserve.expire
26
+ Basket.expire
27
+ end
28
+
29
+ desc 'Sending due date notifications'
30
+ task :send_notification => :environment do
31
+ Checkout.send_due_date_notification
32
+ Checkout.send_overdue_notification
33
+ end
14
34
  end
@@ -1,6 +1,8 @@
1
1
  # Use this hook to configure devise mailer, warden hooks and so forth.
2
2
  # Many of these configuration options can be set straight in your model.
3
3
  Devise.setup do |config|
4
+ config.secret_key = '7e21095c77c61417503b0b32ffe9ae8728eb3c689bce8a45562cbc2c1903d9ab177f6e902f2c97a1cdfe07a6f6459f06bf3fdd975ccebd72fa722489909836fc'
5
+
4
6
  # ==> Mailer Configuration
5
7
  # Configure the e-mail address which will be shown in Devise::Mailer,
6
8
  # note that it will be overwritten if you use your own mailer class with default "from" parameter.
Binary file
@@ -64,6 +64,7 @@
64
64
  <tokenizer class="solr.StandardTokenizerFactory"/>
65
65
  <filter class="solr.StandardFilterFactory"/>
66
66
  <filter class="solr.LowerCaseFilterFactory"/>
67
+ <filter class="solr.PorterStemFilterFactory"/>
67
68
  </analyzer>
68
69
  </fieldType>
69
70
  <!-- *** This fieldType is used by Sunspot! *** -->
@@ -84,11 +85,14 @@
84
85
  <fieldType name="tfloat" class="solr.TrieFloatField" omitNorms="true"/>
85
86
  <!-- *** This fieldType is used by Sunspot! *** -->
86
87
  <fieldType name="tdate" class="solr.TrieDateField" omitNorms="true"/>
88
+
89
+ <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
90
+ <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
87
91
  </types>
88
92
  <fields>
89
93
  <!-- Valid attributes for fields:
90
94
  name: mandatory - the name for the field
91
- type: mandatory - the name of a previously defined type from the
95
+ type: mandatory - the name of a previously defined type from the
92
96
  <types> section
93
97
  indexed: true if this field should be indexed (searchable or sortable)
94
98
  stored: true if this field should be retrievable
@@ -223,8 +227,21 @@
223
227
  <dynamicField name="*_ets" stored="true" termVectors="true" type="tdouble" multiValued="false" indexed="true"/>
224
228
  <!-- *** This dynamicField is used by Sunspot! *** -->
225
229
  <dynamicField name="*_etms" stored="true" termVectors="true" type="tdouble" multiValued="true" indexed="true"/>
230
+
231
+ <!-- Type used to index the lat and lon components for the "location" FieldType -->
232
+ <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false" multiValued="false"/>
233
+ <dynamicField name="*_p" type="location" indexed="true" stored="true" multiValued="false"/>
234
+
235
+ <dynamicField name="*_ll" stored="false" type="location" multiValued="false" indexed="true"/>
236
+ <dynamicField name="*_llm" stored="false" type="location" multiValued="true" indexed="true"/>
237
+ <dynamicField name="*_lls" stored="true" type="location" multiValued="false" indexed="true"/>
238
+ <dynamicField name="*_llms" stored="true" type="location" multiValued="true" indexed="true"/>
239
+
240
+ <!-- required by Solr 4 -->
241
+ <field name="_version_" type="string" indexed="true" stored="true" multiValued="false" />
226
242
  </fields>
227
- <!-- Field to use to determine and enforce document uniqueness.
243
+
244
+ <!-- Field to use to determine and enforce document uniqueness.
228
245
  Unless this field is marked with required="false", it will be a required field
229
246
  -->
230
247
  <uniqueKey>id</uniqueKey>