talia_core 0.4.2 → 0.4.3
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.
- data/VERSION.yml +1 -1
- data/generators/generator_helpers.rb +35 -2
- data/generators/talia_admin/talia_admin_generator.rb +6 -0
- data/generators/talia_admin/templates/controllers/admin/background_controller.rb +2 -0
- data/generators/talia_admin/templates/controllers/admin/roles_controller.rb +8 -0
- data/generators/talia_admin/templates/controllers/admin/sources_controller.rb +2 -64
- data/generators/talia_admin/templates/controllers/admin/users_controller.rb +3 -41
- data/generators/talia_admin/templates/controllers/admin_controller.rb +1 -1
- data/generators/talia_admin/templates/helpers/admin/roles_helper.rb +2 -0
- data/generators/talia_admin/templates/helpers/admin/users_helper.rb +9 -0
- data/generators/talia_admin/templates/helpers/admin_helper.rb +19 -0
- data/generators/{talia_base → talia_admin}/templates/migrations/populate_users.rb +5 -2
- data/generators/talia_admin/templates/models/role.rb +3 -0
- data/generators/talia_admin/templates/public/stylesheets/backend.css +1 -4
- data/generators/talia_admin/templates/views/admin/index.html.erb +3 -3
- data/generators/talia_admin/templates/views/admin/sources/_show.html.erb +13 -0
- data/generators/talia_admin/templates/views/layouts/admin.html.erb +5 -5
- data/generators/talia_base/talia_base_generator.rb +11 -18
- data/generators/talia_base/templates/README +15 -0
- data/generators/talia_base/templates/app/controllers/sources_controller.rb +125 -7
- data/generators/talia_base/templates/app/helpers/sources_helper.rb +19 -35
- data/generators/talia_base/templates/app/views/sources/index.html.erb +12 -1
- data/generators/talia_base/templates/app/views/sources/semantic_templates/default/default.html.erb +21 -0
- data/generators/talia_base/templates/app/views/sources/semantic_templates/default/province.html.erb +19 -0
- data/generators/talia_base/templates/config/routes.rb +24 -4
- data/generators/talia_base/templates/script/setup_talia_backend +35 -0
- data/lib/loader_helper.rb +8 -1
- data/lib/talia_core/active_source.rb +9 -6
- data/lib/talia_core/active_source_parts/class_methods.rb +2 -1
- data/lib/talia_core/active_source_parts/predicate_handler.rb +12 -0
- data/lib/talia_core/active_source_parts/rdf.rb +1 -1
- data/lib/talia_core/data_types/iip_loader.rb +2 -0
- data/lib/talia_core/dc_resource.rb +1 -1
- data/lib/talia_core/initializer.rb +2 -0
- data/lib/talia_core/semantic_relation.rb +1 -1
- data/lib/talia_util/rake_tasks.rb +2 -2
- data/lib/talia_util/util.rb +1 -1
- data/test/talia_core/active_source_predicate_test.rb +2 -6
- data/test/talia_core/active_source_rdf_test.rb +9 -5
- data/test/talia_core/active_source_test.rb +50 -44
- data/test/talia_core/data_types/data_loader_test.rb +2 -2
- data/test/talia_core/data_types/data_record_test.rb +1 -1
- data/test/talia_core/data_types/file_record_test.rb +4 -3
- data/test/talia_core/data_types/iip_data_test.rb +2 -2
- data/test/talia_core/data_types/image_data_test.rb +1 -1
- data/test/talia_core/data_types/pdf_data_test.rb +1 -1
- data/test/talia_core/data_types/xml_data_test.rb +3 -2
- data/test/talia_core/initializer_test.rb +1 -1
- data/test/talia_core/ordered_source_test.rb +1 -5
- data/test/talia_core/rdf_resource_test.rb +1 -5
- data/test/talia_core/semantic_collection_item_test.rb +3 -7
- data/test/talia_core/source_test.rb +7 -12
- data/test/talia_core/workflow/publication_workflow_test.rb +36 -23
- data/test/talia_util/import_job_helper_test.rb +1 -5
- data/test/test_helper.rb +18 -5
- metadata +11 -52
- data/generators/talia_admin/templates/test/fixtures/users.yml +0 -32
- data/generators/talia_admin/templates/test/unit/user_test.rb +0 -134
- data/generators/talia_admin/templates/views/admin/sources/_data.html.erb +0 -6
- data/generators/talia_admin/templates/views/admin/sources/_data_form.html.erb +0 -15
- data/generators/talia_admin/templates/views/admin/sources/_form.html.erb +0 -7
- data/generators/talia_admin/templates/views/admin/sources/_list.html.erb +0 -3
- data/generators/talia_admin/templates/views/admin/sources/_notice.html.erb +0 -1
- data/generators/talia_admin/templates/views/admin/sources/_predicate.html.erb +0 -22
- data/generators/talia_admin/templates/views/admin/sources/_predicates.html.erb +0 -15
- data/generators/talia_admin/templates/views/admin/sources/_sources.html.erb +0 -17
- data/generators/talia_admin/templates/views/admin/sources/_upload.html.erb +0 -6
- data/generators/talia_admin/templates/views/admin/sources/edit.html.erb +0 -6
- data/generators/talia_admin/templates/views/admin/sources/index.html.erb +0 -5
- data/generators/talia_admin/templates/views/admin/users/_form.html.erb +0 -10
- data/generators/talia_admin/templates/views/admin/users/_form_roles.html.erb +0 -8
- data/generators/talia_admin/templates/views/admin/users/edit.html.erb +0 -12
- data/generators/talia_admin/templates/views/admin/users/index.html.erb +0 -22
- data/generators/talia_admin/templates/views/admin/users/new.html.erb +0 -5
- data/generators/talia_admin/templates/views/admin/users/show.html.erb +0 -6
- data/generators/talia_base/templates/app/controllers/sessions_controller.rb +0 -90
- data/generators/talia_base/templates/app/controllers/source_data/show.html.erb +0 -2
- data/generators/talia_base/templates/app/helpers/source_data/show.html.erb +0 -2
- data/generators/talia_base/templates/app/views/sessions/new.html.erb +0 -33
- data/generators/talia_base/templates/migrations/create_open_id.rb +0 -26
- data/generators/talia_base/templates/migrations/create_roles.rb +0 -20
- data/generators/talia_base/templates/migrations/create_sessions.rb +0 -16
- data/generators/talia_base/templates/migrations/create_users.rb +0 -20
- data/lib/role.rb +0 -12
- data/lib/talia_cl/command_line.rb +0 -39
- data/lib/talia_cl/commands/standalone/cl_options.rb +0 -9
- data/lib/talia_cl/commands/standalone/standalone_generate.rb +0 -75
- data/lib/talia_cl/commands/standalone.rb +0 -25
- data/lib/talia_cl/commands/talia_console/cl_options.rb +0 -55
- data/lib/talia_cl/commands/talia_console/console_commands.rb +0 -37
- data/lib/talia_cl/commands/talia_console/talia_commands.rb +0 -131
- data/lib/talia_cl/commands/talia_console.rb +0 -47
- data/lib/talia_cl/core_commands.rb +0 -11
- data/lib/talia_cl.rb +0 -47
- data/lib/user.rb +0 -116
data/VERSION.yml
CHANGED
|
@@ -19,6 +19,26 @@ module GeneratorHelpers
|
|
|
19
19
|
m.migration_template "migrations/#{template_name}", "db/migrate", :migration_file_name => template_name.gsub(/\.rb\Z/, '')
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
# This is more of a quick hack, but the functionality requires extra plugins
|
|
23
|
+
# and by installing them from the generator everything can be done with
|
|
24
|
+
# one single command
|
|
25
|
+
def install_plugin(plugin_url)
|
|
26
|
+
system("#{ruby_bin} #{plugin_script} install #{plugin_url}")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Path to the plugin (installer) script
|
|
30
|
+
def plugin_script
|
|
31
|
+
@plugin_script ||= File.join(RAILS_ROOT, 'script', 'plugin')
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Path to the ruby binary that we're currently using
|
|
35
|
+
def ruby_bin
|
|
36
|
+
@ruby_bin ||= begin
|
|
37
|
+
c = ::Config::CONFIG
|
|
38
|
+
File.join(c['bindir'], c['ruby_install_name']) << c['EXEEXT']
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
22
42
|
end
|
|
23
43
|
|
|
24
44
|
# This monkeypatches a problem in the generator that causes it to have
|
|
@@ -32,15 +52,28 @@ module Rails
|
|
|
32
52
|
|
|
33
53
|
alias :orig_migration_string :next_migration_string
|
|
34
54
|
|
|
55
|
+
def migration_xtime
|
|
56
|
+
@migration_xtime ||= Time.now
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def migration_time
|
|
60
|
+
@migration_time ||= migration_xtime.utc.strftime('%Y%m%d%H%M')
|
|
61
|
+
end
|
|
62
|
+
|
|
35
63
|
def migration_count
|
|
36
|
-
@m_count ||=
|
|
64
|
+
@m_count ||= begin
|
|
65
|
+
Dir.glob("#{RAILS_ROOT}/#{@migration_directory}/#{migration_time}*.rb").inject(migration_xtime.sec) do |max, file|
|
|
66
|
+
n = File.basename(file)[12..13].to_i
|
|
67
|
+
(n > max) ? n : max
|
|
68
|
+
end
|
|
69
|
+
end
|
|
37
70
|
@m_count += 1
|
|
38
71
|
@m_count
|
|
39
72
|
end
|
|
40
73
|
|
|
41
74
|
def next_migration_string(padding = 3)
|
|
42
75
|
return orig_migration_string(padding) unless(ActiveRecord::Base.timestamped_migrations)
|
|
43
|
-
|
|
76
|
+
migration_time + ("%.2d" % migration_count)
|
|
44
77
|
end
|
|
45
78
|
|
|
46
79
|
end
|
|
@@ -13,6 +13,12 @@ class TaliaAdminGenerator < Rails::Generator::Base
|
|
|
13
13
|
files_in m, 'controllers', 'app/'
|
|
14
14
|
files_in m, 'public'
|
|
15
15
|
files_in m, 'test'
|
|
16
|
+
|
|
17
|
+
m.directory 'app/models'
|
|
18
|
+
m.file 'models/role.rb', 'app/models/role.rb', :collision => :force
|
|
19
|
+
|
|
20
|
+
m.directory 'db/migrate'
|
|
21
|
+
make_migration m, "populate_users.rb"
|
|
16
22
|
end
|
|
17
23
|
end
|
|
18
24
|
|
|
@@ -1,71 +1,9 @@
|
|
|
1
|
-
require 'paginator'
|
|
2
|
-
|
|
3
1
|
class Admin::SourcesController < ApplicationController
|
|
4
|
-
include TaliaCore
|
|
5
2
|
require_role 'admin'
|
|
6
3
|
layout 'admin'
|
|
7
|
-
cache_sweeper :av_media_sweeper, :only => :update
|
|
8
4
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def index
|
|
12
|
-
@sources = TaliaCore::Source.paginate :page => params[:page], :per_page => 10
|
|
13
|
-
|
|
14
|
-
respond_to do |format|
|
|
15
|
-
format.html # index.html.erb
|
|
16
|
-
format.xml { render :xml => @sources }
|
|
17
|
-
format.js do
|
|
18
|
-
render :update do |page|
|
|
19
|
-
page.replace_html 'sources', :partial => 'sources'
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# GET /admin/sources/1/edit
|
|
26
|
-
def edit
|
|
27
|
-
@source = TaliaCore::Source.find_by_partial_uri(params[:id])
|
|
5
|
+
active_scaffold 'TaliaCore::ActiveSource' do |config|
|
|
6
|
+
config.columns = [:uri, :type]
|
|
28
7
|
end
|
|
29
8
|
|
|
30
|
-
# PUT /admin/sources/1
|
|
31
|
-
# PUT /admin/sources/1.xml
|
|
32
|
-
def update
|
|
33
|
-
@source = TaliaCore::Source.find_by_id(params[:id])
|
|
34
|
-
|
|
35
|
-
respond_to do |format|
|
|
36
|
-
if @source.update_attributes(params[:source])
|
|
37
|
-
flash[:notice] = 'Source was successfully updated.'
|
|
38
|
-
format.html { redirect_to :action => "index" }
|
|
39
|
-
format.xml { head :ok }
|
|
40
|
-
else
|
|
41
|
-
format.html { render :action => "edit" }
|
|
42
|
-
format.xml { render :xml => @source.errors, :status => :unprocessable_entity }
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
# GET /admin/sources/data/1
|
|
48
|
-
def data
|
|
49
|
-
# We need to specify the clause, because of Source#find overwrite the
|
|
50
|
-
# default behavior.
|
|
51
|
-
@source = TaliaCore::Source.find_by_id(params[:id])
|
|
52
|
-
|
|
53
|
-
respond_to do |format|
|
|
54
|
-
format.js do
|
|
55
|
-
render :update do |page|
|
|
56
|
-
page.replace_html 'list', :partial => 'list'
|
|
57
|
-
page.insert_html :top, 'data', :partial => 'notice', :locals => { :text => 'Your file has been saved.'}
|
|
58
|
-
page[:data_notice].visual_effect :highlight
|
|
59
|
-
page[:data_notice].visual_effect :fade, :duration => 3
|
|
60
|
-
page.delay(3.1) { page.remove :data_notice }
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# GET /admin/sources/auto_complete_for_source/aaa
|
|
67
|
-
def auto_complete_for_source
|
|
68
|
-
@items = TaliaCore::Source.find_by_uri_token(params[:source][:predicates_attributes].first[:titleized])
|
|
69
|
-
render :inline => "<%= auto_complete_result @items, 'titleized' %>"
|
|
70
|
-
end
|
|
71
9
|
end
|
|
@@ -1,48 +1,10 @@
|
|
|
1
1
|
class Admin::UsersController < ApplicationController
|
|
2
2
|
require_role 'admin'
|
|
3
3
|
layout 'admin'
|
|
4
|
-
PER_PAGE = 10
|
|
5
|
-
|
|
6
|
-
def index
|
|
7
|
-
@users = User.paginate(:page => params[:page], :per_page => PER_PAGE)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def show
|
|
11
|
-
@user = User.find(params[:id])
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def new
|
|
15
|
-
@user = User.new
|
|
16
|
-
end
|
|
17
4
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if @user.save
|
|
22
|
-
flash[:notice] = "User was successfully created."
|
|
23
|
-
redirect_to :action => 'show', :id => @user
|
|
24
|
-
else
|
|
25
|
-
render :action => 'new'
|
|
26
|
-
end
|
|
5
|
+
active_scaffold :user do |config|
|
|
6
|
+
config.columns = [:login, :name, :email, :password, :password_confirmation, :roles]
|
|
7
|
+
list.columns.exclude :password, :password_confirmation
|
|
27
8
|
end
|
|
28
9
|
|
|
29
|
-
def edit
|
|
30
|
-
@user = User.find(params[:id])
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def update
|
|
34
|
-
@user = User.find(params[:id])
|
|
35
|
-
|
|
36
|
-
if @user.update_attributes(params[:user])
|
|
37
|
-
flash[:notice] = "User was successfully updated."
|
|
38
|
-
redirect_to :action => 'show', :id => @user
|
|
39
|
-
else
|
|
40
|
-
render :action => 'edit'
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def destroy
|
|
45
|
-
User.find(params[:id]).destroy
|
|
46
|
-
redirect_to :action => 'index'
|
|
47
|
-
end
|
|
48
10
|
end
|
|
@@ -1,2 +1,11 @@
|
|
|
1
1
|
module Admin::UsersHelper
|
|
2
|
+
|
|
3
|
+
def password_form_column(record, field_name)
|
|
4
|
+
password_field_tag field_name, record.password
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def password_confirmation_form_column(record, field_name)
|
|
8
|
+
password_field_tag field_name, record.password_confirmation
|
|
9
|
+
end
|
|
10
|
+
|
|
2
11
|
end
|
|
@@ -8,4 +8,23 @@ module AdminHelper
|
|
|
8
8
|
["Print Page", "javascript:print();"]
|
|
9
9
|
] )
|
|
10
10
|
end
|
|
11
|
+
|
|
12
|
+
# Returns the title for the whole page. This returns the value
|
|
13
|
+
# set in the controller, or a default value
|
|
14
|
+
def page_title
|
|
15
|
+
@page_title || TaliaCore::SITE_NAME
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Show each <tt>flash</tt> status (<tt>:notice</tt>, <tt>:error</tt>) only if it's present.
|
|
19
|
+
def show_flash
|
|
20
|
+
[:notice, :error].collect do |status|
|
|
21
|
+
%(<div id="#{status}">#{flash[status]}</div>) unless flash[status].nil?
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Defines the pages that are visible in the menu
|
|
26
|
+
def active_pages
|
|
27
|
+
%w(users background sources) # translations not working at the moment, templates not ready for generic use
|
|
28
|
+
end
|
|
29
|
+
|
|
11
30
|
end
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
class PopulateUsers < ActiveRecord::Migration
|
|
2
2
|
def self.up
|
|
3
3
|
admins = Role.create :name => 'admin'
|
|
4
|
-
Role.create :name => 'user'
|
|
5
|
-
admin = User.create :login => 'admin', :email => 'admin@admins.
|
|
4
|
+
users = Role.create :name => 'user'
|
|
5
|
+
admin = User.create :login => 'admin', :email => 'admin@admins.com', :password => 'adminadmin', :password_confirmation => 'adminadmin'
|
|
6
6
|
admin.roles << admins
|
|
7
|
+
admins.save!
|
|
8
|
+
users.save!
|
|
9
|
+
admin.save!
|
|
7
10
|
end
|
|
8
11
|
|
|
9
12
|
def self.down
|
|
@@ -255,7 +255,7 @@ div.main_menu_box a{
|
|
|
255
255
|
float: left;
|
|
256
256
|
text-align:center;
|
|
257
257
|
padding: 0 20px;
|
|
258
|
-
|
|
258
|
+
margin-right: 30px;
|
|
259
259
|
font-size: 20px;
|
|
260
260
|
font-family:Georgia, "Times New Roman", Times, serif;
|
|
261
261
|
}
|
|
@@ -267,14 +267,11 @@ div.main_menu_box a:hover{
|
|
|
267
267
|
}
|
|
268
268
|
|
|
269
269
|
#users_access a{
|
|
270
|
-
margin-right: 30px;
|
|
271
270
|
}
|
|
272
271
|
#sources_access a{
|
|
273
|
-
margin-right: 30px;
|
|
274
272
|
}
|
|
275
273
|
|
|
276
274
|
#custom_templates_access a{
|
|
277
|
-
margin-right: 30px;
|
|
278
275
|
}
|
|
279
276
|
|
|
280
277
|
#translations_access a{
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<% for
|
|
2
|
-
<div id="<%=
|
|
3
|
-
<%= link_to h(
|
|
1
|
+
<% for admin_page in active_pages %>
|
|
2
|
+
<div id="<%= admin_page %>_access" class="main_menu_box">
|
|
3
|
+
<%= link_to h(admin_page.titleize), :controller => "admin/#{h(admin_page)}" %>
|
|
4
4
|
</div>
|
|
5
5
|
<% end %>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<% @source = TaliaCore::ActiveSource.find(:first, :conditions => { :id => params[:id] }, :prefetch_relations => true) %>
|
|
2
|
+
|
|
3
|
+
<h1><%= @source[N::DCNS.title].first || N::URI.new(@source).to_name_s %></h1>
|
|
4
|
+
<% for pred in @source.direct_predicates %>
|
|
5
|
+
<h2><%= N::URI.new(pred).to_name_s %></h2>
|
|
6
|
+
<ul>
|
|
7
|
+
<% for prop in @source[pred] %>
|
|
8
|
+
<li>
|
|
9
|
+
<%= prop.is_a?(TaliaCore::ActiveSource) ? link_to(N::URI.new(prop.uri).to_name_s, prop.uri.to_s) : prop.to_s %>
|
|
10
|
+
</li>
|
|
11
|
+
<% end %>
|
|
12
|
+
</ul>
|
|
13
|
+
<% end %>
|
|
@@ -32,11 +32,11 @@
|
|
|
32
32
|
|
|
33
33
|
<div id="menu">
|
|
34
34
|
<ul>
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
<li><%= link_to('Logout', '
|
|
35
|
+
<li><%= link_to('Home', '/') %>
|
|
36
|
+
<% for admin_page in active_pages %>
|
|
37
|
+
<li><%= link_to(admin_page.titleize, :controller => "admin/#{admin_page}")%></li>
|
|
38
|
+
<% end %>
|
|
39
|
+
<li><%= link_to('Logout', :controller => 'sessions', :action => 'destroy') %></li>
|
|
40
40
|
</ul>
|
|
41
41
|
</div>
|
|
42
42
|
|
|
@@ -4,14 +4,9 @@ class TaliaBaseGenerator < Rails::Generator::Base
|
|
|
4
4
|
|
|
5
5
|
include GeneratorHelpers
|
|
6
6
|
|
|
7
|
-
def manifest
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
c = ::Config::CONFIG
|
|
11
|
-
ruby = File.join(c['bindir'], c['ruby_install_name']) << c['EXEEXT']
|
|
12
|
-
|
|
13
|
-
system("#{ruby} #{plugin_script} install git://github.com/activescaffold/active_scaffold.git")
|
|
14
|
-
system("#{ruby} #{plugin_script} install git://github.com/timcharper/role_requirement.git")
|
|
7
|
+
def manifest
|
|
8
|
+
install_plugin("git://github.com/activescaffold/active_scaffold.git")
|
|
9
|
+
install_plugin("git://github.com/timcharper/role_requirement.git")
|
|
15
10
|
|
|
16
11
|
record do |m|
|
|
17
12
|
# Some initialization stuff
|
|
@@ -24,6 +19,7 @@ class TaliaBaseGenerator < Rails::Generator::Base
|
|
|
24
19
|
m.directory 'script'
|
|
25
20
|
m.file 'script/configure_talia', 'script/configure_talia', :shebang => DEFAULT_SHEBANG, :chmod => 0755
|
|
26
21
|
m.file 'script/prepare_images', 'script/prepare_images', :shebang => DEFAULT_SHEBANG, :chmod => 0755
|
|
22
|
+
m.file 'script/setup_talia_backend', 'script/setup_talia_backend', :shebang => DEFAULT_SHEBANG, :chmod => 0755
|
|
27
23
|
|
|
28
24
|
# The whole app shebang of files
|
|
29
25
|
files_in m, 'app'
|
|
@@ -31,14 +27,15 @@ class TaliaBaseGenerator < Rails::Generator::Base
|
|
|
31
27
|
# The default ontologies
|
|
32
28
|
files_in m, 'ontologies'
|
|
33
29
|
|
|
30
|
+
# Set up the rake tasks, only if we come from a gem
|
|
31
|
+
if(Gem.source_index.find_name('talia_core').first)
|
|
32
|
+
m.directory 'lib/tasks'
|
|
33
|
+
m.file 'tasks/talia_core.rk', 'lib/tasks/talia_core.rake'
|
|
34
|
+
end
|
|
35
|
+
|
|
34
36
|
# Add the migrations
|
|
35
37
|
m.directory 'db/migrate'
|
|
36
38
|
m.file "migrations/constraint_migration.rb", "db/migrate/constraint_migration.rb"
|
|
37
|
-
make_migration m, "create_sessions.rb"
|
|
38
|
-
make_migration m, "create_users.rb"
|
|
39
|
-
make_migration m, "create_open_id.rb"
|
|
40
|
-
make_migration m, "create_roles.rb"
|
|
41
|
-
make_migration m, "populate_users.rb"
|
|
42
39
|
make_migration m, "create_active_sources.rb"
|
|
43
40
|
make_migration m, "create_semantic_relations.rb"
|
|
44
41
|
make_migration m, "create_semantic_properties.rb"
|
|
@@ -49,11 +46,7 @@ class TaliaBaseGenerator < Rails::Generator::Base
|
|
|
49
46
|
make_migration m, "create_progress_jobs.rb"
|
|
50
47
|
make_migration m, "bj_migration.rb"
|
|
51
48
|
|
|
52
|
-
|
|
53
|
-
if(Gem.source_index.find_name('talia_core').first)
|
|
54
|
-
m.directory 'lib/tasks'
|
|
55
|
-
m.file 'tasks/talia_core.rk', 'lib/tasks/talia_core.rake'
|
|
56
|
-
end
|
|
49
|
+
m.readme 'README'
|
|
57
50
|
end
|
|
58
51
|
end
|
|
59
52
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
The Core classes were successfully installed. You can now run
|
|
3
|
+
|
|
4
|
+
script/configure_talia
|
|
5
|
+
|
|
6
|
+
to set up the main configuration for database and RDF store. You can also
|
|
7
|
+
create the configuration by hand.
|
|
8
|
+
|
|
9
|
+
WARNING: Talia can create HUGE loge files, depending on the level. It is
|
|
10
|
+
highly recommended that you at least add something like this to your
|
|
11
|
+
environment.rb file:
|
|
12
|
+
|
|
13
|
+
config.logger = Logger.new("#{RAILS_ROOT}/log/#{RAILS_ENV}.log", 3, 104857600)
|
|
14
|
+
|
|
15
|
+
After you are set up, you can start importing data.
|
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
class SourcesController < ApplicationController
|
|
2
2
|
include TaliaCore
|
|
3
3
|
|
|
4
|
-
before_filter :setup_format
|
|
5
|
-
|
|
4
|
+
before_filter :setup_format, :except => [ 'dispatch', 'index' ]
|
|
5
|
+
|
|
6
6
|
PER_PAGE = 10
|
|
7
7
|
|
|
8
8
|
# GET /sources
|
|
9
9
|
# GET /sources.xml
|
|
10
10
|
def index
|
|
11
|
-
|
|
11
|
+
@rdf_types ||= self.class.source_types
|
|
12
|
+
|
|
13
|
+
conditions = if(filter = params[:filter])
|
|
14
|
+
{ :find_through => [N::RDF.type, N::URI.make_uri(filter, '+')] }
|
|
15
|
+
else
|
|
16
|
+
{}
|
|
17
|
+
end
|
|
18
|
+
if(will_paginate?)
|
|
19
|
+
@sources = TaliaCore::ActiveSource.paginate(conditions.merge(:page => params[:page]))
|
|
20
|
+
else
|
|
21
|
+
@sources = TaliaCore::ActiveSource.find(:all, conditions)
|
|
22
|
+
end
|
|
12
23
|
end
|
|
13
24
|
|
|
14
25
|
# GET /sources/1
|
|
@@ -43,9 +54,26 @@ class SourcesController < ApplicationController
|
|
|
43
54
|
render :text => predicates, :status => status
|
|
44
55
|
end
|
|
45
56
|
|
|
46
|
-
|
|
47
|
-
|
|
57
|
+
# Semantic dispatch. This will try to auto-handle URLs that are not otherwise
|
|
58
|
+
# caught and see if a source exists. If the source exists, the system will
|
|
59
|
+
# try to figure out how to render it. In this case, all relations on the source are
|
|
60
|
+
# automaticaly prefetched when it's loaded.
|
|
61
|
+
def dispatch
|
|
62
|
+
@source = TaliaCore::ActiveSource.find(params[:dispatch_uri], :prefetch_relations => true)
|
|
63
|
+
@types = @source.types
|
|
64
|
+
@types.each do |type|
|
|
65
|
+
caller = type.to_name_s('_')
|
|
66
|
+
self.send(caller) if(self.respond_to?(caller))
|
|
67
|
+
end
|
|
68
|
+
respond_to do |format|
|
|
69
|
+
format.xml { render :text => @source.to_xml }
|
|
70
|
+
format.rdf { render :text => @source.to_rdf }
|
|
71
|
+
format.html { render :action => template_for(@source) }
|
|
72
|
+
end
|
|
73
|
+
end
|
|
48
74
|
|
|
75
|
+
private
|
|
76
|
+
|
|
49
77
|
# Hack around routing limitation: We use the @ instead of the dot as a delimiter
|
|
50
78
|
def setup_format
|
|
51
79
|
split_id = params[:id].split('@')
|
|
@@ -54,9 +82,99 @@ class SourcesController < ApplicationController
|
|
|
54
82
|
params[:format] = (split_id.size > 1) ? split_id.last : 'html'
|
|
55
83
|
end
|
|
56
84
|
|
|
85
|
+
private
|
|
86
|
+
|
|
87
|
+
# Indicates if pagination is available.
|
|
88
|
+
def will_paginate?
|
|
89
|
+
return @will_paginate if(@will_paginate != nil)
|
|
90
|
+
return true if(defined?(WillPaginate))
|
|
91
|
+
begin
|
|
92
|
+
require 'rubygems'
|
|
93
|
+
require 'will_paginate'
|
|
94
|
+
@will_paginate = true
|
|
95
|
+
rescue MissingSourceFile
|
|
96
|
+
logger.warn('will_paginate cannot be found, pagination is not available')
|
|
97
|
+
@will_paginate = false
|
|
98
|
+
end
|
|
99
|
+
@will_paginate
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Returns the first matching template for the given source.
|
|
103
|
+
#
|
|
104
|
+
# * If the source has RDF types, it will try to find the first template
|
|
105
|
+
# that matches one of the RDF types. If one is found is it returned.
|
|
106
|
+
# * Otherwise, it will look for a default template matching the source's
|
|
107
|
+
# runtime class.
|
|
108
|
+
# * If no other template is found, this will return the default template name
|
|
109
|
+
def template_for(source)
|
|
110
|
+
source.types.each do |type|
|
|
111
|
+
if(template = template_map[type.uri.to_s])
|
|
112
|
+
return template
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
template = template_map[source.class.name.demodulize]
|
|
116
|
+
template ? template : "semantic_templates/default/default"
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def template_map
|
|
120
|
+
self.class.template_map
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
class << self
|
|
124
|
+
|
|
125
|
+
def template_map
|
|
126
|
+
return @template_map if(@template_map && (ActiveSupport::Dependencies.mechanism != :require))
|
|
127
|
+
@template_map = {}
|
|
128
|
+
Dir["#{template_path}/*"].each do |dir|
|
|
129
|
+
next unless(File.directory?(dir) && File.basename(dir) != 'default')
|
|
130
|
+
map_templates_in(dir)
|
|
131
|
+
end
|
|
132
|
+
map_default_templates
|
|
133
|
+
@template_map
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def template_path
|
|
137
|
+
@template_path ||= File.join(RAILS_ROOT, 'app', 'views', 'sources', 'semantic_templates')
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def source_types
|
|
141
|
+
return @source_types if(@source_types)
|
|
142
|
+
@source_types = Query.new(N::URI).select(:type).distinct.where(:source, N::RDF.type, :type).execute
|
|
143
|
+
@source_types
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
private
|
|
147
|
+
|
|
148
|
+
# Creates a hash that can be used for looking up the correct semantic
|
|
149
|
+
# template for a source. This scans the template directory and connects
|
|
150
|
+
# the templates to the right RDF types
|
|
151
|
+
def map_templates_in(dir)
|
|
152
|
+
namespace = N::Namespace[File.basename(dir)]
|
|
153
|
+
namsp_object = N::Namespace[namespace]
|
|
154
|
+
TaliaCore.logger.warn("WARNING: Template files in #{dir} are never used, no namespace: #{namespace}.") unless(namesp_object)
|
|
155
|
+
return unless(namesp_object)
|
|
156
|
+
Dir["#{dir}/*"].each do |template|
|
|
157
|
+
next unless(File.file?(template))
|
|
158
|
+
template = template_basename(template)
|
|
159
|
+
@template_map[(namsp_object + template).to_s] = "semantic_templates/#{namespace}/#{template}"
|
|
160
|
+
end
|
|
161
|
+
end
|
|
57
162
|
|
|
58
|
-
|
|
59
|
-
|
|
163
|
+
# Map the "default" templates to runtime types
|
|
164
|
+
def map_default_templates
|
|
165
|
+
Dir["#{template_path}/default/*"].each do |templ|
|
|
166
|
+
templ_name = template_basename(templ)
|
|
167
|
+
next unless(File.file?(templ) && templ_name != 'default' )
|
|
168
|
+
@template_map[templ_name.camelize] = "semantic_templates/default/#{templ_name}"
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Get the "basename" of a template
|
|
173
|
+
def template_basename(template_file)
|
|
174
|
+
base = File.basename(template_file)
|
|
175
|
+
base.gsub(/\..*\Z/, '')
|
|
176
|
+
end
|
|
177
|
+
|
|
60
178
|
end
|
|
61
179
|
|
|
62
180
|
end
|
|
@@ -1,39 +1,23 @@
|
|
|
1
1
|
module SourcesHelper
|
|
2
|
-
|
|
3
|
-
#
|
|
4
|
-
def
|
|
5
|
-
|
|
6
|
-
if(@source.data_records.size > 0)
|
|
7
|
-
@source.data_records.each do |data_record|
|
|
8
|
-
case(data_record.mime_type)
|
|
9
|
-
when 'text/html'
|
|
10
|
-
result += "<h3>HTML Data: #{data_record.location}</h3>"
|
|
11
|
-
result += "<div>"
|
|
12
|
-
result += widget(:html_data, :data => data_record)
|
|
13
|
-
result += "</div>"
|
|
14
|
-
when 'text/xml'
|
|
15
|
-
result += "<pre><code>"
|
|
16
|
-
result += data_record.get_escaped_content_string
|
|
17
|
-
result += "</code></pre>"
|
|
18
|
-
when 'text/plain'
|
|
19
|
-
result += "<h3>Plain Text Data: #{data_record.location}</h3>"
|
|
20
|
-
result += "<pre> #{data_record.all_text} </pre>"
|
|
21
|
-
else
|
|
22
|
-
result += "<h3>Found data object of type #{data_record.class} (#{data_record.mime_type}): #{data_record.location}</h3>"
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
else
|
|
26
|
-
result ="<h3>Sorry mate, no data objects here</h3>"
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
result
|
|
2
|
+
|
|
3
|
+
# Link to the index
|
|
4
|
+
def index_link
|
|
5
|
+
link_to 'index', :action => 'index'
|
|
30
6
|
end
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
["All", {:action => 'index'} ],
|
|
36
|
-
["Print Page", "javascript:print();"]
|
|
37
|
-
] )
|
|
7
|
+
|
|
8
|
+
# Checks if the current filter points to the given type
|
|
9
|
+
def current_filter?(ctype)
|
|
10
|
+
(ctype.to_name_s('+') == params[:filter])
|
|
38
11
|
end
|
|
12
|
+
|
|
13
|
+
# Links to filter for the given type
|
|
14
|
+
def filter_link_for(ctype)
|
|
15
|
+
link_to ctype.to_name_s, :action => 'index', :filter => ctype.to_name_s('+')
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Gets the title for a source
|
|
19
|
+
def title_for(source)
|
|
20
|
+
(source[N::DCNS.title].first || N::URI.new(source.uri).local_part)
|
|
21
|
+
end
|
|
22
|
+
|
|
39
23
|
end
|
|
@@ -1,2 +1,13 @@
|
|
|
1
1
|
<h1>Sources found: <%= @sources.total_entries %></h1>
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
<div class="tags">
|
|
4
|
+
<% for type in @rdf_types %>
|
|
5
|
+
<span class="<%= current_filter?(type) ? 'tag_selected' : 'tag' %>"><%= filter_link_for(type) %></span>
|
|
6
|
+
<% end %>
|
|
7
|
+
</div>
|
|
8
|
+
|
|
9
|
+
<% for source in @sources %>
|
|
10
|
+
<p><%= link_to title_for(source), source.uri.to_s %> (<%= source.class.name %>)</p>
|
|
11
|
+
<% end %>
|
|
12
|
+
|
|
13
|
+
<%= will_paginate @sources %>
|