pfrpg_import 0.0.1
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.
- checksums.yaml +7 -0
- data/Rakefile +7 -0
- data/lib/pfrpg_import/case_helpers.rb +31 -0
- data/lib/pfrpg_import/feature_writer.rb +62 -0
- data/lib/pfrpg_import/heroclass_facts.rb +176 -0
- data/lib/pfrpg_import/heroclass_importer.rb +43 -0
- data/lib/pfrpg_import/heroclass_levels.rb +26 -0
- data/lib/pfrpg_import/heroclass_parser.rb +28 -0
- data/lib/pfrpg_import/heroclass_spells.rb +32 -0
- data/lib/pfrpg_import/heroclass_writer.rb +35 -0
- data/lib/pfrpg_import/level.rb +52 -0
- data/lib/pfrpg_import/level_base.rb +9 -0
- data/lib/pfrpg_import/level_writer.rb +39 -0
- data/lib/pfrpg_import/spell_writer.rb +32 -0
- data/lib/pfrpg_import/version.rb +3 -0
- data/lib/pfrpg_import.rb +17 -0
- data/test/helper.rb +4 -0
- data/test/import_test.rb +32 -0
- metadata +90 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: eef901a38955ad00b063ca4dfe85f2dca0cd539e
         | 
| 4 | 
            +
              data.tar.gz: 04bf2cae3c528ff3025694a9c4a4c8270543d989
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: 431f0c764701275b2f5cbb8cf128f47c0142c062c17ef1b68c85c8810673ed52f07599562639e3593cdb2efd982a7244c62c50136477046e843d8adefd7e01ee
         | 
| 7 | 
            +
              data.tar.gz: 92de8d39a0f66e8fc1a0c77f0191ca3f057d978c791847b62833c70f5b50ecabcfb3647d10f5ca037f75334adc41586e7fedb0840d75e36a1dda3cda9ba2d2f1
         | 
    
        data/Rakefile
    ADDED
    
    
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            require 'active_support/inflector'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module PfrpgImport::CaseHelpers
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              class String
         | 
| 6 | 
            +
                def underscore
         | 
| 7 | 
            +
                  self.gsub(/::/, '/').
         | 
| 8 | 
            +
                      gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
         | 
| 9 | 
            +
                      gsub(/([a-z\d])([A-Z])/,'\1_\2').
         | 
| 10 | 
            +
                      tr("-", "_").
         | 
| 11 | 
            +
                      tr(" ", "_").
         | 
| 12 | 
            +
                      downcase
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              def camelized_title(title)
         | 
| 17 | 
            +
                title.camelize.gsub(' ','')
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              def underscored_title(title)
         | 
| 21 | 
            +
                title.underscore
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              def arrayify(string_list)
         | 
| 25 | 
            +
                str = "["
         | 
| 26 | 
            +
                string_list.each do |b|
         | 
| 27 | 
            +
                  str = str + "#{b},"
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
                return str + ']'
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
            end
         | 
| @@ -0,0 +1,62 @@ | |
| 1 | 
            +
            module PfrpgImport
         | 
| 2 | 
            +
              class FeatureWriter
         | 
| 3 | 
            +
                include CaseHelpers
         | 
| 4 | 
            +
                def initialize(features, filename, path='./imported/')
         | 
| 5 | 
            +
                  @features = features
         | 
| 6 | 
            +
                  @filename = filename
         | 
| 7 | 
            +
                  @path = path
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                def print_features
         | 
| 11 | 
            +
                  filename = "#{@path}#{underscored_title(@filename)}_feature.rb"
         | 
| 12 | 
            +
                  feature_name = "#{camelized_title(@filename)}Feature"
         | 
| 13 | 
            +
                  table = File.new(filename, "w")
         | 
| 14 | 
            +
                  str = <<-eos
         | 
| 15 | 
            +
            class #{feature_name} < ClassFeature
         | 
| 16 | 
            +
              def feature
         | 
| 17 | 
            +
                #{feature_name}Info.by_name(self.ability_name)
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              def self.from_feature_info(feature_info)
         | 
| 21 | 
            +
                c = #{feature_name}.new
         | 
