umlaut 3.0.0beta3 → 3.0.0beta4

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 (44) hide show
  1. data/app/controllers/store_controller.rb +1 -2
  2. data/app/controllers/umlaut_controller.rb +5 -0
  3. data/app/helpers/resolve_helper.rb +14 -2
  4. data/app/helpers/umlaut/footer_helper.rb +4 -0
  5. data/app/models/service_response.rb +7 -1
  6. data/app/views/resolve/_standard_response_item.html.erb +2 -2
  7. data/db/migrate/01_umlaut_init.rb +1 -10
  8. data/lib/service_adaptors/amazon.rb +5 -5
  9. data/lib/tasks/umlaut.rake +62 -43
  10. data/lib/umlaut/version.rb +1 -1
  11. data/lib/umlaut_configurable.rb +10 -17
  12. data/test/dummy/db/migrate/{20120229192032_umlaut_init.umlaut.rb → 20120402191628_umlaut_init.umlaut.rb} +1 -10
  13. data/test/dummy/db/schema.rb +1 -10
  14. data/test/dummy/tmp/cache/assets/C45/A30/sprockets%2F39494895e462697b478d3d0c79298a26 +0 -0
  15. data/test/dummy/tmp/cache/assets/C70/4D0/sprockets%2F034ad2036e623081bd352800786dfe80 +0 -0
  16. data/test/dummy/tmp/cache/assets/C80/980/sprockets%2Fc94807409c1523d43e18d25f35d93c41 +0 -0
  17. data/test/dummy/tmp/cache/assets/CBD/730/sprockets%2F034c1086748b981c36672d5a56e7fed6 +0 -0
  18. data/test/dummy/tmp/cache/assets/CBF/B60/sprockets%2F08ca89671549936265dcb673bf02e36f +0 -0
  19. data/test/dummy/tmp/cache/assets/CC9/9F0/sprockets%2F306166316e2cafd13c15e62b51a2339d +0 -0
  20. data/test/dummy/tmp/cache/assets/CD1/F20/sprockets%2F385e5fb31cf27e262480d1174be1d500 +0 -0
  21. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  22. data/test/dummy/tmp/cache/assets/CF7/2B0/sprockets%2F25a7c73655bd3598173b39d9f98bcd46 +0 -0
  23. data/test/dummy/tmp/cache/assets/CFE/080/sprockets%2F37fe9f4255baddbd549a659914929398 +0 -0
  24. data/test/dummy/tmp/cache/assets/D16/F90/sprockets%2F5fe3c021048c6f9a6086bed7736d87b1 +0 -0
  25. data/test/dummy/tmp/cache/assets/D24/360/sprockets%2F6987b047a96dc685ba3cf39b31477f6d +0 -0
  26. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  27. data/test/dummy/tmp/cache/assets/D37/2B0/sprockets%2F40834fb07d7318c1fddd5003bd9e04f6 +0 -0
  28. data/test/dummy/tmp/cache/assets/D43/0D0/sprockets%2F682843a8d0795a5fbcfeb2f0c81727d0 +0 -0
  29. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  30. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  31. data/test/dummy/tmp/cache/assets/D6C/7D0/sprockets%2F8a05d6981ec0d38c51739bef0b3a9c2b +0 -0
  32. data/test/dummy/tmp/cache/assets/D94/FF0/sprockets%2F3b56a1aa77de0d570c38a4a9d5f4b1d6 +0 -0
  33. data/test/dummy/tmp/cache/assets/D97/6B0/sprockets%2Fb070e8c799d1a4ad5e62e0a1ae3b83e6 +0 -0
  34. data/test/dummy/tmp/cache/assets/DC0/D20/sprockets%2F1ccf7405cd252dcec4bf23af82e2563a +0 -0
  35. data/test/dummy/tmp/cache/assets/DCF/7B0/sprockets%2Ffaa6a4d1af3261fca7b6ddc987386b90 +0 -0
  36. data/test/dummy/tmp/cache/assets/DD2/D80/sprockets%2Fc66d103807d0f971fbbcf9aa8b8b27ee +0 -0
  37. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  38. data/test/dummy/tmp/cache/assets/DE8/790/sprockets%2Fd1333bde2b9aafcc712d11dd09ab35d8 +0 -0
  39. data/test/dummy/tmp/cache/assets/DF7/960/sprockets%2F99ac6db10b44a64fbba4ee847b35ba8b +0 -0
  40. data/test/dummy/tmp/cache/assets/DFC/040/sprockets%2F15ea81cf915c0cb1dfc9cc04c9fef364 +0 -0
  41. data/test/dummy/tmp/cache/assets/DFD/300/sprockets%2Fabac9489cf7f1db8ef00d72a1571ee1e +0 -0
  42. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  43. data/test/dummy/tmp/cache/assets/E5F/960/sprockets%2Fdc007b6cad5c7ef08e33ec28cfff0ef6 +0 -0
  44. metadata +95 -35
