mm-git/backbone-graph

View on GitHub
src/Model/rectRegion.coffee

Summary

Maintainability
Test Coverage
require('./property')

class RectRegion
  constructor: (@_minX, @_minY, @_maxX, @_maxY) ->
    @_checkParameter(@_minX, @_minY, @_maxX, @_maxY)

  @property "minX",
    get: ->
      @_val(@_minX)
    set: (minX) ->
      @_checkParameter(minX, @_minY, @_maxX, @_maxY)
      @_minX = minX

  @property "minY",
    get: ->
      @_val(@_minY)
    set: (minY) ->
      @_checkParameter(@_minX, minY, @_maxX, @_maxY)
      @_minY = minY

  @property "maxX",
    get: ->
      @_val(@_maxX)
    set: (maxX) ->
      @_checkParameter(@_minX, @_minY, maxX, @_maxY)
      @_maxX = maxX

  @property "maxY",
    get: ->
      @_val(@_maxY)
    set: (maxY) ->
      @_checkParameter(@_minX, @_minY, @_maxX, maxY)
      @_maxY = maxY

  isInside: (x, y) ->
    if @_minX? && x < @_val(@_minX)
      return false

    if @_maxX? && x > @_val(@_maxX)
      return false

    if @_minY? && y < @_val(@_minY)
      return false

    if @_maxY? && y > @_val(@_maxY)
      return false

    return true

  getRound: (x, y) ->
    roundX = x
    if @_minX? && x < @_val(@_minX)
      roundX = @_val(@_minX)
    else if @_maxX? && x > @_val(@_maxX)
      roundX = @_val(@_maxX)

    roundY = y
    if @_minY? && y < @_val(@_minY)
      roundY = @_val(@_minY)
    else if @_maxY? && y > @_val(@_maxY)
      roundY = @_val(@_maxY)

    return {
      x: roundX
      y: roundY
    }

  _checkParameter: (minX, minY, maxX, maxY) ->
    if !minX? && !minY? && !maxX? && !maxY?
      throw "All parameters are null"

    if minX? && maxX? && @_val(minX) > @_val(maxX)
      throw "minX muse be less than maxX"

    if minY? && maxY? && @_val(minY) > @_val(maxY)
      throw "minY muse be less than maxY"

    return

  _val: (value) ->
    if typeof value == "function"
      return value()
    return value

module.exports = RectRegion