umlaut 3.0.0alpha2 → 3.0.0alpha3

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 (46) hide show
  1. data/app/controllers/link_router_controller.rb +0 -14
  2. data/app/controllers/resolve_controller.rb +1 -14
  3. data/app/controllers/umlaut/controller_behavior.rb +15 -0
  4. data/app/models/sfx_db/sfx_db_base.rb +4 -0
  5. data/lib/generators/umlaut/install_generator.rb +1 -1
  6. data/lib/tasks/umlaut_migrate_permalinks.rake +106 -0
  7. data/lib/umlaut/version.rb +1 -1
  8. data/lib/umlaut.rb +9 -8
  9. data/test/dummy/config/database.yml +53 -0
  10. data/test/dummy/log/development.log +0 -12981
  11. metadata +115 -181
  12. data/lib/service_adaptors/sfx-new.rb +0 -557
  13. data/test/dummy/config/database.yml-jh +0 -19
  14. data/test/dummy/tmp/cache/assets/C5F/340/sprockets%2F99692920160b7a279b86a80415b79db7 +0 -0
  15. data/test/dummy/tmp/cache/assets/C70/4D0/sprockets%2F034ad2036e623081bd352800786dfe80 +0 -0
  16. data/test/dummy/tmp/cache/assets/C73/920/sprockets%2Fd371318f22900492fd180f17c5e2a504 +0 -9268
  17. data/test/dummy/tmp/cache/assets/C80/980/sprockets%2Fc94807409c1523d43e18d25f35d93c41 +0 -0
  18. data/test/dummy/tmp/cache/assets/C8F/780/sprockets%2Fe47e28558116fb5f8038754e60d1961d +0 -11769
  19. data/test/dummy/tmp/cache/assets/CAA/EB0/sprockets%2F1d179210e8b76f1ea63c802688a015e4 +0 -9271
  20. data/test/dummy/tmp/cache/assets/CBB/9C0/sprockets%2F706f28923fb754cad04b9107c89986a1 +0 -0
  21. data/test/dummy/tmp/cache/assets/CBF/B60/sprockets%2F08ca89671549936265dcb673bf02e36f +0 -0
  22. data/test/dummy/tmp/cache/assets/CC9/9F0/sprockets%2F306166316e2cafd13c15e62b51a2339d +0 -0
  23. data/test/dummy/tmp/cache/assets/CF6/F20/sprockets%2F5b2ffa1103079dfd555197838f87a99f +0 -0
  24. data/test/dummy/tmp/cache/assets/CF7/2B0/sprockets%2F25a7c73655bd3598173b39d9f98bcd46 +0 -862
  25. data/test/dummy/tmp/cache/assets/CFE/080/sprockets%2F37fe9f4255baddbd549a659914929398 +0 -0
  26. data/test/dummy/tmp/cache/assets/D22/060/sprockets%2F9aec77b768e91a802d284271c58e2f7e +0 -21357
  27. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  28. data/test/dummy/tmp/cache/assets/D33/6D0/sprockets%2F500129c57f1146e556ec3aacd6cd38c1 +0 -0
  29. data/test/dummy/tmp/cache/assets/D33/FD0/sprockets%2F2ba0b4e6334a77b923e5f770381bb2bf +0 -0
  30. data/test/dummy/tmp/cache/assets/D42/C20/sprockets%2Fbcf14e437b1582bf93b77670acf8e090 +0 -21353
  31. data/test/dummy/tmp/cache/assets/D50/A30/sprockets%2F7d8b294ac433db5d056538f8cf7c66b9 +0 -0
  32. data/test/dummy/tmp/cache/assets/D54/ED0/sprockets%2F71c9fa01091d432b131da3bb73faf3d4 +0 -872
  33. data/test/dummy/tmp/cache/assets/D65/590/sprockets%2Fc1bb92fc3406a126b7dd302edc96d629 +0 -0
  34. data/test/dummy/tmp/cache/assets/D71/6B0/sprockets%2Fde558b71b494cf09b1bf055c8dff0353 +0 -0
  35. data/test/dummy/tmp/cache/assets/D72/610/sprockets%2Fa8c708eeb30ef93de34d755d4f45d023 +0 -859
  36. data/test/dummy/tmp/cache/assets/D76/AD0/sprockets%2Fe2158cde93188cf5ab6457bc6d6602ec +0 -0
  37. data/test/dummy/tmp/cache/assets/D7A/E40/sprockets%2F9622ffcc499a57627cd1bb18fe31b8e4 +0 -11772
  38. data/test/dummy/tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384 +0 -0
  39. data/test/dummy/tmp/cache/assets/D9B/770/sprockets%2F8aacf02eb7dbb0949704b28f27b87e0b +0 -0
  40. data/test/dummy/tmp/cache/assets/DA6/A80/sprockets%2F92e26d8e58d5bcc8b8f6c25d1b05b9c1 +0 -0
  41. data/test/dummy/tmp/cache/assets/DE8/790/sprockets%2Fd1333bde2b9aafcc712d11dd09ab35d8 +0 -0
  42. data/test/dummy/tmp/cache/assets/DF7/F30/sprockets%2F7bc16c4109b17fabe29f8ddbbf732d1c +0 -374
  43. data/test/dummy/tmp/cache/assets/E03/570/sprockets%2F493bdc0ac14cd4f57fdfe4253f992bde +0 -0
  44. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  45. data/test/dummy/tmp/cache/assets/E0B/4B0/sprockets%2F7988df51a61c81ce6ede4a2d4c8cce4f +0 -377
  46. data/test/dummy/tmp/cache/assets/E5F/960/sprockets%2Fdc007b6cad5c7ef08e33ec28cfff0ef6 +0 -0