@@ -16,9 +16,8 @@ class StoreController < UmlautController
16
16
  referent = perm.referent
17
17
  elsif (perm && perm.context_obj_serialized)
18
18
  stored_co = perm.restore_context_object
19
-
20
19
  # And a referrent, no referrer for now, we'll restore it later.
21
- referent = Referent.create_by_context_object( stored_co, nil, :permalink => false )
20
+ referent = Referent.create_by_context_object( stored_co, :permalink => false )
22
21
  perm.referent = referent
23
22
  end
24
23
 
@@ -30,6 +30,11 @@ class UmlautController < ApplicationController
30
30
  # OR name of image asset in local app.
31
31
  #link_img_url "http//something"
32
32
 
33
+ # string used in standard layout footer to identify your app.
34
+ # mark it html_safe if it includes html
35
+ # footer_credit "Find It service provided by <a href='http://www.university.edu/'>My University</a>".html_safe
36
+
37
+
33
38
  # Sometimes Umlaut sends out email, what email addr should it be from?
34
39
  # from_email_addr 'no_reply@umlaut.example.com'
35
40
 
@@ -118,6 +118,19 @@ module ResolveHelper
118
118
  end
119
119
  end
120
120
 
121
+ # If response has a :content key returns it -- and marks it html_safe
122
+ # if response has a :content_html_safe == true key.
123
+ # returns false if no :content.
124
+ def response_content(service_response)
125
+ content = service_response[:content]
126
+ return false unless content
127
+
128
+ content = content.html_safe if service_response[:content_html_safe] == true
129
+
130
+ return content
131
+ end
132
+
133
+
121
134
 
122
135
 
123
136
  # Code-generating helper to add a "More" link to a list, with a maximum
@@ -157,9 +170,8 @@ module ResolveHelper
157
170
 
158
171
 
159
172
  content = "".html_safe
160
-
161
173
  content <<
162
- content_tag(:ul, :class => ("" || options[:ul_class])) do
174
+ content_tag(:ul, :class => options[:ul_class]) do
163
175
  list.enum_for(:each_with_index).collect do |item, index|
164
176
  capture(item, index, &block) unless list.length > options[:limit] && index >= options[:limit]-2
165
177
  end.join(" \n ").html_safe
@@ -11,6 +11,10 @@ module Umlaut::FooterHelper
11
11
  if @collection
12
12
  content = "".html_safe
13
13
 
14
+ if umlaut_config.footer_credit
15
+ content << umlaut_config.footer_credit + " | "
16
+ end
17
+
14
18
  content << "Powered by ".html_safe + link_to("Umlaut", "http://github.com/team_umlaut/umlaut") + ". ".html_safe
15
19
 
16
20
  credit_segments = []
@@ -70,7 +70,13 @@ These are applicable only when the incoming OpenURL is an article-level citation
70
70
  == Abstracts/Tocs:
71
71
  Can be a link to, or actual content. Either way, should be set
72
72
  up to link to source of content if possible. Basic set, plus:
73
- [:content] actual content, if available.
73
+ [:content] actual content, if available.
74
+ [:content_html_safe] Set to true if content includes html which should be
75
+ passed through un-escaped. Service is responsible
76
+ for making sure the HTML is safe from injection
77
+ attacks (injection attacks from vendor API's? Why not?).
78
+ ActionView::Helpers::SanitizeHelper's #sanitize
79
+ method can convenient.
74
80
 
75
81
  =end
76
82
  class ServiceResponse < ActiveRecord::Base
@@ -26,12 +26,12 @@
26
26
  {:id => "svctype_link_#{service_response.id}",
27
27
  :target => "_blank",
28
28
  :class => "ajax_window"}) %>
29
- <% elsif (view_data[:content] )
29
+ <% elsif (content = response_content(view_data ))
30
30
  #collapsible content on page
31
31
  %>
32
32
  <%= expand_contract_section(view_data[:display_text], "svc_id_#{service_response.id}") do %>
33
33
  <div class="section_content_indent">
34
- <%= view_data[:content] %>
34
+ <%= content %>
35
35
  </div>
36
36
  <% end %>
37
37
 
@@ -94,16 +94,7 @@ class UmlautInit < ActiveRecord::Migration
94
94
  end
95
95
 
96
96
  add_index "service_responses", ["service_id", "response_key", "value_string", "value_alt_string"], :name => "svc_resp_service_id"
97
-
98
- create_table "sessions" do |t|
99
- t.string "session_id"
100
- t.text "data"
101
- t.datetime "updated_at"
102
- end
103
-
104
- add_index "sessions", ["session_id"], :name => "index_sessions_on_session_id"
105
- add_index "sessions", ["updated_at"], :name => "index_sessions_on_updated_at"
106
-
97
+
107
98
  create_table "sfx_urls" do |t|
