dbml 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/dbml.rb +12 -6
  3. data/lib/dbml/version.rb +1 -1
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 48c1cc0879db898fd838bccb388775692c2fd9510cc889dfb06aea5bc6532856
4
- data.tar.gz: a6aa38aa4625fad6f0dafc7a49e1866f6376d222cf92dede1ea0994583312388
3
+ metadata.gz: 0d397713801bd11420626394ef9e93a83cea36401027ebc27c0d024060c3df47
4
+ data.tar.gz: e0c31278a397d67841cdf77dcb944bd19847a8e0975af6c9bf6bc7e7c120b562
5
5
  SHA512:
6
- metadata.gz: 4ec98ffd66c2c197329a74a44bbecf8766124a12fe1e809b121d6a9428e7378e6a65a4c7e93c62f8a94b9662f69da5a1985010e6452d1cf945fb49befcde6ac5
7
- data.tar.gz: 2c1c230ed637641c8fc798cf04dbc21eb282bfbb428ae6fdeeb752602dc22fcab549712e208f2b52d0e7f119068fb49ab7d2b26d8a1b66e50cb18ed491fa2517
6
+ metadata.gz: a2ce41f83c7a3f37c15b49bdfd5af8cbb485fa822ede5bfb18d9b70ca2c052148dcec45a76810ed716a5126558fa7e5a0f8232c148d66751788528c172c1912b
7
+ data.tar.gz: 6145c6e8e58d6d7d6259f8cf80fc79b5c3f7e4b32c88a8c8f0048bbd4ae11f7ba2334d55adfec7a67deaf0a2f0424ef788917f8d74419849c57696eb971f8c07
data/lib/dbml.rb CHANGED
@@ -50,20 +50,25 @@ module DBML
50
50
  BOOLEAN = 'true'.r.map {|_| true } | 'false'.r.map {|_| false }
51
51
  NULL = 'null'.r.map {|_| nil }
52
52
  NUMBER = prim(:double)
53
- EXPRESSION = seq('`'.r, /[^`]+/.r, '`'.r)[1].map {|str| Expression.new str}
53
+ EXPRESSION = seq('`'.r, /[^`]*/.r, '`'.r)[1].map {|str| Expression.new str}
54
54
  # KEYWORD parses phrases: 'no action' => :"no action"
55
55
  KEYWORD = /[^#{RESERVED_PUNCTUATION}\s][^#{RESERVED_PUNCTUATION}]*/.r.map {|str| str.to_sym}
56
- SINGLE_LING_STRING = seq("'".r, /[^']+/.r, "'".r)[1]
56
+ SINGLE_LING_STRING = seq("'".r, /[^']*/.r, "'".r)[1] | seq('"'.r, /[^"]*/.r, '"'.r)[1]
57
57
  # MULTI_LINE_STRING ignores indentation on the first line: "''' long\n string'''" => "long\n string"
58
58
  # MULTI_LINE_STRING allows apostrophes: "'''it's a string with '' bunny ears'''" => "it's a string with '' bunny ears"
59
- MULTI_LINE_STRING = seq("'''".r, /([^']|'[^']|''[^'])+/m.r, "'''".r)[1].map do |string|
59
+ # MULTI_LINE_STRING allows blanks: "''''''" => ""
60
+ # MULTI_LINE_STRING allows blank lines to have no indent: "''' my string\n\n it's really great'''" => "my string\nit's really great"
61
+ # MULTI_LINE_STRING allows blank first lines: "'''\n start of\n my writing'''" => "start of\nmy writing"
62
+ MULTI_LINE_STRING = seq(/'''\n?/.r, /([^']|'[^']|''[^'])*/m.r, /\n?'''/.r)[1].map do |string|
60
63
  indent = string.match(/^\s*/m)[0].size
61
64
  string.lines.map do |line|
62
- raise "Indentation does not match" unless line =~ /\s{#{indent}}/
65
+ raise "Indentation does not match in #{line.inspect}" unless line =~ /\s{#{indent}}/ or line =~ /^\n$/
63
66
  line[indent..]
64
67
  end.join
65
68
  end
66
- STRING = SINGLE_LING_STRING | MULTI_LINE_STRING
69
+ # STRING parses blank strings: "''" => ""
70
+ # STRING parses double quotes: '""' => ""
71
+ STRING = MULTI_LINE_STRING | SINGLE_LING_STRING
67
72
  ATOM = BOOLEAN | NULL | NUMBER | EXPRESSION | STRING
68
73
 
69
74
  # Each setting item can take in 2 forms: Key: Value or keyword, similar to that of Python function parameters.
@@ -282,12 +287,13 @@ module DBML
282
287
  # RELATIONSHIP parses long form: "Ref name {\nleft.lcol < right.rcol\n}" => DBML::Relationship.new('name', 'left', ['lcol'], '<', 'right', ['rcol'], {})
283
288
  # RELATIONSHIP parses short form: "Ref name: left.lcol > right.rcol" => DBML::Relationship.new('name', 'left', ['lcol'], '>', 'right', ['rcol'], {})
284
289
  # RELATIONSHIP parses composite form: 'Ref: left.(a, b) - right.(c, d)' => DBML::Relationship.new(nil, 'left', ['a', 'b'], '-', 'right', ['c', 'd'], {})
290
+ # RELATIONSHIP parses lowercase r: "ref name: left.lcol > right.rcol" => DBML::Relationship.new('name', 'left', ['lcol'], '>', 'right', ['rcol'], {})
285
291
  # RELATIONSHIP parses settings: "Ref: L.a > R.b [delete: cascade, update: no action]" => DBML::Relationship.new(nil, 'L', ['a'], '>', 'R', ['b'], {delete: :cascade, update: :'no action'})
286
292
  COMPOSITE_COLUMNS = '('.r >> comma_separated(COLUMN_NAME) << ')'
287
293
  RELATIONSHIP_TYPE = '>'.r | '<'.r | '-'.r
288
294
  RELATIONSHIP_PART = seq(seq(IDENTIFIER, '.'.r)[0], (COLUMN_NAME.map {|c| [c]}) | COMPOSITE_COLUMNS)
289
295
  RELATIONSHIP_BODY = seq_(RELATIONSHIP_PART, RELATIONSHIP_TYPE, RELATIONSHIP_PART, SETTINGS.maybe)
290
- RELATIONSHIP = seq_('Ref'.r >> NAKED_IDENTIFIER.maybe, long_or_short(RELATIONSHIP_BODY)).map do |(name, (left, type, right, settings))|
296
+ RELATIONSHIP = seq_(/[Rr]ef/.r >> NAKED_IDENTIFIER.maybe, long_or_short(RELATIONSHIP_BODY)).map do |(name, (left, type, right, settings))|
291
297
  Relationship.new unwrap(name), *left, type, *right, unwrap(settings) || {}
292
298
  end
293
299
 
data/lib/dbml/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module DBML
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dbml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Worthington
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-15 00:00:00.000000000 Z
11
+ date: 2021-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rsec