test: add tests.

test: add tests.

error: pathspec 'spec/cube.spec.coffee' did not match any file(s) known to git

--- spec/cube.spec.coffee
+++ spec/cube.spec.coffee
@@ -0,0 +1,48 @@
+describe 'Cube', ->
+
+  it 'should serialize a cube to string for a default cube', ->
+    cube = new Cube
+    expect(cube.asString()).toBe 'UUUUUUUUURRRRRRRRRFFFFFFFFFDDDDDDDDDLLLLLLLLLBBBBBBBBB'
+
+  it 'should initiate a cube when provide a String', ->
+    cube = Cube.fromString 'UUUUUUUUUR...F...D...L...B...'
+    expect(cube.asString()).toBe 'UUUUUUUUURRRRRRRRRFFFFFFFFFDDDDDDDDDLLLLLLLLLBBBBBBBBB'
+
+  it 'should serialize a cube to JSON for a default cube', ->
+    cube = new Cube
+
+    expectedJSON =
+      cp: [ 0, 1, 2, 3, 4, 5, 6, 7 ],
+      co: [ 0, 0, 0, 0, 0, 0, 0, 0 ],
+      ep: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ],
+      eo: [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
+
+    expect(cube.toJSON()).toEqual expectedJSON
+
+  it 'should rotate U face when move U', ->
+    cube = new Cube
+    cube.move 'U'
+    expect(cube.asString()).toBe 'UUUUUUUUUBBBRRRRRRRRRFFFFFFDDDDDDDDDFFFLLLLLLLLLBBBBBB'
+
+  it 'should rotate cuve face when apply a moves sequence', ->
+    cube = new Cube
+    cube.move "U R F' L'"
+    expect(cube.asString()).toBe 'DURRUFRRRBRBDRBDRBFDDDFFDFFBLLBDBLDLFUUFLLFLLULRUBUUBU'
+
+  it 'should resets the cube to the identity cube', ->
+    cube = new Cube
+    cube.move "U R F' L'"
+    cube.identity()
+    expect(cube.asString()).toBe 'UUUUUUUUURRRRRRRRRFFFFFFFFFDDDDDDDDDLLLLLLLLLBBBBBBBBB'
+
+  it 'should return true when the cube is solved (default cube)', ->
+    cube = new Cube
+    expect(cube.isSolved()).toBe true
+
+  it 'should return false when the cube is not solved (random cube)', ->
+    cube = Cube.random()
+    expect(cube.isSolved()).toBe false
+
+  it 'should return inverse moves', ->
+    moves = Cube.inverse "F B' R"
+    expect(moves).toBe "R' B F'"


transport: Add tests

transport: Add tests

Good to test this independently of coordinator as things get more complex..

error: pathspec 'spec/transport.coffee' did not match any file(s) known to git

--- spec/transport.coffee
+++ spec/transport.coffee
@@ -0,0 +1,68 @@
+
+chai = require 'chai' unless chai
+path = require 'path'
+async = require 'async'
+
+Coordinator = require('../src/coordinator').Coordinator
+transport = require '../src/transport'
+participants = require './fixtures/participants'
+
+# Note: most require running an external broker service
+transports =
+  'direct': 'direct://broker2'
+  'MQTT': 'mqtt://localhost'
+  'AMQP': 'amqp://localhost'
+
+
+connectAll = (clients, callback) ->
+  connect = (c, cb) ->
+    c.connect cb
+  async.map clients, connect, callback
+
+
+describe 'Transport', ->
+
+  Object.keys(transports).forEach (type) =>
+    address = transports[type]
+    broker = null
+
+    describe "#{type}", () ->
+
+      beforeEach (done) ->
+        broker = transport.getBroker address
+        broker.connect (err) ->
+          err = null if not err?
+          chai.expect(err).to.be.a 'null'
+          done()
+
+      afterEach (done) ->
+        broker.disconnect () ->
+          broker = null
+          done()
+
+      describe 'starting client', ->
+        it 'should not error', (done) ->
+          clientA = transport.getClient address
+          clientA.connect (err) ->
+            done err
+
+      describe 'subscribing to queue', ->
+        it 'should produce data when sending there', (done) ->
+          sender = transport.getClient address
+          receiver = transport.getClient address
+          payload = { foo: 'bar91' }
+          sharedQueue = 'myqueue33'
+          onReceive = (msg) ->
+            chai.expect(msg).to.include.keys 'data'
+            chai.expect(msg.data).to.eql payload
+            done()
+          connectAll [sender, receiver], (err) ->
+            receiver.createQueue sharedQueue, (err) ->
+              chai.expect(err).to.be.a 'null'
+              receiver.subscribeToQueue sharedQueue, onReceive, (err) ->
+                chai.expect(err).to.be.a 'null'
+              sender.sendToQueue sharedQueue, payload, (err) ->
+                chai.expect(err).to.be.a 'null'
+
+
+


base model implementation start;

base model implementation start;

error: pathspec 'src/base_model.coffee' did not match any file(s) known to git

--- src/base_model.coffee
+++ src/base_model.coffee
@@ -0,0 +1,53 @@
+
+###
+
+
+
+###
+
+class BaseModel
+###
+
+###
+  attrs: () ->
+    @constructor.attrs
+
+  validators: () ->
+    @constructor.validate
+
+  normalize_attrs: () ->
+    for a in @constructor.attrs
+      do(a) ->
+        if typeof(a) is "object"
+          Object.keys(a)[0]
+        else
+          a
+
+  constructor: (obj = {}) ->
+    self = @
+
+    @_isValid = false
+    @errors = {}
+    @attributes = @normalize_attrs()
+
+
+    for attr in @attrs()
+      do(attr) ->
+        if typeof(attr) is "object"
+          [key, ...] = Object.keys(attr)
+          throw new Error("Attributes should have a key and value") if !key
+          self["_#{key}"] = attr[key]
+        else
+          self["_#{attr}"] = null
+
+    if Object.keys(obj).length != 0
+      for attr in Object.keys(obj)
+        do(attr) ->
+          self.set(attr, obj[attr])
+
+
+
+
+
+
+


Support slack attachment style messages

Support slack attachment style messages

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rwky/rwky.net.git/'


better logging

better logging

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/bubblegroup/bubblebot.git/'


Added gruntfile

Added gruntfile

error: pathspec 'gruntfile.coffee' did not match any file(s) known to git

--- gruntfile.coffee
+++ gruntfile.coffee
@@ -0,0 +1,25 @@
+module.exports = (grunt) ->
+
+  sourceOrigin = 'src/**/*.coffee'
+
+  grunt.initConfig
+    pkg: grunt.file.readJSON 'package.json'
+    coffeelint:
+      source: ['src/**/*.coffee']
+    coffee:
+      compile:
+        files:
+          'dist/<%= pkg.name %>.js': ['src/*.coffee']
+    uglify:
+      options:
+        banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today("dd-mm-yyyy") %> */\n'
+        report: 'gzip'
+      dist:
+        files:
+          'dist/<%= pkg.name %>.min.js': 'dist/<%= pkg.name %>.js'
+
+
+  require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks)
+
+  grunt.registerTask 'test', 'Lints and unit tests', ['coffeelint']
+  grunt.registerTask 'default', 'Default task', ['test', 'coffee', 'uglify']


