dbml 0.2.0 → 0.3.0

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.
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