Replace underscore-extensions with underscore-plus

This commit is contained in:
Kevin Sawicki 2013-10-15 09:25:53 -07:00
parent f066887fd8
commit 4fa15d3fce
3 changed files with 1 additions and 292 deletions

View File

@ -35,10 +35,9 @@
"season": "0.13.0",
"semver": "1.1.4",
"space-pen": "1.3.0",
"tantamount": "0.5.0",
"telepath": "0.8.1",
"temp": "0.5.0",
"underscore": "1.4.4",
"underscore-plus": "0.1.0",
"atom-light-ui": "0.4.0",
"atom-light-syntax": "0.4.0",

View File

@ -1,117 +0,0 @@
{_} = require 'atom'
describe "underscore extensions", ->
describe "_.adviseBefore", ->
[object, calls] = []
beforeEach ->
calls = []
object = {
method: (args...) ->
calls.push(["original", this, args])
}
it "calls the given function before the advised method", ->
_.adviseBefore object, 'method', (args...) -> calls.push(["advice", this, args])
object.method(1, 2, 3)
expect(calls).toEqual [['advice', object, [1, 2, 3]], ['original', object, [1, 2, 3]]]
it "cancels the original method's invocation if the advice returns true", ->
_.adviseBefore object, 'method', -> false
object.method(1, 2, 3)
expect(calls).toEqual []
describe "_.endsWith", ->
it "returns whether the given string ends with the given suffix", ->
expect(_.endsWith("test.txt", ".txt")).toBeTruthy()
expect(_.endsWith("test.txt", "txt")).toBeTruthy()
expect(_.endsWith("test.txt", "test.txt")).toBeTruthy()
expect(_.endsWith("test.txt", "")).toBeTruthy()
expect(_.endsWith("test.txt", ".txt2")).toBeFalsy()
expect(_.endsWith("test.txt", ".tx")).toBeFalsy()
expect(_.endsWith("test.txt", "test")).toBeFalsy()
describe "_.camelize(string)", ->
it "converts `string` to camel case", ->
expect(_.camelize("corey_dale_johnson")).toBe "coreyDaleJohnson"
expect(_.camelize("corey-dale-johnson")).toBe "coreyDaleJohnson"
expect(_.camelize("corey_dale-johnson")).toBe "coreyDaleJohnson"
expect(_.camelize("coreyDaleJohnson")).toBe "coreyDaleJohnson"
expect(_.camelize("CoreyDaleJohnson")).toBe "CoreyDaleJohnson"
describe "_.dasherize(string)", ->
it "converts `string` to use dashes", ->
expect(_.dasherize("corey_dale_johnson")).toBe "corey-dale-johnson"
expect(_.dasherize("coreyDaleJohnson")).toBe "corey-dale-johnson"
expect(_.dasherize("CoreyDaleJohnson")).toBe "corey-dale-johnson"
expect(_.dasherize("corey-dale-johnson")).toBe "corey-dale-johnson"
describe "_.underscore(string)", ->
it "converts `string` to use underscores", ->
expect(_.underscore("corey-dale-johnson")).toBe "corey_dale_johnson"
expect(_.underscore("coreyDaleJohnson")).toBe "corey_dale_johnson"
expect(_.underscore("CoreyDaleJohnson")).toBe "corey_dale_johnson"
expect(_.underscore("corey_dale_johnson")).toBe "corey_dale_johnson"
describe "spliceWithArray(originalArray, start, length, insertedArray, chunkSize)", ->
describe "when the inserted array is smaller than the chunk size", ->
it "splices the array in place", ->
array = ['a', 'b', 'c']
_.spliceWithArray(array, 1, 1, ['v', 'w', 'x', 'y', 'z'], 100)
expect(array).toEqual ['a', 'v', 'w', 'x', 'y', 'z', 'c']
describe "when the inserted array is larger than the chunk size", ->
it "splices the array in place one chunk at a time (to avoid stack overflows)", ->
array = ['a', 'b', 'c']
_.spliceWithArray(array, 1, 1, ['v', 'w', 'x', 'y', 'z'], 2)
expect(array).toEqual ['a', 'v', 'w', 'x', 'y', 'z', 'c']
describe "_.humanizeEventName(eventName)", ->
describe "when no namespace exists", ->
it "undasherizes and capitalizes the event name", ->
expect(_.humanizeEventName('nonamespace')).toBe 'Nonamespace'
expect(_.humanizeEventName('no-name-space')).toBe 'No Name Space'
describe "when a namespaces exists", ->
it "space separates the undasherized/capitalized versions of the namespace and event name", ->
expect(_.humanizeEventName('space:final-frontier')).toBe 'Space: Final Frontier'
expect(_.humanizeEventName('star-trek:the-next-generation')).toBe 'Star Trek: The Next Generation'
describe "_.deepExtend(objects...)", ->
it "copies all key/values from each object into a new object", ->
first =
things:
string: "oh"
boolean: false
anotherArray: ['a', 'b', 'c']
object:
first: 1
second: 2
second =
things:
string: "cool"
array: [1,2,3]
anotherArray: ['aa', 'bb', 'cc']
object:
first: 1
result = _.deepExtend(first, second)
expect(result).toEqual
things:
string: "oh"
boolean: false
array: [1,2,3]
anotherArray: ['a', 'b', 'c']
object:
first: 1
second: 2
describe "_.isSubset(potentialSubset, potentialSuperset)", ->
it "returns whether the first argument is a subset of the second", ->
expect(_.isSubset([1, 2], [1, 2])).toBeTruthy()
expect(_.isSubset([1, 2], [1, 2, 3])).toBeTruthy()
expect(_.isSubset([], [1])).toBeTruthy()
expect(_.isSubset([], [])).toBeTruthy()
expect(_.isSubset([1, 2], [2, 3])).toBeFalsy()