deprecate rename task

deprecate rename task

--- tasks/rename.coffee
+++ tasks/rename.coffee
@@ -1,12 +0,0 @@
-module.exports = (grunt) ->
-	fs = require 'fs'
-	normalizeFilesHelper = require './normalizeFilesHelper'
-
-	grunt.registerMultiTask 'rename', 'Renames files', ->
-		normalized = normalizeFilesHelper @
-		groups = normalized.groups
-
-		for dest, src of groups
-			src.forEach (source) ->
-				fs.renameSync source, dest
-				grunt.verbose.ok "#{source} -> #{dest}"


Apps: Remove kites section for non admins.

--- client/Social/Apps/AppController.coffee
+++ client/Social/Apps/AppController.coffee
@@ -146,6 +146,8 @@
         title             : "New Apps"
         dataSource        : (selector, options, callback)=>
           KD.remote.api.JNewApp.some_ selector, options, callback
+    else
+      delete options.filter.kites

     KD.getSingleton("appManager").tell 'Feeder', \
       'createContentFeedController', options, (controller)=>


Log some stuff to debug travis problem

Log some stuff to debug travis problem

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/mantacode/ftoggle-cli.git/'


fixed

fixed

error: pathspec 'test/saytest.coffee' did not match any file(s) known to git

--- test/saytest.coffee
+++ test/saytest.coffee
@@ -0,0 +1,16 @@
+Say = require '../index.coffee'
+
+exports.SayOneThing =
+
+  'test says one phrase': (test) ->
+    Say 'hello friend'
+    result = console.log 'ok'
+    test.equal(result)
+    test.done()
+
+  'test says two phrases': (test) ->
+    Say 'hello friend', NewPhrase
+    NewPhrase = Say 'ahoy mate'
+    result = console.log 'ok'
+    test.equal(result)
+    test.done()


*Always* collapse selection on yank.

*Always* collapse selection on yank.

This only affects the transition from visual mode back to edit mode.

Previously, we were incorrectly leaving the selection in place.

