ex_cite 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/MIT-LICENSE +1 -1
  2. data/app/controllers/ex_cite/export_citations_controller.rb +18 -14
  3. data/app/helpers/ex_cite/application_helper.rb +1 -8
  4. data/app/models/ex_cite/push_format.rb +7 -5
  5. data/app/views/ex_cite/cite/_external_form.html.erb +3 -3
  6. data/config/initializers/mime_types.rb +7 -1
  7. data/lib/ex_cite/core_ext.rb +4 -15
  8. data/lib/ex_cite/engine.rb +12 -26
  9. data/lib/ex_cite/version.rb +1 -1
  10. data/test/dummy/log/development.log +405 -0
  11. data/test/dummy/log/test.log +86349 -0
  12. data/test/dummy/test/unit/ex_cite_record_test.rb +5 -3
  13. data/test/dummy/tmp/cache/15C/AE1/468286998ed7e41613b5b638604d0d418e16f000to_refworks_tagged +4 -0
  14. data/test/dummy/tmp/cache/23D/251/794c17bcbef330a90c5063ca7b881b06685047aeto_refworks_tagged +4 -0
  15. data/test/dummy/tmp/cache/24E/D11/1e1a808df870f039ac20fd161b9c4ea0a3a12101to_refworks_tagged +4 -0
  16. data/test/dummy/tmp/cache/2A6/8D1/affd98a65c2fce8403f2d2776024add085305dc8to_refworks_tagged +4 -0
  17. data/test/dummy/tmp/cache/2E8/121/5c66e1737c71a44c1c2c0c53aacfdbe21a47d22dto_refworks_tagged +4 -0
  18. data/test/dummy/tmp/cache/2FA/431/ca02f65b1e44e0da798cff8e53adb7a70211fe70to_refworks_tagged +4 -0
  19. data/test/dummy/tmp/cache/336/B71/af5dc25c4cb1c5d8a1fd83234ecf9fcb76f23952to_refworks_tagged +4 -0
  20. data/test/dummy/tmp/cache/36A/321/c9d431e57fa51ecef5d8dfed8ead3fa142c71284to_refworks_tagged +5 -0
  21. data/test/dummy/tmp/cache/3BC/4C1/794c17bcbef330a90c5063ca7b881b06685047aeto_chicago_author_date +4 -0
  22. data/test/dummy/tmp/cache/403/6D1/b665552cd9b09a9c72e20a7f3ab1c8e786e23f99to_chicago_author_date +4 -0
  23. data/test/dummy/tmp/cache/425/491/affd98a65c2fce8403f2d2776024add085305dc8to_chicago_author_date +4 -0
  24. data/test/dummy/tmp/cache/479/4F1/ca02f65b1e44e0da798cff8e53adb7a70211fe70to_chicago_author_date +4 -0
  25. data/test/dummy/tmp/cache/4B5/B31/af5dc25c4cb1c5d8a1fd83234ecf9fcb76f23952to_chicago_author_date +4 -0
  26. data/test/dummy/tmp/cache/4E9/FE1/c9d431e57fa51ecef5d8dfed8ead3fa142c71284to_chicago_author_date +4 -0
  27. data/test/dummy/tmp/cache/C60/020/468286998ed7e41613b5b638604d0d418e16f000to_csl +1 -0
  28. data/test/dummy/tmp/cache/D31/D60/794c17bcbef330a90c5063ca7b881b06685047aeto_apa +3 -0
  29. data/test/dummy/tmp/cache/D39/F20/794c17bcbef330a90c5063ca7b881b06685047aeto_mla +3 -0
  30. data/test/dummy/tmp/cache/D41/ED0/794c17bcbef330a90c5063ca7b881b06685047aeto_csl +1 -0
  31. data/test/dummy/tmp/cache/D78/870/b665552cd9b09a9c72e20a7f3ab1c8e786e23f99to_apa +3 -0
  32. data/test/dummy/tmp/cache/D80/A30/b665552cd9b09a9c72e20a7f3ab1c8e786e23f99to_mla +3 -0
  33. data/test/dummy/tmp/cache/D9A/430/affd98a65c2fce8403f2d2776024add085305dc8to_apa +3 -0
  34. data/test/dummy/tmp/cache/DA2/5F0/affd98a65c2fce8403f2d2776024add085305dc8to_mla +3 -0
  35. data/test/dummy/tmp/cache/DAA/5A0/affd98a65c2fce8403f2d2776024add085305dc8to_csl +1 -0
  36. data/test/dummy/tmp/cache/DEC/D60/5c66e1737c71a44c1c2c0c53aacfdbe21a47d22dto_csl +1 -0
  37. data/test/dummy/tmp/cache/DEE/090/ca02f65b1e44e0da798cff8e53adb7a70211fe70to_apa +3 -0
  38. data/test/dummy/tmp/cache/DF6/250/ca02f65b1e44e0da798cff8e53adb7a70211fe70to_mla +3 -0
  39. data/test/dummy/tmp/cache/DFE/200/ca02f65b1e44e0da798cff8e53adb7a70211fe70to_csl +1 -0
  40. data/test/dummy/tmp/cache/E2A/AD0/af5dc25c4cb1c5d8a1fd83234ecf9fcb76f23952to_apa +3 -0
  41. data/test/dummy/tmp/cache/E32/C90/af5dc25c4cb1c5d8a1fd83234ecf9fcb76f23952to_mla +3 -0
  42. data/test/dummy/tmp/cache/E3A/C40/af5dc25c4cb1c5d8a1fd83234ecf9fcb76f23952to_csl +1 -0
  43. data/test/dummy/tmp/cache/E5E/B80/c9d431e57fa51ecef5d8dfed8ead3fa142c71284to_apa +3 -0
  44. data/test/dummy/tmp/cache/E66/D40/c9d431e57fa51ecef5d8dfed8ead3fa142c71284to_mla +3 -0
  45. data/test/dummy/tmp/cache/E6E/CF0/c9d431e57fa51ecef5d8dfed8ead3fa142c71284to_csl +1 -0
  46. data/test/functional/ex_cite/export_citations _controller_test.rb +36 -11
  47. data/test/test_helper.rb +9 -8
  48. metadata +74 -11
  49. data/config/initializers/citation.rb +0 -7
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2012 YOURNAME
1
+ Copyright 2013 NYU Division of Libraries
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -13,7 +13,7 @@ module ExCite
13
13
 
