umlaut 3.0.0beta3 → 3.0.0beta4

Sign up to get free protection for your applications and to get access to all the features.
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