View File

@ -1,173 +0,0 @@
_ = require 'underscore'
_.mixin
remove: (array, element) ->
index = array.indexOf(element)
array.splice(index, 1) if index >= 0
array
spliceWithArray: (originalArray, start, length, insertedArray, chunkSize=100000) ->
if insertedArray.length < chunkSize
originalArray.splice(start, length, insertedArray...)
else
originalArray.splice(start, length)
for chunkStart in [0..insertedArray.length] by chunkSize
originalArray.splice(start + chunkStart, 0, insertedArray.slice(chunkStart, chunkStart + chunkSize)...)
sum: (array) ->
sum = 0
sum += elt for elt in array
sum
adviseBefore: (object, methodName, advice) ->
original = object[methodName]
object[methodName] = (args...) ->
unless advice.apply(this, args) == false
original.apply(this, args)
escapeRegExp: (string) ->
string.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')
escapeAttribute: (string) ->
string.replace(/"/g, '&quot;').replace(/\n/g, '')
humanizeEventName: (eventName, eventDoc) ->
[namespace, event] = eventName.split(':')
return _.undasherize(namespace) unless event?
namespaceDoc = _.undasherize(namespace)
eventDoc ?= _.undasherize(event)
"#{namespaceDoc}: #{eventDoc}"
capitalize: (word) ->
if word.toLowerCase() is 'github'
'GitHub'
else
word[0].toUpperCase() + word[1..]
pluralize: (count=0, singular, plural=singular+'s') ->
if count is 1
"#{count} #{singular}"
else
"#{count} #{plural}"
camelize: (string) ->
string.replace /[_-]+(\w)/g, (m) -> m[1].toUpperCase()
dasherize: (string) ->
string = string[0].toLowerCase() + string[1..]
string.replace /([A-Z])|(_)/g, (m, letter, underscore) ->
if letter
"-" + letter.toLowerCase()
else
"-"
uncamelcase: (string) ->
result = string.replace /([A-Z])|(_)/g, (m, letter, underscore) -> " " + letter
_.capitalize(result)
undasherize: (string) ->
string.split('-').map(_.capitalize).join(' ')
underscore: (string) ->
string = string[0].toLowerCase() + string[1..]
string.replace /([A-Z])|(-)/g, (m, letter, dash) ->
if letter
"_" + letter.toLowerCase()
else
"_"
losslessInvert: (hash) ->
inverted = {}
for key, value of hash
inverted[value] ?= []
inverted[value].push(key)
inverted
multiplyString: (string, n) ->
new Array(1 + n).join(string)
nextTick: (fn) ->
unless @messageChannel
@pendingNextTickFns = []
@messageChannel = new MessageChannel
@messageChannel.port1.onmessage = =>
fn() while fn = @pendingNextTickFns.shift()
@pendingNextTickFns.push(fn)
@messageChannel.port2.postMessage(0)
endsWith: (string, suffix) ->
string.indexOf(suffix, string.length - suffix.length) isnt -1
# Transform the given object into another object.
#
# `object` - The object to transform.
# `iterator` -
# A function that takes `(key, value)` arguments and returns a
# `[key, value]` tuple.
#
# Returns a new object based with the key/values returned by the iterator.
mapObject: (object, iterator) ->
newObject = {}
for key, value of object
[key, value] = iterator(key, value)
newObject[key] = value
newObject
# Deep clones the given JSON object.
#
# `object` - The JSON object to clone.
#
# Returns a deep clone of the JSON object.
deepClone: (object) ->
if _.isArray(object)
object.map (value) -> _.deepClone(value)
else if _.isObject(object)
@mapObject object, (key, value) => [key, @deepClone(value)]
else
object
deepExtend: (objects...) ->
result = {}
for object in objects
for key, value of object
if _.isObject(value) and not _.isArray(value)
result[key] = @deepExtend(result[key], value)
else
result[key] ?= value
result
valueForKeyPath: (object, keyPath) ->
keys = keyPath.split('.')
for key in keys
object = object[key]
return unless object?
object
setValueForKeyPath: (object, keyPath, value) ->
keys = keyPath.split('.')
while keys.length > 1
key = keys.shift()
object[key] ?= {}
object = object[key]
if value?
object[keys.shift()] = value
else
delete object[keys.shift()]
compactObject: (object) ->
newObject = {}
for key, value of object
newObject[key] = value if value?
newObject
isSubset: (potentialSubset, potentialSuperset) ->
_.every potentialSubset, (element) -> _.include(potentialSuperset, element)
_.isEqual = require 'tantamount'
module.exports = _