smalruby-editor 0.1.15 → 0.1.16

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of smalruby-editor might be problematic. Click here for more details.

Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/README.rdoc +16 -1
  3. data/app/assets/javascripts/blocks/character.js.coffee.erb +8 -1
  4. data/app/assets/javascripts/blocks/hardware.js.coffee.erb +59 -7
  5. data/app/assets/javascripts/blocks/motion.js.coffee.erb +1 -2
  6. data/app/assets/javascripts/models/character.js.coffee +27 -0
  7. data/app/assets/javascripts/smalruby.js.coffee +4 -0
  8. data/app/assets/javascripts/views/character_modal_view.js.coffee +22 -1
  9. data/app/assets/javascripts/views/character_selector_view.js.coffee +7 -6
  10. data/app/assets/stylesheets/application.css +8 -0
  11. data/app/assets/stylesheets/editor.css.scss +15 -5
  12. data/app/controllers/application_controller.rb +4 -7
  13. data/app/models/concerns/ruby_to_block/block/character.rb +14 -6
  14. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car.rb +1 -1
  15. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car_commands.rb +15 -0
  16. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car_run.rb +19 -0
  17. data/app/models/concerns/ruby_to_block/block/motion_set_x.rb +1 -24
  18. data/app/models/concerns/ruby_to_block/block/motion_set_x_y.rb +21 -0
  19. data/app/models/source_code.rb +9 -6
  20. data/app/views/editor/_block_tab.html.haml +3 -1
  21. data/app/views/editor/_character_modal.html.haml +14 -5
  22. data/app/views/editor/_toolbox.html.haml +91 -78
  23. data/bin/smalruby-editor +15 -0
  24. data/lib/smalruby_editor/version.rb +1 -1
  25. data/lib/smalruby_editor.rb +39 -4
  26. data/public/assets/{application-51ab300acd1779bfba20b099e7000b7e.css → application-7f560d8d6d224f87269691c57ca9a376.css} +23 -9
  27. data/public/assets/{application-51ab300acd1779bfba20b099e7000b7e.css.gz → application-7f560d8d6d224f87269691c57ca9a376.css.gz} +0 -0
  28. data/public/assets/{application-dc485e2270d6c5fce20c149d1e2c4f8d.js → application-842ac8f5aa3fcc87bbb0e8b3a0fef5d7.js} +148 -21
  29. data/public/assets/{application-dc485e2270d6c5fce20c149d1e2c4f8d.js.gz → application-842ac8f5aa3fcc87bbb0e8b3a0fef5d7.js.gz} +0 -0
  30. data/public/assets/manifest-332a5a1668194028b55103e0ea45c054.json +1 -1
  31. data/smalruby-editor.gemspec +1 -1
  32. data/spec/acceptance/block_mode/blocks/motion/set_x_y.feature +2 -4
  33. data/spec/lib/smalruby_editor_spec.rb +12 -0
  34. data/spec/models/concerns/ruby_to_block/block/hardware_spec.rb +90 -10
  35. data/spec/models/concerns/ruby_to_block/block/motion_spec.rb +3 -6
  36. metadata +11 -8
@@ -12637,7 +12637,8 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
12637
12637
  costumes: xmlChild.getAttribute('costumes').split(','),
12638
12638
  x: parseInt(xmlChild.getAttribute('x'), 10),
12639
12639
  y: parseInt(xmlChild.getAttribute('y'), 10),
12640
- angle: parseInt(xmlChild.getAttribute('angle'), 10)
12640
+ angle: parseInt(xmlChild.getAttribute('angle'), 10),
12641
+ rotationStyle: xmlChild.getAttribute('rotation_style') || 'free'
12641
12642
  });
12642
12643
  chars.push(c);
12643
12644
  }
@@ -12657,13 +12658,17 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
12657
12658
  xmlDom = Blockly.Xml.workspaceToDom(workspace);
12658
12659
  blocklyDom = xmlDom.firstChild;
12659
12660
  charSet.each(function(c) {
12660
- var e;
12661
+ var e, rotationStyle;
12661
12662
  e = goog.dom.createDom('character');
12662
12663
  e.setAttribute('x', c.get('x'));
12663
12664
  e.setAttribute('y', c.get('y'));
12664
12665
  e.setAttribute('name', c.get('name'));
12665
12666
  e.setAttribute('costumes', c.get('costumes').join(','));
12666
12667
  e.setAttribute('angle', c.get('angle'));
12668
+ rotationStyle = c.get('rotationStyle');
12669
+ if (rotationStyle !== 'free') {
12670
+ e.setAttribute('rotation_style', rotationStyle);
12671
+ }
12667
12672
  return xmlDom.insertBefore(e, blocklyDom);
12668
12673
  });
12669
12674
  return Blockly.Xml.domToPrettyText(xmlDom);
@@ -12696,6 +12701,7 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
12696
12701
  x: 0,
12697
12702
  y: 0,
12698
12703
  angle: 0,
12704
+ rotationStyle: 'free',
12699
12705
  visible: true,
12700
12706
  using: false
12701
12707
  },
@@ -12768,6 +12774,39 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
12768
12774
  'costumeIndex': i
12769
12775
  });
12770
12776
  return i;
12777
+ },
12778
+ rotationStyleIconName: function() {
12779
+ switch (this.get('rotationStyle')) {
12780
+ case 'free':
12781
+ return 'icon-repeat';
12782
+ case 'left_right':
12783
+ return 'icon-resize-horizontal';
12784
+ case 'none':
12785
+ return 'icon-arrow-right';
12786
+ }
12787
+ },
12788
+ rotateImage: function(selector) {
12789
+ var angle, transformValue;
12790
+ angle = this.get('angle');
12791
+ switch (this.get('rotationStyle')) {
12792
+ case 'free':
12793
+ transformValue = "rotate(" + angle + "deg) scaleX(1)";
12794
+ break;
12795
+ case 'left_right':
12796
+ if (angle < 90 || angle >= 270) {
12797
+ transformValue = "rotate(0deg) scaleX(1)";
12798
+ } else {
12799
+ transformValue = "rotate(0deg) scaleX(-1)";
12800
+ }
12801
+ break;
12802
+ case 'none':
12803
+ transformValue = "rotate(0deg) scaleX(1)";
12804
+ }
12805
+ return $(selector).css({
12806
+ '-moz-transform': transformValue,
12807
+ '-webkit-transform': transformValue,
12808
+ transform: transformValue
12809
+ });
12771
12810
  }