@@ -31,20 +31,6 @@ class LinkRouterController < UmlautController
31
31
 
32
32
  protected
33
33
 
34
- # Must return a Hash where each key is a unique service name, and
35
- # each value a hash that defines a service. Like the hash in services.yml
36
- # under default/services. By default, this method in fact just loads
37
- # and returns that hash, but can be over-ridden with local logic for
38
- # determining proper list of services for current request.
39
- #
40
- # Local over-ride could even in theory return a custom subclass of Collection,
41
- # with customized dispatch behavior. Probably not a great idea though.
42
- def create_collection
43
- # trim out ones with disabled:true
44
- services = ServiceStore.config["default"]["services"].reject {|id, hash| hash["disabled"] == true}
45
-
46
- return Collection.new(@user_request, services)
47
- end
48
34
 
49
35
 
50
36
  # Used to calculate a destination/target url for an Umlaut response item.
@@ -137,20 +137,7 @@ class ResolveController < UmlautController
137
137
  protected
138
138
 
139
139
 
140
- # Must return a Hash where each key is a unique service name, and
141
- # each value a hash that defines a service. Like the hash in services.yml
142
- # under default/services. By default, this method in fact just loads
143
- # and returns that hash, but can be over-ridden with local logic for
144
- # determining proper list of services for current request.
145
- #
146
- # Local over-ride could even in theory return a custom subclass of Collection,
147
- # with customized dispatch behavior. Probably not a great idea though.
148
- def create_collection
149
- # trim out ones with disabled:true
150
- services = ServiceStore.config["default"]["services"].reject {|id, hash| hash && hash["disabled"] == true}
151
-
152
- return Collection.new(@user_request, services)
153
- end
140
+
154
141
 
155
142
  # Retrives or sets up the relevant Umlaut Request, and returns it.
156
143
  def init_processing
@@ -16,5 +16,20 @@ module Umlaut::ControllerBehavior
16
16
  UmlautConfigurable.set_default_configuration!(controller.umlaut_config)
17
17
  end
18
18
 
19
+ protected
20
+
21
+ # Returns a Collection object with currently configured services.
22
+ # Loads from Rails.root/config/umlaut_services.yml
23
+ #
24
+ # Local app can in theory override in local UmlautController to have
25
+ # different custom behavior for calculating the collection, but this
26
+ # is not entirely tested yet.
27
+ def create_collection
28
+ # trim out ones with disabled:true
29
+ services = ServiceStore.config["default"]["services"].reject {|id, hash| hash && hash["disabled"] == true}
30
+
31
+ return Collection.new(@user_request, services)
32
+ end
33
+
19
34
 
