cc2html 0.0.1 → 0.0.2
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/.ruby-version +1 -0
 - data/Gemfile.lock +5 -5
 - data/README.md +15 -10
 - data/lib/cc2html/builder.rb +4 -3
 - data/lib/cc2html/cli.rb +5 -3
 - data/lib/cc2html/converter.rb +4 -4
 - data/lib/cc2html/epub_builder.rb +50 -14
 - data/lib/cc2html/html_builder.rb +4 -4
 - data/lib/cc2html/templates/epub/navigation.html.erb +19 -8
 - data/lib/cc2html/templates/html/index.html.erb +1 -1
 - data/lib/cc2html/version.rb +1 -1
 - data/lib/ims/cc/manifest.rb +1 -10
 - data/lib/ims/cc/organizations.rb +32 -2
 - data/lib/ims/cc/topic.rb +3 -3
 - data/test/fixtures/flat_imsmanifest.xml +10 -1
 - data/test/unit/cc/organizations_test.rb +33 -12
 - metadata +3 -2
 
    
        data/.ruby-version
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            1.9.3-p392
         
     | 
    
        data/Gemfile.lock
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            PATH
         
     | 
| 
       2 
2 
     | 
    
         
             
              remote: .
         
     | 
| 
       3 
3 
     | 
    
         
             
              specs:
         
     | 