(The comment above was correct, but the implementation wasn't.)

--- content_scripts/mode_visual_edit.coffee
+++ content_scripts/mode_visual_edit.coffee
@@ -375,8 +375,10 @@
   # it.
   yank: (args = {}) ->
     @yankedText = @selection.toString()
-    @selection.deleteFromDocument() if @options.deleteFromDocument or args.deleteFromDocument
-    @selection.collapseToStart() unless @options.parentMode
+    if @options.deleteFromDocument or args.deleteFromDocument
+      @selection.deleteFromDocument()
+    else
+      @selection.collapseToStart()

     message = @yankedText.replace /\s+/g, " "
     message = message[...12] + "..." if 15 < @yankedText.length


Updated to allow for extending

Updated to allow for extending

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/NewSpring/norma-markup.git/'


simple convinience pubsub client

simple convinience pubsub client

error: pathspec 'tools/pubsub.coffee' did not match any file(s) known to git

--- tools/pubsub.coffee
+++ tools/pubsub.coffee
@@ -0,0 +1,25 @@
+
+module.exports =
+
+    Client: (ctx, brokerId, handler)->
+
+        ctx.lookup brokerId, ctx.identity, (err, manager)=>
+            manager.subscribe (err, msg)=>
+                return handler(err) if err
+
+                ## subscription
+                if msg.token
+                    ctx.logger.debug 'connected:', msg
+
+                    ctx.on 'shutdown', ()=>
+                        ctx.logger.debug 'unsubscribing...'
+                        manager.unsubscribe msg.token
+
+                else
+                    ## message
+                    ctx.logger.debug 'message received:', msg
+                    handler null, msg
+
+            ##
+            @publish = (args...)->
+                manager.publish.apply manager, args


:art:

:art:

--- src/project.coffee
+++ src/project.coffee
@@ -7,11 +7,11 @@
 {includeDeprecations, deprecate} = require 'grim'
 {Subscriber} = require 'emissary'
 {Emitter} = require 'event-kit'
-DefaultDirectoryProvider = require './default-directory-provider'
 Serializable = require 'serializable'
 TextBuffer = require 'text-buffer'
 Grim = require 'grim'

+DefaultDirectoryProvider = require './default-directory-provider'
 Model = require './model'
 TextEditor = require './text-editor'
 Task = require './task'


Add request_id to parameter list

Add request_id to parameter list

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/inventid/peek-active_record.git/'


NSE: update events, add more events ~ tidy up old ones by grouping

--- client/new-stack-editor/lib/events.coffee
+++ client/new-stack-editor/lib/events.coffee
@@ -5,35 +5,47 @@
   events = [
     'CredentialChangesRevertRequested'
     'CredentialChangesSaveRequested'
-    'TemplateTitleChangeRequested'
     'CredentialSelectionChanged'
     'CredentialFilterChanged'
+    'CredentialListUpdated'
+
+    'TemplateTitleChangeRequested'
+    'TemplateDataChanged'
+
     'SelectedProviderChanged'
-    'CredentialListUpdated'
     'StackWizardCancelled'
     'InitializeRequested'
-    'TemplateDataChanged'
     'ProviderSelected'
+    'LoadClonedFrom'
+
+    'Banner.ActionClicked'
+    'Banner.Close'
+
+    'Menu.MakeTeamDefault'
+    'Menu.Credentials'
+    'Menu.Initialize'
+    'Menu.Rename'
+    'Menu.Delete'
+    'Menu.Clone'
+    'Menu.Test'
+    'Menu.Logs'
+
     'LazyLoadFinished'
     'LazyLoadStarted'
+
+    'CollapseSideView'
+    'ExpandSideView'
     'ToggleSideView'
-    'LoadClonedFrom'
     'ShowSideView'
+    'HideSideView'
+
     'HideWarning'
     'WarnUser'
+
     'GotFocus'
     'Action'
+
     'Log'
-    'Menu.Test'
-    'Menu.Initialize'
-    'Menu.MakeTeamDefault'
-    'Menu.Rename'
-    'Menu.Clone'
-    'Menu.Credentials'
-    'Menu.Logs'
-    'Menu.Delete'
-    'Banner.ActionClicked'
-    'Banner.Close'
   ]

   obj = {}


leads.csv

leads.csv

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/gurujowa/rails-simple-crm.git/'


Make tag list accept multi-word tags.

Make tag list accept multi-word tags.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/stowawayco/stowaway.git/'


add ability to remove colors from Palette by name, hex, or any init value

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/aligerum/umbriel.git/'


initial implementation of BC_FLOW_IF

initial implementation of BC_FLOW_IF

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/crcx/parable.git/'


Create sight.coffee

Create sight.coffee

error: pathspec 'data/points/sight.coffee' did not match any file(s) known to git

--- data/points/sight.coffee
+++ data/points/sight.coffee
@@ -0,0 +1,7 @@
+id: "sight"
+title: "Sight(Chrome代码高亮扩展)"
+function: [ "syntax-highlight" ]
+relevance: [ "chrome", "highlight-js" ]
+homepage: "http://chrome.google.com/extensions/detail/epmaefhielclhlnmjofcdapbeepkmggh"
+github: "https://github.com/tsenart/sight"
+desc: "一个Chrome扩展，可以让你查看代码文件的时候加上行号与代码高亮效果。特别适合以http方式阅读本库代码的场景。"


removed implementation comment

removed implementation comment

--- app/scripts/alchemy/defaultConf.coffee
+++ app/scripts/alchemy/defaultConf.coffee
@@ -14,7 +14,7 @@
                          "#ffcd00", "#184fff",
                          "#ff7e00"])
     fixNodes: false