12772
12811
  }, {
12773
12812
  PRESET_COSTUMES: ['car1.png', 'car2.png', 'car3.png', 'car4.png', 'ball1.png', 'ball2.png', 'ball3.png', 'ball4.png', 'ball5.png', 'ball6.png', 'cat1.png', 'cat2.png', 'cat3.png', 'frog1.png', 'ryu1.png', 'ryu2.png', 'taichi1.png', 'taichi2.png'],
@@ -12907,6 +12946,9 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
12907
12946
  model: new Smalruby.Character(),
12908
12947
  events: {
12909
12948
  'click #character-modal-costume-selector a': 'onSelectCostume',
12949
+ 'click #character_rotation_style_free': 'onRotationStyleFree',
12950
+ 'click #character_rotation_style_left_right': 'onRotationStyleLeftRight',
12951
+ 'click #character_rotation_style_none': 'onRotationStyleNone',
12910
12952
  'click #character-modal-ok-button': 'onOk'
12911
12953
  },
12912
12954
  previewZoomLevel: 0.5,
@@ -12974,6 +13016,7 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
12974
13016
  this.listenTo(this.model, 'change:y', this.onChangeY);
12975
13017
  this.listenTo(this.model, 'change:angle', this.onChangeAngle);
12976
13018
  this.listenTo(this.model, 'change:costumes', this.onChangeCostumes);
13019
+ this.listenTo(this.model, 'change:rotationStyle', this.onChangeRotationStyle);
12977
13020
  this.listenTo(this.model, 'change', this.onChange);
12978
13021
  return this.callAllOnChangeAttributes_();
12979
13022
  },
@@ -13005,7 +13048,8 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
13005
13048
  this.onChangeX(this.model, this.model.get('x'));
13006
13049
  this.onChangeY(this.model, this.model.get('y'));
13007
13050
  this.onChangeAngle(this.model, this.model.get('angle'));
13008
- return this.onChangeCostumes(this.model, this.model.get('costumes'));
13051
+ this.onChangeCostumes(this.model, this.model.get('costumes'));
13052
+ return this.onChangeRotationStyle(this.model, this.model.get('rotationStyle'));
13009
13053
  },
13010
13054
  onChangeName: function(model, value, options) {
13011
13055
  return this.$el.find('input[name="character[name]"]').val(value);
@@ -13025,11 +13069,12 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
13025
13069
  this.$el.find('input[name="character[angle]"]').val(value);
13026
13070
  $('#character_angle_value').text("" + value + "°");
13027
13071
  rotate = "rotate(" + value + "deg)";
13028
- return $('#character-modal-character').css({
13072
+ $('#character_angle_vector').css({
13029
13073
  '-moz-transform': rotate,
13030
13074
  '-webkit-transform': rotate,
13031
13075
  transform: rotate
13032
13076
  });
13077
+ return this.model.rotateImage('#character-modal-character');
13033
13078
  },
13034
13079
  onChangeCostumes: function(model, value, options) {
13035
13080
  var img, thumb;
@@ -13050,6 +13095,11 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
13050
13095
  return this.readImageSizeflag = true;
13051
13096
  }
13052
13097
  },
13098
+ onChangeRotationStyle: function(model, value, options) {
13099
+ $('#character_rotation_style button.btn').removeClass('btn-primary');
13100
+ $("#character_rotation_style_" + value).addClass('btn-primary');
13101
+ return this.onChangeAngle(this.model, this.model.get('angle'));
13102
+ },
13053
13103
  onChange: function(model, options) {
13054
13104
  var name;
13055
13105
  if (!this.target) {
@@ -13092,6 +13142,21 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
13092
13142
  }
13093
13143
  return this.model.set(attrs);
13094
13144
  },
13145
+ onRotationStyleFree: function() {
13146
+ return this.model.set({
13147
+ rotationStyle: 'free'
13148
+ });
13149
+ },
13150
+ onRotationStyleLeftRight: function() {
13151
+ return this.model.set({
13152
+ rotationStyle: 'left_right'
13153
+ });
13154
+ },
13155
+ onRotationStyleNone: function() {
13156
+ return this.model.set({
13157
+ rotationStyle: 'none'
13158
+ });
13159
+ },
13095
13160
  onOk: function() {
13096
13161
  this.$el.modal('hide');
13097
13162
  if (this.target) {
@@ -13116,7 +13181,7 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
13116
13181
  _ref = ['add', 'remove', 'reset', 'change'];
13117
13182
  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
13118
13183
  name = _ref[_i];
13119
- this.listenTo(this.model, name, this.render);
13184
+ this.listenTo(this.model, name, this.onChange);
13120
13185
  }
13121
13186
  this.templateText = $('#character-selector-template').text();
13122
13187
  $('#add-character-button').click(function(e) {
@@ -13141,7 +13206,7 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
13141
13206
  charsEl = $('#character-selector-character-set');
13142
13207
  charsEl.children().remove();
13143
13208
  return this.model.each(function(character) {
13144
- var html, img, removeButton, rotate;
13209
+ var html, img, removeButton;
13145
13210
  html = $(_.template(_this.templateText, character));
13146
13211
  charsEl.append(html);
13147
13212
  html.find('a.character').click(function(e) {
@@ -13160,18 +13225,20 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
13160
13225
  if (character.get('using')) {
13161
13226
  removeButton.hide();
13162
13227
  }
13163
- rotate = "rotate(" + (character.get('angle')) + "deg)";
13164
13228
  img = html.find('img');
13165
- img.css({
13166
- '-moz-transform': rotate,
13167
- '-webkit-transform': rotate,
13168
- transform: rotate
13169
- });
13229
+ character.rotateImage(img);
13170
13230
  return img.on('dragstart', function(e) {
13171
13231
  return e.preventDefault();
13172
13232
  });
13173
13233
  });
13174
13234
  },
13235
+ onChange: function() {
13236
+ if (!Smalruby.blocklyLoading) {
13237
+ Smalruby.changedAfterTranslating = true;
13238
+ window.changed = true;
13239
+ }
13240
+ return this.render();
13241
+ },
13175
13242
  addBlock_: function(character) {
13176
13243
  var newBlock, onStartBlock;
13177
13244
  newBlock = new Blockly.Block(Blockly.mainWorkspace, 'character_new');
@@ -14315,9 +14382,19 @@ case end next return until\
14315
14382
  };
14316
14383
 
14317
14384
  Blockly.Ruby['character_new'] = function(block) {
14318
- var c, code, targetBlock;
14385
+ var c, code, rotationStyle, targetBlock;
14319
14386
  c = block.character;
14320
- Blockly.Ruby.definitions_["character_" + (c.get('name'))] = "" + (c.get('name')) + " = Character.new(costume: " + (Blockly.Ruby.quote_(c.costume())) + ", x: " + (c.get('x')) + ", y: " + (c.get('y')) + ", angle: " + (c.get('angle')) + ")";
14387
+ switch (c.get('rotationStyle')) {
14388
+ case 'left_right':
14389
+ rotationStyle = ', rotation_style: :left_right';
14390
+ break;
14391
+ case 'none':
14392
+ rotationStyle = ', rotation_style: :none';
14393
+ break;
14394
+ default:
14395
+ rotationStyle = '';
14396
+ }
14397
+ Blockly.Ruby.definitions_["character_" + (c.get('name'))] = "" + (c.get('name')) + " = Character.new(costume: " + (Blockly.Ruby.quote_(c.costume())) + ", x: " + (c.get('x')) + ", y: " + (c.get('y')) + ", angle: " + (c.get('angle')) + rotationStyle + ")";
14321
14398
  Blockly.Ruby.cs_().push(c);
14322
14399
  try {
14323
14400
  targetBlock = block.getInputTargetBlock('DO');
@@ -14619,7 +14696,7 @@ case end next return until\
14619
14696
 
14620
14697
  }).call(this);
14621
14698
  (function() {
14622
- var acDropdown, aiPinDropdown, dioPinDropdown, n, pwmPinDropdown, rgbLedPinDropdown;
14699
+ var acDropdown, aiPinDropdown, dioPinDropdown, n, pwmPinDropdown, rgbLedPinDropdown, twoWDPinDropdown;
14623
14700
 
14624
14701
  window.SmalrubyEditor.Hardware = {
14625
14702
  Type: 'Arduino',
@@ -14674,6 +14751,15 @@ case end next return until\
14674
14751
 
14675
14752
  acDropdown = [['アノード', 'anode'], ['カソード', 'cathode']];
14676
14753
 
14754
+ twoWDPinDropdown = (function() {
14755
+ var _i, _results;
14756
+ _results = [];
14757
+ for (n = _i = 2; _i <= 10; n = ++_i) {
14758
+ _results.push(["D" + n, "D" + n]);
14759
+ }
14760
+ return _results;
14761
+ })();
14762
+
14677
14763
  Blockly.Blocks['hardware_init_hardware'] = {
14678
14764
  init: function() {
14679
14765
  this.setHelpUrl('');
@@ -14888,7 +14974,7 @@ case end next return until\
14888
14974
  })();
14889
14975
  this.setHelpUrl('');
14890
14976
  this.setColour(208);
14891
- this.appendDummyInput().appendField('2WD車').appendField(new Blockly.FieldDropdown(dropdown), 'PIN').appendField('を進める');
14977
+ this.appendDummyInput().appendField('2WD車').appendField(new Blockly.FieldDropdown(twoWDPinDropdown), 'PIN').appendField('を進める');
14892
14978
  this.setInputsInline(true);
14893
14979
  this.setPreviousStatement(true);
14894
14980
  this.setNextStatement(true);
@@ -14915,7 +15001,7 @@ case end next return until\
14915
15001
  })();
14916
15002
  this.setHelpUrl('');
14917
15003
  this.setColour(208);
14918
- this.appendDummyInput().appendField('2WD車').appendField(new Blockly.FieldDropdown(dropdown), 'PIN').appendField('をバックさせる');
15004
+ this.appendDummyInput().appendField('2WD車').appendField(new Blockly.FieldDropdown(twoWDPinDropdown), 'PIN').appendField('をバックさせる');
14919
15005
  this.setInputsInline(true);
14920
15006
  this.setPreviousStatement(true);
14921
15007
  this.setNextStatement(true);
@@ -14942,7 +15028,7 @@ case end next return until\
14942
15028
  })();
14943
15029
  this.setHelpUrl('');
14944
15030
  this.setColour(208);
14945
- this.appendDummyInput().appendField('2WD車').appendField(new Blockly.FieldDropdown(dropdown), 'PIN').appendField('を左に曲げる');
15031
+ this.appendDummyInput().appendField('2WD車').appendField(new Blockly.FieldDropdown(twoWDPinDropdown), 'PIN').appendField('を左に曲げる');
14946
15032
  this.setInputsInline(true);
14947
15033
  this.setPreviousStatement(true);
14948
15034
  this.setNextStatement(true);
@@ -14969,7 +15055,7 @@ case end next return until\
14969
15055
  })();
14970
15056
  this.setHelpUrl('');
14971
15057
  this.setColour(208);
14972
- this.appendDummyInput().appendField('2WD車').appendField(new Blockly.FieldDropdown(dropdown), 'PIN').appendField('を右に曲げる');
15058
+ this.appendDummyInput().appendField('2WD車').appendField(new Blockly.FieldDropdown(twoWDPinDropdown), 'PIN').appendField('を右に曲げる');
14973
15059
  this.setInputsInline(true);
14974
15060
  this.setPreviousStatement(true);
14975
15061
  this.setNextStatement(true);
@@ -14996,7 +15082,7 @@ case end next return until\
14996
15082
  })();