| 22 | 
            +
                c.ability_name = feature_info.name
         | 
| 23 | 
            +
                c
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| 26 | 
            +
                  eos
         | 
| 27 | 
            +
                  table.puts str
         | 
| 28 | 
            +
                  table.close
         | 
| 29 | 
            +
                  puts "Wrote #{filename}"
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  filename = "#{@path}#{underscored_title(@filename)}_feature_info.rb"
         | 
| 32 | 
            +
                  table = File.new(filename, "w")
         | 
| 33 | 
            +
                  str = <<-eos
         | 
| 34 | 
            +
            class #{feature_name}InfoInfo
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              def self.by_name(name)
         | 
| 37 | 
            +
                self.all.find { |x| x.name == name }
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              def self.all
         | 
| 41 | 
            +
                [     ]
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
              def feature_type
         | 
| 45 | 
            +
                "#{feature_name}"
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
            end
         | 
| 48 | 
            +
                  eos
         | 
| 49 | 
            +
                  table.puts str
         | 
| 50 | 
            +
                  table.close
         | 
| 51 | 
            +
                  puts "Wrote #{filename}"
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                def print_level_bonus
         | 
| 55 | 
            +
                  <<-eos
         | 
| 56 | 
            +
                spells =
         | 
| 57 | 
            +
                  #{@spells}
         | 
| 58 | 
            +
                spells[level-1]
         | 
| 59 | 
            +
                  eos
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
              end
         | 
| 62 | 
            +
            end
         | 
| @@ -0,0 +1,176 @@ | |
| 1 | 
            +
            module PfrpgImport
         | 
| 2 | 
            +
              class HeroclassFacts
         | 
| 3 | 
            +
                include CaseHelpers
         | 
| 4 | 
            +
                attr_reader :friendly_name, :hit_die, :start_wealth, :starting_wealth_avg,
         | 
| 5 | 
            +
                            :alignment, :skills_per_level, :spells_bonus_attr, :description,
         | 
| 6 | 
            +
                            :class_skills, :starting_feats, :feature_type
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                def initialize(bundle)
         | 
| 9 | 
            +
                  @friendly_name = bundle[:heroclass_name]
         | 
| 10 | 
            +
                  @hit_die       = bundle[:hit_die].gsub("d","")
         | 
| 11 | 
            +
                  @start_wealth  = bundle[:starting_wealth]
         | 
| 12 | 
            +
                  @starting_wealth_average = bundle[:starting_wealth_avg]
         | 
| 13 | 
            +
                  @alignment     = bundle[:alignment]
         | 
| 14 | 
            +
                  @skills_per_level = bundle[:skills_per]
         | 
| 15 | 
            +
                  @spells_bonus_attr = bundle[:spell_mod]
         | 
| 16 | 
            +
                  @description   = bundle[:description]
         | 
| 17 | 
            +
                  @class_skills  = bundle[:class_skills]
         | 
| 18 | 
            +
                  @starting_feats= bundle[:starting_feats]
         | 
| 19 | 
            +
                  @feature_type  = get_feature_type(@friendly_name)
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                def title
         | 
| 23 | 
            +
                  @friendly_name.underscore
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                def get_feature_type(friendly_name)
         | 
| 27 | 
            +
                  "#{camelized_title(friendly_name)}Feature"
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                def print_name
         | 
| 31 | 
            +
                  <<-eos
         | 
| 32 | 
            +
              def name
         | 
| 33 | 
            +
                "#{@friendly_name}"
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  eos
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                def print_hit_die
         | 
| 40 | 
            +
                  <<-eos
         | 
| 41 | 
            +
              def hit_die
         | 
