story-gen 0.1.1 → 0.1.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.
Files changed (3) hide show
  1. data/NEWS +4 -0
  2. data/lib/story/compile.rb +32 -10
  3. metadata +2 -2
data/NEWS CHANGED
@@ -1,3 +1,7 @@
1
+ 0.1.2:
2
+ Bug fixes
3
+ Comparison expression may now be the top expression (e. g., ^X = ^Y)
4
+
1
5
  0.1.1:
2
6
  "-m" or "--allow-comma-in-facts" is removed
3
7
  Comma (",") in Facts is always allowed
data/lib/story/compile.rb CHANGED
@@ -498,22 +498,16 @@ class Story
498
498
  end
499
499
  to_code = lambda do |operand|
500
500
  case operand
501
- when Var then "#{var_arg_valuess}[#{e1.var_args_indexes[operand]}]"
501
+ when Var then code << "#{var_arg_valuess}[#{e1.var_args_indexes[operand]}]"
502
502
  when Above[Var] then at(operand.pos) { operand.var.name }
503
- else operand.to_rb
503
+ else code << operand.to_rb
504
504
  end
505
505
  end
506
- rb_op =
507
- case e2.op
508
- when "==", "!=", "<=", ">=", "<", ">" then e2.op
509
- when "<>", "=/=" then "!="
510
- when "=" then "=="
511
- end
512
506
  with_var_args(
513
507
  e1.var_args,
514
508
  code << "(" <<
515
509
  e1.to_code << ".select do |#{var_arg_valuess}| "<<
516
- at(e2.pos) { to_code.(e2.e1) << rb_op << to_code.(e2.e2) } << " "<<
510
+ at(e2.pos) { to_code.(e2.e1) << e2.rb_op << to_code.(e2.e2) } << " "<<
517
511
  "end " <<
518
512
  ")"
519
513
  )
@@ -557,7 +551,35 @@ class Story
557
551
 
558
552
  end
559
553
 
560
- FactExpr::Select = ASTNode.new :e1, :op, :e2
554
+ FactExpr::Select = ASTNode.new :e1, :op, :e2 do
555
+
556
+ include FactExpr
557
+
558
+ def to_code
559
+ to_code = lambda do |operand|
560
+ case operand
561
+ when Var then raise Parse::Error.new(operand.pos, "not supported")
562
+ when Above[Var] then at(operand.pos) { operand.var.name }
563
+ else code << operand.to_rb
564
+ end
565
+ end
566
+ #
567
+ with_var_args(
568
+ [],
569
+ code << "(if " << to_code.(e1) << rb_op << to_code.(e2) << " then [[]] else [] end)"
570
+ )
571
+ end
572
+
573
+ # @return [String] Ruby analogue of {#op}.
574
+ def rb_op
575
+ case op
576
+ when "==", "!=", "<=", ">=", "<", ">" then op
577
+ when "<>", "=/=" then "!="
578
+ when "=" then "=="
579
+ end
580
+ end
581
+
582
+ end
561
583
 
562
584
  FactExpr::Or = ASTNode.new :e1, :e2 do
563
585
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: story-gen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.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: 2016-02-17 00:00:00.000000000 Z
12
+ date: 2016-02-18 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Generate stories from descriptions based on Facts!
15
15
  email: various.furriness@gmail.com