enju_circulation 0.1.0.pre31 → 0.1.0.pre32

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