| 42 | 
            +
                Dice.new(1,#{@hit_die})
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  eos
         | 
| 46 | 
            +
                end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                def print_starting_wealth
         | 
| 49 | 
            +
                  <<-eos
         | 
| 50 | 
            +
              def starting_wealth
         | 
| 51 | 
            +
                Dice.new(5,6, multiplier = 10)
         | 
| 52 | 
            +
              end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                  eos
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                def print_bonuses_for_level
         | 
| 58 | 
            +
                  <<-eos
         | 
| 59 | 
            +
              def bonuses_for_level(level)
         | 
| 60 | 
            +
                PfrpgTables::Heroclasses::#{@friendly_name}.level_bonus(level)
         | 
| 61 | 
            +
              end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                  eos
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                def print_spells_per_day
         | 
| 67 | 
            +
                  <<-eos
         | 
| 68 | 
            +
              def get_spells_table(level)
         | 
| 69 | 
            +
                PfrpgTables::Spells::SpellsPerDay.#{@friendly_name}(level)
         | 
| 70 | 
            +
              end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                  eos
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                def print_create_feature
         | 
| 76 | 
            +
                  <<-eos
         | 
| 77 | 
            +
              def create_feature(f)
         | 
| 78 | 
            +
                #{@feature_type}.new(:ability_name => f)
         | 
| 79 | 
            +
              end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                  eos
         | 
| 82 | 
            +
                end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                def print_alignment
         | 
| 85 | 
            +
                  <<-eos
         | 
| 86 | 
            +
              def alignment
         | 
| 87 | 
            +
                #{alignment_string}
         | 
| 88 | 
            +
              end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                  eos
         | 
| 91 | 
            +
                end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                def alignment_string
         | 
| 94 | 
            +
                  case @alignment
         | 
| 95 | 
            +
                  when 'any'
         | 
| 96 | 
            +
                    return 'Alignment.any'
         | 
| 97 | 
            +
                  else
         | 
| 98 | 
            +
                    return 'Alignment.any'
         | 
| 99 | 
            +
                  end
         | 
| 100 | 
            +
                end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                def print_skills_per_level
         | 
| 103 | 
            +
                  <<-eos
         | 
| 104 | 
            +
              def skills_per_level
         | 
| 105 | 
            +
                #{@skills_per_level}
         | 
| 106 | 
            +
              end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                  eos
         | 
| 109 | 
            +
                end
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                def print_spells_bonus_attr
         | 
| 112 | 
            +
                  <<-eos
         | 
| 113 | 
            +
              def spells_bonus_attr
         | 
| 114 | 
            +
                "#{@spells_bonus_attr}"
         | 
| 115 | 
            +
              end
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                  eos
         | 
| 118 | 
            +
                end
         | 
| 119 | 
            +
             | 
| 120 | 
            +
                def print_description
         | 
| 121 | 
            +
                  <<-eos
         | 
| 122 | 
            +
              def description
         | 
| 123 | 
            +
                "#{@description}"
         | 
| 124 | 
            +
              end
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                  eos
         | 
| 127 | 
            +
                end
         | 
| 128 | 
            +
             | 
| 129 | 
            +
                def print_skills
         | 
| 130 | 
            +
                  <<-eos
         | 
| 131 | 
            +
              def skills
         | 
| 132 | 
            +
                [ #{skills_string} ]
         | 
| 133 | 
            +
              end
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                  eos
         | 
| 136 | 
            +
                end
         | 
| 137 | 
            +
             | 
| 138 | 
            +
                def skills_string
         | 
| 139 | 
            +
                  str = ""
         | 
| 140 | 
            +
                  @class_skills.split(',').each do |s|
         | 
| 141 | 
            +
                    str = str + "Skill::#{get_skill_class(s)}.new, "
         | 
| 142 | 
            +
                  end
         | 
| 143 | 
            +
                  str
         | 
| 144 | 
            +
                end
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                def get_skill_class(skill)
         | 
| 147 | 
            +
                  camelized_title(skill)
         | 
| 148 | 
            +
                end
         | 
| 149 | 
            +
             | 
| 150 | 
            +
                def print_feature_type
         | 
| 151 | 
            +
                  <<-eos
         | 
| 152 | 
            +
              def feature_type
         | 
| 153 | 
            +
                "#{feature_type}"
         | 
| 154 | 
            +
              end
         | 
| 155 | 
            +
             | 
| 156 | 
            +
                  eos
         | 
| 157 | 
            +
                end
         | 
| 158 | 
            +
             | 
| 159 | 
            +
                def print_starting_feats
         | 
| 160 | 
            +
                  <<-eos
         | 
| 161 | 
            +
              def starting_feats
         | 
| 162 | 
            +
                [ #{feats_string} ]
         | 
| 163 | 
            +
              end
         | 
| 164 | 
            +
             | 
| 165 | 
            +
                  eos
         | 
| 166 | 
            +
                end
         | 
| 167 | 
            +
             | 
| 168 | 
            +
                def feats_string
         | 
| 169 | 
            +
                  str = ""
         | 
| 170 | 
            +
                  @starting_feats.split(",").each do |feat|
         | 
| 171 | 
            +
                    str += "\'#{feat}',"
         | 
| 172 | 
            +
                  end
         | 
| 173 | 
            +
                  return str
         | 
| 174 | 
            +
                end
         | 
| 175 | 
            +
              end
         | 
| 176 | 
            +
            end
         | 
| @@ -0,0 +1,43 @@ | |
| 1 | 
            +
            require 'csv'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module PfrpgImport
         | 
| 4 | 
            +
              class HeroclassImporter
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                attr_reader :levels, :facts, :spells
         | 
| 7 | 
            +
                def initialize(filename, path=nil)
         | 
| 8 | 
            +
                  @csv = CSV.read(filename)
         | 
| 9 | 
            +
                  @path = path
         | 
| 10 | 
            +
                  parser = HeroclassParser.new(@csv)
         | 
| 11 | 
            +
                  @levels = parser.levels
         | 
| 12 | 
            +
                  @facts = parser.facts
         | 
| 13 | 
            +
                  @spells = parser.spells
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                def import_heroclass
         | 
| 17 | 
            +
                  write_level_table
         | 
| 18 | 
            +
                  write_heroclass_file
         | 
| 19 | 
            +
                  write_feature_file
         | 
| 20 | 
            +
                  write_spell_file
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                def write_level_table
         | 
| 24 | 
            +
                  table = LevelWriter.new(@levels, @facts.title, @path)
         | 
| 25 | 
            +
                  table.print_class
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                def write_heroclass_file
         | 
| 29 | 
            +
                  heroclass = HeroclassWriter.new(@facts, @facts.title, @path)
         | 
| 30 | 
            +
                  heroclass.print_class
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                def write_feature_file
         | 
| 34 | 
            +
                  feature = FeatureWriter.new(@facts, @facts.title, @path)
         | 
| 35 | 
            +
                  feature.print_features
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                def write_spell_file
         | 
| 39 | 
            +
                  spell = SpellWriter.new(@spells, @facts.title, @path)
         | 
| 40 | 
            +
                  spell.print_spells
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
            end
         | 
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            module PfrpgImport
         | 
| 2 | 
            +
              class HeroclassLevels
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                attr_reader :levels
         | 
| 5 | 
            +
                def initialize(csv_rows)
         | 
| 6 | 
            +
                  @levels = parse_levels(csv_rows)
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                def parse_levels(rows)
         | 
| 10 | 
            +
                  rows.map { |row| to_level(row) }
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                def to_level(row)
         | 
| 14 | 
            +
                  params = {
         | 
| 15 | 
            +
                      level: row[0],
         | 
| 16 | 
            +
                      bab:   row[1],
         | 
| 17 | 
            +
                      fort_save: row[2],
         | 
| 18 | 
            +
                      ref_save: row[3],
         | 
| 19 | 
            +
                      will_save: row[4],
         | 
| 20 | 
            +
                      granted_features: row[5],
         | 
| 21 | 
            +
                      choices: nil
         | 
| 22 | 
            +
                  }
         | 
| 23 | 
            +
                  return Level.new(params)
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            module PfrpgImport
         | 
| 2 | 
            +
              class HeroclassParser
         | 
| 3 | 
            +
                include CaseHelpers
         | 
| 4 | 
            +
                attr_reader :facts, :levels, :spells, :filename_prefix
         | 
| 5 | 
            +
                def initialize(csv)
         | 
| 6 | 
            +
                  factbundle = {
         | 
| 7 | 
            +
                      heroclass_name: csv[0][1],
         | 
| 8 | 
            +
                      description:    csv[1][1],
         | 
| 9 | 
            +
                      class_skills:   csv[2][1],
         | 
| 10 | 
            +
                      alignment:      csv[3][1],
         | 
| 11 | 
            +
                      starting_wealth:csv[4][1],
         | 
| 12 | 
            +
                      hit_die:        csv[5][1],
         | 
| 13 | 
            +
                      skills_per:     csv[6][1],
         | 
| 14 | 
            +
                      spell_mod:      csv[7][1],
         | 
| 15 | 
            +
                      starting_feats: csv[8][1]
         | 
| 16 | 
            +
                  }
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  @facts = HeroclassFacts.new(factbundle)
         | 
| 19 | 
            +
                  @levels = HeroclassLevels.new(csv[11..30]).levels
         | 
| 20 | 
            +
                  @spells = HeroclassSpells.new(csv[11..30]).spells
         | 
| 21 | 
            +
                  @filename_prefix = parse_filename
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def parse_filename
         | 
| 25 | 
            +
                  underscored_title(@facts.friendly_name)
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         | 
| @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            module PfrpgImport
         | 
| 2 | 
            +
              class HeroclassSpells
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                attr_reader :spells
         | 
| 5 | 
            +
                def initialize(csv_rows)
         | 
| 6 | 
            +
                  @spells = pretty_print(parse_spells(csv_rows))
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                def parse_spells(rows)
         | 
| 10 | 
            +
                  rows.map { |row| to_spell_row(row[6..15]) }
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                def to_spell_row(row)
         | 
| 14 | 
            +
                  spells = []
         | 
| 15 | 
            +
                  for i in 0..9
         | 
| 16 | 
            +
                    f = row[i] || "0"
         | 
| 17 | 
            +
                    f = f.gsub("—","0")
         | 
| 18 | 
            +
                    spells[i] = Integer(f)
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
                  return spells
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                def pretty_print(rows)
         | 
| 24 | 
            +
                  str = "[\n"
         | 
| 25 | 
            +
                  rows.each do |row|
         | 
| 26 | 
            +
                    str += "\t\t\t\t#{row},\n"
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
                  str += "\t\t\t]\n"
         | 
| 29 | 
            +
                  str
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
            end
         | 
| @@ -0,0 +1,35 @@ | |
| 1 | 
            +
            module PfrpgImport
         | 
| 2 | 
            +
              class HeroclassWriter
         | 
| 3 | 
            +
                include CaseHelpers
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                def initialize(facts, filename, path='./imported/')
         | 
| 6 | 
            +
                  @facts = facts
         | 
| 7 | 
            +
                  @filename = filename
         | 
| 8 | 
            +
                  @path = path
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                def print_class
         | 
| 12 | 
            +
                  filename = "#{@path}#{underscored_title(@filename)}.rb"
         | 
| 13 | 
            +
                  table = File.new(filename, "w")
         | 
| 14 | 
            +
                  str = "class PfrpgClasses::#{camelized_title(@filename)} < PfrpgClasses::Heroclass\n"
         | 
| 15 | 
            +
                  str += @facts.print_name
         | 
| 16 | 
            +
                  str += @facts.print_hit_die
         | 
| 17 | 
            +
                  str += @facts.print_starting_wealth
         | 
| 18 | 
            +
                  str += @facts.print_bonuses_for_level
         | 
| 19 | 
            +
                  str += @facts.print_create_feature
         | 
| 20 | 
            +
                  str += @facts.print_alignment
         | 
| 21 | 
            +
                  str += @facts.print_skills_per_level
         | 
| 22 | 
            +
                  str += @facts.print_spells_bonus_attr
         | 
| 23 | 
            +
                  str += @facts.print_spells_per_day
         | 
| 24 | 
            +
                  str += @facts.print_description
         | 
| 25 | 
            +
                  str += @facts.print_skills
         | 
| 26 | 
            +
                  str += @facts.print_feature_type
         | 
| 27 | 
            +
                  str += @facts.print_starting_feats
         | 
| 28 | 
            +
                  str += "end"
         | 
| 29 | 
            +
                  table.puts str
         | 
| 30 | 
            +
                  table.close
         | 
| 31 | 
            +
                  puts "Wrote #{filename}"
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
            end
         | 
| @@ -0,0 +1,52 @@ | |
| 1 | 
            +
            module PfrpgImport
         | 
| 2 | 
            +
              class Level
         | 
| 3 | 
            +
                include CaseHelpers
         | 
| 4 | 
            +
                attr_reader :level, :bab, :fort_save, :ref_save, :will_save,
         | 
| 5 | 
            +
                            :granted_features, :choices
         | 
| 6 | 
            +
                def initialize(params)
         | 
| 7 | 
            +
                  @level = parse_level(params[:level])
         | 
| 8 | 
            +
                  @bab = parse_bab(params[:bab])
         | 
| 9 | 
            +
                  @fort_save = parse_save(params[:fort_save])
         | 
| 10 | 
            +
                  @ref_save = parse_save(params[:ref_save])
         | 
| 11 | 
            +
                  @will_save = parse_save(params[:will_save])
         | 
| 12 | 
            +
                  @granted_features = parse_features(params[:granted_features])
         | 
| 13 | 
            +
                  @choices = parse_choices(params[:choices])
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                def parse_level(level)
         | 
| 17 | 
            +
                  return Integer(level.gsub("nd","").gsub("th","").gsub("st","").gsub("rd",""))
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                def parse_bab(bab_string)
         | 
| 21 | 
            +
                  return arrayify(bab_string.gsub("+", "").split('/'))
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def parse_save(save)
         | 
| 25 | 
            +
                  return save.gsub("+", "")
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                def parse_features(features)
         | 
| 29 | 
            +
                  return 'nil' if (!features || features.empty?)
         | 
| 30 | 
            +
                  return arrayify(features.split(',').map { |x| "\'#{x.underscore.downcase}\'" })
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                def parse_choices(choices)
         | 
| 34 | 
            +
                  return 'nil' if (!choices || choices.empty?)
         | 
| 35 | 
            +
                  return arrayify(choices)
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                def to_s(title)
         | 
| 39 | 
            +
                  <<-eos
         | 
| 40 | 
            +
              when #{level}
         | 
| 41 | 
            +
                bonus = { :base_attack_bonus => #{bab},
         | 
| 42 | 
            +
                          :fort_save         => #{fort_save},
         | 
| 43 | 
            +
                          :ref_save          => #{ref_save},
         | 
| 44 | 
            +
                          :will_save         => #{will_save},
         | 
| 45 | 
            +
                          :granted_features  => #{granted_features},
         | 
| 46 | 
            +
                          :choices           => #{choices},
         | 
| 47 | 
            +
                          :spells_per_day => Tables::Spells::SpellsPerDay.#{title}(#{level})
         | 
| 48 | 
            +
                        }
         | 
| 49 | 
            +
                  eos
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
            end
         | 
| @@ -0,0 +1,39 @@ | |
| 1 | 
            +
            module PfrpgImport
         | 
| 2 | 
            +
              class LevelWriter
         | 
| 3 | 
            +
                include PfrpgImport::CaseHelpers
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                def initialize(levels, filename, path='./imported/')
         | 
| 6 | 
            +
                  @levels = levels
         | 
| 7 | 
            +
                  @filename = filename
         | 
| 8 | 
            +
                  @path = path
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                def print_class
         | 
| 12 | 
            +
                  filename = "#{@path}#{underscored_title(@filename)}_table.rb"
         | 
| 13 | 
            +
                  table = File.new(filename, "w")
         | 
| 14 | 
            +
                  str = "class PfrpgTables::Tables::Heroclasses::#{camelized_title(@filename)}\n"
         | 
| 15 | 
            +
                  str += print_level_bonus
         | 
| 16 | 
            +
                  str += "end"
         | 
| 17 | 
            +
                  table.puts str
         | 
| 18 | 
            +
                  table.close
         | 
| 19 | 
            +
                  puts "Wrote #{filename}"
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                def print_level_bonus
         | 
| 23 | 
            +
                  level_string = ""
         | 
| 24 | 
            +
                  @levels.each do |level|
         | 
| 25 | 
            +
                    level_string += level.to_s(camelized_title(@filename))
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
                  return <<-eos
         | 
| 28 | 
            +
              def self.level_bonus(level)
         | 
| 29 | 
            +
                bonus = nil
         | 
| 30 | 
            +
                case level
         | 
| 31 | 
            +
                  #{level_string}
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
                return bonus
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
                  eos
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
            end
         | 
| @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            module PfrpgImport
         | 
| 2 | 
            +
              class SpellWriter
         | 
| 3 | 
            +
                include CaseHelpers
         | 
| 4 | 
            +
                def initialize(spells, filename, path='./imported/')
         | 
| 5 | 
            +
                  @spells = spells
         | 
| 6 | 
            +
                  @filename = filename
         | 
| 7 | 
            +
                  @path = path
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                def print_spells
         | 
| 11 | 
            +
                  filename = "#{@path}#{underscored_title(@filename)}_spells.rb"
         | 
| 12 | 
            +
                  table = File.new(filename, "w")
         | 
| 13 | 
            +
                  str = "class PfrpgTables::Tables::Spells::SpellsPerDay\n"
         | 
| 14 | 
            +
                  str += "  def self.#{camelized_title(@filename)}(level)\n"
         | 
| 15 | 
            +
                  str += print_level_bonus
         | 
| 16 | 
            +
                  str += "  end\n"
         | 
| 17 | 
            +
                  str += "end\n"
         | 
| 18 | 
            +
                  table.puts str
         | 
| 19 | 
            +
                  table.close
         | 
| 20 | 
            +
                  puts "Wrote #{filename}"
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                def print_level_bonus
         | 
| 24 | 
            +
                  <<-eos
         | 
| 25 | 
            +
                spells =
         | 
| 26 | 
            +
                  #{@spells}
         | 
| 27 | 
            +
                spells[level-1]
         | 
| 28 | 
            +
                  eos
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
            end
         | 
    
        data/lib/pfrpg_import.rb
    ADDED
    
    | @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            require 'pfrpg_import/case_helpers'
         | 
| 2 | 
            +
            require 'pfrpg_import/level_writer'
         | 
| 3 | 
            +
            require 'pfrpg_import/feature_writer'
         | 
| 4 | 
            +
            require 'pfrpg_import/heroclass_writer'
         | 
| 5 | 
            +
            require 'pfrpg_import/level_base'
         | 
| 6 | 
            +
            require 'pfrpg_import/heroclass_importer'
         | 
| 7 | 
            +
            require 'pfrpg_import/heroclass_levels'
         | 
| 8 | 
            +
            require 'pfrpg_import/heroclass_facts'
         | 
| 9 | 
            +
            require 'pfrpg_import/heroclass_spells'
         | 
| 10 | 
            +
             | 
| 11 | 
            +
             | 
| 12 | 
            +
            Dir[File.expand_path(File.join(File.dirname(File.absolute_path(__FILE__)), 'pfrpg_import/')) + "/**/*.rb"].each do |file|
         | 
| 13 | 
            +
              require file
         | 
| 14 | 
            +
            end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            module PfrpgImport
         | 
| 17 | 
            +
            end
         | 
    
        data/test/helper.rb
    ADDED
    
    
    
        data/test/import_test.rb
    ADDED
    
    | @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            require 'minitest/autorun'
         | 
| 2 | 
            +
            require 'pfrpg_import'
         | 
| 3 | 
            +
            require 'pfrpg_classes'
         | 
| 4 | 
            +
            require 'pfrpg_tables'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            class ImportTest < Minitest::Test
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              def setup
         | 
| 9 | 
            +
                @path = './imported/test/'
         | 
| 10 | 
            +
                if Dir.exists?("#{@path}")
         | 
| 11 | 
            +
                  FileUtils.rm_rf("#{@path}")
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
                # Dir.mkdir("#{@path}") unless Dir.exists?("#{@path}")
         | 
| 14 | 
            +
                Dir.mkdir("#{@path}")
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              def teardown
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              def test_import_adept_ruby
         | 
| 22 | 
            +
                f = PfrpgImport::HeroclassImporter.new('adept.csv', @path)
         | 
| 23 | 
            +
                f.import_heroclass
         | 
| 24 | 
            +
                puts "Files present: #{Dir.glob(@path + "/*")}"
         | 
| 25 | 
            +
                # ensure the files are valid ruby
         | 
| 26 | 
            +
                assert load './imported/test/adept_table.rb'
         | 
| 27 | 
            +
                assert load './imported/test/adept_spells.rb'
         | 
| 28 | 
            +
                assert load './imported/test/adept_feature_info.rb'
         | 
| 29 | 
            +
                assert load './imported/test/adept.rb'
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,90 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: pfrpg_import
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.0.1
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - Jordan OMara
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 | 
            +
            bindir: bin
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2014-11-11 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: rails
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - "~>"
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: 4.1.1
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - "~>"
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: 4.1.1
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: sqlite3
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - ">="
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '0'
         | 
| 34 | 
            +
              type: :development
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - ">="
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: '0'
         | 
| 41 | 
            +
            description: Import pfrpg modules suitable for herosheets
         | 
| 42 | 
            +
            email:
         | 
| 43 | 
            +
            - jordan@herosheets.com
         | 
| 44 | 
            +
            executables: []
         | 
| 45 | 
            +
            extensions: []
         | 
| 46 | 
            +
            extra_rdoc_files: []
         | 
| 47 | 
            +
            files:
         | 
| 48 | 
            +
            - Rakefile
         | 
| 49 | 
            +
            - lib/pfrpg_import.rb
         | 
| 50 | 
            +
            - lib/pfrpg_import/case_helpers.rb
         | 
| 51 | 
            +
            - lib/pfrpg_import/feature_writer.rb
         | 
| 52 | 
            +
            - lib/pfrpg_import/heroclass_facts.rb
         | 
| 53 | 
            +
            - lib/pfrpg_import/heroclass_importer.rb
         | 
| 54 | 
            +
            - lib/pfrpg_import/heroclass_levels.rb
         | 
| 55 | 
            +
            - lib/pfrpg_import/heroclass_parser.rb
         | 
| 56 | 
            +
            - lib/pfrpg_import/heroclass_spells.rb
         | 
| 57 | 
            +
            - lib/pfrpg_import/heroclass_writer.rb
         | 
| 58 | 
            +
            - lib/pfrpg_import/level.rb
         | 
| 59 | 
            +
            - lib/pfrpg_import/level_base.rb
         | 
| 60 | 
            +
            - lib/pfrpg_import/level_writer.rb
         | 
| 61 | 
            +
            - lib/pfrpg_import/spell_writer.rb
         | 
| 62 | 
            +
            - lib/pfrpg_import/version.rb
         | 
| 63 | 
            +
            - test/helper.rb
         | 
| 64 | 
            +
            - test/import_test.rb
         | 
| 65 | 
            +
            homepage: http://herosheets.com
         | 
| 66 | 
            +
            licenses: []
         | 
| 67 | 
            +
            metadata: {}
         | 
| 68 | 
            +
            post_install_message: 
         | 
| 69 | 
            +
            rdoc_options: []
         | 
| 70 | 
            +
            require_paths:
         | 
| 71 | 
            +
            - lib
         | 
| 72 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 73 | 
            +
              requirements:
         | 
| 74 | 
            +
              - - ">="
         | 
| 75 | 
            +
                - !ruby/object:Gem::Version
         | 
| 76 | 
            +
                  version: '0'
         | 
| 77 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 78 | 
            +
              requirements:
         | 
| 79 | 
            +
              - - ">="
         | 
| 80 | 
            +
                - !ruby/object:Gem::Version
         | 
| 81 | 
            +
                  version: '0'
         | 
| 82 | 
            +
            requirements: []
         | 
| 83 | 
            +
            rubyforge_project: 
         | 
| 84 | 
            +
            rubygems_version: 2.2.2
         | 
| 85 | 
            +
            signing_key: 
         | 
| 86 | 
            +
            specification_version: 4
         | 
| 87 | 
            +
            summary: PFRPG Importer
         | 
| 88 | 
            +
            test_files:
         | 
| 89 | 
            +
            - test/helper.rb
         | 
| 90 | 
            +
            - test/import_test.rb
         |