108
99
  t.string "url"
109
100
  end
@@ -39,6 +39,7 @@ class Amazon < Service
39
39
 
40
40
 
41
41
  include MetadataHelper
42
+ include ActionView::Helpers::SanitizeHelper
42
43
 
43
44
  required_config_params :url, :api_key, :associate_tag
44
45
  attr_reader :url
@@ -181,7 +182,6 @@ class Amazon < Service
181
182
  err = (aws.at("ItemLookupResponse/Items/Request/Errors/Error"))
182
183
  err = (aws.at("ItemLookupErrorResponse")) if err.blank?
183
184
 
184
- debugger
185
185
  unless (err.blank?)
186
186
  if (err.at('Code').text == 'AWS.InvalidParameterValue')
187
187
  # Indicates an ISBN that Amazon doesn't know about, or that
@@ -227,9 +227,8 @@ class Amazon < Service
227
227
  if ( @service_types.include?("abstract") &&
228
228
  desc =
229
229
  (aws.at("ItemLookupResponse/Items/Item/EditorialReviews/EditorialReview/Content")))
230
-
231
- # For some reason we need to un-escape the desc. Don't entirely get it.
232
- desc_text = CGI.unescapeHTML( desc.inner_text )
230
+
231
+ desc_text = desc.inner_text
233
232
 
234
233
  unless ( desc_text.blank? )
235
234
  request.add_service_response(
@@ -238,7 +237,8 @@ class Amazon < Service
238
237
  :url => item_url,
239
238
  :key=>'abstract',
240
239
  :value_string=>asin,
241
- :content=>desc_text ,
240
+ :content=> sanitize(desc_text) ,
241
+ :content_html_safe => true,
242
242
  :service_type_value => 'abstract')
243
243
  end
244
244
  end
@@ -1,6 +1,6 @@
1
1
  namespace :umlaut do
2
2
  desc "Perform nightly maintenance. Set up in cron."
3
- task :nightly_maintenance => [:load_sfx_urls, :expire_sessions, :expire_old_data]
3
+ task :nightly_maintenance => [:load_sfx_urls, :expire_old_data]
4
4
 
5
5
 
6
6
 
@@ -47,44 +47,38 @@ namespace :umlaut do
47
47
  end
48
48
  end
49
49
 
50
- desc "Expire sessions older than config.app_config.session_expire_seconds"
51
- task :expire_sessions => :environment do
52
- # Assume sessions are in db.
53
- # Don't know good way to get the connection associated with sessions,
54
- # since there is no model. Assume Request is in the same db.
55
- expire_seconds = UmlautController.umlaut_config.lookup!("session_expire_seconds", 1.day)
56
- puts "Expiring sessions older than #{expire_seconds} seconds (set with config session_expire_seconds)."
57
- Request.connection.execute("delete from sessions where now() - updated_at > #{expire_seconds}")
58
- end
59
50
 
60
51
 
61
52
  desc "Cleanup of database for old data associated with expired sessions etc."
62
53
  task :expire_old_data => :environment do
63
54
  # There are requests, responses, and dispatched_service entries
64
55
  # hanging around for things that may be way old and no longer
65
- # need to hang around. How do we know if they're too old?
66
- # If they are no longer associated with any session, mainly.
56
+ # need to hang around.
67
57
 
68
58
  # Deleting things as aggressively as we're doing here doesn't leave
69
59
  # us much for statistics, but we aren't currently gathering any
70
60
  # statistics anyway. If statistics are needed, more exploration
71
61
  # is needed of performance vs. leaving things around for statistics.
72
62
 
73
- # For efficiency, we delete with direct DB calls, so don't count
74
- # on Rails business logic being triggered! Was just WAY too slow
75
- # otherwise. Also, sorry, doing all this in a db efficient way (one db
76
- # query) requires some tricky SQL, which be MySQL specific.
77
-
78
- # Current Umlaut never re-uses a request different between sessions, so
79
- # if the session is dead, we can purge the Requests too. Permalink
80
- # architecture has been fixed to not rely on requests or referents,
81
- # permalinks (post new architecture) store their own context object.
63
+ # Current Umlaut never re-uses a request different between sessions,
64
+ # and never uses Referents between requests.
65
+ # Permalink architecture has been fixed to not rely on requests or
66
+ # referents, permalinks (post new architecture) store their own context
67
+ # object.
68
+
69
+ # To make efficient SQL queries to delete 'orphaned' records whose
70
+ # foreign keys are neccesary... is tricky, with or without AR, and
71
+ # may vary in different dbs -- this works for MySQL, it's possible
72
+ # it will have a problem with Postgres, hasn't been tested.
82
73
 