20
35
  end
@@ -18,6 +18,10 @@ module SfxDb
18
18
  def readonly?()
19
19
  return true
20
20
  end
21
+
22
+ # ActiveRecord likes it when we tell it this is an abstract
23
+ # class only.
24
+ self.abstract_class = true
21
25
 
22
26
  # Atttempts to extract all URLs that SFX knows about from the db.
23
27
  # This process is not 100%, becuase of the way SFX calculates URLs
@@ -111,7 +111,7 @@ module Umlaut
111
111
  " " +
112
112
  word_wrap("After setting up your 'development' database in config/databases.yml, run `rake db:migrate`", :line_width => 60).
113
113
  split("\n").
114
- join("\n ")
114
+ join("\n ") + "\n"
115
115
  )
116
116
 
117
117
  end
@@ -0,0 +1,106 @@
1
+ namespace :umlaut do
2
+
3
+ desc "Migrate permalinks from an umlaut 2.x installation"
4
+ task :migrate_permalinks, [:connection] => [:environment] do |t,args|
5
+ old_connection_name = args[:connection] || "umlaut2_source"
6
+
7
+ begin
8
+ require 'activerecord-import'
9
+ ar_import = true
10
+ rescue LoadError
11
+ ar_import = false
12
+ end
13
+
14
+ # Turn off all caching we can think of with AR, cause it's gonna
15
+ # take too much memory!
16
+ IdentityMap.enabled = false
17
+
18
+
19
+ unless ActiveRecord::Base.configurations[old_connection_name]
20
+ raise Exception.new("You must have a connection for '#{old_connection_name}' configured in database.yml, pointing to the Umlaut 2.x source db.")
21
+ end
22
+
23
+ puts "\nWARNING: We will delete all existing permalinks from the '#{Rails.env}' database:"
24
+ puts " " + {}.merge(Permalink.connection_config).inspect
25
+ print "Sure you want to continue? (yes to continue) "
26
+ continue = $stdin.gets
27
+ raise Exception.new("Cancelled by user") unless continue.chomp == "yes"
28
+
29
+ Permalink.delete_all
30
+
31
+ # dynamically create a model for Permalinks in old
32
+ # db, set up with connection info to old db.
33
+ OldPermalink = Class.new(ActiveRecord::Base) do
34
+ self.set_table_name("permalinks")
35
+ # just to be safe
36
+ def read_only?
37
+ true
38
+ end
39
+ end
40
+ # Can't include this line in dynamic class generation above,
41
+ # have to do it now that we have a constant assigned, for it
42
+ # to work.
43
+ OldPermalink.establish_connection old_connection_name.to_sym
44
+
45
+ puts "\nThis may take a while #{"(include activerecord-import gem for faster importing)" unless ar_import}...\n"
46
+
47
+ # Read all the old Permalinks in, write em out to new
48
+ # db, _with same primary key_ since PK is used for actual
49
+ # user-facing permalinks. We don't copy the Referent relationship,
50
+ # we just copy enough to recreate, context_obj_serialized.
51
+ could_not_migrate = {
52
+ :count => 0,
53
+ :highest_id => 0,
54
+ :latest_date => 0
55
+ }
56
+ bulk_queue = []
57
+ i = 0
58
+ OldPermalink.find_each(:batch_size => 20000) do |old_p|
59
+ i += 1
60
+
61
+ if old_p.context_obj_serialized.blank?
62
+ could_not_migrate[:count] += 1
63
+ count_not_migrate[:highest_id] = [count_not_migrate[:highest_id], old_p.id].max
64
+ could_not_migrate[:latest_date] = [could_not_migrate[:latest_date], old_p.created_on].max
65
+ else
66
+ new_p = Permalink.new
67
+ new_p.id = old_p.id # keep the id the same!
68
+ new_p.created_on = old_p.created_on # why not keep it the same?
69
+ new_p.orig_rfr_id = old_p.orig_rfr_id # why not
70
+
71
+ # the important thing to be able to actually resolve it
72
+ new_p.context_obj_serialized = old_p.context_obj_serialized
73
+
74
+ if ar_import
75
+ bulk_queue << new_p
76
+ else
77
+ new_p.save!
78
+ end
79
+ end
80
+
81
+ print(".") if i % 1000 == 0
82
+
83
+ if ar_import && i % 10000 == 0
84
+ print "+"
85
+ Permalink.import(bulk_queue, :validate => false, :timestamps => false)
86
+ bulk_queue.clear
87
+ end
88
+
89
+ end
90
+
91
+ unless bulk_queue.empty?
92
+ print "+"
93
+ Permalink.import(bulk_queue, :validate => false, :timestamps => false)
94
+ end
95
+
96
+ puts "\nDone."
97
+
98
+ if could_not_migrate[:count] > 0
99
+ puts "\n\nCould not migrate #{could_not_migrate[:count]} permalinks"
100
+ puts " Ending at permalink #{could_not_migrate[:highest_id]}, "
101
+ puts " created at #{could_not_migrate[:latest_date]}"
102
+ end
103
+
104
+ end
105
+
106
+ end
@@ -1,3 +1,3 @@
1
1
  module Umlaut
