tastyhat-cul-fedora-arm 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -13,6 +13,8 @@ begin
13
13
  gem.add_development_dependency "thoughtbot-shoulda"
14
14
  gem.add_development_dependency "thoughtbot-factory_girl"
15
15
  gem.add_dependency "activesupport"
16
+ gem.add_dependency "ruby-fedora"
17
+
16
18
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
17
19
  end
18
20
  rescue LoadError
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{cul-fedora-arm}
8
- s.version = "0.1.2"
8
+ s.version = "0.1.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["James Stuart"]
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
28
28
  "lib/cul/fedora/arm/builder.rb",
29
29
  "test/cul_fedora_arm_builder_test.rb",
30
30
  "test/factories.rb",
31
- "test/factories/cul_fedora_arm_builder_factory.rb",
31
+ "test/fixtures/case1/builder-template-noheader.txt",
32
32
  "test/fixtures/case1/builder-template.txt",
33
33
  "test/helpers/template_builder.rb",
34
34
  "test/test_helper.rb"
@@ -40,7 +40,6 @@ Gem::Specification.new do |s|
40
40
  s.summary = %q{Tools for dealing with Cul ARM specification}
41
41
  s.test_files = [
42
42
  "test/cul_fedora_arm_builder_test.rb",
43
- "test/factories/cul_fedora_arm_builder_factory.rb",
44
43
  "test/factories.rb",
45
44
  "test/helpers/template_builder.rb",
46
45
  "test/test_helper.rb"
@@ -54,14 +53,17 @@ Gem::Specification.new do |s|
54
53
  s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
55
54
  s.add_development_dependency(%q<thoughtbot-factory_girl>, [">= 0"])
56
55
  s.add_runtime_dependency(%q<activesupport>, [">= 0"])
56
+ s.add_runtime_dependency(%q<ruby-fedora>, [">= 0"])
57
57
  else
58
58
  s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
59
59
  s.add_dependency(%q<thoughtbot-factory_girl>, [">= 0"])
60
60
  s.add_dependency(%q<activesupport>, [">= 0"])
61
+ s.add_dependency(%q<ruby-fedora>, [">= 0"])
61
62
  end
62
63
  else
63
64
  s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
64
65
  s.add_dependency(%q<thoughtbot-factory_girl>, [">= 0"])
65
66
  s.add_dependency(%q<activesupport>, [">= 0"])
67
+ s.add_dependency(%q<ruby-fedora>, [">= 0"])
66
68
  end
67
69
  end
@@ -1,2 +1,3 @@
1
1
  require "cul/fedora/arm/builder"
2
- require "activesupport"
2
+ require "activesupport"
3
+ require "ruby-fedora"
@@ -33,6 +33,7 @@ module Cul
33
33
 
34
34
  # creates a Builder object. Can be used with no arguments, or with ONE of the following options
35
35
  # [:template]:: builds parts based on an enumerable list of strings (for example, the result of File.open)
36
+ # [:header]:: designates for a template whether a header is specified
36
37
  def initialize(*args)
37
38
  options = args.extract_options!
38
39
 
@@ -40,11 +41,20 @@ module Cul
40
41
 
41
42
  # TODO: add file option to avoid :template => File.open(file_name,"r")
42
43
 
43
- if template = options.delete(:template)
44
- parse_template(template)
44
+ if (template = options.delete(:template)) || (file = options.delete(:file))
45
+ template ||= File.open(file,"r")
46
+
47
+ header = options.delete(:header)
48
+ header = true if header.nil?
49
+
50
+ raise ArgumentError, "arguments should only include one of the following: :template, :file" unless options.empty?
51
+
52
+ parse_template(template, header)
53
+ else
54
+
55
+ raise ArgumentError, "arguments should only include one of the following: :template, :file" unless options.empty?
45
56
  end
46
57
 
47
- raise ArgumentError, "arguments should only include one of the following: :template" unless options.empty?
48
58
  end
49
59
 
50
60
  # adds one part to the parts array
@@ -83,27 +93,17 @@ module Cul
83
93
 
84
94
  # parses an enumerable of strings to build parts
85
95
  # an optional header row specifies the columns, however sequence must be included and must be first
86
- def parse_template(template)
87
- header_columns = [] # list of columns
88
- custom_header = false # indicates whether a header_row was used
96
+ # TODO: fix this to include a header option
97
+ def parse_template(template, has_header_row)
98
+ header_columns = DEFAULT_TEMPLATE_HEADER # list of columns
89
99
 
90
100
 
91
101
  template.each_with_index do |line, i|
92
102
 
93
103
  # if first row, check for header
94
104
  if i == 0
95
-
96
- # assumes that if the first character is a letter, this is a header row, otherwise, use default_columns
97
- case line.to_s
98
- when /^[0-9]/
99
- header_columns = DEFAULT_TEMPLATE_HEADER
100
- when /^\w/
101
- custom_header = true
102
- header_columns = line.split("\t").collect { |cn| cn.strip.underscore.to_sym }
103
- raise "First column of custom designed headers must be sequence" unless header_columns[0] == :sequence
104
- end
105
+ header_columns = line.split("\t").collect { |cn| cn.strip.underscore.to_sym } if has_header_row
105
106
 
106
-
107
107
  # check to make sure all mandatory columns are in the template
108
108
  missing_mandatory_columns = MANDATORY_COLUMNS.select { |c| !header_columns.include?(c) }
109
109
  raise "Missing mandatory column(s) found: #{missing_mandatory_columns.join(",")}" unless missing_mandatory_columns.empty?
@@ -111,7 +111,7 @@ module Cul
111
111
  test_for_invalid_columns(header_columns)
112
112
 
113
113
  # skip header_row
114
- next if custom_header
114
+ next if has_header_row
115
115
 
116
116
  end
117
117
 
@@ -25,17 +25,34 @@ class CulFedoraArmBuilderTest < Test::Unit::TestCase
25
25
 
26
26
 
27
27
  should "have a list of mandatory, valid, and required columns" do
28
+ assert_instance_of Array, @builder_class::REQUIRED_COLUMNS
29
+
28
30
  assert_equal @builder_class::REQUIRED_COLUMNS, [:sequence]
29
31
  assert_equal @builder_class::MANDATORY_COLUMNS, [:sequence, :aggregate_under, :metadata]
30
32
  assert_equal @builder_class::VALID_COLUMNS, [:sequence, :aggregate_under, :metadata, :metadata_type, :content, :content_type, :id, :license]
31
33
  end
32
34
 
33
- should "accept only options :template" do
35
+ should "accept only options :template or :file" do
36
+ assert_instance_of @builder_class, @builder_class.new(:template => nil)
37
+ assert_instance_of @builder_class, @builder_class.new(:file => nil)
38
+
34
39
  assert_raise(ArgumentError) do
35
40
  @builder_class.new(:template => nil, :invalid => true)
36
41
  end
42
+
43
+ assert_raise(ArgumentError) do
44
+ @builder_class.new(:template => "test", :file => "test")
45
+ end
46
+
37
47
  end
38
48
 
49
+ should "not accept :header without :template" do
50
+ assert_raise(ArgumentError) do
51
+ @builder_class.new(:header => true)
52
+ end
53
+ end
54
+
55
+
39
56
  context "given a blank builder" do
40
57
  setup do
41
58
  @builder = @builder_class.new
@@ -56,11 +73,12 @@ class CulFedoraArmBuilderTest < Test::Unit::TestCase
56
73
  end
57
74
 
58
75
  should "not add parts with the same sequence id" do
59
-
76
+
60
77
  assert_raise(RuntimeError, "Sequence ID already taken") do
61
78
  @builder.add_part(:sequence => "2", :metadata => "/test-0001.xml")
62
- @builder.add_part(:sequence => "2", :metadata => "/test-0001.xml")
79
+ @builder.add_part(:sequence => "2", :metadata => "/test-0002.xml")
63
80
  end
81
+
64
82
  end
65
83
  end
66
84
 
@@ -82,12 +100,6 @@ class CulFedoraArmBuilderTest < Test::Unit::TestCase
82
100
  end
83
101
  end
84
102
 
85
- should "insist on sequence being the first column" do
86
- assert_raise RuntimeError, "First column of custom designed headers must be sequence" do
87
- @builder_class.new(:template => template_builder(@sequence_not_first))
88
- end
89
- end
90
-
91
103
  should "reject invalid column names" do
92
104
  assert_raise RuntimeError, "Invalid column name: random" do
93
105
  @builder_class.new(:template => template_builder(@invalid_column))
@@ -103,14 +115,26 @@ class CulFedoraArmBuilderTest < Test::Unit::TestCase
103
115
 
104
116
  context "with an example template with header" do
105
117
  setup do
106
- @builder = @builder_class.new(:template => File.open("test/fixtures/case1/builder-template.txt", "r"))
118
+ @builder = @builder_class.new(:file => "test/fixtures/case1/builder-template.txt")
119
+ @builder_via_template_option = @builder_class.new(:template => File.open("test/fixtures/case1/builder-template.txt", "r"))
120
+ @builder_no_header = @builder_class.new(:file => "test/fixtures/case1/builder-template-noheader.txt", :header => false)
107
121
  end
108
122
 
109
123
  should "load successfully" do
110
124
  assert_instance_of @builder_class, @builder
125
+ assert_instance_of @builder_class, @builder_no_header
111
126
  end
112
127
 
113
- should "ignore the header and load template data successfully" do
128
+ should "have equivalent results for header and no_header instances of the default column set" do
129
+ assert_equal @builder.parts, @builder_no_header.parts
130
+ end
131
+
132
+ should "have equivalent results for opening via template and file" do
133
+ assert_equal @builder.parts, @builder_via_template_option.parts
134
+ end
135
+
136
+
137
+ should "ignore the header row and load template data successfully" do
114
138
  assert_equal @builder.parts.length, 4
115
139
  assert_equal @builder.parts[0][:metadata], "/test-0001.xml"
116
140
  assert_equal @builder.parts[3][:license], "http://creativecommons.org/licenses/by-nc-nd/3.0/us/"
@@ -121,6 +145,7 @@ class CulFedoraArmBuilderTest < Test::Unit::TestCase
121
145
  assert_equal @builder.parts[3], @builder.part_by_sequence("5")
122
146
  end
123
147
  end
148
+
124
149
  end
125
150
 
126
151
 
@@ -0,0 +1,4 @@
1
+ 0 collection:1;ac:5 /test-0001.xml MODS ContentAggregator AC:P:5001
2
+ 1 0 /01-Northover_IPD_SovDebt_Working_Paper.pdf Resource http://creativecommons.org/licenses/by-nc-nd/3.0/us/
3
+ 4 collection:1;ac:5 /test-0002.xml MODS ContentAggregator AC:P:5002
4
+ 5 4 /02-851.pdf Resource http://creativecommons.org/licenses/by-nc-nd/3.0/us/
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tastyhat-cul-fedora-arm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Stuart
@@ -42,6 +42,16 @@ dependencies:
42
42
  - !ruby/object:Gem::Version
43
43
  version: "0"
44
44
  version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: ruby-fedora
47
+ type: :runtime
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
45
55
  description: Tools for dealing with Cul ARM specification
46
56
  email: tastyhat@jamesstuart.org
47
57
  executables: []
@@ -63,7 +73,7 @@ files:
63
73
  - lib/cul/fedora/arm/builder.rb
64
74
  - test/cul_fedora_arm_builder_test.rb
65
75
  - test/factories.rb
66
- - test/factories/cul_fedora_arm_builder_factory.rb
76
+ - test/fixtures/case1/builder-template-noheader.txt
67
77
  - test/fixtures/case1/builder-template.txt
68
78
  - test/helpers/template_builder.rb
69
79
  - test/test_helper.rb
@@ -96,7 +106,6 @@ specification_version: 3
96
106
  summary: Tools for dealing with Cul ARM specification
97
107
  test_files:
98
108
  - test/cul_fedora_arm_builder_test.rb
99
- - test/factories/cul_fedora_arm_builder_factory.rb
100
109
  - test/factories.rb
101
110
  - test/helpers/template_builder.rb
102
111
  - test/test_helper.rb
@@ -1,3 +0,0 @@
1
- Factory.define :builder, :class => Cul::Fedora::Arm::Builder do |f|
2
-
3
- end