83
- puts "Deleting Requests no longer associated with a session."
84
74
  begin_time = Time.now
85
- work_clause = " FROM requests LEFT OUTER JOIN sessions ON requests.session_id = sessions.session_id WHERE sessions.id is null "
86
- count = Request.count_by_sql("SELECT count(*) " + work_clause)
87
- Request.connection.execute("DELETE requests " + work_clause)
75
+
76
+ rdelete_time = Time.now - UmlautController.umlaut_config.lookup!("nightly_maintenance.request_expire_seconds", 1.day)
77
+ puts "Deleting Requests older than #{rdelete_time}"
78
+ rdelete = Request.where("created_at < ?", rdelete_time)
79
+
80
+ count = rdelete.count
81
+ rdelete.delete_all
88
82
  puts " Deleted #{count} Requests in #{Time.now - begin_time}"
89
83
 
90
84
 
@@ -96,38 +90,63 @@ namespace :umlaut do
96
90
 
97
91
  puts "Deleting orphaned ServiceResponses...."
98
92
  begin_time = Time.now
99
- work_clause = " FROM service_responses WHERE NOT EXISTS (SELECT * FROM requests WHERE service_responses.request_id = requests.id)"
100
- count = ServiceResponse.count_by_sql("SELECT count(*) " + work_clause)
101
- ServiceResponse.connection.execute("DELETE " + work_clause)
93
+ # DELETE FROM `service_responses` WHERE (NOT (EXISTS (SELECT `requests`.* FROM `requests` WHERE (service_responses.request_id = requests.id))))
94
+ sr_delete = ServiceResponse.where(
95
+ Request.where("#{ServiceResponse.arel_table.name}.request_id = requests.id").exists.not
96
+ )
97
+
98
+ count = sr_delete.count
99
+ sr_delete.delete_all
102
100
  puts " Deleted #{count} ServiceResponses in #{Time.now - begin_time}"
103
101
 
104
102
 
105
103
  # And get rid of DispatchedServices for 'dead' requests too. Don't
106
104
  # need em.
107
105
  puts "Deleting DispatchedServices for dead Requests..."
106
+ keep_failed = UmlautController.umlaut_config.lookup!("nightly_maintenance.failed_dispatch_expire_seconds", 4.weeks)
108
107
  begin_time = Time.now
109
- # Sorry, may be MySQL only.
110
- work_clause = " FROM (dispatched_services LEFT OUTER JOIN requests ON dispatched_services.request_id = requests.id) WHERE requests.id IS NULL "
111
- count = DispatchedService.count_by_sql("SELECT count(*) " + work_clause)
112
- DispatchedService.connection.execute("DELETE dispatched_services " + work_clause)
108
+ # DELETE FROM `dispatched_services` WHERE (NOT (EXISTS (SELECT `requests`.* FROM `requests` WHERE (dispatched_services.request_id = requests.id))))
109
+ ds_delete = DispatchedService.where("status NOT IN (?) OR updated_at < ?",
110
+ [DispatchedService::FailedFatal, DispatchedService::FailedTemporary], Time.now - keep_failed
111
+ ).where(
112
+ Request.where("dispatched_services.request_id = requests.id").exists.not
113
+ )
114
+ count = ds_delete.count
115
+ ds_delete.delete_all
113
116
  puts " Deleted #{count} DispatchedServices in #{Time.now - begin_time}"
114
117
 
115
118
 
116
- # Turns out we need to get rid of old referents and referentvalues
117
- # too. There are just too many. Permalinks have been updated to
118
- # store their own info and not depend on Referent existing.
119
- referent_expire = Time.now - UmlautController.umlaut_config.lookup!("referent_expire_seconds", 20.days)
120
- puts "Deleting Referents/ReferentValues older than #{referent_expire.inspect}"
119
+
120
+
121
+ puts "Deleting orphaned Referents"
121
122
  begin_time = Time.now
122
- # May be MySQL dependent.
123
- Referent.connection.execute("DELETE referents, referent_values FROM referents, referent_values where referents.id = referent_values.referent_id AND referents.created_at < '#{referent_expire.to_formatted_s(:db)}'" )
124
- puts " Deleted Referents in #{Time.now - begin_time}"
123
+ # DELETE FROM `referents` WHERE (NOT (EXISTS (SELECT `requests`.* FROM `requests` WHERE (referents.id = requests.referent_id))))
124
+ ref_delete = Referent.where(
125
+ Request.where("referents.id = requests.referent_id").exists.not
126
+ )
127
+ count = ref_delete.count
128
+ ref_delete.delete_all
129
+ puts " Deleted #{count} Referents in #{Time.now - begin_time}"
130
+
131
+
132
+ puts "Deleting orphaned ReferentValues"
133
+ begin_time = Time.now
134
+ # DELETE FROM `referent_values` WHERE (NOT (EXISTS (SELECT `referents`.* FROM `referents` WHERE (referents.id = referent_values.referent_id))))
135
+ rv_delete = ReferentValue.where(
136
+ Referent.where("referents.id = referent_values.referent_id").exists.not
137
+ )
138
+
139
+
140
+
141
+ count = rv_delete.count
142
+ rv_delete.delete_all
143
+ puts " Deleted #{count} ReferentValues in #{Time.now - begin_time}"
144
+
125
145
 