14
14
  # Sends bad request if there is no destination format
15
15
  def valid_to_format?
16
- head :bad_request unless to_format
16
+ head :bad_request unless to_format
17
17
  end
18
18
 
19
19
  # Checks to see if destination format is valid and stores it in a class variable
@@ -37,6 +37,7 @@ module ExCite
37
37
  (params[:id].nil?) ? [] :
38
38
  params[:id].collect do |id|
39
39
  record = ExCite.acts_as_citable_class.find_by_id id if ExCite.acts_as_citable_class.respond_to? :find_by_id
40
+ (record.nil?) ? (raise(ArgumentError, "This ID cannot be found.")) : record
40
41
  end
41
42
  end
42
43
 
@@ -44,9 +45,9 @@ module ExCite
44
45
  def resource_citation
45
46
  (params[:resource_key].nil?) ? [] :
46
47
  params[:resource_key].collect do |key|
47
- citation = ExCite.acts_as_citable_class.new()
48
- citation.resource_key = key
49
- citation
48
+ citation = ExCite.acts_as_citable_class.new()
49
+ citation.resource_key = key
50
+ citation
50
51
  end
51
52
  end
52
53
 
@@ -66,9 +67,7 @@ module ExCite
66
67
  # Maps the output and caches it, alternatively it fetches the already cached result. Seperates each output with two new lines.
67
68
  # Raises an argument error if any error is caught in mapping (usually the formats are messed up)
68
69
  def map
69
- @output ||=
70
- # citations.collect { |citation| Rails.cache.fetch(citation.resource_key+to_format) { citation.send(to_format) } }.join "\n\n"
71
- citations.collect { |citation| citation.send(to_format) }.join "\n\n"
70
+ @output ||= citations.collect { |citation| Rails.cache.fetch(citation.resource_key+to_format) { citation.send(to_format) } }.join_and_enclose *delimiters
72
71
  rescue Exception => exc
73
72
  raise ArgumentError, "#{exc}\n Data or source format not provided and/or mismatched. [citations => #{citations}, to_format => #{@to_format}] "
74
73
  end
@@ -93,7 +92,7 @@ module ExCite
93
92
  return
94
93
  end
95
94
  # if the to format is found, it returns the method name for that to format
96
- if (direction == :to && Citero.to_formats.include?(format.downcase))
95
+ if (direction == :to && (Citero.to_formats.include?(format.downcase) || Citero.citation_styles.include?(format.downcase)))
97
96
  return "#{:to.to_s}_#{format.downcase}"
98
97
  # if the from format is found, it returns just that because the object already knows what method to call
99
98
  elsif (direction == :from && Citero.from_formats.include?(format.downcase))
@@ -109,7 +108,6 @@ module ExCite
109
108
 
