Skip to content

Commit

Permalink
Add new merging method (and test) for adding a settings group
Browse files Browse the repository at this point in the history
  • Loading branch information
MaximeSangoi committed Jan 16, 2015
1 parent 15d2988 commit 2a054c6
Show file tree
Hide file tree
Showing 5 changed files with 283 additions and 51 deletions.
5 changes: 1 addition & 4 deletions www/base/src/app/builders/builders.route.coffee
Expand Up @@ -15,20 +15,17 @@ class State extends Config
name:'Builders'
caption: 'Builders related settings'
items:[
{
type:'bool'
name:'checkbox1'
default_value: true
}
{
,
type:'choices'
name:'radio'
default_value: 'radio1'
answers: [
{ name: 'radio1' }
{ name: 'radio2' }
]
}
]

# Configuration
Expand Down
5 changes: 1 addition & 4 deletions www/base/src/app/home/home.route.coffee
Expand Up @@ -15,20 +15,17 @@ class State extends Config
name:name
caption: 'Home related settings'
items:[
{
type:'bool'
name:'checkbox1'
default_value: false
}
{
,
type:'choices'
name:'radio'
default_value: 'radio1'
answers: [
{ name: 'radio1' }
{ name: 'radio2' }
]
}
]

cfg =
Expand Down
34 changes: 24 additions & 10 deletions www/base/src/app/settings/service/settings.service.coffee
@@ -1,17 +1,28 @@
class bbSettings extends Provider
constructor: ->
storageGroups = angular.fromJson(localStorage.getItem('settings'))
@groups = if storageGroups? then storageGroups else {}
@groups = {}

format = (item, groupName) ->
item.value = item.default_value
item.name = groupName + "_" + item.name
return item

mergeNewGroup: (oldGroup, newGroup) ->
if not newGroup?
return undefined
if not oldGroup?
item.value = item.default_value for item in newGroup.items
return newGroup
else
for newItem in newGroup.items
newItem.value = newItem.default_value
for oldItem in oldGroup.items
if newItem.name is oldItem.name and oldItem.value?
newItem.value = oldItem.value
return newGroup

addSettingsGroup: (group) ->
if not @groups[group.name]?
format(item, group.name) for item in group.items
@groups[group.name] = group
storageGroups = angular.fromJson(localStorage.getItem('settings')) || {}
unless group.name?
throw Error("Group (with caption : #{group.caption}) must have a correct name property.")
newGroup = @mergeNewGroup(storageGroups[group.name], group)
@groups[newGroup.name] = newGroup
return @groups

$get: [ ->
Expand All @@ -25,6 +36,9 @@ class bbSettings extends Provider
getSetting: (settingSelector) ->
groupName = settingSelector.split('.')[0]
settingName = settingSelector.split('.')[1]
return setting for setting in self.groups[groupName].items when setting.name is settingName
if self.groups[groupName]?
return setting for setting in self.groups[groupName].items when setting.name is settingName
else
return undefined
}
]

0 comments on commit 2a054c6

Please sign in to comment.