126
146
  # And turns out we have all Clickthroughs being stored for no apparent
127
147
  # reason, let's just delete any older than 3 months ago.
128
- Clickthrough.destroy_all(['created_at < ?', 3.months.ago])
129
- puts "Deleted Clickthroughs older than 3 months"
130
-
148
+ Clickthrough.delete_all(['created_at < ?', 3.months.ago])
149
+ puts "Deleted Clickthroughs older than 3 months"
131
150
  end
132
151
 
133
152
  end
@@ -1,3 +1,3 @@
1
1
  module Umlaut
2
- VERSION = "3.0.0beta3"
2
+ VERSION = "3.0.0beta4"
3
3
  end
@@ -29,6 +29,10 @@ module UmlautConfigurable
29
29
  # URL to image to use for link resolver, OR name of image asset in local app.
30
30
  #link_img_url "http//something"
31
31
 
32
+ # string used in standard layout footer to identify your app.
33
+ # mark it html_safe if it includes html
34
+ # footer_credit "Find It service provided by <a href='http://www.university.edu/'>My University</a>".html_safe
35
+
32
36
  # Sometimes Umlaut sends out email, what email addr should it be from?
33
37
  from_email_addr 'no_reply@umlaut.example.com'
34
38
 
@@ -134,24 +138,13 @@ module UmlautConfigurable
134
138
  entry_not_in_kb_warning true
135
139
 
136
140
  nightly_maintenance do
137
- # When nightly_maintenance will expire sessions. Default to
138
- # 1 day. Over-ride locally if desired, but
139
- # probably no reason to.
140
- session_expire_seconds 1.day
141
- referent_expire_seconds deferred! {|c| c.session_expire_seconds }
142
-
141
+ # How old does a request have to be to be deleted by nightly_maintenance?
142
+ # requests are only re-used within a session. Probably no reason to
143
+ # change this.
144
+ request_expire_seconds 1.day
143
145
 
144
- # Expire service responses. Service responses are only re-used by the same
145
- # session that generated them. But sometimes even that's too much, we
146
- # want to expire them eventually, say every 24 hours.
147
- # You can do this in two ways.
148
- #
149
- # A Number of seconds in an interval, eg:
150
- response_expire_interval 1.day
151
- #
152
- # Or, sometimes it's convenient to synchronize this with some other
153
- # process that runs on crontab. Say, expire at midnight every night:
154
- # response_expire_crontab_format "00 00 * * *"
146
+ # How long to keep FAILED DispatchServices, for viewing problems/troubleshooting
147
+ failed_dispatch_expire_seconds 4.weeks
155
148
 
156
149
  end
157
150
 
@@ -95,16 +95,7 @@ class UmlautInit < ActiveRecord::Migration
95
95
  end
96
96
 
97
97
  add_index "service_responses", ["service_id", "response_key", "value_string", "value_alt_string"], :name => "svc_resp_service_id"
98
-
99
- create_table "sessions" do |t|
100
- t.string "session_id"
101
- t.text "data"
102
- t.datetime "updated_at"
103
- end
104
-
105
- add_index "sessions", ["session_id"], :name => "index_sessions_on_session_id"
106
- add_index "sessions", ["updated_at"], :name => "index_sessions_on_updated_at"
107
-
98
+
108
99
  create_table "sfx_urls" do |t|
109
100
  t.string "url"
110
101
  end
@@ -11,7 +11,7 @@
11
11
  #
12
12
  # It's strongly recommended to check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(:version => 20120229192032) do
14
+ ActiveRecord::Schema.define(:version => 20120402191628) do
15
15
 
16
16
  create_table "clickthroughs", :force => true do |t|
17
17
  t.integer "request_id", :default => 0, :null => false
@@ -108,15 +108,6 @@ ActiveRecord::Schema.define(:version => 20120229192032) do
108
108
 
109
109
  add_index "service_responses", ["service_id", "response_key", "value_string", "value_alt_string"], :name => "svc_resp_service_id"
110
110
 