110
109
  # For debugging purposes prints out the error. Also sends bad request header
111
110
  def handle_invalid_arguments exc
112
- p exc
113
111
  logger.debug exc
114
112
  head :bad_request
115
113
  end
@@ -124,7 +122,7 @@ module ExCite
124
122
  redirect_to @push_to.url+callback, :status => 303
125
123
  elsif @push_to.action.eql? :render
126
124
  # call the method this service needs
127
- render_push @push_to
125
+ render_push
128
126
  end
129
127
  end
130
128
 
@@ -161,11 +159,17 @@ module ExCite
161
159
  name
162
160
  end
163
161
 
164
- def render_push push
165
- push.vars.each do |key, value|
166
- instance_variable_set "@#{key}", value.outputize(@output)
162
+ def render_push
163
+ render :template => @push_to.template
164
+ end
165
+
166
+ def delimiters
167
+ case @to_format
168
+ when "to_easybib", "to_csl"
169
+ return [",\n","[","]"]
170
+ else
171
+ return ["\n\n"]
167
172
  end
168
- render :template => push.template
169
173
  end
170
174
  end
171
175
  end
@@ -1,14 +1,7 @@
1
1
  module ExCite
2
2
  module ApplicationHelper
3
3
  def build_external_form
4
- f = ""
5
- @elements.each do |element|
6
- # Return input element for no js and not textarea
7
- f += "<input name=\"#{element[:name]}\" type=\"#{(element[:type].nil?) ? "text" : element[:type]}\" value='#{element[:value]}' />" unless (element[:type] and element[:type].eql?("textarea"))
8
- # Return textarea element for no js and type=textarea
9
- f += "<textarea name=\"#{element[:name]}\" id=\"#{element[:name]}\">#{element[:value]}</textarea>" unless (element[:type].nil? or not element[:type].eql?("textarea"))
10
- end
11
- return f
4
+ return "<textarea name=\"#{@push_to.element_name}\" id=\"#{@push_to.element_name}\">#{@output}</textarea>"
12
5
  end
13
6
  end
14
7
  end
@@ -2,14 +2,16 @@ module ExCite
2
2
  # Citation class, holds data from format and/or resource key
3
3
  class PushFormat
4
4
  # Required fields
5
- attr_accessor :name, :to_format, :action, :vars, :template, :url
5
+ attr_accessor :name, :to_format, :action, :template, :url, :method, :enctype, :element_name
6
6
  def initialize args = {}
7
- self.name = args[:name]
7
+ self.name = (args[:name] or 'Service')
8
8
  self.to_format = args[:to_format]
9
- self.action = args[:action]
10
- self.vars = args[:vars]
11
- self.template = args[:template]
9
+ self.action = (args[:action] or :render)
10
+ self.template = (args[:template] or "ex_cite/cite/external_form")
12
11
  self.url = args[:url]
12
+ self.method = (args[:method] or "POST")
13
+ self.enctype = (args[:enctype] or "application/x-www-form-urlencoded")
14
+ self.element_name = (args[:element_name] or "data")
13
15
  end
14
16
  end
15
17
  end
@@ -10,8 +10,8 @@
10
10
  });
11
11
  <% end %>
12
12
  <div class="inner_form_dialog">
13
- <form id="<%= @id %>" action="<%= @action %>" method="<%= @method %>" class="external_form" enctype="<%= @enctype %>">
14
- <h2><%= @name %></h2>
13
+ <form id="<%= @id %>" action="<%= @push_to.url %>" method="<%= @push_to.method %>" class="external_form" enctype="<%= @push_to.enctype %>">
14
+ <h2>Push to <%= @push_to.name.capitalize %></h2>
15
15
  <div class="formError">
16
16
  <%= @error || flash[:error] %>
17
17
  </div>
@@ -19,7 +19,7 @@
19
19
  <legend><%= @legend %></legend>
20
20
  <%= raw build_external_form %>
21
21
  <div class="section">
22
- <%= submit_tag @name%>
22
+ <%= submit_tag "Push to #{@push_to.name.capitalize}"%>
23
23
  </div>
24
24
  </fieldset>
25
25
  </form>
@@ -1,3 +1,9 @@
1
1
  Mime::Type.register "application/x-url", :openurl
2
2
  Mime::Type.register "text/plain", :csf
3
- Mime::Type.register "application/json", :easybib
3
+ Mime::Type.register "application/json", :easybib
4
+ Mime::Type.register "text/plain", :refworks_tagged
5
+ Mime::Type.register "application/json", :csl
6
+
7
+ Mime::Type.register "text/html", :apa
8
+ Mime::Type.register "text/html", :mla
9
+ Mime::Type.register "text/html", :chicago_author_date
@@ -10,23 +10,12 @@ String.class_eval do
10
10
  def to_a