2
- VERSION = "3.0.0alpha2"
2
+ VERSION = "3.0.0alpha3"
3
3
  end
data/lib/umlaut.rb CHANGED
@@ -25,13 +25,14 @@ module Umlaut
25
25
  # I don't entirely understand what's going on.
26
26
  #config.eager_load_paths << File.join(self.root, "lib")
27
27
 
28
- # This makes our rake tasks visible.
29
- rake_tasks do
30
- Dir.chdir(File.expand_path(File.join(File.dirname(__FILE__), '..'))) do
31
- Dir.glob(File.join('lib', 'tasks', '*.rake')).each do |railtie|
32
- load railtie
33
- end
34
- end
35
- end
28
+ # This makes our rake tasks visible. NOT NEEDED, tasks in lib/tasks
29
+ # are avail by default, this ends up doing a double load.
30
+ #rake_tasks do
31
+ # Dir.chdir(File.expand_path(File.join(File.dirname(__FILE__), '..'))) do
32
+ # Dir.glob(File.join('lib', 'tasks', '*.rake')).each do |railtie|
33
+ # load railtie
34
+ # end
35
+ # end
36
+ #end
36
37
  end
37
38
  end
@@ -0,0 +1,53 @@
1
+ # SQLite version 3.x
2
+ # gem install sqlite3
3
+ #
4
+ # Ensure the SQLite 3 gem is defined in your Gemfile
5
+ # gem 'sqlite3'
6
+ #
7
+ # UMLAUT: mysql db with mysql2 adapter strongly recommended for Umlaut, in both
8
+ # production and development. sqlite3 has unclear semantics under threaded
9
+ # concurrency which umlaut uses, and in many cases simply does not work.
10
+ #
11
+ # A high (connection) pool setting is also, sadly, generally
12
+ # required at present.
13
+ #
14
+ # development:
15
+ # adapter: mysql2
16
+ # host:
17
+ # username:
18
+ # password:
19
+ # database:
20
+ # pool: 30
21
+
22
+ development:
23
+ adapter: mysql2
24
+ database: umlaut3_dev
25
+ pool: 30
26
+ timeout: 5000
27
+ username: umlaut_app
28
+ password: uu21
29
+ host: app01.mse.jhu.edu
30
+
31
+ # Warning: The database defined as "test" will be erased and
32
+ # re-generated from your development database when you run "rake".
33
+ # Do not set this db to the same as development or production.
34
+ test:
35
+ adapter: sqlite3
36
+ database: db/test.sqlite3
37
+ pool: 5
38
+ timeout: 5000
39
+
40
+ production:
41
+ adapter: sqlite3
42
+ database: db/production.sqlite3
43
+ pool: 5
44
+ timeout: 5000
45
+
46
+
47
+ umlaut2_source:
48
+ adapter: mysql2
49
+ host: app01.mse.jhu.edu
50
+ database: umlaut_production
51
+ username: umlaut_app
52
+ password: uu21
53
+ encoding: utf8