111
- create_table "sessions", :force => true do |t|
112
- t.string "session_id"
113
- t.text "data"
114
- t.datetime "updated_at"
115
- end
116
-
117
- add_index "sessions", ["session_id"], :name => "index_sessions_on_session_id"
118
- add_index "sessions", ["updated_at"], :name => "index_sessions_on_updated_at"
119
-
120
111
  create_table "sfx_urls", :force => true do |t|
121
112
  t.string "url"
122
113
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: umlaut
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0beta3
4
+ version: 3.0.0beta4
5
5
  prerelease: 5
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: 2012-03-29 00:00:00.000000000 Z
12
+ date: 2012-04-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &131198600 !ruby/object:Gem::Requirement
16
+ requirement: &223216140 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.2.2
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *131198600
24
+ version_requirements: *223216140
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: jquery-rails
27
- requirement: &131198180 !ruby/object:Gem::Requirement
27
+ requirement: &223215720 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *131198180
35
+ version_requirements: *223215720
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: nokogiri
38
- requirement: &131197620 !ruby/object:Gem::Requirement
38
+ requirement: &224032220 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - =
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.5.0
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *131197620
46
+ version_requirements: *224032220
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: openurl
49
- requirement: &131197120 !ruby/object:Gem::Requirement
49
+ requirement: &224031720 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 0.3.0
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *131197120
57
+ version_requirements: *224031720
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: marc
60
- requirement: &131196640 !ruby/object:Gem::Requirement
60
+ requirement: &224031240 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 0.4.3
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *131196640
68
+ version_requirements: *224031240
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: isbn
71
- requirement: &131196260 !ruby/object:Gem::Requirement
71
+ requirement: &224030800 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *131196260
79
+ version_requirements: *224030800
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: htmlentities
82
- requirement: &131195800 !ruby/object:Gem::Requirement
82
+ requirement: &224030200 !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: :runtime
89
89
  prerelease: false
90
- version_requirements: *131195800
90
+ version_requirements: *224030200
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: multi_json
93
- requirement: &133072740 !ruby/object:Gem::Requirement
93
+ requirement: &224029580 !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: :runtime
100
100
  prerelease: false
101
- version_requirements: *133072740
101
+ version_requirements: *224029580
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: confstruct
104
- requirement: &133072240 !ruby/object:Gem::Requirement
104
+ requirement: &224028780 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ~>
@@ -109,21 +109,21 @@ dependencies:
109
109
  version: '0.2'
110
110
  type: :runtime
111
111
  prerelease: false
112
- version_requirements: *133072240
112
+ version_requirements: *224028780
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: exlibris-primo
115
- requirement: &133071820 !ruby/object:Gem::Requirement
115
+ requirement: &224028280 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
- - - ! '>='
118
+ - - ~>
119
119
  - !ruby/object:Gem::Version
120
- version: '0'
120
+ version: 0.1.0
121
121
  type: :runtime
122
122
  prerelease: false
123
- version_requirements: *133071820
123
+ version_requirements: *224028280
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: single_test
126
- requirement: &133071280 !ruby/object:Gem::Requirement
126
+ requirement: &224027780 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ~>
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: 0.5.1
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *133071280
134
+ version_requirements: *224027780
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: uglifier
137
- requirement: &133070860 !ruby/object:Gem::Requirement
137
+ requirement: &224027200 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ! '>='
@@ -142,10 +142,10 @@ dependencies:
142
142
  version: '0'
143
143
  type: :development
144
144
  prerelease: false
145
- version_requirements: *133070860
145
+ version_requirements: *224027200
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: therubyracer
148
- requirement: &133070400 !ruby/object:Gem::Requirement
148
+ requirement: &224026480 !ruby/object:Gem::Requirement
149
149
  none: false
150
150
  requirements:
151
151
  - - ! '>='
@@ -153,10 +153,10 @@ dependencies:
153
153
  version: '0'
154
154
  type: :development
155
155
  prerelease: false
156
- version_requirements: *133070400
156
+ version_requirements: *224026480
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: ruby-prof
159
- requirement: &133069980 !ruby/object:Gem::Requirement
159
+ requirement: &224025900 !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements:
162
162
  - - ! '>='
@@ -164,7 +164,7 @@ dependencies:
164
164
  version: '0'
165
165
  type: :development
166
166
  prerelease: false
167
- version_requirements: *133069980
167
+ version_requirements: *224025900
168
168
  description:
169
169
  email:
170
170
  - umlaut-general@rubyforge.org
@@ -375,6 +375,36 @@ files:
375
375
  - ./test/integration/request_test.rb
376
376
  - ./test/integration/request_reuse_test.rb
377
377
  - ./test/integration/permalinks_test.rb