11
11
  self.split('',1)
12
12
  end
13
-
14
- def outputize output
15
- if self.include? "@output"
16
- self.gsub!("@output", output)
17
- end
18
- self
19
- end
20
- end
21
-
22
- Hash.class_eval do
23
- def outputize output
24
- self.values.each {|val| val.outputize output}
25
- end
26
13
  end
27
14
 
28
15
  Array.class_eval do
29
- def outputize output
30
- self.each {|val| val.outputize output}
16
+ def join_and_enclose seperator, *args
17
+ left_end = (args[0] or "")
18
+ right_end = (args[1] or left_end)
19
+ left_end + self.join(seperator) + right_end
31
20
  end
32
21
  end
@@ -4,6 +4,7 @@ require "acts_as_citable"
4
4
  module ExCite
5
5
  mattr_accessor :acts_as_citable_class
6
6
  mattr_accessor :push_formats
7
+ mattr_accessor :endnote, :easybib, :refworks
7
8
  def self.acts_as_citable_class
8
9
  @@acts_as_citable_class.constantize
9
10
  end
@@ -12,33 +13,18 @@ module ExCite
12
13
  isolate_namespace ExCite
13
14
  engine_name "ex_cite"
14
15
  ExCite.acts_as_citable_class = "ExCite::Citation"
15
- end
16
-
17
- def self.config &block
18
- if block
19
- yield self
16
+ config.before_initialize do
17
+ ExCite.easybib ||= PushFormat.new( :name => :easybibpush, :to_format => :easybib, :url => "http://www.easybib.com/cite/bulk")
18
+ ExCite.endnote ||= PushFormat.new :name => :endnote, :to_format => :ris, :action => :redirect, :url => 'http://www.myendnoteweb.com/?func=directExport&partnerName=Primo&dataIdentifier=1&dataRequestUrl='
19
+ ExCite.refworks ||= PushFormat.new( :name => :refworks, :to_format => :refworks_tagged, :element_name=> 'ImportData', :url => "http://www.refworks.com/express/ExpressImport.asp?vendor=Primo&filter=RefWorks%20Tagged%20Format&encoding=65001")
20
+ formats = Hash[ExCite.easybib.name => ExCite.easybib, ExCite.endnote.name => ExCite.endnote, ExCite.refworks.name => ExCite.refworks]
21
+ ExCite.push_formats = formats
20
22
  end
21
23
  end
22
-
23
- def self.push_formats
24
- @easybib ||= PushFormat.new( :name => :easybibpush, :to_format => :easybib, :action => :render, :template => "ex_cite/cite/external_form",
25
- :vars => Hash[
26
- "elements" => [{:name => 'data', :value => "[ @output ]", :type => 'textarea'}],
27
- "name" => "Push to EasyBib",
28
- "action" => "http://www.easybib.com/cite/bulk",
29
- "method" => "POST",
30
- "enctype" => "application/x-www-form-urlencoded"
31
- ])
32
- @endnote ||= PushFormat.new :name => :endnote, :to_format => :ris, :action => :redirect, :url => 'http://www.myendnoteweb.com/?func=directExport&partnerName=Primo&dataIdentifier=1&dataRequestUrl='
33
- # @refworks ||= PushFormat.new :name => :refworks, :to_format => :ris, :action => :redirect, :url => 'http://www.refworks.com/express/ExpressImport.asp?vendor=Primo&filter=RIS%20Format&encoding=65001&url='
34
- @refworks ||= PushFormat.new( :name => :refworks, :to_format => :ris, :action => :render, :template => "ex_cite/cite/external_form",
35
- :vars => Hash[
36
- "elements" => [{:name => 'ImportData', :value => "@output", :type => 'textarea'}],
37
- "name" => "ExportRWForm",
38
- "action" => "http://www.refworks.com/express/ExpressImport.asp?vendor=Primo&filter=RefWorks%20Tagged%20Format&encoding=65001",
39
- "method" => "POST",
40
- "enctype" => "application/x-www-form-urlencoded"
41
- ])
42
- @@push_formats ||= Hash[@easybib.name => @easybib, @endnote.name => @endnote, @refworks.name => @refworks]
24
+
25
+ ActiveSupport.on_load(:after_initialize) do
26
+ ActiveRecord::Base.class_eval do
27
+ include ResourceKey
28
+ end
43
29
  end
44
30
  end
@@ -1,3 +1,3 @@
1
1
  module ExCite
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.0"
3
3
  end