14997
15083
  this.setHelpUrl('');
14998
15084
  this.setColour(208);
14999
- this.appendDummyInput().appendField('2WD車').appendField(new Blockly.FieldDropdown(dropdown), 'PIN').appendField('を止める');
15085
+ this.appendDummyInput().appendField('2WD車').appendField(new Blockly.FieldDropdown(twoWDPinDropdown), 'PIN').appendField('を止める');
15000
15086
  this.setInputsInline(true);
15001
15087
  this.setPreviousStatement(true);
15002
15088
  this.setNextStatement(true);
@@ -15010,6 +15096,47 @@ case end next return until\
15010
15096
  return Blockly.Ruby.characterMethodCall_("two_wheel_drive_car(" + (Blockly.Ruby.quote_(pin)) + ").stop");
15011
15097
  };
15012
15098
 
15099
+ Blockly.Blocks['hardware_two_wheel_drive_car_run'] = {
15100
+ init: function() {
15101
+ this.setHelpUrl('');
15102
+ this.setColour(208);
15103
+ this.appendDummyInput().appendField('2WD車').appendField(new Blockly.FieldDropdown(twoWDPinDropdown), 'PIN').appendField('を');
15104
+ this.appendValueInput('SEC').setCheck('Number');
15105
+ this.appendDummyInput().appendField('秒');
15106
+ this.appendValueInput('COMMAND').setCheck('String');
15107
+ this.setInputsInline(true);
15108
+ this.setPreviousStatement(true);
15109
+ this.setNextStatement(true);
15110
+ return this.setTooltip('');
15111
+ }
15112
+ };
15113
+
15114
+ Blockly.Ruby['hardware_two_wheel_drive_car_run'] = function(block) {
15115
+ var command, pin, sec;
15116
+ pin = this.getFieldValue('PIN');
15117
+ sec = Blockly.Ruby.valueToCode(this, 'SEC', Blockly.Ruby.ORDER_NONE) || 0;
15118
+ command = Blockly.Ruby.valueToCode(this, 'COMMAND', Blockly.Ruby.ORDER_NONE) || Blockly.Ruby.quote_('stop');
15119
+ return Blockly.Ruby.characterMethodCall_("two_wheel_drive_car(" + (Blockly.Ruby.quote_(pin)) + ").run(command: " + command + ", sec: " + sec + ")");
15120
+ };
15121
+
15122
+ Blockly.Blocks['hardware_two_wheel_drive_car_commands'] = {
15123
+ init: function() {
15124
+ var commands;
15125
+ commands = [['進める', 'forward'], ['バックさせる', 'backward'], ['左に曲げる', 'turn_left'], ['右に曲げる', 'turn_right'], ['止める', 'stop']];
15126
+ this.setHelpUrl('');
15127
+ this.setColour(208);
15128
+ this.appendDummyInput().appendField(new Blockly.FieldDropdown(commands), 'COMMAND');
15129
+ this.setOutput(true, 'String');
15130
+ return this.setTooltip('');
15131
+ }
15132
+ };
15133
+
15134
+ Blockly.Ruby['hardware_two_wheel_drive_car_commands'] = function(block) {
15135
+ var code;
15136
+ code = Blockly.Ruby.quote_(this.getFieldValue('COMMAND'));
15137
+ return [code, Blockly.Ruby.ORDER_ATOMIC];
15138
+ };
15139
+
15013
15140
  Blockly.Blocks['hardware_button_down'] = {
15014
15141
  init: function() {
15015
15142
  this.setHelpUrl('');
@@ -15439,7 +15566,7 @@ case end next return until\
15439
15566
  var x, y;
15440
15567
  x = Blockly.Ruby.valueToCode(this, 'X', Blockly.Ruby.ORDER_NONE) || '0';
15441
15568
  y = Blockly.Ruby.valueToCode(this, 'Y', Blockly.Ruby.ORDER_NONE) || '0';
15442
- return Blockly.Ruby.characterSetVariable_('x', x) + Blockly.Ruby.characterSetVariable_('y', y);
15569
+ return Blockly.Ruby.characterSetVariable_('position', "[" + x + ", " + y + "]");
15443
15570
  };
15444
15571
 
15445
15572
  Blockly.Blocks['motion_go_to_mouse'] = {
@@ -1 +1 @@
1
- {"files":{"default-5d1886100d7c8961e9962bbc4bb0c714.xml":{"logical_path":"default.xml","mtime":"2014-02-14T01:28:48+09:00","size":5017,"digest":"5d1886100d7c8961e9962bbc4bb0c714"},"rgb_led_anode-91225bef2a8b97f1cefee862a0619b91.xml":{"logical_path":"rgb_led_anode.xml","mtime":"2014-02-11T14:17:03+09:00","size":3805,"digest":"91225bef2a8b97f1cefee862a0619b91"},"favicon-a37c90b368fd8ed436cb8f9e9396465c.ico":{"logical_path":"favicon.ico","mtime":"2014-01-21T03:18:02+09:00","size":5430,"digest":"a37c90b368fd8ed436cb8f9e9396465c"},"application-735e172a0df828da16d22f5d3c26671f.js":{"logical_path":"application.js","mtime":"2014-02-19T18:22:09+09:00","size":1440213,"digest":"735e172a0df828da16d22f5d3c26671f"},"application-64a390efe879c386a5950515064f062d.css":{"logical_path":"application.css","mtime":"2014-02-19T14:32:55+09:00","size":119186,"digest":"64a390efe879c386a5950515064f062d"},"jquery-ui/animated-overlay-c48c87b7a95316f4698484e3b85ee4aa.gif":{"logical_path":"jquery-ui/animated-overlay.gif","mtime":"2014-02-04T09:35:48+09:00","size":1738,"digest":"c48c87b7a95316f4698484e3b85ee4aa"},"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-58b63faadd031ca3db096dfdffd90224.png":{"logical_path":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png","mtime":"2014-02-04T09:35:48+09:00","size":180,"digest":"58b63faadd031ca3db096dfdffd90224"},"jquery-ui/ui-bg_flat_75_ffffff_40x100-937399e8b369d64aa075d13a82c00112.png":{"logical_path":"jquery-ui/ui-bg_flat_75_ffffff_40x100.png","mtime":"2014-02-04T09:35:48+09:00","size":178,"digest":"937399e8b369d64aa075d13a82c00112"},"jquery-ui/ui-bg_glass_55_fbf9ee_1x400-a8c503e0f42a081a92a473b0d30ac6cf.png":{"logical_path":"jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":120,"digest":"a8c503e0f42a081a92a473b0d30ac6cf"},"jquery-ui/ui-bg_glass_65_ffffff_1x400-ddcbfe385abc3947937caa0b44e2f5d2.png":{"logical_path":"jquery-ui/ui-bg_glass_65_ffffff_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":105,"digest":"ddcbfe385abc3947937caa0b44e2f5d2"},"jquery-ui/ui-bg_glass_75_dadada_1x400-14dd4a9ad1f21d8c4c7e673ddfb0806f.png":{"logical_path":"jquery-ui/ui-bg_glass_75_dadada_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":111,"digest":"14dd4a9ad1f21d8c4c7e673ddfb0806f"},"jquery-ui/ui-bg_glass_75_e6e6e6_1x400-a43dfabb23b0a987b567b282bad68346.png":{"logical_path":"jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":110,"digest":"a43dfabb23b0a987b567b282bad68346"},"jquery-ui/ui-bg_glass_95_fef1ec_1x400-31c0c791a756266043ee8ea61dacb36a.png":{"logical_path":"jquery-ui/ui-bg_glass_95_fef1ec_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":119,"digest":"31c0c791a756266043ee8ea61dacb36a"},"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-33edbdb0d2fcebd2a65c2041a28533da.png":{"logical_path":"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png","mtime":"2014-02-04T09:35:48+09:00","size":101,"digest":"33edbdb0d2fcebd2a65c2041a28533da"},"jquery-ui/ui-icons_222222_256x240-890385424135de1513f00cbecfb7f990.png":{"logical_path":"jquery-ui/ui-icons_222222_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"890385424135de1513f00cbecfb7f990"},"jquery-ui/ui-icons_2e83ff_256x240-824705ca4aa2610434a358fe4018c9c6.png":{"logical_path":"jquery-ui/ui-icons_2e83ff_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"824705ca4aa2610434a358fe4018c9c6"},"jquery-ui/ui-icons_454545_256x240-254e054f6df453dfac49efbc8b78f79d.png":{"logical_path":"jquery-ui/ui-icons_454545_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"254e054f6df453dfac49efbc8b78f79d"},"jquery-ui/ui-icons_888888_256x240-57c441f87c4289a5372823f506c1182d.png":{"logical_path":"jquery-ui/ui-icons_888888_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"57c441f87c4289a5372823f506c1182d"},"jquery-ui/ui-icons_cd0a0a_256x240-261647ac915575f3981ded254ae8d43e.png":{"logical_path":"jquery-ui/ui-icons_cd0a0a_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"261647ac915575f3981ded254ae8d43e"},"loading-e8e6dd7833131c92a6c3b9c8ccc6a6ac.gif":{"logical_path":"loading.gif","mtime":"2014-01-03T14:44:55+09:00","size":3897,"digest":"e8e6dd7833131c92a6c3b9c8ccc6a6ac"},"progressbar-82023a146fba2a0f6d925629ed2b09c5.gif":{"logical_path":"progressbar.gif","mtime":"2014-01-03T14:44:55+09:00","size":3323,"digest":"82023a146fba2a0f6d925629ed2b09c5"},"application-0047adbc0fb7a529ef7a41b5e0e7d097.js":{"logical_path":"application.js","mtime":"2014-02-20T03:12:12+09:00","size":1441568,"digest":"0047adbc0fb7a529ef7a41b5e0e7d097"},"application-42aa660a3233c7738b7578d30ba040b3.js":{"logical_path":"application.js","mtime":"2014-02-22T15:25:11+09:00","size":1441708,"digest":"42aa660a3233c7738b7578d30ba040b3"},"application-66b65154e7b5dcfe67fa164db6fc5f51.js":{"logical_path":"application.js","mtime":"2014-02-23T21:53:43+09:00","size":1441898,"digest":"66b65154e7b5dcfe67fa164db6fc5f51"},"application-8bfffad1222d4e198f3c7ccc1cbd774f.js":{"logical_path":"application.js","mtime":"2014-02-27T01:28:32+09:00","size":1442504,"digest":"8bfffad1222d4e198f3c7ccc1cbd774f"},"application-4f747690ebc8ec4815ae36021fdb2c44.js":{"logical_path":"application.js","mtime":"2014-03-07T12:36:30+09:00","size":1447094,"digest":"4f747690ebc8ec4815ae36021fdb2c44"},"application-28b7bed56c5389dfa372e972c75b6676.css":{"logical_path":"application.css","mtime":"2014-03-07T10:27:39+09:00","size":119378,"digest":"28b7bed56c5389dfa372e972c75b6676"},"application-3ee566927dc437f1406e5e903da1baf5.js":{"logical_path":"application.js","mtime":"2014-04-30T00:15:32+09:00","size":1452218,"digest":"3ee566927dc437f1406e5e903da1baf5"},"application-5f1777e683ca5d3cf4e0f0374eab6fac.css":{"logical_path":"application.css","mtime":"2014-03-29T10:25:16+09:00","size":120345,"digest":"5f1777e683ca5d3cf4e0f0374eab6fac"},"application-53d651da3309caa498cc0ca6616dbead.css":{"logical_path":"application.css","mtime":"2014-05-06T14:59:20+09:00","size":118430,"digest":"53d651da3309caa498cc0ca6616dbead"},"application-0b3c70107ad81ea9fcda6d7d921bd8cf.js":{"logical_path":"application.js","mtime":"2014-04-30T02:04:36+09:00","size":1452582,"digest":"0b3c70107ad81ea9fcda6d7d921bd8cf"},"application-c2d6a82134037eb9a7f6c7d13d2657db.js":{"logical_path":"application.js","mtime":"2014-05-06T21:22:51+09:00","size":1455113,"digest":"c2d6a82134037eb9a7f6c7d13d2657db"},"application-669cbc2df60729c4b12d739af7595cc6.js":{"logical_path":"application.js","mtime":"2014-05-08T04:10:12+09:00","size":1455352,"digest":"669cbc2df60729c4b12d739af7595cc6"},"application-6579eaebb20aaacfc143d63c77bf4199.js":{"logical_path":"application.js","mtime":"2014-05-11T03:54:51+09:00","size":1455344,"digest":"6579eaebb20aaacfc143d63c77bf4199"},"application-f112e2e4edd69b09d5d1cb92c33144d6.js":{"logical_path":"application.js","mtime":"2014-05-15T23:54:56+09:00","size":1455344,"digest":"f112e2e4edd69b09d5d1cb92c33144d6"},"application-c8214e05b402c742494330b5e957eb38.js":{"logical_path":"application.js","mtime":"2014-05-16T02:08:20+09:00","size":1455681,"digest":"c8214e05b402c742494330b5e957eb38"},"application-c45776825263b5fa7167e55a3b12252c.js":{"logical_path":"application.js","mtime":"2014-05-16T08:50:24+09:00","size":1455659,"digest":"c45776825263b5fa7167e55a3b12252c"},"application-0f9a877d144f84320a10770dfdc5ddd8.js":{"logical_path":"application.js","mtime":"2014-05-16T22:21:05+09:00","size":1455877,"digest":"0f9a877d144f84320a10770dfdc5ddd8"},"application-d60babdd5a50329b329487cf793c2e29.js":{"logical_path":"application.js","mtime":"2014-05-30T19:26:09+09:00","size":1455891,"digest":"d60babdd5a50329b329487cf793c2e29"},"application-dc485e2270d6c5fce20c149d1e2c4f8d.js":{"logical_path":"application.js","mtime":"2014-06-01T22:25:31+09:00","size":1457970,"digest":"dc485e2270d6c5fce20c149d1e2c4f8d"},"application-51ab300acd1779bfba20b099e7000b7e.css":{"logical_path":"application.css","mtime":"2014-06-01T22:26:47+09:00","size":118664,"digest":"51ab300acd1779bfba20b099e7000b7e"}},"assets":{"default.xml":"default-5d1886100d7c8961e9962bbc4bb0c714.xml","rgb_led_anode.xml":"rgb_led_anode-91225bef2a8b97f1cefee862a0619b91.xml","favicon.ico":"favicon-a37c90b368fd8ed436cb8f9e9396465c.ico","application.js":"application-dc485e2270d6c5fce20c149d1e2c4f8d.js","application.css":"application-51ab300acd1779bfba20b099e7000b7e.css","jquery-ui/animated-overlay.gif":"jquery-ui/animated-overlay-c48c87b7a95316f4698484e3b85ee4aa.gif","jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-58b63faadd031ca3db096dfdffd90224.png","jquery-ui/ui-bg_flat_75_ffffff_40x100.png":"jquery-ui/ui-bg_flat_75_ffffff_40x100-937399e8b369d64aa075d13a82c00112.png","jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png":"jquery-ui/ui-bg_glass_55_fbf9ee_1x400-a8c503e0f42a081a92a473b0d30ac6cf.png","jquery-ui/ui-bg_glass_65_ffffff_1x400.png":"jquery-ui/ui-bg_glass_65_ffffff_1x400-ddcbfe385abc3947937caa0b44e2f5d2.png","jquery-ui/ui-bg_glass_75_dadada_1x400.png":"jquery-ui/ui-bg_glass_75_dadada_1x400-14dd4a9ad1f21d8c4c7e673ddfb0806f.png","jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png":"jquery-ui/ui-bg_glass_75_e6e6e6_1x400-a43dfabb23b0a987b567b282bad68346.png","jquery-ui/ui-bg_glass_95_fef1ec_1x400.png":"jquery-ui/ui-bg_glass_95_fef1ec_1x400-31c0c791a756266043ee8ea61dacb36a.png","jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png":"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-33edbdb0d2fcebd2a65c2041a28533da.png","jquery-ui/ui-icons_222222_256x240.png":"jquery-ui/ui-icons_222222_256x240-890385424135de1513f00cbecfb7f990.png","jquery-ui/ui-icons_2e83ff_256x240.png":"jquery-ui/ui-icons_2e83ff_256x240-824705ca4aa2610434a358fe4018c9c6.png","jquery-ui/ui-icons_454545_256x240.png":"jquery-ui/ui-icons_454545_256x240-254e054f6df453dfac49efbc8b78f79d.png","jquery-ui/ui-icons_888888_256x240.png":"jquery-ui/ui-icons_888888_256x240-57c441f87c4289a5372823f506c1182d.png","jquery-ui/ui-icons_cd0a0a_256x240.png":"jquery-ui/ui-icons_cd0a0a_256x240-261647ac915575f3981ded254ae8d43e.png","loading.gif":"loading-e8e6dd7833131c92a6c3b9c8ccc6a6ac.gif","progressbar.gif":"progressbar-82023a146fba2a0f6d925629ed2b09c5.gif"}}
1
+ {"files":{"default-5d1886100d7c8961e9962bbc4bb0c714.xml":{"logical_path":"default.xml","mtime":"2014-02-14T01:28:48+09:00","size":5017,"digest":"5d1886100d7c8961e9962bbc4bb0c714"},"rgb_led_anode-91225bef2a8b97f1cefee862a0619b91.xml":{"logical_path":"rgb_led_anode.xml","mtime":"2014-02-11T14:17:03+09:00","size":3805,"digest":"91225bef2a8b97f1cefee862a0619b91"},"favicon-a37c90b368fd8ed436cb8f9e9396465c.ico":{"logical_path":"favicon.ico","mtime":"2014-01-21T03:18:02+09:00","size":5430,"digest":"a37c90b368fd8ed436cb8f9e9396465c"},"application-735e172a0df828da16d22f5d3c26671f.js":{"logical_path":"application.js","mtime":"2014-02-19T18:22:09+09:00","size":1440213,"digest":"735e172a0df828da16d22f5d3c26671f"},"application-64a390efe879c386a5950515064f062d.css":{"logical_path":"application.css","mtime":"2014-02-19T14:32:55+09:00","size":119186,"digest":"64a390efe879c386a5950515064f062d"},"jquery-ui/animated-overlay-c48c87b7a95316f4698484e3b85ee4aa.gif":{"logical_path":"jquery-ui/animated-overlay.gif","mtime":"2014-02-04T09:35:48+09:00","size":1738,"digest":"c48c87b7a95316f4698484e3b85ee4aa"},"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-58b63faadd031ca3db096dfdffd90224.png":{"logical_path":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png","mtime":"2014-02-04T09:35:48+09:00","size":180,"digest":"58b63faadd031ca3db096dfdffd90224"},"jquery-ui/ui-bg_flat_75_ffffff_40x100-937399e8b369d64aa075d13a82c00112.png":{"logical_path":"jquery-ui/ui-bg_flat_75_ffffff_40x100.png","mtime":"2014-02-04T09:35:48+09:00","size":178,"digest":"937399e8b369d64aa075d13a82c00112"},"jquery-ui/ui-bg_glass_55_fbf9ee_1x400-a8c503e0f42a081a92a473b0d30ac6cf.png":{"logical_path":"jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":120,"digest":"a8c503e0f42a081a92a473b0d30ac6cf"},"jquery-ui/ui-bg_glass_65_ffffff_1x400-ddcbfe385abc3947937caa0b44e2f5d2.png":{"logical_path":"jquery-ui/ui-bg_glass_65_ffffff_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":105,"digest":"ddcbfe385abc3947937caa0b44e2f5d2"},"jquery-ui/ui-bg_glass_75_dadada_1x400-14dd4a9ad1f21d8c4c7e673ddfb0806f.png":{"logical_path":"jquery-ui/ui-bg_glass_75_dadada_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":111,"digest":"14dd4a9ad1f21d8c4c7e673ddfb0806f"},"jquery-ui/ui-bg_glass_75_e6e6e6_1x400-a43dfabb23b0a987b567b282bad68346.png":{"logical_path":"jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":110,"digest":"a43dfabb23b0a987b567b282bad68346"},"jquery-ui/ui-bg_glass_95_fef1ec_1x400-31c0c791a756266043ee8ea61dacb36a.png":{"logical_path":"jquery-ui/ui-bg_glass_95_fef1ec_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":119,"digest":"31c0c791a756266043ee8ea61dacb36a"},"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-33edbdb0d2fcebd2a65c2041a28533da.png":{"logical_path":"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png","mtime":"2014-02-04T09:35:48+09:00","size":101,"digest":"33edbdb0d2fcebd2a65c2041a28533da"},"jquery-ui/ui-icons_222222_256x240-890385424135de1513f00cbecfb7f990.png":{"logical_path":"jquery-ui/ui-icons_222222_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"890385424135de1513f00cbecfb7f990"},"jquery-ui/ui-icons_2e83ff_256x240-824705ca4aa2610434a358fe4018c9c6.png":{"logical_path":"jquery-ui/ui-icons_2e83ff_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"824705ca4aa2610434a358fe4018c9c6"},"jquery-ui/ui-icons_454545_256x240-254e054f6df453dfac49efbc8b78f79d.png":{"logical_path":"jquery-ui/ui-icons_454545_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"254e054f6df453dfac49efbc8b78f79d"},"jquery-ui/ui-icons_888888_256x240-57c441f87c4289a5372823f506c1182d.png":{"logical_path":"jquery-ui/ui-icons_888888_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"57c441f87c4289a5372823f506c1182d"},"jquery-ui/ui-icons_cd0a0a_256x240-261647ac915575f3981ded254ae8d43e.png":{"logical_path":"jquery-ui/ui-icons_cd0a0a_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"261647ac915575f3981ded254ae8d43e"},"loading-e8e6dd7833131c92a6c3b9c8ccc6a6ac.gif":{"logical_path":"loading.gif","mtime":"2014-01-03T14:44:55+09:00","size":3897,"digest":"e8e6dd7833131c92a6c3b9c8ccc6a6ac"},"progressbar-82023a146fba2a0f6d925629ed2b09c5.gif":{"logical_path":"progressbar.gif","mtime":"2014-01-03T14:44:55+09:00","size":3323,"digest":"82023a146fba2a0f6d925629ed2b09c5"},"application-0047adbc0fb7a529ef7a41b5e0e7d097.js":{"logical_path":"application.js","mtime":"2014-02-20T03:12:12+09:00","size":1441568,"digest":"0047adbc0fb7a529ef7a41b5e0e7d097"},"application-42aa660a3233c7738b7578d30ba040b3.js":{"logical_path":"application.js","mtime":"2014-02-22T15:25:11+09:00","size":1441708,"digest":"42aa660a3233c7738b7578d30ba040b3"},"application-66b65154e7b5dcfe67fa164db6fc5f51.js":{"logical_path":"application.js","mtime":"2014-02-23T21:53:43+09:00","size":1441898,"digest":"66b65154e7b5dcfe67fa164db6fc5f51"},"application-8bfffad1222d4e198f3c7ccc1cbd774f.js":{"logical_path":"application.js","mtime":"2014-02-27T01:28:32+09:00","size":1442504,"digest":"8bfffad1222d4e198f3c7ccc1cbd774f"},"application-4f747690ebc8ec4815ae36021fdb2c44.js":{"logical_path":"application.js","mtime":"2014-03-07T12:36:30+09:00","size":1447094,"digest":"4f747690ebc8ec4815ae36021fdb2c44"},"application-28b7bed56c5389dfa372e972c75b6676.css":{"logical_path":"application.css","mtime":"2014-03-07T10:27:39+09:00","size":119378,"digest":"28b7bed56c5389dfa372e972c75b6676"},"application-3ee566927dc437f1406e5e903da1baf5.js":{"logical_path":"application.js","mtime":"2014-04-30T00:15:32+09:00","size":1452218,"digest":"3ee566927dc437f1406e5e903da1baf5"},"application-5f1777e683ca5d3cf4e0f0374eab6fac.css":{"logical_path":"application.css","mtime":"2014-03-29T10:25:16+09:00","size":120345,"digest":"5f1777e683ca5d3cf4e0f0374eab6fac"},"application-53d651da3309caa498cc0ca6616dbead.css":{"logical_path":"application.css","mtime":"2014-05-06T14:59:20+09:00","size":118430,"digest":"53d651da3309caa498cc0ca6616dbead"},"application-0b3c70107ad81ea9fcda6d7d921bd8cf.js":{"logical_path":"application.js","mtime":"2014-04-30T02:04:36+09:00","size":1452582,"digest":"0b3c70107ad81ea9fcda6d7d921bd8cf"},"application-c2d6a82134037eb9a7f6c7d13d2657db.js":{"logical_path":"application.js","mtime":"2014-05-06T21:22:51+09:00","size":1455113,"digest":"c2d6a82134037eb9a7f6c7d13d2657db"},"application-669cbc2df60729c4b12d739af7595cc6.js":{"logical_path":"application.js","mtime":"2014-05-08T04:10:12+09:00","size":1455352,"digest":"669cbc2df60729c4b12d739af7595cc6"},"application-6579eaebb20aaacfc143d63c77bf4199.js":{"logical_path":"application.js","mtime":"2014-05-11T03:54:51+09:00","size":1455344,"digest":"6579eaebb20aaacfc143d63c77bf4199"},"application-f112e2e4edd69b09d5d1cb92c33144d6.js":{"logical_path":"application.js","mtime":"2014-05-15T23:54:56+09:00","size":1455344,"digest":"f112e2e4edd69b09d5d1cb92c33144d6"},"application-c8214e05b402c742494330b5e957eb38.js":{"logical_path":"application.js","mtime":"2014-05-16T02:08:20+09:00","size":1455681,"digest":"c8214e05b402c742494330b5e957eb38"},"application-c45776825263b5fa7167e55a3b12252c.js":{"logical_path":"application.js","mtime":"2014-05-16T08:50:24+09:00","size":1455659,"digest":"c45776825263b5fa7167e55a3b12252c"},"application-0f9a877d144f84320a10770dfdc5ddd8.js":{"logical_path":"application.js","mtime":"2014-05-16T22:21:05+09:00","size":1455877,"digest":"0f9a877d144f84320a10770dfdc5ddd8"},"application-d60babdd5a50329b329487cf793c2e29.js":{"logical_path":"application.js","mtime":"2014-05-30T19:26:09+09:00","size":1455891,"digest":"d60babdd5a50329b329487cf793c2e29"},"application-dc485e2270d6c5fce20c149d1e2c4f8d.js":{"logical_path":"application.js","mtime":"2014-06-01T22:25:31+09:00","size":1457970,"digest":"dc485e2270d6c5fce20c149d1e2c4f8d"},"application-51ab300acd1779bfba20b099e7000b7e.css":{"logical_path":"application.css","mtime":"2014-06-01T22:26:47+09:00","size":118664,"digest":"51ab300acd1779bfba20b099e7000b7e"},"application-413cdca52651d449a8bc24550f6db35c.js":{"logical_path":"application.js","mtime":"2014-06-08T21:19:30+09:00","size":1462683,"digest":"413cdca52651d449a8bc24550f6db35c"},"application-7f560d8d6d224f87269691c57ca9a376.css":{"logical_path":"application.css","mtime":"2014-06-08T13:07:08+09:00","size":119280,"digest":"7f560d8d6d224f87269691c57ca9a376"},"application-842ac8f5aa3fcc87bbb0e8b3a0fef5d7.js":{"logical_path":"application.js","mtime":"2014-06-08T22:17:54+09:00","size":1462685,"digest":"842ac8f5aa3fcc87bbb0e8b3a0fef5d7"}},"assets":{"default.xml":"default-5d1886100d7c8961e9962bbc4bb0c714.xml","rgb_led_anode.xml":"rgb_led_anode-91225bef2a8b97f1cefee862a0619b91.xml","favicon.ico":"favicon-a37c90b368fd8ed436cb8f9e9396465c.ico","application.js":"application-842ac8f5aa3fcc87bbb0e8b3a0fef5d7.js","application.css":"application-7f560d8d6d224f87269691c57ca9a376.css","jquery-ui/animated-overlay.gif":"jquery-ui/animated-overlay-c48c87b7a95316f4698484e3b85ee4aa.gif","jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-58b63faadd031ca3db096dfdffd90224.png","jquery-ui/ui-bg_flat_75_ffffff_40x100.png":"jquery-ui/ui-bg_flat_75_ffffff_40x100-937399e8b369d64aa075d13a82c00112.png","jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png":"jquery-ui/ui-bg_glass_55_fbf9ee_1x400-a8c503e0f42a081a92a473b0d30ac6cf.png","jquery-ui/ui-bg_glass_65_ffffff_1x400.png":"jquery-ui/ui-bg_glass_65_ffffff_1x400-ddcbfe385abc3947937caa0b44e2f5d2.png","jquery-ui/ui-bg_glass_75_dadada_1x400.png":"jquery-ui/ui-bg_glass_75_dadada_1x400-14dd4a9ad1f21d8c4c7e673ddfb0806f.png","jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png":"jquery-ui/ui-bg_glass_75_e6e6e6_1x400-a43dfabb23b0a987b567b282bad68346.png","jquery-ui/ui-bg_glass_95_fef1ec_1x400.png":"jquery-ui/ui-bg_glass_95_fef1ec_1x400-31c0c791a756266043ee8ea61dacb36a.png","jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png":"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-33edbdb0d2fcebd2a65c2041a28533da.png","jquery-ui/ui-icons_222222_256x240.png":"jquery-ui/ui-icons_222222_256x240-890385424135de1513f00cbecfb7f990.png","jquery-ui/ui-icons_2e83ff_256x240.png":"jquery-ui/ui-icons_2e83ff_256x240-824705ca4aa2610434a358fe4018c9c6.png","jquery-ui/ui-icons_454545_256x240.png":"jquery-ui/ui-icons_454545_256x240-254e054f6df453dfac49efbc8b78f79d.png","jquery-ui/ui-icons_888888_256x240.png":"jquery-ui/ui-icons_888888_256x240-57c441f87c4289a5372823f506c1182d.png","jquery-ui/ui-icons_cd0a0a_256x240.png":"jquery-ui/ui-icons_cd0a0a_256x240-261647ac915575f3981ded254ae8d43e.png","loading.gif":"loading-e8e6dd7833131c92a6c3b9c8ccc6a6ac.gif","progressbar.gif":"progressbar-82023a146fba2a0f6d925629ed2b09c5.gif"}}
@@ -68,7 +68,7 @@ Gem::Specification.new do |spec|
68
68
  ['launchy'],
69
69
  ['mime-types', '~> 1.16'],
70
70
  ['haml-rails'],
71
- ['smalruby', '~> 0.0.23'],
71
+ ['smalruby', '~> 0.0.25'],
72
72
  ]
73
73
  runtime_dependencies << ['therubyracer'] unless is_windows
74
74
  runtime_dependencies.each do |args|
@@ -50,8 +50,7 @@
50
50
  require "smalruby"
51
51
 
52
52
  car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
53
- car1.x = 200
54
- car1.y = 100
53
+ car1.position = [200, 100]
55
54
 
56
55
  """
57
56
 
@@ -88,8 +87,7 @@
88
87
  car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
89
88
 
90
89
  car1.on(:start) do
91
- self.x = 200
92
- self.y = 100
90
+ self.position = [200, 100]
93
91
  end
94
92
 
95
93
  """
@@ -62,5 +62,17 @@ describe SmalrubyEditor do
62
62
  SmalrubyEditor.create_home_directory
63
63
  end
64
64
  end
65
+
66
+ context 'database.ymlが存在する場合', create_home_directory: true do
67
+ before(:all) do
68
+ database_yml_path = @home_dir.join('config', 'database.yml')
69
+ FileUtils.mkdir_p(database_yml_path.dirname)
70
+ database_yml_path.open('w') do |f|
71
+ f.write('exist YAML')
72
+ end
73
+
74
+ SmalrubyEditor.create_home_directory(@home_dir)
75
+ end
76
+ end
65
77
  end
66
78
  end
@@ -14,17 +14,22 @@ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
14
14
  car1.on(:start) do
15
15
  led("D4").on
16
16
  rgb_led_cathode("D9").on(color: [255, 0, 0])
17
- two_wheel_drive_car("D2").forward
17
+ two_wheel_drive_car("D6").forward
18
18
  end
19
19
  car1.led("D4").off
20
20
  car1.rgb_led_cathode("D9").off
21
- car1.two_wheel_drive_car("D2").backward
21
+ car1.two_wheel_drive_car("D6").backward
22
22
 
23
23
  car1.on(:sensor_change, "A0") do
24
24
  if sensor("A0").value < 200
25
- two_wheel_drive_car("D2").turn_left
26
- two_wheel_drive_car("D2").turn_right
27
- two_wheel_drive_car("D2").stop
25
+ two_wheel_drive_car("D6").turn_left
26
+ two_wheel_drive_car("D6").turn_right
27
+ two_wheel_drive_car("D6").stop
28
+ two_wheel_drive_car("D6").run(command: "forward", sec: 1)
29
+ two_wheel_drive_car("D6").run(command: "backward", sec: 2)
30
+ two_wheel_drive_car("D6").run(command: "turn_left", sec: 3)
31
+ two_wheel_drive_car("D6").run(command: "turn_right", sec: 4)
32
+ two_wheel_drive_car("D6").run(command: "stop", sec: 5)
28
33
  end
29
34
  end
30
35
  EOS
@@ -50,7 +55,7 @@ end
50
55
  <field name="COLOUR">#ff0000</field>
51
56
  <next>
52
57
  <block type="hardware_two_wheel_drive_car_forward">
53
- <field name="PIN">D2</field>
58
+ <field name="PIN">D6</field>
54
59
  </block>
55
60
  </next>
56
61
  </block>
@@ -66,7 +71,7 @@ end
66
71
  <field name="PIN">D9</field>
67
72
  <next>
68
73
  <block type="hardware_two_wheel_drive_car_backward">
69
- <field name="PIN">D2</field>
74
+ <field name="PIN">D6</field>
70
75
  <next>
71
76
  <block type="hardware_on_sensor_change">
72
77
  <field name="PIN">A0</field>
@@ -88,13 +93,88 @@ end
88
93
  </value>
89
94
  <statement name="THEN">
90
95
  <block type="hardware_two_wheel_drive_car_turn_left">
91
- <field name="PIN">D2</field>
96
+ <field name="PIN">D6</field>
92
97
  <next>
93
98
  <block type="hardware_two_wheel_drive_car_turn_right">
94
- <field name="PIN">D2</field>
99
+ <field name="PIN">D6</field>
95
100
  <next>
96
101
  <block type="hardware_two_wheel_drive_car_stop">
97
- <field name="PIN">D2</field>
102
+ <field name="PIN">D6</field>
103
+ <next>
104
+ <block type="hardware_two_wheel_drive_car_run" inline="true">
105
+ <field name="PIN">D6</field>
106
+ <value name="SEC">
107
+ <block type="math_number">
108
+ <field name="NUM">1</field>
109
+ </block>
110
+ </value>
111
+ <value name="COMMAND">
112
+ <block type="hardware_two_wheel_drive_car_commands">
113
+ <field name="COMMAND">forward</field>
114
+ </block>
115
+ </value>
116
+ <next>
117
+ <block type="hardware_two_wheel_drive_car_run" inline="true">
118
+ <field name="PIN">D6</field>
119
+ <value name="SEC">
120
+ <block type="math_number">
121
+ <field name="NUM">2</field>
122
+ </block>
123
+ </value>
124
+ <value name="COMMAND">
125
+ <block type="hardware_two_wheel_drive_car_commands">
126
+ <field name="COMMAND">backward</field>
127
+ </block>
128
+ </value>
129
+ <next>
130
+ <block type="hardware_two_wheel_drive_car_run" inline="true">
131
+ <field name="PIN">D6</field>
132
+ <value name="SEC">
133
+ <block type="math_number">
134
+ <field name="NUM">3</field>
135
+ </block>
136
+ </value>
137
+ <value name="COMMAND">
138
+ <block type="hardware_two_wheel_drive_car_commands">
139
+ <field name="COMMAND">turn_left</field>
140
+ </block>
141
+ </value>
142
+ <next>
143
+ <block type="hardware_two_wheel_drive_car_run" inline="true">
144
+ <field name="PIN">D6</field>
145
+ <value name="SEC">
146
+ <block type="math_number">
147
+ <field name="NUM">4</field>
148
+ </block>
149
+ </value>
150
+ <value name="COMMAND">
151
+ <block type="hardware_two_wheel_drive_car_commands">
152
+ <field name="COMMAND">turn_right</field>
153
+ </block>
154
+ </value>
155
+ <next>
156
+ <block type="hardware_two_wheel_drive_car_run" inline="true">
157
+ <field name="PIN">D6</field>
158
+ <value name="SEC">
159
+ <block type="math_number">
160
+ <field name="NUM">5</field>
161
+ </block>
162
+ </value>
163
+ <value name="COMMAND">
164
+ <block type="hardware_two_wheel_drive_car_commands">
165
+ <field name="COMMAND">stop</field>
166
+ </block>
167
+ </value>
168
+ </block>
169
+ </next>
170
+ </block>
171
+ </next>
172
+ </block>
173
+ </next>
174
+ </block>
175
+ </next>
176
+ </block>
177
+ </next>
98
178
  </block>
99
179
  </next>
100
180
  </block>
@@ -8,8 +8,7 @@ describe RubyToBlock::Block, '移動・回転ジャンル', to_blocks: true do
8
8
  parts = <<-EOS
9
9
  car1.on(:start) do
10
10
  move(10)
11
- self.x = 0
12
- self.y = 0
11
+ self.position = [0, 0]
13
12
  self.x += 10
14
13
  self.x = 0
15
14
  self.y += 10
@@ -21,8 +20,7 @@ car1.on(:start) do
21
20
  end
22
21
  end
23
22
  car1.move(10)
24
- car1.x = 0
25
- car1.y = 0
23
+ car1.position = [0, 0]
26
24
  car1.x += 10
27
25
  car1.x = 0
28
26
  car1.y += 10
@@ -195,8 +193,7 @@ car1.y = 0
195
193
 
196
194
  parts = <<-EOS
197
195
  car1.move(10)
198
- car1.x = 0
199
- car1.y = 0
196
+ car1.position = [0, 0]
200
197
  car1.x += 10
201
198
  EOS
202
199
  describe compact_source_code(parts), character_new_data: true do