378
+ - ./test/dummy/tmp/cache/assets/D16/F90/sprockets%2F5fe3c021048c6f9a6086bed7736d87b1
379
+ - ./test/dummy/tmp/cache/assets/DE8/790/sprockets%2Fd1333bde2b9aafcc712d11dd09ab35d8
380
+ - ./test/dummy/tmp/cache/assets/CD1/F20/sprockets%2F385e5fb31cf27e262480d1174be1d500
381
+ - ./test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6
382
+ - ./test/dummy/tmp/cache/assets/D94/FF0/sprockets%2F3b56a1aa77de0d570c38a4a9d5f4b1d6
383
+ - ./test/dummy/tmp/cache/assets/CBD/730/sprockets%2F034c1086748b981c36672d5a56e7fed6
384
+ - ./test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953
385
+ - ./test/dummy/tmp/cache/assets/E5F/960/sprockets%2Fdc007b6cad5c7ef08e33ec28cfff0ef6
386
+ - ./test/dummy/tmp/cache/assets/D24/360/sprockets%2F6987b047a96dc685ba3cf39b31477f6d
387
+ - ./test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705
388
+ - ./test/dummy/tmp/cache/assets/CFE/080/sprockets%2F37fe9f4255baddbd549a659914929398
389
+ - ./test/dummy/tmp/cache/assets/DFD/300/sprockets%2Fabac9489cf7f1db8ef00d72a1571ee1e
390
+ - ./test/dummy/tmp/cache/assets/CF7/2B0/sprockets%2F25a7c73655bd3598173b39d9f98bcd46
391
+ - ./test/dummy/tmp/cache/assets/D43/0D0/sprockets%2F682843a8d0795a5fbcfeb2f0c81727d0
392
+ - ./test/dummy/tmp/cache/assets/C80/980/sprockets%2Fc94807409c1523d43e18d25f35d93c41
393
+ - ./test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994
394
+ - ./test/dummy/tmp/cache/assets/D6C/7D0/sprockets%2F8a05d6981ec0d38c51739bef0b3a9c2b
395
+ - ./test/dummy/tmp/cache/assets/D37/2B0/sprockets%2F40834fb07d7318c1fddd5003bd9e04f6
396
+ - ./test/dummy/tmp/cache/assets/DFC/040/sprockets%2F15ea81cf915c0cb1dfc9cc04c9fef364
397
+ - ./test/dummy/tmp/cache/assets/DF7/960/sprockets%2F99ac6db10b44a64fbba4ee847b35ba8b
398
+ - ./test/dummy/tmp/cache/assets/CBF/B60/sprockets%2F08ca89671549936265dcb673bf02e36f
399
+ - ./test/dummy/tmp/cache/assets/D97/6B0/sprockets%2Fb070e8c799d1a4ad5e62e0a1ae3b83e6
400
+ - ./test/dummy/tmp/cache/assets/CC9/9F0/sprockets%2F306166316e2cafd13c15e62b51a2339d
401
+ - ./test/dummy/tmp/cache/assets/C70/4D0/sprockets%2F034ad2036e623081bd352800786dfe80
402
+ - ./test/dummy/tmp/cache/assets/DCF/7B0/sprockets%2Ffaa6a4d1af3261fca7b6ddc987386b90
403
+ - ./test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655
404
+ - ./test/dummy/tmp/cache/assets/C45/A30/sprockets%2F39494895e462697b478d3d0c79298a26
405
+ - ./test/dummy/tmp/cache/assets/DC0/D20/sprockets%2F1ccf7405cd252dcec4bf23af82e2563a
406
+ - ./test/dummy/tmp/cache/assets/DD2/D80/sprockets%2Fc66d103807d0f971fbbcf9aa8b8b27ee
407
+ - ./test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af
378
408
  - ./test/dummy/tmp/performance/ProfilerTest#test_puts_foo_process_time_graph.html
379
409
  - ./test/dummy/tmp/performance/BenchmarkerTest#test_puts_foo_gc_time.csv
380
410
  - ./test/dummy/tmp/performance/minus.png
@@ -419,7 +449,7 @@ files:
419
449
  - ./test/dummy/script/rails
420
450
  - ./test/dummy/config.ru
421
451
  - ./test/dummy/db/schema.rb
422
- - ./test/dummy/db/migrate/20120229192032_umlaut_init.umlaut.rb
452
+ - ./test/dummy/db/migrate/20120402191628_umlaut_init.umlaut.rb
423
453
  - ./test/performance/browsing_test.rb
424
454
  - ./test/unit/aws_product_sign_test.rb
425
455
  - ./test/unit/service_test.rb
@@ -451,7 +481,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
451
481
  version: '0'
452
482
  segments:
453
483
  - 0
454
- hash: 907568800525957015
484
+ hash: -556718949677620916
455
485
  required_rubygems_version: !ruby/object:Gem::Requirement
456
486
  none: false
457
487
  requirements:
@@ -469,6 +499,36 @@ test_files:
469
499
  - ./test/integration/request_test.rb