-    fixRootNodes: false # not implemented
+    fixRootNodes: false
     forceLocked: true
     linkDistance: 2000
     nodePositions: null # not currently implemented


add placeholder for input-loft-url to be implemented;

error: pathspec 'app/assets/javascripts/input-loft-url.coffee' did not match any file(s) known to git

--- app/assets/javascripts/input-loft-url.coffee
+++ app/assets/javascripts/input-loft-url.coffee
@@ -0,0 +1 @@
+# add input for string url here


Add sass pipe.

Add sass pipe.

error: pathspec 'src/pipes/sass.coffee' did not match any file(s) known to git

--- src/pipes/sass.coffee
+++ src/pipes/sass.coffee
@@ -0,0 +1,50 @@
+path = require "path"
+
+sass = require "node-sass"
+RSVP = require "rsvp"
+
+{DependsPipe} = require "../pipe"
+
+module.exports = class ExtPipe extends DependsPipe
+    @schema: ->
+        description: "Compile .scss resources to css."
+
+    @configDefaults:
+        pattern: "**/*.scss"
+
+    rename: (name) -> name.replace /scss$/, "css"
+
+    dependenciesFor: (name) ->
+        content = @state.files[name].toString()
+        dirname = path.dirname name
+
+        imports = content.match /@import "(.*)";/g
+        return [] if not imports
+        imports.map (s) ->
+            name = s.replace /@import "(.*)";/, "$1"
+            path.join dirname, name+".css"
+
+    compile: (name) ->
+        new RSVP.Promise (resolve, reject) =>
+            content = @state.files[name].toString()
+            ret = sass.renderSync
+                file: name
+                data: if content then content else "//"
+                importer: (url, prev) =>
+                    dirname = path.dirname prev
+                    impname = path.join dirname, url+".css"
+                    if @state.files[impname]
+                        contents = @state.files[impname].toString()
+                    else
+                        contents = ""
+                    contents: contents
+            if ret.status > 0
+                reject ret
+            else
+                resolve ret
+        .catch (err) =>
+            @log "error", "BROKEN #{name}\nError: #{err}"
+            ""
+        .then (result) =>
+            if result
+                @fileChange name, new Buffer result.css.toString()


Update configuration

Update configuration

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/ehmicky/myos.git/'


Fix Quaternion::equals.

Fix Quaternion::equals.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rfw/basilisk.git/'


Added sample groups

Added sample groups

error: pathspec 'groups.coffee' did not match any file(s) known to git

--- groups.coffee
+++ groups.coffee
@@ -0,0 +1,10 @@
+groups = [
+	"Sales"
+	"Marketing"
+	"Engineering"
+	"Executive"
+	"Administrative"
+	"HR"
+	"Facilities"
+	"Product"
+]


adding a test that AudioPlayer defers calls until the plugin becomes usable

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/quizlet/mp3.js.git/'


Adds escaping in {change} find

Adds escaping in {change} find

--- scripts/copy-i18n-tags.coffee
+++ scripts/copy-i18n-tags.coffee
@@ -45,7 +45,8 @@
       if commentsMap[enCat]? and commentsMap[enCat][enTag]?
         comment = " \##{commentsMap[enCat][enTag]}"

-      if fileSource.search(new RegExp("#?    #{enTag}: \"#{tag}\".*\{change\}.*")) >= 0 and comment.search(/.*\{change\}/) < 0
+      escapedTag = tag.replace /[-\/\\^$*+?.()|[\]{}]/g, "\\$&"
+      if fileSource.search(new RegExp("#?    #{enTag}: \"#{escapedTag}\".*\{change\}.*")) >= 0 and comment.search(/.*\{change\}/) < 0
         comment = " \#" + comment if comment is ""
         comment = comment + " {change}"