Module: RareMap::SchemaParser
- Included in:
- Mapper
- Defined in:
- lib/rare_map/schema_parser.rb
Overview
RareMap::SchemaParser parses schema.rb into Table.
Instance Method Summary collapse
-
#parse_schema(schema) ⇒ Array
Parses schema.rb into an Array of Table.
Instance Method Details
#parse_schema(schema) ⇒ Array
Parses schema.rb into an Array of Table.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/rare_map/schema_parser.rb', line 11 def parse_schema(schema) tables = [] schema.split(/\n/).each do |line| case line.strip! when /^create_table/ name = line.match(/create_table\s+['"]([^'"]+)['"]/)[1] id = line.match(/(:id\s*=>|id:)\s*false/) ? false : true pk = line.match(/(:primary_key\s*=>|primary_key:)\s*['"](.+)['"]/) primary_key = pk[2] if pk tables << Table.new(name, :id => id, :primary_key => primary_key) when /^t\./ name = line.match(/t\.\w+\s+['"]([^'"]+)['"]/)[1] type = line.match(/t\.(\w+)\s+/)[1] tables.last.columns << Column.new(name, type) when /^add_index\s+.*\[\s*['"]([^'"]+)['"]\s*\].*(:unique\s*=>|unique:)\s*true/ unique_column = line.match(/add_index\s+.*\[\s*['"]([^'"]+)['"]\s*\].*(:unique\s*=>|unique:)\s*true/)[1] column = tables.last.columns.find { |col| col.name == unique_column } column.unique = true end end tables end |