470
500
  - ./test/integration/request_reuse_test.rb
471
501
  - ./test/integration/permalinks_test.rb
502
+ - ./test/dummy/tmp/cache/assets/D16/F90/sprockets%2F5fe3c021048c6f9a6086bed7736d87b1
503
+ - ./test/dummy/tmp/cache/assets/DE8/790/sprockets%2Fd1333bde2b9aafcc712d11dd09ab35d8
504
+ - ./test/dummy/tmp/cache/assets/CD1/F20/sprockets%2F385e5fb31cf27e262480d1174be1d500
505
+ - ./test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6
506
+ - ./test/dummy/tmp/cache/assets/D94/FF0/sprockets%2F3b56a1aa77de0d570c38a4a9d5f4b1d6
507
+ - ./test/dummy/tmp/cache/assets/CBD/730/sprockets%2F034c1086748b981c36672d5a56e7fed6
508
+ - ./test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953
509
+ - ./test/dummy/tmp/cache/assets/E5F/960/sprockets%2Fdc007b6cad5c7ef08e33ec28cfff0ef6
510
+ - ./test/dummy/tmp/cache/assets/D24/360/sprockets%2F6987b047a96dc685ba3cf39b31477f6d
511
+ - ./test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705
512
+ - ./test/dummy/tmp/cache/assets/CFE/080/sprockets%2F37fe9f4255baddbd549a659914929398
513
+ - ./test/dummy/tmp/cache/assets/DFD/300/sprockets%2Fabac9489cf7f1db8ef00d72a1571ee1e
514
+ - ./test/dummy/tmp/cache/assets/CF7/2B0/sprockets%2F25a7c73655bd3598173b39d9f98bcd46
515
+ - ./test/dummy/tmp/cache/assets/D43/0D0/sprockets%2F682843a8d0795a5fbcfeb2f0c81727d0
516
+ - ./test/dummy/tmp/cache/assets/C80/980/sprockets%2Fc94807409c1523d43e18d25f35d93c41
517
+ - ./test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994
518
+ - ./test/dummy/tmp/cache/assets/D6C/7D0/sprockets%2F8a05d6981ec0d38c51739bef0b3a9c2b
519
+ - ./test/dummy/tmp/cache/assets/D37/2B0/sprockets%2F40834fb07d7318c1fddd5003bd9e04f6
520
+ - ./test/dummy/tmp/cache/assets/DFC/040/sprockets%2F15ea81cf915c0cb1dfc9cc04c9fef364
521
+ - ./test/dummy/tmp/cache/assets/DF7/960/sprockets%2F99ac6db10b44a64fbba4ee847b35ba8b
522
+ - ./test/dummy/tmp/cache/assets/CBF/B60/sprockets%2F08ca89671549936265dcb673bf02e36f
523
+ - ./test/dummy/tmp/cache/assets/D97/6B0/sprockets%2Fb070e8c799d1a4ad5e62e0a1ae3b83e6
524
+ - ./test/dummy/tmp/cache/assets/CC9/9F0/sprockets%2F306166316e2cafd13c15e62b51a2339d
525
+ - ./test/dummy/tmp/cache/assets/C70/4D0/sprockets%2F034ad2036e623081bd352800786dfe80
526
+ - ./test/dummy/tmp/cache/assets/DCF/7B0/sprockets%2Ffaa6a4d1af3261fca7b6ddc987386b90
527
+ - ./test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655
528
+ - ./test/dummy/tmp/cache/assets/C45/A30/sprockets%2F39494895e462697b478d3d0c79298a26
529
+ - ./test/dummy/tmp/cache/assets/DC0/D20/sprockets%2F1ccf7405cd252dcec4bf23af82e2563a
530
+ - ./test/dummy/tmp/cache/assets/DD2/D80/sprockets%2Fc66d103807d0f971fbbcf9aa8b8b27ee
531
+ - ./test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af
472
532
  - ./test/dummy/tmp/performance/ProfilerTest#test_puts_foo_process_time_graph.html
473
533
  - ./test/dummy/tmp/performance/BenchmarkerTest#test_puts_foo_gc_time.csv
474
534
  - ./test/dummy/tmp/performance/minus.png
@@ -513,7 +573,7 @@ test_files:
513
573
  - ./test/dummy/script/rails
514
574
  - ./test/dummy/config.ru
515
575
  - ./test/dummy/db/schema.rb
516
- - ./test/dummy/db/migrate/20120229192032_umlaut_init.umlaut.rb
576
+ - ./test/dummy/db/migrate/20120402191628_umlaut_init.umlaut.rb
517
577
  - ./test/performance/browsing_test.rb
518
578
  - ./test/unit/aws_product_sign_test.rb
519
579
  - ./test/unit/service_test.rb