| 
       4 
     | 
    
         
            -
                cc2html (0. 
     | 
| 
      
 4 
     | 
    
         
            +
                cc2html (0.0.2)
         
     | 
| 
       5 
5 
     | 
    
         
             
                  builder
         
     | 
| 
       6 
6 
     | 
    
         
             
                  happymapper
         
     | 
| 
       7 
7 
     | 
    
         
             
                  nokogiri
         
     | 
| 
         @@ -39,9 +39,9 @@ GEM 
     | 
|
| 
       39 
39 
     | 
    
         
             
                  rb-inotify (>= 0.9)
         
     | 
| 
       40 
40 
     | 
    
         
             
                lumberjack (1.0.4)
         
     | 
| 
       41 
41 
     | 
    
         
             
                method_source (0.8.2)
         
     | 
| 
       42 
     | 
    
         
            -
                mini_portile (0.5. 
     | 
| 
      
 42 
     | 
    
         
            +
                mini_portile (0.5.3)
         
     | 
| 
       43 
43 
     | 
    
         
             
                minitest (5.0.8)
         
     | 
| 
       44 
     | 
    
         
            -
                nokogiri (1.6. 
     | 
| 
      
 44 
     | 
    
         
            +
                nokogiri (1.6.1)
         
     | 
| 
       45 
45 
     | 
    
         
             
                  mini_portile (~> 0.5.0)
         
     | 
| 
       46 
46 
     | 
    
         
             
                pry (0.9.12.2)
         
     | 
| 
       47 
47 
     | 
    
         
             
                  coderay (~> 1.0.5)
         
     | 
| 
         @@ -51,8 +51,8 @@ GEM 
     | 
|
| 
       51 
51 
     | 
    
         
             
                rb-fsevent (0.9.3)
         
     | 
| 
       52 
52 
     | 
    
         
             
                rb-inotify (0.9.2)
         
     | 
| 
       53 
53 
     | 
    
         
             
                  ffi (>= 0.5.0)
         
     | 
| 
       54 
     | 
    
         
            -
                rdiscount (2.1.7)
         
     | 
| 
       55 
     | 
    
         
            -
                rubyzip (1.1. 
     | 
| 
      
 54 
     | 
    
         
            +
                rdiscount (2.1.7.1)
         
     | 
| 
      
 55 
     | 
    
         
            +
                rubyzip (1.1.3)
         
     | 
| 
       56 
56 
     | 
    
         
             
                slop (3.4.6)
         
     | 
| 
       57 
57 
     | 
    
         
             
                thor (0.18.1)
         
     | 
| 
       58 
58 
     | 
    
         
             
                timers (1.1.0)
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -15,22 +15,27 @@ Once RubyGems is installed you can install this gem: 
     | 
|
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
                $ gem install cc2html
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
            Convert a Common Cartridge into  
     | 
| 
      
 18 
     | 
    
         
            +
            Convert a Common Cartridge into EPUB
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
                $ cc2html  
     | 
| 
      
 20 
     | 
    
         
            +
                $ cc2html convert --format=epub <path-to-cc-backup> <name-of-epub-without-extension>
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
            Or into  
     | 
| 
      
 22 
     | 
    
         
            +
            Or into HTML (mostly broken) :)
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
                $ cc2html  
     | 
| 
       25 
     | 
    
         
            -
                # then zip of the contents of the folder into a .epub
         
     | 
| 
      
 24 
     | 
    
         
            +
                $ cc2html convert <path-to-cc-backup> <path-to-html-export-directory>
         
     | 
| 
       26 
25 
     | 
    
         | 
| 
       27 
26 
     | 
    
         
             
            ## Todo
         
     | 
| 
       28 
27 
     | 
    
         | 
| 
       29 
     | 
    
         
            -
              
     | 
| 
       30 
     | 
    
         
            -
              
     | 
| 
       31 
     | 
    
         
            -
              
     | 
| 
       32 
     | 
    
         
            -
              
     | 
| 
       33 
     | 
    
         
            -
              
     | 
| 
      
 28 
     | 
    
         
            +
             - [ ] Oh so much!
         
     | 
| 
      
 29 
     | 
    
         
            +
             - [ ] Support converting all Common Cartridge versions
         
     | 
| 
      
 30 
     | 
    
         
            +
             - [x] Create chapters from organization sections
         
     | 
| 
      
 31 
     | 
    
         
            +
             - [ ] Quiz conversion
         
     | 
| 
      
 32 
     | 
    
         
            +
             - [ ] Styles so it looks good
         
     | 
| 
      
 33 
     | 
    
         
            +
             - [ ] Configurable styles
         
     | 
| 
      
 34 
     | 
    
         
            +
             - [ ] Write epub/html output tests
         
     | 
| 
      
 35 
     | 
    
         
            +
             - [ ] Make HTML output work
         
     | 
| 
      
 36 
     | 
    
         
            +
             - [ ] Make HTML/EPUB code more DRY
         
     | 
| 
      
 37 
     | 
    
         
            +
             - [ ] Handle CC weblink/topic/assignment/LTI types better
         
     | 
| 
      
 38 
     | 
    
         
            +
             - [x] Automatically zip up epub
         
     | 
| 
       34 
39 
     | 
    
         | 
| 
       35 
40 
     | 
    
         
             
            ## Contributing
         
     | 
| 
       36 
41 
     | 
    
         | 
    
        data/lib/cc2html/builder.rb
    CHANGED
    
    | 
         @@ -1,9 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module CC2HTML
         
     | 
| 
       2 
2 
     | 
    
         
             
              class Builder
         
     | 
| 
       3 
     | 
    
         
            -
                def initialize(manifest,  
     | 
| 
       4 
     | 
    
         
            -
                  @ 
     | 
| 
      
 3 
     | 
    
         
            +
                def initialize(manifest, dest_name)
         
     | 
| 
      
 4 
     | 
    
         
            +
                  @dest_name = dest_name
         
     | 
| 
       5 
5 
     | 
    
         
             
                  @manifest = manifest
         
     | 
| 
       6 
     | 
    
         
            -
                  @ 
     | 
| 
      
 6 
     | 
    
         
            +
                  @root_items = manifest.organizations.organization.item.items
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @resources = manifest.resources.resources
         
     | 
| 
       7 
8 
     | 
    
         
             
                  lom = manifest.metadata.lom
         
     | 
| 
       8 
9 
     | 
    
         
             
                  @title = lom.general.title.title
         
     | 
| 
       9 
10 
     | 
    
         
             
                  @description = lom.general.description.description if lom.general.description
         
     | 
    
        data/lib/cc2html/cli.rb
    CHANGED
    
    | 
         @@ -2,14 +2,16 @@ require 'thor' 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module CC2HTML
         
     | 
| 
       4 
4 
     | 
    
         
             
              class CLI < Thor
         
     | 
| 
       5 
     | 
    
         
            -
                desc " 
     | 
| 
      
 5 
     | 
    
         
            +
                desc "convert --format epub COMMON_CARTRIDGE_ZIP EXPORT_NAME", "Migrates Common Cartridge ZIP to an HTML or EPUB representation"
         
     | 
| 
       6 
6 
     | 
    
         
             
                method_option :format, :default => 'html'
         
     | 
| 
       7 
7 
     | 
    
         
             
                method_options :format => :string
         
     | 
| 
      
 8 
     | 
    
         
            +
                method_option :leave_unzipped, :default => false
         
     | 
| 
      
 9 
     | 
    
         
            +
                method_options :leave_unzipped => :boolean
         
     | 
| 
       8 
10 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
                def  
     | 
| 
      
 11 
     | 
    
         
            +
                def convert(source, destination)
         
     | 
| 
       10 
12 
     | 
    
         
             
                  converter = CC2HTML::Converter.new source, destination, options
         
     | 
| 
       11 
13 
     | 
    
         
             
                  converter.convert
         
     | 
| 
       12 
     | 
    
         
            -
                  puts "#{source} converted to #{ 
     | 
| 
      
 14 
     | 
    
         
            +
                  puts "#{source} converted to #{destination}.epub"
         
     | 
| 
       13 
15 
     | 
    
         
             
                end
         
     | 
| 
       14 
16 
     | 
    
         
             
              end
         
     | 
| 
       15 
17 
     | 
    
         
             
            end
         
     | 
    
        data/lib/cc2html/converter.rb
    CHANGED
    
    | 
         @@ -2,18 +2,18 @@ module CC2HTML 
     | 
|
| 
       2 
2 
     | 
    
         
             
              class Converter
         
     | 
| 
       3 
3 
     | 
    
         
             
                attr_reader :cc_file_path, :dest_dir
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
                def initialize(cc_file_path,  
     | 
| 
      
 5 
     | 
    
         
            +
                def initialize(cc_file_path, dest_name, options={})
         
     | 
| 
       6 
6 
     | 
    
         
             
                  @cc_file_path = cc_file_path
         
     | 
| 
       7 
     | 
    
         
            -
                  @ 
     | 
| 
      
 7 
     | 
    
         
            +
                  @dest_name = dest_name
         
     | 
| 
       8 
8 
     | 
    
         
             
                  @settings = options
         
     | 
| 
       9 
9 
     | 
    
         
             
                end
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
                def convert
         
     | 
| 
       12 
12 
     | 
    
         
             
                  manifest = IMS::CC::Manifest.read(@cc_file_path)
         
     | 
| 
       13 
13 
     | 
    
         
             
                  if @settings[:format] == 'html'
         
     | 
| 
       14 
     | 
    
         
            -
                    CC2HTML::HtmlBuilder.new(manifest, @ 
     | 
| 
      
 14 
     | 
    
         
            +
                    CC2HTML::HtmlBuilder.new(manifest, @dest_name, @cc_file_path).generate
         
     | 
| 
       15 
15 
     | 
    
         
             
                  elsif @settings[:format] == 'epub'
         
     | 
| 
       16 
     | 
    
         
            -
                    CC2HTML::EpubBuilder.new(manifest, @ 
     | 
| 
      
 16 
     | 
    
         
            +
                    CC2HTML::EpubBuilder.new(manifest, @dest_name, @cc_file_path, @settings).generate
         
     | 
| 
       17 
17 
     | 
    
         
             
                  end
         
     | 
| 
       18 
18 
     | 
    
         
             
                end
         
     | 
| 
       19 
19 
     | 
    
         | 
    
        data/lib/cc2html/epub_builder.rb
    CHANGED
    
    | 
         @@ -2,34 +2,51 @@ module CC2HTML 
     | 
|
| 
       2 
2 
     | 
    
         
             
              class EpubBuilder < Builder
         
     | 
| 
       3 
3 
     | 
    
         
             
                TEMPLATE_DIR = '../templates/epub/'
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
                def initialize(manifest,  
     | 
| 
       6 
     | 
    
         
            -
                  super(manifest,  
     | 
| 
      
 5 
     | 
    
         
            +
                def initialize(manifest, dest_name, zip_file, opts={})
         
     | 
| 
      
 6 
     | 
    
         
            +
                  super(manifest, dest_name)
         
     | 
| 
       7 
7 
     | 
    
         
             
                  @file_name = 'cc_book'
         
     | 
| 
       8 
     | 
    
         
            -
                  @content_dir = File.join(@ 
     | 
| 
      
 8 
     | 
    
         
            +
                  @content_dir = File.join(@dest_name, 'content')
         
     | 
| 
       9 
9 
     | 
    
         
             
                  @zip_file = zip_file
         
     | 
| 
       10 
     | 
    
         
            -
                  @items_with_resource = @ 
     | 
| 
      
 10 
     | 
    
         
            +
                  @items_with_resource = @manifest.organizations.organization.item.all_items.select{|i|i.resource}
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @leave_in_folder = opts["leave_unzipped"]
         
     | 
| 
       11 
12 
     | 
    
         
             
                end
         
     | 
| 
       12 
13 
     | 
    
         | 
| 
       13 
14 
     | 
    
         
             
                def generate
         
     | 
| 
       14 
     | 
    
         
            -
                  FileUtils.mkdir_p(@ 
     | 
| 
      
 15 
     | 
    
         
            +
                  FileUtils.mkdir_p(@dest_name)
         
     | 
| 
       15 
16 
     | 
    
         
             
                  create_mimetype_file
         
     | 
| 
       16 
17 
     | 
    
         
             
                  create_meta_inf
         
     | 
| 
       17 
18 
     | 
    
         
             
                  FileUtils.mkdir_p(@content_dir)
         
     | 
| 
       18 
19 
     | 
    
         
             
                  create_opf
         
     | 
| 
       19 
20 
     | 
    
         
             
                  create_nav
         
     | 
| 
       20 
21 
     | 
    
         
             
                  create_chapters
         
     | 
| 
       21 
     | 
    
         
            -
                   
     | 
| 
      
 22 
     | 
    
         
            +
                  copy_images
         
     | 
| 
      
 23 
     | 
    
         
            +
                  copy_referenced_html_webresources
         
     | 
| 
      
 24 
     | 
    
         
            +
                  compress_into_epub
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                def compress_into_epub
         
     | 
| 
      
 28 
     | 
    
         
            +
                  unless @leave_in_folder
         
     | 
| 
      
 29 
     | 
    
         
            +
                    epub = @dest_name + '.epub'
         
     | 
| 
      
 30 
     | 
    
         
            +
                    FileUtils.rm(epub) if File.exists?(epub)
         
     | 
| 
      
 31 
     | 
    
         
            +
                    Zip::File.open(epub, Zip::File::CREATE) do |zipfile|
         
     | 
| 
      
 32 
     | 
    
         
            +
                      Dir["#{@dest_name}/**/**"].each do |file|
         
     | 
| 
      
 33 
     | 
    
         
            +
                        file_path = file.sub(@dest_name+'/', '')
         
     | 
| 
      
 34 
     | 
    
         
            +
                        zipfile.add(file_path, file)
         
     | 
| 
      
 35 
     | 
    
         
            +
                      end
         
     | 
| 
      
 36 
     | 
    
         
            +
                    end
         
     | 
| 
      
 37 
     | 
    
         
            +
                    FileUtils.rmtree(@dest_name)
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
       22 
39 
     | 
    
         
             
                end
         
     | 
| 
       23 
40 
     | 
    
         | 
| 
       24 
41 
     | 
    
         
             
                def create_mimetype_file
         
     | 
| 
       25 
     | 
    
         
            -
                  File.open(File.join(@ 
     | 
| 
      
 42 
     | 
    
         
            +
                  File.open(File.join(@dest_name, 'mimetype'), 'w') do |f|
         
     | 
| 
       26 
43 
     | 
    
         
             
                    f << "application/epub+zip\n"
         
     | 
| 
       27 
44 
     | 
    
         
             
                  end
         
     | 
| 
       28 
45 
     | 
    
         
             
                end
         
     | 
| 
       29 
46 
     | 
    
         | 
| 
       30 
47 
     | 
    
         
             
                def create_nav
         
     | 
| 
       31 
48 
     | 
    
         
             
                  template = File.expand_path(TEMPLATE_DIR + 'navigation.html.erb', __FILE__)
         
     | 
| 
       32 
     | 
    
         
            -
                  path = File.join(@content_dir 
     | 
| 
      
 49 
     | 
    
         
            +
                  path = File.join(@content_dir, 'navigation.html')
         
     | 
| 
       33 
50 
     | 
    
         | 
| 
       34 
51 
     | 
    
         
             
                  File.open(path, 'w') do |file|
         
     | 
| 
       35 
52 
     | 
    
         
             
                    erb = ERB.new(File.read(template))
         
     | 
| 
         @@ -43,7 +60,7 @@ module CC2HTML 
     | 
|
| 
       43 
60 
     | 
    
         
             
                    next if item.resource.type == 'webcontent'
         
     | 
| 
       44 
61 
     | 
    
         
             
                    # so stupid... I'll fix later. :)
         
     | 
| 
       45 
62 
     | 
    
         
             
                    @item = item
         
     | 
| 
       46 
     | 
    
         
            -
                    path = File.join(@content_dir 
     | 
| 
      
 63 
     | 
    
         
            +
                    path = File.join(@content_dir, item.identifierref + '.html')
         
     | 
| 
       47 
64 
     | 
    
         
             
                    File.open(path, 'w') do |file|
         
     | 
| 
       48 
65 
     | 
    
         
             
                      erb = ERB.new(File.read(template))
         
     | 
| 
       49 
66 
     | 
    
         
             
                      file.write(erb.result(binding))
         
     | 
| 
         @@ -51,15 +68,34 @@ module CC2HTML 
     | 
|
| 
       51 
68 
     | 
    
         
             
                  end
         
     | 
| 
       52 
69 
     | 
    
         
             
                end
         
     | 
| 
       53 
70 
     | 
    
         | 
| 
       54 
     | 
    
         
            -
                def  
     | 
| 
      
 71 
     | 
    
         
            +
                def copy_referenced_html_webresources
         
     | 
| 
       55 
72 
     | 
    
         
             
                  return unless @zip_file.end_with?('zip') || @zip_file.end_with?('imscc')
         
     | 
| 
       56 
73 
     | 
    
         
             
                  Zip::File.open(@zip_file) do |zipfile|
         
     | 
| 
       57 
74 
     | 
    
         
             
                    @items_with_resource.each do |item|
         
     | 
| 
       58 
75 
     | 
    
         
             
                      if item.resource.type == 'webcontent' && item.resource.href && item.resource.href.end_with?('html')
         
     | 
| 
       59 
     | 
    
         
            -
                         
     | 
| 
       60 
     | 
    
         
            -
                        path = File.join(@content_dir = File.join(@dest_dir, 'content'), item.identifierref + '.html')
         
     | 
| 
      
 76 
     | 
    
         
            +
                        path = File.join(@content_dir = File.join(@dest_name, 'content'), item.identifierref + '.html')
         
     | 
| 
       61 
77 
     | 
    
         
             
                        File.open(path, 'w') do |file|
         
     | 
| 
       62 
78 
     | 
    
         
             
                          entry = zipfile.get_entry(item.resource.href)
         
     | 
| 
      
 79 
     | 
    
         
            +
                          val = entry.get_input_stream.read
         
     | 
| 
      
 80 
     | 
    
         
            +
                          file << val.gsub('%24IMS_CC_FILEBASE%24', 'web_resources')
         
     | 
| 
      
 81 
     | 
    
         
            +
                          # file << entry.get_input_stream.read
         
     | 
| 
      
 82 
     | 
    
         
            +
                        end
         
     | 
| 
      
 83 
     | 
    
         
            +
                      end
         
     | 
| 
      
 84 
     | 
    
         
            +
                    end
         
     | 
| 
      
 85 
     | 
    
         
            +
                  end
         
     | 
| 
      
 86 
     | 
    
         
            +
                end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                def copy_images
         
     | 
| 
      
 89 
     | 
    
         
            +
                  return unless @zip_file.end_with?('zip') || @zip_file.end_with?('imscc')
         
     | 
| 
      
 90 
     | 
    
         
            +
                  Zip::File.open(@zip_file) do |zipfile|
         
     | 
| 
      
 91 
     | 
    
         
            +
                    @resources.each do |resource|
         
     | 
| 
      
 92 
     | 
    
         
            +
                      if resource.type == 'webcontent' && resource.href &&
         
     | 
| 
      
 93 
     | 
    
         
            +
                              resource.href.start_with?('web_resources') &&
         
     | 
| 
      
 94 
     | 
    
         
            +
                              File.extname(resource.href) =~ /gif|jpg|png/i
         
     | 
| 
      
 95 
     | 
    
         
            +
                        path = File.join(@content_dir, resource.href)
         
     | 
| 
      
 96 
     | 
    
         
            +
                        FileUtils.mkdir_p(File.dirname(path))
         
     | 
| 
      
 97 
     | 
    
         
            +
                        File.open(path, 'w') do |file|
         
     | 
| 
      
 98 
     | 
    
         
            +
                          entry = zipfile.get_entry(resource.href)
         
     | 
| 
       63 
99 
     | 
    
         
             
                          file << entry.get_input_stream.read
         
     | 
| 
       64 
100 
     | 
    
         
             
                        end
         
     | 
| 
       65 
101 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -68,7 +104,7 @@ module CC2HTML 
     | 
|
| 
       68 
104 
     | 
    
         
             
                end
         
     | 
| 
       69 
105 
     | 
    
         | 
| 
       70 
106 
     | 
    
         
             
                def create_meta_inf
         
     | 
| 
       71 
     | 
    
         
            -
                  meta_dir = File.join(@ 
     | 
| 
      
 107 
     | 
    
         
            +
                  meta_dir = File.join(@dest_name, 'META-INF')
         
     | 
| 
       72 
108 
     | 
    
         
             
                  FileUtils.mkdir_p(meta_dir)
         
     | 
| 
       73 
109 
     | 
    
         
             
                  File.open(File.join(meta_dir, 'container.xml'), 'w') do |f|
         
     | 
| 
       74 
110 
     | 
    
         
             
                    f << <<-XML
         
     | 
| 
         @@ -84,7 +120,7 @@ XML 
     | 
|
| 
       84 
120 
     | 
    
         | 
| 
       85 
121 
     | 
    
         
             
                def create_opf
         
     | 
| 
       86 
122 
     | 
    
         
             
                  template = File.expand_path(TEMPLATE_DIR + 'descriptor.opf.erb', __FILE__)
         
     | 
| 
       87 
     | 
    
         
            -
                  path = File.join(@content_dir 
     | 
| 
      
 123 
     | 
    
         
            +
                  path = File.join(@content_dir, @file_name + '.opf')
         
     | 
| 
       88 
124 
     | 
    
         | 
| 
       89 
125 
     | 
    
         
             
                  File.open(path, 'w') do |file|
         
     | 
| 
       90 
126 
     | 
    
         
             
                    erb = ERB.new(File.read(template))
         
     | 
    
        data/lib/cc2html/html_builder.rb
    CHANGED
    
    | 
         @@ -3,14 +3,14 @@ module CC2HTML 
     | 
|
| 
       3 
3 
     | 
    
         
             
                TEMPLATE_DIR = '../templates/html/'
         
     | 
| 
       4 
4 
     | 
    
         
             
                def initialize(manifest, dest_dir, zip_file)
         
     | 
| 
       5 
5 
     | 
    
         
             
                  @manifest = manifest
         
     | 
| 
       6 
     | 
    
         
            -
                  @ 
     | 
| 
       7 
     | 
    
         
            -
                  @ 
     | 
| 
      
 6 
     | 
    
         
            +
                  @dest_name = dest_dir
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @root_items = manifest.organizations.organization.item.items
         
     | 
| 
       8 
8 
     | 
    
         
             
                end
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
                def generate
         
     | 
| 
       11 
     | 
    
         
            -
                  FileUtils.mkdir_p(@ 
     | 
| 
      
 11 
     | 
    
         
            +
                  FileUtils.mkdir_p(@dest_name)
         
     | 
| 
       12 
12 
     | 
    
         
             
                  template = File.expand_path(TEMPLATE_DIR + 'index.html.erb', __FILE__)
         
     | 
| 
       13 
     | 
    
         
            -
                  path = File.join(@ 
     | 
| 
      
 13 
     | 
    
         
            +
                  path = File.join(@dest_name, 'index.html')
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
                  #FileUtils.mkdir_p(File.dirname(path))
         
     | 
| 
       16 
16 
     | 
    
         
             
                  File.open(path, 'w') do |file|
         
     | 
| 
         @@ -1,11 +1,22 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            <?xml version="1.0" encoding="UTF-8"?>
         
     | 
| 
       2 
2 
     | 
    
         
             
            <html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            < 
     | 
| 
       6 
     | 
    
         
            -
            <% @items. 
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
      
 3 
     | 
    
         
            +
            <head><title>Table of contents</title></head>
         
     | 
| 
      
 4 
     | 
    
         
            +
            <body>
         
     | 
| 
      
 5 
     | 
    
         
            +
            <nav xmlns="http://www.w3.org/1999/xhtml" class="book" epub:type="toc">
         
     | 
| 
      
 6 
     | 
    
         
            +
              <% @root_items.select{|ri|ri.items.any?}.each_with_index do |root, chapter_index| %>
         
     | 
| 
      
 7 
     | 
    
         
            +
                <h2>Chaper <%= chapter_index + 1 %>: <%= root.title %></h2>
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                <ol>
         
     | 
| 
      
 10 
     | 
    
         
            +
                  <% root.items.each do |item| %>
         
     | 
| 
      
 11 
     | 
    
         
            +
                    <% if item.identifierref && item.identifierref != '' %>
         
     | 
| 
      
 12 
     | 
    
         
            +
                      <li><a href="<%= item.identifierref %>.html"><%= item.title %></a></li>
         
     | 
| 
      
 13 
     | 
    
         
            +
                    <% else %>
         
     | 
| 
      
 14 
     | 
    
         
            +
                      <!-- Could have sub headers in index, but may only appropriate for pages -->
         
     | 
| 
      
 15 
     | 
    
         
            +
                      <!--<h3><%= item.title %></h3>-->
         
     | 
| 
      
 16 
     | 
    
         
            +
                    <% end %>
         
     | 
| 
      
 17 
     | 
    
         
            +
                  <% end %>
         
     | 
| 
      
 18 
     | 
    
         
            +
                </ol>
         
     | 
| 
      
 19 
     | 
    
         
            +
              <% end %>
         
     | 
| 
      
 20 
     | 
    
         
            +
            </nav>
         
     | 
| 
      
 21 
     | 
    
         
            +
            </body>
         
     | 
| 
       11 
22 
     | 
    
         
             
            </html>
         
     | 
    
        data/lib/cc2html/version.rb
    CHANGED
    
    
    
        data/lib/ims/cc/manifest.rb
    CHANGED
    
    | 
         @@ -29,16 +29,7 @@ module IMS::CC 
     | 
|
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                def post_process
         
     | 
| 
       31 
31 
     | 
    
         
             
                  parse_references
         
     | 
| 
       32 
     | 
    
         
            -
                   
     | 
| 
       33 
     | 
    
         
            -
                end
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                def connect_resources_to_org_item
         
     | 
| 
       36 
     | 
    
         
            -
                  self.organizations.organization.item.items.each do |item|
         
     | 
| 
       37 
     | 
    
         
            -
                    next unless item.identifierref
         
     | 
| 
       38 
     | 
    
         
            -
                    if res = self.resources.find_by_identifier(item.identifierref)
         
     | 
| 
       39 
     | 
    
         
            -
                      item.resource = res
         
     | 
| 
       40 
     | 
    
         
            -
                    end
         
     | 
| 
       41 
     | 
    
         
            -
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
                  organizations.attach_resources_to_items(resources)
         
     | 
| 
       42 
33 
     | 
    
         
             
                end
         
     | 
| 
       43 
34 
     | 
    
         | 
| 
       44 
35 
     | 
    
         
             
                def parse_references
         
     | 
    
        data/lib/ims/cc/organizations.rb
    CHANGED
    
    | 
         @@ -10,7 +10,33 @@ module Organizations 
     | 
|
| 
       10 
10 
     | 
    
         
             
                attribute :identifierref, String
         
     | 
| 
       11 
11 
     | 
    
         
             
                element :title, String
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
                 
     | 
| 
      
 13 
     | 
    
         
            +
                # This is so that it only select parent items of itself,
         
     | 
| 
      
 14 
     | 
    
         
            +
                # otherwise HappyMapper does .// instead of ./
         
     | 
| 
      
 15 
     | 
    
         
            +
                # can this reference its own namespace somehow?
         
     | 
| 
      
 16 
     | 
    
         
            +
                has_many :items, Item, :xpath => "./#{HappyMapper::DEFAULT_NS}:item"
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def find_by_identifier(id)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  if id == identifier
         
     | 
| 
      
 20 
     | 
    
         
            +
                    self
         
     | 
| 
      
 21 
     | 
    
         
            +
                  else
         
     | 
| 
      
 22 
     | 
    
         
            +
                    items.each do |i|
         
     | 
| 
      
 23 
     | 
    
         
            +
                      if item = i.find_by_identifier(id)
         
     | 
| 
      
 24 
     | 
    
         
            +
                        return item
         
     | 
| 
      
 25 
     | 
    
         
            +
                      end
         
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                def attach_resources(resources)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  @resource = resources.find_by_identifier(identifierref) if identifierref
         
     | 
| 
      
 32 
     | 
    
         
            +
                  items.each { |i| i.attach_resources(resources) }
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                def all_items(res=[])
         
     | 
| 
      
 36 
     | 
    
         
            +
                  res << self
         
     | 
| 
      
 37 
     | 
    
         
            +
                  items.each{|i|i.all_items(res)}
         
     | 
| 
      
 38 
     | 
    
         
            +
                  res
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
       14 
40 
     | 
    
         
             
              end
         
     | 
| 
       15 
41 
     | 
    
         | 
| 
       16 
42 
     | 
    
         
             
              class Organization
         
     | 
| 
         @@ -29,7 +55,11 @@ module Organizations 
     | 
|
| 
       29 
55 
     | 
    
         
             
                has_one :organization, Organization
         
     | 
| 
       30 
56 
     | 
    
         | 
| 
       31 
57 
     | 
    
         
             
                def find_item_by_identifier(id)
         
     | 
| 
       32 
     | 
    
         
            -
                   
     | 
| 
      
 58 
     | 
    
         
            +
                  organization.item.find_by_identifier(id)
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                def attach_resources_to_items(resources)
         
     | 
| 
      
 62 
     | 
    
         
            +
                  organization.item.attach_resources(resources)
         
     | 
| 
       33 
63 
     | 
    
         
             
                end
         
     | 
| 
       34 
64 
     | 
    
         
             
              end
         
     | 
| 
       35 
65 
     | 
    
         | 
    
        data/lib/ims/cc/topic.rb
    CHANGED
    
    | 
         @@ -1,10 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module IMS::CC
         
     | 
| 
       2 
2 
     | 
    
         
             
              class Topic
         
     | 
| 
       3 
3 
     | 
    
         
             
                include HappyMapper
         
     | 
| 
       4 
     | 
    
         
            -
                #register_namespace('http://www.imsglobal.org/xsd/imsccv1p3/imsdt_v1p3', 'dt3')
         
     | 
| 
       5 
     | 
    
         
            -
                #register_namespace('http://www.imsglobal.org/xsd/imsccv1p1/imsdt_v1p1', 'dt1')
         
     | 
| 
      
 4 
     | 
    
         
            +
                # register_namespace('http://www.imsglobal.org/xsd/imsccv1p3/imsdt_v1p3', 'dt3')
         
     | 
| 
      
 5 
     | 
    
         
            +
                # register_namespace('http://www.imsglobal.org/xsd/imsccv1p1/imsdt_v1p1', 'dt1')
         
     | 
| 
       6 
6 
     | 
    
         
             
                namespace 'http://www.imsglobal.org/xsd/imsccv1p3/imsdt_v1p3'
         
     | 
| 
       7 
     | 
    
         
            -
                #namespace 'http://www.imsglobal.org/xsd/imsccv1p1/imsdt_v1p1'
         
     | 
| 
      
 7 
     | 
    
         
            +
                # namespace 'http://www.imsglobal.org/xsd/imsccv1p1/imsdt_v1p1'
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
                tag 'topic'
         
     | 
| 
       10 
10 
     | 
    
         
             
                element :title, String
         
     | 
| 
         @@ -59,7 +59,16 @@ 
     | 
|
| 
       59 
59 
     | 
    
         
             
                      <item identifier="I_00003" identifierref="Resource3">
         
     | 
| 
       60 
60 
     | 
    
         
             
                        <title>Open2.net</title>
         
     | 
| 
       61 
61 
     | 
    
         
             
                      </item>
         
     | 
| 
       62 
     | 
    
         
            -
                      <item identifier=" 
     | 
| 
      
 62 
     | 
    
         
            +
                      <item identifier="I_00003">
         
     | 
| 
      
 63 
     | 
    
         
            +
                        <title>Child Folder</title>
         
     | 
| 
      
 64 
     | 
    
         
            +
                        <item identifier="I_00004" identifierref="Resource4">
         
     | 
| 
      
 65 
     | 
    
         
            +
                          <title>LTI Launch</title>
         
     | 
| 
      
 66 
     | 
    
         
            +
                        </item>
         
     | 
| 
      
 67 
     | 
    
         
            +
                      </item>
         
     | 
| 
      
 68 
     | 
    
         
            +
                    </item>
         
     | 
| 
      
 69 
     | 
    
         
            +
                    <item identifier="I_2">
         
     | 
| 
      
 70 
     | 
    
         
            +
                      <title>Folder 2</title>
         
     | 
| 
      
 71 
     | 
    
         
            +
                      <item identifier="I_00005" identifierref="Resource4">
         
     | 
| 
       63 
72 
     | 
    
         
             
                        <title>LTI Launch</title>
         
     | 
| 
       64 
73 
     | 
    
         
             
                      </item>
         
     | 
| 
       65 
74 
     | 
    
         
             
                    </item>
         
     | 
| 
         @@ -14,20 +14,41 @@ class TestUnitOrganizations < Minitest::Test 
     | 
|
| 
       14 
14 
     | 
    
         
             
                assert_equal 'rooted-hierarchy', @orgs.organization.structure
         
     | 
| 
       15 
15 
     | 
    
         
             
              end
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
               
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
              def test_it_creates_item_tree
         
     | 
| 
      
 18 
     | 
    
         
            +
                assert_instance_of IMS::CC::Organizations::Item, @orgs.organization.item
         
     | 
| 
      
 19 
     | 
    
         
            +
                assert_equal 2, @orgs.organization.item.items.count
         
     | 
| 
      
 20 
     | 
    
         
            +
                assert_equal 4, @orgs.organization.item.items[0].items.count
         
     | 
| 
      
 21 
     | 
    
         
            +
                assert_equal 1, @orgs.organization.item.items[0].items[3].items.count
         
     | 
| 
      
 22 
     | 
    
         
            +
                assert_equal 1, @orgs.organization.item.items[1].items.count
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
       22 
24 
     | 
    
         | 
| 
       23 
25 
     | 
    
         
             
              def test_gets_item_info
         
     | 
| 
       24 
     | 
    
         
            -
                 
     | 
| 
       25 
     | 
    
         
            -
                assert_equal " 
     | 
| 
       26 
     | 
    
         
            -
                assert_equal  
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                assert_equal " 
     | 
| 
       30 
     | 
    
         
            -
                assert_equal " 
     | 
| 
      
 26 
     | 
    
         
            +
                folder1 = @orgs.organization.item.items[0]
         
     | 
| 
      
 27 
     | 
    
         
            +
                assert_equal "I_00000", folder1.identifier
         
     | 
| 
      
 28 
     | 
    
         
            +
                assert_equal "CCv1.3 With Assignment", folder1.title
         
     | 
| 
      
 29 
     | 
    
         
            +
                assert_equal '', folder1.identifierref
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                assert_equal "I_00001", folder1.items[0].identifier
         
     | 
| 
      
 32 
     | 
    
         
            +
                assert_equal "Cool Assignment", folder1.items[0].title
         
     | 
| 
      
 33 
     | 
    
         
            +
                assert_equal "Resource1", folder1.items[0].identifierref
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                sub_folder = folder1.items.last
         
     | 
| 
      
 36 
     | 
    
         
            +
                assert_equal "I_00003", sub_folder.identifier
         
     | 
| 
      
 37 
     | 
    
         
            +
                assert_equal "Child Folder", sub_folder.title
         
     | 
| 
      
 38 
     | 
    
         
            +
                assert_equal "", sub_folder.identifierref
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                assert_equal "I_00004", sub_folder.items[0].identifier
         
     | 
| 
      
 41 
     | 
    
         
            +
                assert_equal "LTI Launch", sub_folder.items[0].title
         
     | 
| 
      
 42 
     | 
    
         
            +
                assert_equal "Resource4", sub_folder.items[0].identifierref
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                folder2 = @orgs.organization.item.items[1]
         
     | 
| 
      
 45 
     | 
    
         
            +
                assert_equal "I_2", folder2.identifier
         
     | 
| 
      
 46 
     | 
    
         
            +
                assert_equal "Folder 2", folder2.title
         
     | 
| 
      
 47 
     | 
    
         
            +
                assert_equal "", folder2.identifierref
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                assert_equal "I_00005", folder2.items[0].identifier
         
     | 
| 
      
 50 
     | 
    
         
            +
                assert_equal "LTI Launch", folder2.items[0].title
         
     | 
| 
      
 51 
     | 
    
         
            +
                assert_equal "Resource4", folder2.items[0].identifierref
         
     | 
| 
       31 
52 
     | 
    
         
             
              end
         
     | 
| 
       32 
53 
     | 
    
         | 
| 
       33 
54 
     | 
    
         
             
              def test_item_references_resource
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: cc2html
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.2
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date:  
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2014-05-09 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: rubyzip
         
     | 
| 
         @@ -196,6 +196,7 @@ extensions: [] 
     | 
|
| 
       196 
196 
     | 
    
         
             
            extra_rdoc_files:
         
     | 
| 
       197 
197 
     | 
    
         
             
            - LICENSE
         
     | 
| 
       198 
198 
     | 
    
         
             
            files:
         
     | 
| 
      
 199 
     | 
    
         
            +
            - .ruby-version
         
     | 
| 
       199 
200 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       200 
201 
     | 
    
         
             
            - Gemfile.lock
         
     | 
| 
       201 
202 
     | 
    
         
             
            - Guardfile
         
     |