aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVlatka Pavisic2017-01-04 14:00:39 +0100
committerVlatka Pavisic2017-01-04 14:00:39 +0100
commitaf34cb854255f2893a27e28b11a2601d6af8a725 (patch)
tree4da1c8de8b34069a2d816869c46576dc3d98e5a4
parentd1e76469119acd0d92cdb65fa8e9a5b61803b3a3 (diff)
parentc11be6d012dd77101721900168b9acc64db66e49 (diff)
downloadchouette-core-af34cb854255f2893a27e28b11a2601d6af8a725.tar.bz2
Merge master
-rw-r--r--app/assets/images/map/lda.png (renamed from app/assets/images/map/commercial_stop_point.png)bin3561 -> 3561 bytes
-rw-r--r--app/assets/images/map/zdep.png (renamed from app/assets/images/map/quay.png)bin3407 -> 3407 bytes
-rw-r--r--app/assets/images/map/zder.pngbin0 -> 3407 bytes
-rw-r--r--app/assets/images/map/zdlp.png (renamed from app/assets/images/map/stop_place.png)bin3809 -> 3809 bytes
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/actions/index.js (renamed from app/assets/javascripts/es6_browserified/actions/index.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/components/App.js (renamed from app/assets/javascripts/es6_browserified/components/App.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/components/BSelect2.js (renamed from app/assets/javascripts/es6_browserified/components/BSelect2.js)3
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/components/Todo.js (renamed from app/assets/javascripts/es6_browserified/components/Todo.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/components/TodoList.js (renamed from app/assets/javascripts/es6_browserified/components/TodoList.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/containers/AddTodo.js (renamed from app/assets/javascripts/es6_browserified/containers/AddTodo.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/containers/VisibleTodoList.js (renamed from app/assets/javascripts/es6_browserified/containers/VisibleTodoList.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/form_helper.js (renamed from app/assets/javascripts/es6_browserified/form_helper.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/reducers/index.js (renamed from app/assets/javascripts/es6_browserified/reducers/index.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/reducers/todos.js (renamed from app/assets/javascripts/es6_browserified/reducers/todos.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/stop_points.js (renamed from app/assets/javascripts/es6_browserified/stop_points.js)0
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js130
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/App.js20
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js105
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/EditModal.js130
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPattern.js55
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPatterns.js38
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/containers/AddJourneyPattern.js28
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/containers/JourneyPatternList.js27
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/containers/Modal.js29
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/containers/Navigate.js45
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/containers/SaveJourneyPattern.js31
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/index.js37
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/reducers/index.js14
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/reducers/journeyPatterns.js87
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/reducers/modal.js33
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/reducers/pagination.js18
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/reducers/totalCount.js8
-rw-r--r--app/controllers/autocomplete_stop_areas_controller.rb26
-rw-r--r--app/controllers/journey_patterns_collections_controller.rb51
-rw-r--r--app/controllers/referentials_controller.rb29
-rw-r--r--app/models/chouette/area_type.rb56
-rw-r--r--app/models/chouette/journey_pattern.rb1
-rw-r--r--app/models/chouette/stop_area.rb28
-rw-r--r--app/views/api/v1/routes/short_description.rabl7
-rw-r--r--app/views/api/v1/stop_areas/short_description.rabl6
-rw-r--r--app/views/journey_patterns_collections/show.html.slim4
-rw-r--r--app/views/journey_patterns_collections/show.rabl3
-rw-r--r--app/views/journey_patterns_collections/update.rabl2
-rw-r--r--app/views/referential_stop_areas/_form.html.slim8
-rw-r--r--app/views/referential_stop_areas/index.html.slim3
-rw-r--r--app/views/referentials/_form.html.slim1
-rw-r--r--app/views/referentials/_reflines.html.slim15
-rw-r--r--app/views/referentials/show.html.slim3
-rw-r--r--app/views/routes/_form.html.slim2
-rw-r--r--app/views/routes/show.html.slim38
-rw-r--r--app/views/stop_areas/_form.html.slim14
-rw-r--r--app/views/stop_areas/_stop_area.html.slim19
-rw-r--r--app/views/stop_areas/index.html.slim6
-rw-r--r--config/initializers/stif.rb6
-rw-r--r--config/locales/area_types.fr.yml1
-rw-r--r--config/locales/enumerize.en.yml8
-rw-r--r--config/locales/enumerize.fr.yml8
-rw-r--r--config/locales/journey_patterns.en.yml1
-rw-r--r--config/locales/journey_patterns.fr.yml1
-rw-r--r--config/routes.rb5
-rw-r--r--db/migrate/20150312104557_set_default_value_for_data_format_in_organisation.rb19
-rw-r--r--lib/stif/reflex_synchronization.rb15
-rw-r--r--package.json3
-rw-r--r--spec/controllers/journey_patterns_collections_controller_spec.rb5
-rw-r--r--spec/factories/chouette_lines.rb4
-rw-r--r--spec/factories/chouette_stop_areas.rb2
-rw-r--r--spec/features/access_points_spec.rb28
-rw-r--r--spec/javascripts/actions_spec.js2
-rw-r--r--spec/javascripts/components_spec.js40
-rw-r--r--spec/javascripts/reducers_spec.js9
-rw-r--r--spec/javascripts/spec_helper.js1
-rw-r--r--spec/models/chouette/access_point_spec.rb92
-rw-r--r--spec/models/chouette/area_type_spec.rb53
-rw-r--r--spec/models/chouette/connection_link_spec.rb21
-rw-r--r--spec/models/chouette/stop_area_spec.rb804
-rw-r--r--spec/tasks/reflex_rake_spec.rb2
76 files changed, 1568 insertions, 722 deletions
diff --git a/app/assets/images/map/commercial_stop_point.png b/app/assets/images/map/lda.png
index 2c87dc31a..2c87dc31a 100644
--- a/app/assets/images/map/commercial_stop_point.png
+++ b/app/assets/images/map/lda.png
Binary files differ
diff --git a/app/assets/images/map/quay.png b/app/assets/images/map/zdep.png
index a2bd8e954..a2bd8e954 100644
--- a/app/assets/images/map/quay.png
+++ b/app/assets/images/map/zdep.png
Binary files differ
diff --git a/app/assets/images/map/zder.png b/app/assets/images/map/zder.png
new file mode 100644
index 000000000..a2bd8e954
--- /dev/null
+++ b/app/assets/images/map/zder.png
Binary files differ
diff --git a/app/assets/images/map/stop_place.png b/app/assets/images/map/zdlp.png
index b5058573e..b5058573e 100644
--- a/app/assets/images/map/stop_place.png
+++ b/app/assets/images/map/zdlp.png
Binary files differ
diff --git a/app/assets/javascripts/es6_browserified/actions/index.js b/app/assets/javascripts/es6_browserified/itineraries/actions/index.js
index 7d225f2f6..7d225f2f6 100644
--- a/app/assets/javascripts/es6_browserified/actions/index.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/actions/index.js
diff --git a/app/assets/javascripts/es6_browserified/components/App.js b/app/assets/javascripts/es6_browserified/itineraries/components/App.js
index 7488b0b39..7488b0b39 100644
--- a/app/assets/javascripts/es6_browserified/components/App.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/components/App.js
diff --git a/app/assets/javascripts/es6_browserified/components/BSelect2.js b/app/assets/javascripts/es6_browserified/itineraries/components/BSelect2.js
index 0bd53a083..0bf3ebf38 100644
--- a/app/assets/javascripts/es6_browserified/components/BSelect2.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/components/BSelect2.js
@@ -92,7 +92,8 @@ class BSelect2 extends React.Component{
delay: '500',
data: function(params) {
return {
- q: params.term
+ q: params.term,
+ target_type: 'zdep'
};
},
processResults: function(data, params) {
diff --git a/app/assets/javascripts/es6_browserified/components/Todo.js b/app/assets/javascripts/es6_browserified/itineraries/components/Todo.js
index f2932ab1d..f2932ab1d 100644
--- a/app/assets/javascripts/es6_browserified/components/Todo.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/components/Todo.js
diff --git a/app/assets/javascripts/es6_browserified/components/TodoList.js b/app/assets/javascripts/es6_browserified/itineraries/components/TodoList.js
index 3ea2c90e1..3ea2c90e1 100644
--- a/app/assets/javascripts/es6_browserified/components/TodoList.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/components/TodoList.js
diff --git a/app/assets/javascripts/es6_browserified/containers/AddTodo.js b/app/assets/javascripts/es6_browserified/itineraries/containers/AddTodo.js
index d0128f16d..d0128f16d 100644
--- a/app/assets/javascripts/es6_browserified/containers/AddTodo.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/containers/AddTodo.js
diff --git a/app/assets/javascripts/es6_browserified/containers/VisibleTodoList.js b/app/assets/javascripts/es6_browserified/itineraries/containers/VisibleTodoList.js
index 464d6e482..464d6e482 100644
--- a/app/assets/javascripts/es6_browserified/containers/VisibleTodoList.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/containers/VisibleTodoList.js
diff --git a/app/assets/javascripts/es6_browserified/form_helper.js b/app/assets/javascripts/es6_browserified/itineraries/form_helper.js
index d48718841..d48718841 100644
--- a/app/assets/javascripts/es6_browserified/form_helper.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/form_helper.js
diff --git a/app/assets/javascripts/es6_browserified/reducers/index.js b/app/assets/javascripts/es6_browserified/itineraries/reducers/index.js
index 381b32d8b..381b32d8b 100644
--- a/app/assets/javascripts/es6_browserified/reducers/index.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/reducers/index.js
diff --git a/app/assets/javascripts/es6_browserified/reducers/todos.js b/app/assets/javascripts/es6_browserified/itineraries/reducers/todos.js
index 215a3e2c2..215a3e2c2 100644
--- a/app/assets/javascripts/es6_browserified/reducers/todos.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/reducers/todos.js
diff --git a/app/assets/javascripts/es6_browserified/stop_points.js b/app/assets/javascripts/es6_browserified/itineraries/stop_points.js
index d5f53fb4f..d5f53fb4f 100644
--- a/app/assets/javascripts/es6_browserified/stop_points.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/stop_points.js
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js b/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js
new file mode 100644
index 000000000..0342b5df1
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js
@@ -0,0 +1,130 @@
+const actions = {
+ receiveJourneyPatterns : (json) => ({
+ type: "RECEIVE_JOURNEY_PATTERNS",
+ json
+ }),
+ loadFirstPage: (dispatch) => ({
+ type: 'LOAD_FIRST_PAGE',
+ dispatch
+ }),
+ goToPreviousPage : (dispatch, currentPage) => ({
+ type: 'GO_TO_PREVIOUS_PAGE',
+ dispatch,
+ currentPage,
+ nextPage : false
+ }),
+ goToNextPage : (dispatch, currentPage) => ({
+ type: 'GO_TO_NEXT_PAGE',
+ dispatch,
+ currentPage,
+ nextPage : true
+ }),
+ updateCheckboxValue : (e, index) => ({
+ type : 'UPDATE_CHECKBOX_VALUE',
+ id : e.currentTarget.id,
+ index
+ }),
+ openEditModal : (index, journeyPattern) => ({
+ type : 'EDIT_JOURNEYPATTERN_MODAL',
+ index,
+ journeyPattern
+ }),
+ openCreateModal : () => ({
+ type : 'CREATE_JOURNEYPATTERN_MODAL'
+ }),
+ deleteJourneyPattern : (index, journeyPattern) => ({
+ type : 'DELETE_JOURNEYPATTERN',
+ index,
+ journeyPattern
+ }),
+ closeModal : () => ({
+ type : 'CLOSE_MODAL'
+ }),
+ saveModal : (index, data) => ({
+ type: 'SAVE_MODAL',
+ data,
+ index
+ }),
+ addJourneyPattern : (index, data) => ({
+ type: 'ADD_JOURNEYPATTERN',
+ data,
+ index
+ }),
+ savePage : (dispatch, currentPage) => ({
+ type: 'SAVE_PAGE',
+ dispatch
+ }),
+ submitJourneyPattern : (dispatch, state) => {
+ let urlJSON = window.location.pathname + ".json"
+ let req = new Request(urlJSON, {
+ credentials: 'same-origin',
+ method: 'PATCH',
+ contentType: 'application/json; charset=utf-8',
+ Accept: 'application/json',
+ body: JSON.stringify(state),
+ headers: {
+ 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
+ }
+ })
+ fetch(req)
+ .then(response => response.json())
+ .then((json) => {
+ console.log('request for submit')
+ // dispatch(actions.receiveJourneyPatterns(journeyPatterns))
+ })
+ },
+ fetchJourneyPatterns : (dispatch, currentPage, nextPage) => {
+ if(currentPage == undefined){
+ currentPage = 1
+ }
+ let journeyPatterns = []
+ let page
+ switch (nextPage) {
+ case true:
+ page = currentPage + 1
+ break
+ case false:
+ if(currentPage > 1){
+ page = currentPage - 1
+ }
+ break
+ default:
+ page = currentPage
+ break
+ }
+ let str = ".json"
+ if(page > 1){
+ str = '.json?page=' + page.toString()
+ }
+ let urlJSON = window.location.pathname + str
+ let req = new Request(urlJSON, {
+ credentials: 'same-origin',
+ })
+ fetch(req)
+ .then(response => response.json())
+ .then((json) => {
+ let val
+ for (val of json){
+ for (let stop_point of val.route_short_description.stop_points){
+ stop_point.checked = false
+ val.stop_area_short_descriptions.map((element) => {
+ if(element.stop_area_short_description.id === stop_point.id){
+ stop_point.checked = true
+ }
+ })
+ }
+ journeyPatterns.push({
+ name: val.name,
+ object_id: val.object_id,
+ published_name: val.published_name,
+ registration_number: val.registration_number,
+ stop_points: val.route_short_description.stop_points,
+ deletable: false
+ })
+ }
+ dispatch(actions.receiveJourneyPatterns(journeyPatterns))
+ })
+ }
+}
+
+module.exports = actions
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/App.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/App.js
new file mode 100644
index 000000000..5c2454dac
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/App.js
@@ -0,0 +1,20 @@
+var React = require('react')
+var AddJourneyPattern = require('../containers/AddJourneyPattern')
+var Navigate = require('../containers/Navigate')
+var Modal = require('../containers/Modal')
+var SaveJourneyPattern = require('../containers/SaveJourneyPattern')
+var JourneyPatternList = require('../containers/JourneyPatternList')
+
+const App = () => (
+ <div>
+ <div className='clearfix' style={{ marginBottom: 10 }}>
+ <Navigate />
+ <AddJourneyPattern />
+ </div>
+ <JourneyPatternList />
+ <SaveJourneyPattern />
+ <Modal/>
+ </div>
+)
+
+module.exports = App
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js
new file mode 100644
index 000000000..c9142e9ab
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js
@@ -0,0 +1,105 @@
+var React = require('react')
+var Component = require('react').Component
+var PropTypes = require('react').PropTypes
+
+class CreateModal extends Component {
+ constructor(props) {
+ super(props)
+ }
+ handleSubmit(e) {
+ e.preventDefault()
+ this.props.onAddJourneyPattern((this.props.journeyPatterns.length + 1), this.refs)
+ }
+
+ render() {
+ return (
+ <div className='pull-right'>
+ <button
+ type='button'
+ className='btn btn-primary btn-sm'
+ data-toggle='modal'
+ data-target='#NewJourneyPatternModal'
+ onClick={this.props.onOpenCreateModal}
+ >
+ <span className='fa fa-plus'></span> Ajouter une mission
+ </button>
+
+ <div className={ 'modal fade ' + (this.props.modal.create ? 'in' : '') } id='NewJourneyPatternModal'>
+ <div className='modal-dialog'>
+ <div className='modal-content'>
+ <div className='modal-header clearfix'>
+ <h4>Ajouter une mission</h4>
+ </div>
+
+ <div className='modal-body'>
+ {this.props.modal.create && (
+ <form>
+ <div className='form-group'>
+ <label>Nom</label>
+ <input
+ type='text'
+ ref='name'
+ className='form-control'
+ />
+ </div>
+ <div className='row'>
+ <div className='col-lg-6 col-md-6 col-sm-6 col-xs-6'>
+ <div className='form-group'>
+ <label>Nom public</label>
+ <input
+ type='text'
+ ref='published_name'
+ className='form-control'
+ />
+ </div>
+ </div>
+ <div className='col-lg-6 col-md-6 col-sm-6 col-xs-6'>
+ <div className='form-group'>
+ <label>N° d'enregistrement</label>
+ <input
+ type='text'
+ ref='registration_number'
+ className='form-control'
+ />
+ </div>
+ </div>
+ </div>
+ </form>
+ )}
+ </div>
+
+ <div className='modal-footer'>
+ <button
+ className='btn btn-default'
+ data-dismiss='modal'
+ type='button'
+ onClick={this.props.onModalClose}
+ >
+ Annuler
+ </button>
+ <button
+ className='btn btn-danger'
+ data-dismiss='modal'
+ type='button'
+ onClick={this.handleSubmit.bind(this)}
+ >
+ Valider
+ </button>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ )
+ }
+}
+
+CreateModal.propTypes = {
+ index: PropTypes.number,
+ modal: PropTypes.object,
+ onOpenCreateModal: PropTypes.func.isRequired,
+ onModalClose: PropTypes.func.isRequired,
+ onAddJourneyPattern: PropTypes.func.isRequired
+}
+
+module.exports = CreateModal
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/EditModal.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/EditModal.js
new file mode 100644
index 000000000..560e44a26
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/EditModal.js
@@ -0,0 +1,130 @@
+var React = require('react')
+var Component = require('react').Component
+var PropTypes = require('react').PropTypes
+
+class EditModal extends Component {
+ constructor(props) {
+ super(props)
+ }
+ handleSubmit(e) {
+ e.preventDefault()
+ this.props.saveModal(this.props.modal.modalProps.index, this.refs)
+ }
+
+ render() {
+ return (
+ <div className={ 'modal fade ' + (this.props.modal.edit ? 'in' : '') } id='JourneyPatternModal'>
+ <div className='modal-dialog'>
+ <div className='modal-content'>
+ <div className='modal-header clearfix'>
+ <h4 className='pull-left'>
+ Modifier la mission
+ {this.props.modal.open && (
+ <em> "{this.props.modal.modalProps.journeyPattern.name}"</em>
+ )}
+ </h4>
+ <div className='btn-group btn-group-sm pull-right'>
+ <button
+ type='button'
+ className='btn btn-primary dropdown-toggle'
+ data-toggle='dropdown'
+ >
+ <span className='fa fa-bars'></span>
+ <span className='caret'></span>
+ </button>
+
+ <ul className='dropdown-menu'>
+ <li><a href='#'>Horaires des courses</a></li>
+ <li>
+ <a
+ href='#'
+ data-dismiss='modal'
+ onClick={(e) => {
+ e.preventDefault()
+ this.props.onDeleteJourneyPattern(this.props.modal.modalProps.index, this.props.modal.modalProps.journeyPattern)}
+ }
+ >
+ Supprimer la mission
+ </a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div className='modal-body'>
+ {this.props.modal.edit && (
+ <form>
+ <div className='form-group'>
+ <label>Nom</label>
+ <input
+ type='text'
+ ref='name'
+ className='form-control'
+ id={this.props.modal.modalProps.index}
+ defaultValue={this.props.modal.modalProps.journeyPattern.name}
+ />
+ </div>
+
+ <div className='row'>
+ <div className='col-lg-6 col-md-6 col-sm-6 col-xs-6'>
+ <div className='form-group'>
+ <label>Nom public</label>
+ <input
+ type='text'
+ ref='published_name'
+ className='form-control'
+ id={this.props.modal.modalProps.index}
+ defaultValue={this.props.modal.modalProps.journeyPattern.published_name}
+ />
+ </div>
+ </div>
+ <div className='col-lg-6 col-md-6 col-sm-6 col-xs-6'>
+ <div className='form-group'>
+ <label>N° d'enregistrement</label>
+ <input
+ type='text'
+ ref='registration_number'
+ className='form-control'
+ id={this.props.modal.modalProps.index}
+ defaultValue={this.props.modal.modalProps.journeyPattern.registration_number}
+ />
+ </div>
+ </div>
+ </div>
+
+ </form>
+ )}
+ </div>
+ <div className='modal-footer'>
+ <button
+ className='btn btn-default'
+ data-dismiss='modal'
+ type='button'
+ onClick={this.props.onModalClose}
+ >
+ Annuler
+ </button>
+ <button
+ className='btn btn-danger'
+ data-dismiss='modal'
+ type='button'
+ onClick={this.handleSubmit.bind(this)}
+ >
+ Valider
+ </button>
+ </div>
+ </div>
+ </div>
+ </div>
+ )
+ }
+}
+
+EditModal.propTypes = {
+ index: PropTypes.number,
+ modal: PropTypes.object,
+ onModalClose: PropTypes.func.isRequired,
+ saveModal: PropTypes.func.isRequired,
+ onDeleteJourneyPattern: PropTypes.func.isRequired
+}
+
+module.exports = EditModal
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPattern.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPattern.js
new file mode 100644
index 000000000..78e2e6d9c
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPattern.js
@@ -0,0 +1,55 @@
+var React = require('react')
+var PropTypes = require('react').PropTypes
+
+const JourneyPattern = (props) => {
+ return (
+ <div className={'list-group-item ' + (props.value.deletable ? 'disabled' : '') + (props.value.object_id ? '' : 'to_record')}>
+ <div style={{display: 'inline-block', verticalAlign: 'top', width: '40%'}}>
+ <p className='small'><strong>Index: </strong>{props.index}</p>
+ <p className='small'><strong>Name: </strong>{props.value.name}</p>
+ </div>
+
+ <div style={{display: 'inline-block', verticalAlign: 'top', width: '40%'}}>
+ <p className='small'><strong>ObjectID: </strong>{props.value.object_id}</p>
+ <p className='small'><strong>Published name: </strong>{props.value.published_name}</p>
+ </div>
+
+ <div className='clearfix' style={{display: 'inline-block', verticalAlign: 'top', width: '20%'}}>
+ <button className={(props.value.deletable ? 'disabled' : '') + ' btn btn-xs btn-danger pull-right'} onClick={props.onOpenEditModal} data-toggle='modal' data-target='#JourneyPatternModal'>
+ <span className='fa fa-pencil'></span>
+ </button>
+ </div>
+
+ <p className='small'><strong>Stop points: </strong></p>
+ <ul className='list-group'>
+ {props.value.stop_points.map((stopPoint, i) =>
+ <li
+ key={ i }
+ className='list-group-item clearfix'
+ >
+ <span className='label label-default' style={{marginRight: 5}}>{stopPoint.id}</span>
+ <span>{stopPoint.name}</span>
+ <span className='pull-right'>
+ <input
+ onChange = {(e) => props.onCheckboxChange(e)}
+ type='checkbox'
+ id={stopPoint.id}
+ checked={stopPoint.checked}
+ disabled={props.value.deletable ? 'disabled' : ''}
+ ></input>
+ </span>
+ </li>
+ )}
+ </ul>
+ </div>
+ )
+}
+
+JourneyPattern.propTypes = {
+ value: PropTypes.object,
+ index: PropTypes.number,
+ onCheckboxChange: PropTypes.func.isRequired,
+ onOpenEditModal: PropTypes.func.isRequired
+}
+
+module.exports = JourneyPattern
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPatterns.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPatterns.js
new file mode 100644
index 000000000..160631697
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPatterns.js
@@ -0,0 +1,38 @@
+var React = require('react')
+var Component = require('react').Component
+var PropTypes = require('react').PropTypes
+var JourneyPattern = require('./JourneyPattern')
+
+class JourneyPatterns extends Component{
+ constructor(props){
+ super(props)
+ }
+
+ componentDidMount() {
+ this.props.onLoadFirstPage()
+ }
+
+ render() {
+ return (
+ <div className='list-group'>
+ {this.props.journeyPatterns.map((journeyPattern, index) =>
+ <JourneyPattern
+ value={ journeyPattern }
+ key={ index }
+ onCheckboxChange= {(e) => this.props.onCheckboxChange(e, index)}
+ onOpenEditModal= {() => this.props.onOpenEditModal(index, journeyPattern)}
+ />
+ )}
+ </div>
+ )
+ }
+}
+
+JourneyPatterns.propTypes = {
+ journeyPatterns: PropTypes.array.isRequired,
+ onCheckboxChange: PropTypes.func.isRequired,
+ onLoadFirstPage: PropTypes.func.isRequired,
+ onOpenEditModal: PropTypes.func.isRequired
+}
+
+module.exports = JourneyPatterns
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/containers/AddJourneyPattern.js b/app/assets/javascripts/es6_browserified/journey_patterns/containers/AddJourneyPattern.js
new file mode 100644
index 000000000..a4c5c09c9
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/containers/AddJourneyPattern.js
@@ -0,0 +1,28 @@
+var actions = require('../actions')
+var connect = require('react-redux').connect
+var CreateModal = require('../components/CreateModal')
+
+const mapStateToProps = (state) => {
+ return {
+ modal: state.modal,
+ journeyPatterns: state.journeyPatterns
+ }
+}
+
+const mapDispatchToProps = (dispatch) => {
+ return {
+ onModalClose: () =>{
+ dispatch(actions.closeModal())
+ },
+ onAddJourneyPattern: (index, data) =>{
+ dispatch(actions.addJourneyPattern(index, data))
+ },
+ onOpenCreateModal: () =>{
+ dispatch(actions.openCreateModal())
+ }
+ }
+}
+
+const AddJourneyPattern = connect(mapStateToProps, mapDispatchToProps)(CreateModal)
+
+module.exports = AddJourneyPattern
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/containers/JourneyPatternList.js b/app/assets/javascripts/es6_browserified/journey_patterns/containers/JourneyPatternList.js
new file mode 100644
index 000000000..73dc6a1c7
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/containers/JourneyPatternList.js
@@ -0,0 +1,27 @@
+var actions = require('../actions')
+var connect = require('react-redux').connect
+var JourneyPatterns = require('../components/JourneyPatterns')
+
+const mapStateToProps = (state) => {
+ return {
+ journeyPatterns: state.journeyPatterns
+ }
+}
+
+const mapDispatchToProps = (dispatch) => {
+ return {
+ onLoadFirstPage: () =>{
+ dispatch(actions.loadFirstPage(dispatch))
+ },
+ onCheckboxChange: (e, index) =>{
+ dispatch(actions.updateCheckboxValue(e, index))
+ },
+ onOpenEditModal: (index, journeyPattern) =>{
+ dispatch(actions.openEditModal(index, journeyPattern))
+ }
+ }
+}
+
+const JourneyPatternList = connect(mapStateToProps, mapDispatchToProps)(JourneyPatterns)
+
+module.exports = JourneyPatternList
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/containers/Modal.js b/app/assets/javascripts/es6_browserified/journey_patterns/containers/Modal.js
new file mode 100644
index 000000000..553d69119
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/containers/Modal.js
@@ -0,0 +1,29 @@
+var connect = require('react-redux').connect
+var EditModal = require('../components/EditModal')
+var CreateModal = require('../components/CreateModal')
+var actions = require('../actions')
+
+const mapStateToProps = (state) => {
+ return {
+ modal: state.modal,
+ journeyPattern: state.journeyPattern
+ }
+}
+
+const mapDispatchToProps = (dispatch) => {
+ return {
+ onModalClose: () =>{
+ dispatch(actions.closeModal())
+ },
+ saveModal: (index, data) =>{
+ dispatch(actions.saveModal(index, data))
+ },
+ onDeleteJourneyPattern: (index, journeyPattern) =>{
+ dispatch(actions.deleteJourneyPattern(index, journeyPattern))
+ }
+ }
+}
+
+const ModalContainer = connect(mapStateToProps, mapDispatchToProps)(EditModal, CreateModal)
+
+module.exports = ModalContainer
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/containers/Navigate.js b/app/assets/javascripts/es6_browserified/journey_patterns/containers/Navigate.js
new file mode 100644
index 000000000..c8e681edb
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/containers/Navigate.js
@@ -0,0 +1,45 @@
+var React = require('react')
+var connect = require('react-redux').connect
+var actions = require('../actions')
+
+let Navigate = ({ dispatch, journeyPatterns, page, length }) => {
+ let firstPage = 1
+ let lastPage = Math.ceil(length / 12)
+
+ return (
+ <form className='btn-group btn-group-sm' onSubmit={e => {
+ e.preventDefault()
+ }}>
+ <button
+ onClick={e => {
+ e.preventDefault()
+ dispatch(actions.goToPreviousPage(dispatch, page))
+ }}
+ type="submit"
+ className={ (page == firstPage ? "hidden" : "") + " btn btn-default" }>
+ <span className="fa fa-chevron-left"></span>
+ </button>
+ <button
+ onClick={e => {
+ e.preventDefault()
+ dispatch(actions.goToNextPage(dispatch, page))
+ }}
+ type="submit"
+ className={ (page == lastPage ? "hidden" : "") + " btn btn-default" }>
+ <span className="fa fa-chevron-right"></span>
+ </button>
+ </form>
+ )
+}
+
+const mapStateToProps = (state) => {
+ return {
+ journeyPatterns: state.journeyPatterns,
+ page: state.pagination,
+ length: state.totalCount
+ }
+}
+
+Navigate = connect(mapStateToProps)(Navigate)
+
+module.exports = Navigate
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/containers/SaveJourneyPattern.js b/app/assets/javascripts/es6_browserified/journey_patterns/containers/SaveJourneyPattern.js
new file mode 100644
index 000000000..1fdc385a5
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/containers/SaveJourneyPattern.js
@@ -0,0 +1,31 @@
+var React = require('react')
+var connect = require('react-redux').connect
+var actions = require('../actions')
+
+let SaveJourneyPattern = ({ dispatch, journeyPatterns, page }) => {
+ return (
+ <form className='clearfix' onSubmit={e => {e.preventDefault()}}>
+ <button
+ className='btn btn-danger pull-right'
+ type='submit'
+ onClick={e => {
+ e.preventDefault()
+ dispatch(actions.savePage(dispatch, page))
+ }}
+ >
+ Valider
+ </button>
+ </form>
+ )
+}
+
+const mapStateToProps = (state) => {
+ return {
+ journeyPatterns: state.journeyPatterns,
+ page: state.pagination
+ }
+}
+
+SaveJourneyPattern = connect(mapStateToProps)(SaveJourneyPattern)
+
+module.exports = SaveJourneyPattern
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/index.js b/app/assets/javascripts/es6_browserified/journey_patterns/index.js
new file mode 100644
index 000000000..aab21fb0b
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/index.js
@@ -0,0 +1,37 @@
+var React = require('react')
+var render = require('react-dom').render
+var Provider = require('react-redux').Provider
+var createStore = require('redux').createStore
+var journeyPatternsApp = require('./reducers')
+var App = require('./components/App')
+
+// logger, DO NOT REMOVE
+// var applyMiddleware = require('redux').applyMiddleware
+// var createLogger = require('redux-logger')
+// var thunkMiddleware = require('redux-thunk').default
+// var promise = require('redux-promise')
+
+var initialState = {
+ journeyPatterns: [],
+ pagination: 1,
+ totalCount: window.journeyPatternLength,
+ modal: {
+ edit: false,
+ create: false,
+ modalProps: {}
+ }
+}
+// const loggerMiddleware = createLogger()
+
+let store = createStore(
+ journeyPatternsApp,
+ initialState
+ // applyMiddleware(thunkMiddleware, promise, loggerMiddleware)
+)
+
+render(
+ <Provider store={store}>
+ <App />
+ </Provider>,
+ document.getElementById('journey_patterns')
+)
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/index.js b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/index.js
new file mode 100644
index 000000000..71ff8b6f5
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/index.js
@@ -0,0 +1,14 @@
+var combineReducers = require('redux').combineReducers
+var journeyPatterns = require('./journeyPatterns')
+var pagination = require('./pagination')
+var totalCount = require('./totalCount')
+var modal = require('./modal')
+
+const journeyPatternsApp = combineReducers({
+ journeyPatterns,
+ pagination,
+ totalCount,
+ modal
+})
+
+module.exports = journeyPatternsApp
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/journeyPatterns.js b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/journeyPatterns.js
new file mode 100644
index 000000000..68346b242
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/journeyPatterns.js
@@ -0,0 +1,87 @@
+var actions = require("../actions")
+
+const journeyPattern = (state = {}, action) => {
+ switch (action.type) {
+ case 'ADD_JOURNEYPATTERN':
+ const stop_points = state[0].stop_points.map((s)=>{
+ s.checked = false
+ return s
+ })
+ return {
+ name: action.data.name.value,
+ published_name: action.data.published_name.value,
+ registration_number: action.data.registration_number.value,
+ stop_points: stop_points,
+ deletable: false
+ }
+ case 'UPDATE_CHECKBOX_VALUE':
+ var updatedStopPoints = state.stop_points.map((s) => {
+ if (s.id.toString() == action.id) {
+ return Object.assign({}, s, {checked : !s.checked})
+ }else {
+ return s
+ }
+ })
+ return Object.assign({}, state, {stop_points: updatedStopPoints})
+ default:
+ return state
+ }
+}
+
+const journeyPatterns = (state = {}, action) => {
+ switch (action.type) {
+ case 'RECEIVE_JOURNEY_PATTERNS':
+ return [...action.json]
+ case 'LOAD_FIRST_PAGE':
+ actions.fetchJourneyPatterns(action.dispatch)
+ case 'GO_TO_PREVIOUS_PAGE':
+ if(action.currentPage > 1){
+ actions.fetchJourneyPatterns(action.dispatch, action.currentPage, action.nextPage)
+ }
+ return state
+ case 'GO_TO_NEXT_PAGE':
+ if (window.journeyPatternLength - (action.currentPage * 12) > 0){
+ actions.fetchJourneyPatterns(action.dispatch, action.currentPage, action.nextPage)
+ }
+ return state
+ case 'UPDATE_CHECKBOX_VALUE':
+ return state.map((j, i) =>{
+ if(i == action.index) {
+ return journeyPattern(j, action)
+ } else {
+ return j
+ }
+ })
+ case 'DELETE_JOURNEYPATTERN':
+ return state.map((j, i) =>{
+ if(i == action.index) {
+ return Object.assign({}, j, {deletable: true})
+ } else {
+ return j
+ }
+ })
+ case 'ADD_JOURNEYPATTERN':
+ return [
+ ...state,
+ journeyPattern(state, action)
+ ]
+ case 'SAVE_MODAL':
+ return state.map((j, i) =>{
+ if(i == action.index) {
+ return Object.assign({}, j, {
+ name: action.data.name.value,
+ published_name: action.data.published_name.value,
+ registration_number: action.data.registration_number.value
+ })
+ } else {
+ return j
+ }
+ })
+ case 'SAVE_PAGE':
+ actions.submitJourneyPattern(action.dispatch, state)
+ default:
+ return state
+ }
+}
+
+module.exports = journeyPatterns
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/modal.js b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/modal.js
new file mode 100644
index 000000000..16f89be3e
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/modal.js
@@ -0,0 +1,33 @@
+const modal = (state = {}, action) => {
+ switch (action.type) {
+ case 'EDIT_JOURNEYPATTERN_MODAL':
+ return {
+ edit: true,
+ create: false,
+ modalProps: {
+ index: action.index,
+ journeyPattern: action.journeyPattern
+ }
+ }
+ case 'CREATE_JOURNEYPATTERN_MODAL':
+ return {
+ create: true,
+ edit: false,
+ modalProps: { index: action.index }
+ }
+ case 'DELETE_JOURNEYPATTERN':
+ return Object.assign({}, state, { edit: false, create: false })
+ case 'SAVE_MODAL':
+ return Object.assign({}, state, { edit: false, create: false })
+ case 'CLOSE_MODAL':
+ return {
+ edit: false,
+ create: false,
+ modalProps: {}
+ }
+ default:
+ return state
+ }
+}
+
+module.exports = modal
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/pagination.js b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/pagination.js
new file mode 100644
index 000000000..0103fe248
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/pagination.js
@@ -0,0 +1,18 @@
+const pagination = (state = 0, action) => {
+ switch (action.type) {
+ case 'GO_TO_PREVIOUS_PAGE':
+ if (action.currentPage > 1){
+ return state - 1
+ }
+ return state
+ case 'GO_TO_NEXT_PAGE':
+ if (window.journeyPatternLength - (action.currentPage * 12) > 0){
+ return state + 1
+ }
+ return state
+ default:
+ return state
+ }
+}
+
+module.exports = pagination
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/totalCount.js b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/totalCount.js
new file mode 100644
index 000000000..830de28aa
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/totalCount.js
@@ -0,0 +1,8 @@
+const totalCount = (state = 0, action) => {
+ switch (action.type) {
+ default:
+ return state
+ }
+}
+
+module.exports = totalCount
diff --git a/app/controllers/autocomplete_stop_areas_controller.rb b/app/controllers/autocomplete_stop_areas_controller.rb
index b653e6cb5..cd7123efd 100644
--- a/app/controllers/autocomplete_stop_areas_controller.rb
+++ b/app/controllers/autocomplete_stop_areas_controller.rb
@@ -14,25 +14,20 @@ class AutocompleteStopAreasController < InheritedResources::Base
protected
def collection
- result = []
- if physical_filter?
- result = referential.stop_areas.physical
- elsif itl_exclude_filter?
- result = Chouette::StopArea.where("area_type != 'ITL'")
- elsif target_type? && relation_parent?
- result = Chouette::StopArea.new( :area_type => params[ :target_type ] ).possible_parents
- elsif target_type? && relation_children?
- result = Chouette::StopArea.new( :area_type => params[ :target_type ] ).possible_children
- else
- result = referential.stop_areas
+ scope = referential.stop_areas
+ scope = scope.physical if physical_filter?
+ if target_type?
+ scope = scope.where(area_type: params[:target_type])
+ scope = scope.possible_parents if relation_parent?
+ scope = scope.possible_parents if relation_children?
end
args = [].tap{|arg| 3.times{arg << "%#{params[:q]}%"}}
- @stop_areas = result.where("name ILIKE ? OR registration_number ILIKE ? OR objectid ILIKE ?", *args).limit(50)
+ @stop_areas = scope.where("name ILIKE ? OR registration_number ILIKE ? OR objectid ILIKE ?", *args).limit(50)
@stop_areas
end
def target_type?
- params.has_key?( :target_type) && params.has_key?( :relation )
+ params.has_key?( :target_type)
end
def relation_parent?
@@ -43,12 +38,7 @@ class AutocompleteStopAreasController < InheritedResources::Base
params[ :relation ] == "children"
end
- def itl_exclude_filter?
- params[:filter] == "itl_excluded"
- end
-
def physical_filter?
params[:filter] == "physical"
end
-
end
diff --git a/app/controllers/journey_patterns_collections_controller.rb b/app/controllers/journey_patterns_collections_controller.rb
new file mode 100644
index 000000000..39355932e
--- /dev/null
+++ b/app/controllers/journey_patterns_collections_controller.rb
@@ -0,0 +1,51 @@
+class JourneyPatternsCollectionsController < ChouetteController
+ respond_to :html
+ respond_to :json
+
+ belongs_to :referential do
+ belongs_to :line, :parent_class => Chouette::Line do
+ belongs_to :route, :parent_class => Chouette::Route
+ end
+ end
+ alias_method :route, :parent
+
+ def show
+ journey_patterns_state
+ end
+
+ def update
+ state = JSON.parse request.raw_post
+ state.each do |item|
+ journey_pattern = journey_pattern_by_objectid(item['object_id'])
+ journey_pattern_update_stop_points(journey_pattern, item['stop_points']) if journey_pattern
+ end
+
+ journey_patterns_state
+ end
+
+ protected
+
+ def journey_pattern_update_stop_points journey_pattern, stop_points
+ stop_points.each do |sp|
+ stop_id = sp['id']
+ exist = journey_pattern.stop_area_ids.include?(stop_id)
+ next if exist && sp['checked']
+
+ stop_point = route.stop_points.find_by(stop_area_id: stop_id)
+ if sp['checked'] && !exist
+ journey_pattern.stop_points << stop_point
+ else
+ journey_pattern.stop_points.delete(stop_point)
+ end
+ end
+ end
+
+ def journey_patterns_state
+ @q = route.journey_patterns.includes(:stop_points)
+ @journey_patterns ||= @q.paginate(:page => params[:page]).order(:name)
+ end
+
+ def journey_pattern_by_objectid objectid
+ Chouette::JourneyPattern.find_by(objectid: objectid)
+ end
+end
diff --git a/app/controllers/referentials_controller.rb b/app/controllers/referentials_controller.rb
index 937fd0b76..23eb6263d 100644
--- a/app/controllers/referentials_controller.rb
+++ b/app/controllers/referentials_controller.rb
@@ -31,6 +31,8 @@ class ReferentialsController < BreadcrumbController
}
format.html { build_breadcrumb :show}
end
+ @reflines = lines_collection.paginate(page: params[:page], per_page: 10)
+ # resource.lines.paginate(page: params[:page], per_page: 10)
end
def edit
@@ -74,6 +76,26 @@ class ReferentialsController < BreadcrumbController
@referentials ||= current_organisation.referentials.order(:name)
end
+ def lines_collection
+ @q = resource.lines.search(params[:q])
+
+ if sort_column && sort_direction
+ @reflines ||=
+ begin
+ reflines = @q.result(distinct: true).order(sort_column + ' ' + sort_direction)
+ reflines = reflines.paginate(page: params[:page], per_page: 10)
+ reflines
+ end
+ else
+ @reflines ||=
+ begin
+ reflines = @q.result(distinct: true).order(:name)
+ reflines = reflines.paginate(page: params[:page], per_page: 10)
+ reflines
+ end
+ end
+ end
+
def build_resource
super.tap do |referential|
referential.user_id = current_user.id
@@ -87,6 +109,13 @@ class ReferentialsController < BreadcrumbController
end
private
+ def sort_column
+ resource.lines.include?(params[:sort]) ? params[:sort] : 'name'
+ end
+ def sort_direction
+ %w[asc desc].include?(params[:direction]) ? params[:direction] : 'asc'
+ end
+
def check_policy
authorize resource
end
diff --git a/app/models/chouette/area_type.rb b/app/models/chouette/area_type.rb
deleted file mode 100644
index af614dc55..000000000
--- a/app/models/chouette/area_type.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-class Chouette::AreaType < ActiveSupport::StringInquirer
-
- def initialize(text_code, numerical_code)
- super text_code.to_s
- @numerical_code = numerical_code
- end
-
- def self.new(text_code, numerical_code = nil)
- if text_code and numerical_code
- super
- elsif self === text_code
- text_code
- else
- if Fixnum === text_code
- text_code, numerical_code = definitions.rassoc(text_code)
- else
- text_code, numerical_code = definitions.assoc(text_code.to_s)
- end
-
- super text_code, numerical_code
- end
- end
-
- def to_i
- @numerical_code
- end
-
- def inspect
- "#{to_s}/#{to_i}"
- end
-
- def name
- if (to_s == 'itl')
- to_s.upcase
- else
- camelize
- end
- end
-
- @@definitions = [
- ["boarding_position", 0],
- ["quay", 1],
- ["commercial_stop_point", 2],
- ["stop_place", 3],
- ["itl", 4]
- ]
- cattr_reader :definitions
-
- @@all = nil
- def self.all
- @@all ||= definitions.collect do |text_code, numerical_code|
- new(text_code, numerical_code)
- end
- end
-
-end
diff --git a/app/models/chouette/journey_pattern.rb b/app/models/chouette/journey_pattern.rb
index 9b2b2a9da..75e1a4a14 100644
--- a/app/models/chouette/journey_pattern.rb
+++ b/app/models/chouette/journey_pattern.rb
@@ -7,6 +7,7 @@ class Chouette::JourneyPattern < Chouette::TridentActiveRecord
has_many :vehicle_journeys, :dependent => :destroy
has_many :vehicle_journey_at_stops, :through => :vehicle_journeys
has_and_belongs_to_many :stop_points, -> { order("stop_points.position") }, :before_add => :vjas_add, :before_remove => :vjas_remove, :after_add => :shortcuts_update_for_add, :after_remove => :shortcuts_update_for_remove
+ has_many :stop_areas, through: :stop_points
has_many :journey_pattern_sections
has_many :route_sections, through: :journey_pattern_sections, dependent: :destroy
diff --git a/app/models/chouette/stop_area.rb b/app/models/chouette/stop_area.rb
index 50fe18f64..cba43b3ff 100644
--- a/app/models/chouette/stop_area.rb
+++ b/app/models/chouette/stop_area.rb
@@ -7,6 +7,10 @@ class Chouette::StopArea < Chouette::ActiveRecord
include Geokit::Mappable
include ProjectionFields
include StopAreaRestrictions
+
+ extend Enumerize
+ enumerize :area_type, in: %i(zdep zder zdlp zdlr lda)
+
def self.model_name
ActiveModel::Name.new self, Chouette, self.name.demodulize
end
@@ -105,7 +109,6 @@ class Chouette::StopArea < Chouette::ActiveRecord
when "Quay" then []
when "CommercialStopPoint" then Chouette::StopArea.where(:area_type => ['Quay', 'BoardingPosition']) - [self]
when "StopPlace" then Chouette::StopArea.where(:area_type => ['StopPlace', 'CommercialStopPoint']) - [self]
- when "ITL" then Chouette::StopArea.where(:area_type => ['Quay', 'BoardingPosition', 'StopPlace', 'CommercialStopPoint'])
end
end
@@ -124,15 +127,11 @@ class Chouette::StopArea < Chouette::ActiveRecord
end
def lines
- if (area_type == 'CommercialStopPoint')
- self.children.collect(&:stop_points).flatten.collect(&:route).flatten.collect(&:line).flatten.uniq
- else
- self.stop_points.collect(&:route).flatten.collect(&:line).flatten.uniq
- end
+ []
end
def routes
- self.stop_points.collect(&:route).flatten.uniq
+ []
end
def self.commercial
@@ -147,9 +146,6 @@ class Chouette::StopArea < Chouette::ActiveRecord
where :area_type => [ "BoardingPosition", "Quay" ]
end
- def self.itl
- where :area_type => "ITL"
- end
def to_lat_lng
Geokit::LatLng.new(latitude, longitude) if latitude and longitude
@@ -210,21 +206,11 @@ class Chouette::StopArea < Chouette::ActiveRecord
end
def stop_area_type
- area_type && Chouette::AreaType.new(area_type.underscore)
+ area_type ? area_type : " "
end
def stop_area_type=(stop_area_type)
self.area_type = (stop_area_type ? stop_area_type.camelcase : nil)
- if self.area_type == 'Itl'
- self.area_type = 'ITL'
- end
- end
-
- @@stop_area_types = nil
- def self.stop_area_types
- @@stop_area_types ||= Chouette::AreaType.all.select do |stop_area_type|
- stop_area_type.to_i >= 0
- end
end
def children_ids=(children_ids)
diff --git a/app/views/api/v1/routes/short_description.rabl b/app/views/api/v1/routes/short_description.rabl
index ae149167d..900096ac5 100644
--- a/app/views/api/v1/routes/short_description.rabl
+++ b/app/views/api/v1/routes/short_description.rabl
@@ -5,3 +5,10 @@ extends "api/v1/trident_objects/short_description"
attributes attr, :unless => lambda { |m| m.send( attr).nil?}
end
+child :stop_points => :stop_points do |stop_points|
+ node do |stop_point|
+ partial("api/v1/stop_areas/short_description", :object => stop_point.stop_area).merge(position: stop_point.position)
+ end
+end
+
+
diff --git a/app/views/api/v1/stop_areas/short_description.rabl b/app/views/api/v1/stop_areas/short_description.rabl
index 73627c5a1..fb0213510 100644
--- a/app/views/api/v1/stop_areas/short_description.rabl
+++ b/app/views/api/v1/stop_areas/short_description.rabl
@@ -1,10 +1,10 @@
object @stop_area
-extends "api/v1/trident_objects/short_description"
+extends "api/v1/trident_objects/short_description"
-[ :name, :area_type, :longitude, :latitude, :long_lat_type].each do |attr|
+[ :id, :name, :area_type, :longitude, :latitude, :long_lat_type].each do |attr|
attributes attr, :unless => lambda { |m| m.send( attr).nil?}
end
node(:parent_object_id) do |stop_area|
- stop_area.parent.objectid
+ stop_area.parent.objectid
end unless root_object.parent.nil?
diff --git a/app/views/journey_patterns_collections/show.html.slim b/app/views/journey_patterns_collections/show.html.slim
new file mode 100644
index 000000000..7b6f7ae7a
--- /dev/null
+++ b/app/views/journey_patterns_collections/show.html.slim
@@ -0,0 +1,4 @@
+#journey_patterns
+= javascript_tag do
+ | window.journeyPatternLength = #{@journey_patterns.total_entries()}
+= javascript_include_tag 'es6_browserified/journey_patterns/index.js'
diff --git a/app/views/journey_patterns_collections/show.rabl b/app/views/journey_patterns_collections/show.rabl
new file mode 100644
index 000000000..c241a9c0e
--- /dev/null
+++ b/app/views/journey_patterns_collections/show.rabl
@@ -0,0 +1,3 @@
+collection @journey_patterns
+extends "api/v1/journey_patterns/show"
+
diff --git a/app/views/journey_patterns_collections/update.rabl b/app/views/journey_patterns_collections/update.rabl
new file mode 100644
index 000000000..13ced5655
--- /dev/null
+++ b/app/views/journey_patterns_collections/update.rabl
@@ -0,0 +1,2 @@
+collection @journey_patterns
+extends "api/v1/journey_patterns/show"
diff --git a/app/views/referential_stop_areas/_form.html.slim b/app/views/referential_stop_areas/_form.html.slim
index 5a27abcb5..50f5d4aaf 100644
--- a/app/views/referential_stop_areas/_form.html.slim
+++ b/app/views/referential_stop_areas/_form.html.slim
@@ -7,8 +7,8 @@
= form.inputs do
= form.input :id, as: :hidden
= form.input :name, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.name")}
- = form.input :stop_area_type, as: :select, :input_html => { :disabled => !@stop_area.new_record? }, :collection => Chouette::StopArea.stop_area_types, :include_blank => false, :member_label => Proc.new { |stop_area_type| t("area_types.label.#{stop_area_type}") }
-
+ = form.input :stop_area_type, as: :select, :input_html => { :disabled => !@stop_area.new_record? }, :collection => Chouette::StopArea.area_type.options, :include_blank => false }
+
.location_info
h3 = t("stop_areas.stop_area.localisation")
#prefetch
@@ -26,7 +26,7 @@
.stop_areas.stop_area.general_info
h3 = t("stop_areas.stop_area.general")
-
+
= form.inputs do
= form.input :objectid, :required => !@stop_area.new_record?, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.objectid")}
= form.input :registration_number, required: format_restriction_for_locales(@referential) == '.hub', :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.registration_number")}
@@ -149,4 +149,4 @@ javascript:
$('input[name="stop_area[city_name]"]').val(datum.city);
})
- }); \ No newline at end of file
+ });
diff --git a/app/views/referential_stop_areas/index.html.slim b/app/views/referential_stop_areas/index.html.slim
index 937131a37..1cbe1945f 100644
--- a/app/views/referential_stop_areas/index.html.slim
+++ b/app/views/referential_stop_areas/index.html.slim
@@ -5,7 +5,6 @@
.panel-heading
.input-group.col-md-9.col-sm-9
= f.text_field :name_or_objectid_cont, placeholder: t('.name_or_objectid'), class: 'form-control'
-
.input-group-btn
button.btn.btn-primary#search-btn type="submit"
span.fa.fa-search
@@ -20,9 +19,9 @@
.col-sm-3
= f.text_field :zip_code_cont, placeholder: "#{t('.zip_code')}", class: 'form-control typeahead', style: 'width: 100%'
.col-sm-3
+ = f.select(:area_type_cont, Chouette::StopArea.area_type.options, { include_blank: '' }, { class: 'form-control', style: 'width: 100%', 'data-select2ed': 'true', 'data-select2ed-placeholder': t(".area_type") })
= f.text_field :city_name_cont, placeholder: "#{t('.city_name')}", class: 'form-control typeahead', style: 'width: 100%'
.col-sm-3
- = f.select(:area_type_cont, options_from_collection_for_select(Chouette::StopArea.stop_area_types, 'name', Proc.new { |stop_area_type| t("area_types.label.#{stop_area_type}") } ), { include_blank: '' }, { class: 'form-control', style: 'width: 100%', 'data-select2ed': 'true', 'data-select2ed-placeholder': t(".area_type") })
#stop_areas
= render 'stop_areas'
diff --git a/app/views/referentials/_form.html.slim b/app/views/referentials/_form.html.slim
index 9fb6c6ced..5b0c0d3c3 100644
--- a/app/views/referentials/_form.html.slim
+++ b/app/views/referentials/_form.html.slim
@@ -71,7 +71,6 @@
.alert.alert-danger
- @referential.errors[:metadatas].each do |msg|
p.small = "- #{msg}"
-
= form.simple_fields_for :metadatas do |subform|
= subform.simple_fields_for :periods do |period_form|
.row
diff --git a/app/views/referentials/_reflines.html.slim b/app/views/referentials/_reflines.html.slim
new file mode 100644
index 000000000..c0f0e03b7
--- /dev/null
+++ b/app/views/referentials/_reflines.html.slim
@@ -0,0 +1,15 @@
+- if @reflines && @reflines.any?
+ p
+ strong Lignes :
+
+ = table_builder @reflines,
+ { 'Oid' => Proc.new { |n| n.objectid.local_id }, @reflines.human_attribute_name(:id) => 'id',
+ @reflines.human_attribute_name(:number) => 'number', @reflines.human_attribute_name(:name) => 'name', @reflines.human_attribute_name(:network) => Proc.new { |n| n.try(:network).try(:name) }, @reflines.human_attribute_name(:company) => Proc.new { |n| n.try(:company).try(:name) } },
+ [],
+ 'table table-bordered'
+
+ .text-center
+ = will_paginate @reflines, container: false, renderer: BootstrapPagination::Rails
+
+- else
+ = replacement_msg t('referential_lines.search_no_results')
diff --git a/app/views/referentials/show.html.slim b/app/views/referentials/show.html.slim
index e969d3b93..4826f9040 100644
--- a/app/views/referentials/show.html.slim
+++ b/app/views/referentials/show.html.slim
@@ -34,6 +34,9 @@ h2
=> l period.begin
=> Referential.human_attribute_name("end_validity_period")
= l period.end
+
+ #reflines
+ = render partial: 'reflines'
/ - if @referential.api_keys.present?
/ h3.api_keys = t('.api_keys')
diff --git a/app/views/routes/_form.html.slim b/app/views/routes/_form.html.slim
index 9893e4ed7..ae07d41de 100644
--- a/app/views/routes/_form.html.slim
+++ b/app/views/routes/_form.html.slim
@@ -29,4 +29,4 @@
| window.itinerary_stop = "#{URI.escape(route_json_for_edit(@route))}"
/ StopPoints Reactux component
-= javascript_include_tag 'es6_browserified/stop_points.js'
+= javascript_include_tag 'es6_browserified/itineraries/stop_points.js'
diff --git a/app/views/routes/show.html.slim b/app/views/routes/show.html.slim
index cfd71e16a..3f0e22006 100644
--- a/app/views/routes/show.html.slim
+++ b/app/views/routes/show.html.slim
@@ -59,19 +59,36 @@ p.after_map
div style='display: table-cell;vertical-align: middle;'
div style='display: inline-block;width: 10%;vertical-align: middle;text-align: right;'
span.label.label-default style='margin-right: 10px;'
- = "#{point.stop_area.id}"
+ = "#{point.stop_area.user_objectid}"
div style='display: inline-block;width: 90%;vertical-align: middle;'
= linktxt
-
-/ .panel.panel-default
-/ .panel-heading
-/ h4.panel-title
-/ strong = t('.journey_patterns')
-/
-/ .panel-body
-/ .journey_patterns.paginated_content
-/ = paginated_content( @route.journey_patterns, "journey_patterns/journey_pattern")
+.panel.panel-default#journey_patterns
+ .panel-heading
+ h4.panel-title
+ strong = t('.journey_patterns')
+
+ .list-group
+ - @route.journey_patterns.each do |journey_pattern|
+ .list-group-item.clearfix title="#{t('journey_patterns.journey_pattern.stop_count', count: journey_pattern.stop_points.count, route_count: @route.stop_points.count)} | #{t('journey_patterns.journey_pattern.vehicle_journeys_count', count: journey_pattern.vehicle_journeys.count)}"
+ span.label.label-default style='margin-right: 10px;' = journey_pattern.objectid.local_id
+ strong = "#{journey_name(journey_pattern)} "
+
+ - unless journey_pattern.stop_points.empty?
+ em.small
+ = t('journey_patterns.journey_pattern.from_to', departure: journey_pattern.stop_points.first.stop_area.name, arrival: journey_pattern.stop_points.last.stop_area.name)
+
+ .btn-group.btn-group-xs.pull-right
+ .btn.btn-primary.dropdown-toggle data-toggle='dropdown'
+ span.fa.fa-bars
+ span.caret
+ ul.dropdown-menu
+ li = link_to 'Voir', [@referential, @line, @route, journey_pattern], title: "#{Chouette::JourneyPattern.model_name.human.capitalize} #{journey_name(journey_pattern)}"
+ li = link_to 'Supprimer', referential_line_route_journey_pattern_path(@referential, @line, @route, journey_pattern), method: :delete, data: {confirm: t('journey_patterns.actions.destroy_confirm')}
+
+ / .panel-body
+ / .journey_patterns.paginated_content
+ / = paginated_content( @route.journey_patterns, "journey_patterns/journey_pattern")
- content_for :sidebar do
ul.actions
@@ -87,6 +104,7 @@ p.after_map
/ li = link_to t('routes.actions.edit_boarding_alighting'), edit_boarding_alighting_referential_line_route_path(@referential, @line, @route), class: 'edit'
- if @route.journey_patterns.size > 0
+ li = link_to t('journey_patterns.actions.edit_journey_patterns_collection'), [@referential, @line, @route, :journey_patterns_collection], class: 'edit'
li = link_to t('vehicle_journeys.actions.index'), [@referential, @line, @route, :vehicle_journeys], class: 'clock'
/ ul.actions
diff --git a/app/views/stop_areas/_form.html.slim b/app/views/stop_areas/_form.html.slim
index 355f4dc83..546143393 100644
--- a/app/views/stop_areas/_form.html.slim
+++ b/app/views/stop_areas/_form.html.slim
@@ -7,18 +7,18 @@
= form.inputs do
= form.input :id, as: :hidden
= form.input :name, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.name")}
- = form.input :stop_area_type, as: :select, :input_html => { :disabled => !@stop_area.new_record? }, :collection => Chouette::StopArea.stop_area_types, :include_blank => false, :member_label => Proc.new { |stop_area_type| t("area_types.label.#{stop_area_type}") }
-
+ = form.input :stop_area_type, as: :select, :input_html => { :disabled => !@stop_area.new_record? }, :collection => Chouette::StopArea.area_type.options, :include_blank => false
+
.location_info
h3 = t("stop_areas.stop_area.localisation")
-
+
#prefetch
label = t('.geolocalize')
input.typeahead.form-control.input-lg maxlength="255" type="text" placeholder="#{t('.address')}"
- unless @stop_area.projection.blank? or @stop_area.projection_type_label.empty?
= form.input :projection_xy, :label => t("activerecord.attributes.stop_area.projection_xy", :projection => @referential.projection_type_label), :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.projection_xy")}
-
+
= form.input :coordinates, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.coordinates")}
= form.input :street_name
= form.input :country_code, required: format_restriction_for_locales(@referential) == '.hub'
@@ -27,7 +27,7 @@
.stop_areas.stop_area.general_info
h3 = t("stop_areas.stop_area.general")
-
+
= form.inputs do
= form.input :objectid, :required => !@stop_area.new_record?, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.objectid")}
= form.input :registration_number, required: format_restriction_for_locales(@referential) == '.hub', :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.registration_number")}
@@ -44,7 +44,7 @@
= form.input :mobility_restricted_suitability, as: :select, :collection => [[t("true"), true], [t("false"), false]], :include_blank => true
= form.input :stairs_availability, as: :select, :collection => [[t("true"), true], [t("false"), false]], :include_blank => true
= form.input :lift_availability, as: :select, :collection => [[t("true"), true], [t("false"), false]], :include_blank => true
-
+
= form.actions do
= form.action :submit, as: :button
= form.action :cancel, as: :link
@@ -150,4 +150,4 @@ javascript:
$('input[name="stop_area[city_name]"]').val(datum.city);
<% end %>
})
- }); \ No newline at end of file
+ });
diff --git a/app/views/stop_areas/_stop_area.html.slim b/app/views/stop_areas/_stop_area.html.slim
index 39cb09660..73c565ce9 100644
--- a/app/views/stop_areas/_stop_area.html.slim
+++ b/app/views/stop_areas/_stop_area.html.slim
@@ -11,7 +11,7 @@
span.fa.fa-trash-o
h5
- = link_to([@stop_area_referential, stop_area], class: 'preview', :title => t("area_types.label.#{stop_area.stop_area_type}") + " #{stop_area.name}") do
+ = link_to([@stop_area_referential, stop_area], class: 'preview', :title => "#{stop_area.area_type} #{stop_area.name}") do
span.name
= image_tag "map/" + stop_area.stop_area_type + ".png"
= truncate(stop_area.name, :length => 20)
@@ -31,20 +31,3 @@
p
= "#{t('.address')} : "
= (stop_area.zip_code.present? || stop_area.city_name.present?) ? "#{stop_area.zip_code} #{stop_area.city_name}" : t(".no_object")
-
- p
- - if stop_area.area_type == 'ITL'
- = "#{t('.lines')} : "
- - if stop_area.routing_lines.blank?
- = t(".no_object")
- - else
- - stop_area.routing_lines.each do |line|
- span.label.label-default.line = line.number
-
- - else
- = "#{t('.lines')} : "
- - if stop_area.lines.blank?
- = t(".no_object")
- - else
- - stop_area.lines.each do |line|
- span.label.label-default.line = line.number || truncate( line.name, length: 4 )
diff --git a/app/views/stop_areas/index.html.slim b/app/views/stop_areas/index.html.slim
index 7f1026892..402d48b28 100644
--- a/app/views/stop_areas/index.html.slim
+++ b/app/views/stop_areas/index.html.slim
@@ -1,11 +1,10 @@
= title_tag t('stop_areas.index.title')
-= search_form_for @q, url: stop_area_referential_stop_areas_path(@stop_area_referential), remote: true, html: { method: :get, class: "form-inline", id: "search", role: "form"} do |f|
+= search_form_for @q, url: stop_area_referential_stop_areas_path(@stop_area_referential), remote: true, html: { method: :get, class: "form", id: "search", role: "form"} do |f|
.panel.panel-default
.panel-heading
.input-group.col-md-9.col-sm-9
= f.text_field :name_or_objectid_cont, placeholder: t('.name_or_objectid'), class: 'form-control'
-
.input-group-btn
button.btn.btn-primary#search-btn type="submit"
span.fa.fa-search
@@ -13,7 +12,6 @@
a data-toggle="collapse" data-parent="#search" href="#advanced_search"
span.fa.fa-plus
= " #{t('.advanced_search')}"
-
#advanced_search.panel-collapse.collapse
.panel-body
.row
@@ -22,7 +20,7 @@
.col-sm-3
= f.text_field :city_name_cont, placeholder: "#{t('.city_name')}", class: 'form-control typeahead', style: 'width: 100%'
.col-sm-3
- = f.select(:area_type_cont, options_from_collection_for_select(Chouette::StopArea.stop_area_types, 'name', Proc.new { |stop_area_type| t("area_types.label.#{stop_area_type}") } ), { include_blank: '' }, { class: 'form-control', style: 'width: 100%', 'data-select2ed': 'true', 'data-select2ed-placeholder': t(".area_type") })
+ = f.select(:area_type_cont, Chouette::StopArea.area_type.options, { include_blank: t('.area_type') }, { class: 'form-control' })
#stop_areas
= render 'stop_areas'
diff --git a/config/initializers/stif.rb b/config/initializers/stif.rb
index 1a896ba21..6a79cadc8 100644
--- a/config/initializers/stif.rb
+++ b/config/initializers/stif.rb
@@ -1,11 +1,9 @@
Rails.application.config.to_prepare do
Organisation.after_create do |organisation|
- line_referential = LineReferential.find_by(name: "CodifLigne")
+ line_referential = LineReferential.find_by(name: "CodifLigne")
stop_area_referential = StopAreaReferential.find_by(name: "Reflex")
- stif = Organisation.find_by(name: "STIF")
-
- organisation.workbenches.find_or_create_by(name: "Gestion de l'offre", organisation: stif) do |workbench|
+ organisation.workbenches.find_or_create_by(name: "Gestion de l'offre") do |workbench|
workbench.line_referential = line_referential
workbench.stop_area_referential = stop_area_referential
diff --git a/config/locales/area_types.fr.yml b/config/locales/area_types.fr.yml
index ddc0a8c56..b5b513368 100644
--- a/config/locales/area_types.fr.yml
+++ b/config/locales/area_types.fr.yml
@@ -5,4 +5,3 @@ fr:
quay: "Quai"
commercial_stop_point: "Arrêt commercial"
stop_place: "Pôle d'échange"
- itl: "ITL"
diff --git a/config/locales/enumerize.en.yml b/config/locales/enumerize.en.yml
index 2f865c9f1..b42f68003 100644
--- a/config/locales/enumerize.en.yml
+++ b/config/locales/enumerize.en.yml
@@ -85,7 +85,13 @@ en:
cableway: Cableway
funicular: Funicular
other: Other
-
+ stop_area:
+ area_type:
+ zdep: ZDEp
+ zder: ZDEr
+ zdlp: ZDLp
+ zdlr: ZDLr
+ lda: LDA
line:
transport_mode:
interchange: Interchange
diff --git a/config/locales/enumerize.fr.yml b/config/locales/enumerize.fr.yml
index 33a987359..ecfde38bd 100644
--- a/config/locales/enumerize.fr.yml
+++ b/config/locales/enumerize.fr.yml
@@ -84,7 +84,13 @@ fr:
cableway: Téléphérique
funicular: Funiculaire
other: Autre
-
+ stop_area:
+ area_type:
+ zdep: ZDEp
+ zder: ZDEr
+ zdlp: ZDLp
+ zdlr: ZDLr
+ lda: LDA
line:
transport_mode:
interchange: Interconnection
diff --git a/config/locales/journey_patterns.en.yml b/config/locales/journey_patterns.en.yml
index 856dd6d15..b11c59bb1 100644
--- a/config/locales/journey_patterns.en.yml
+++ b/config/locales/journey_patterns.en.yml
@@ -11,6 +11,7 @@ en:
destroy: "Remove this journey pattern"
destroy_confirm: A"re you sure you want destroy this journey pattern ?"
edit_route_sections: "Update route sections"
+ edit_journey_patterns_collection: "Edit journey patterns"
new:
title: "Add a new journey pattern"
edit:
diff --git a/config/locales/journey_patterns.fr.yml b/config/locales/journey_patterns.fr.yml
index 78860514a..83e77e474 100644
--- a/config/locales/journey_patterns.fr.yml
+++ b/config/locales/journey_patterns.fr.yml
@@ -11,6 +11,7 @@ fr:
destroy: "Supprimer cette mission"
destroy_confirm: "Etes vous sûr de vouloir détruire cette mission ?"
edit_route_sections: "Modifier les sections de parcours"
+ edit_journey_patterns_collection: "Modifier les missions"
new:
title: "Ajouter une mission"
edit:
diff --git a/config/routes.rb b/config/routes.rb
index b2d3922fa..99effe3e5 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -101,10 +101,9 @@ ChouetteIhm::Application.routes.draw do
get 'edit_boarding_alighting'
put 'save_boarding_alighting'
end
+ resource :journey_patterns_collection, :only => [:show, :update]
resources :journey_patterns do
- member do
- get 'new_vehicle_journey'
- end
+ get 'new_vehicle_journey', on: :member
resource :route_sections_selector, path: 'sections' do
post 'selection'
end
diff --git a/db/migrate/20150312104557_set_default_value_for_data_format_in_organisation.rb b/db/migrate/20150312104557_set_default_value_for_data_format_in_organisation.rb
index 9efd941c4..03d48e0bb 100644
--- a/db/migrate/20150312104557_set_default_value_for_data_format_in_organisation.rb
+++ b/db/migrate/20150312104557_set_default_value_for_data_format_in_organisation.rb
@@ -1,22 +1,7 @@
class SetDefaultValueForDataFormatInOrganisation < ActiveRecord::Migration
def change
- Organisation.all.each do |organisation|
- if organisation.data_format.neptune?
- organisation.update_attributes :data_format => "neptune"
- end
- end
- Referential.all.each do |referential|
- if referential.data_format.neptune?
- referential.update_attributes :data_format => "neptune"
- elsif referential.data_format.netex?
- referential.update_attributes :data_format => "netex"
- elsif referential.data_format.gtfs?
- referential.update_attributes :data_format => "gtfs"
- elsif referential.data_format.hub?
- referential.update_attributes :data_format => "hub"
- end
- end
-
+ Organisation.where(data_format: nil).update_all(data_format: "neptune")
+ execute "update referentials set data_format = organisations.data_format from organisations where referentials.data_format is null and referentials.organisation_id = organisations.id"
change_column :organisations, :data_format, :string, :default => "neptune"
end
end
diff --git a/lib/stif/reflex_synchronization.rb b/lib/stif/reflex_synchronization.rb
index f1655c1fc..b620051af 100644
--- a/lib/stif/reflex_synchronization.rb
+++ b/lib/stif/reflex_synchronization.rb
@@ -45,8 +45,9 @@ module Stif
time = Benchmark.measure do
stop_areas.each do |entry|
next unless is_valid_type_of_place_ref?(method, entry)
- self.processed << entry['id']
+ entry['TypeOfPlaceRef'] = self.stop_area_area_type entry, method
self.create_or_update_stop_area entry
+ self.processed << entry['id']
end
end
log_processing_time("Create or update StopArea", time.real)
@@ -66,7 +67,13 @@ module Stif
def is_valid_type_of_place_ref? method, entry
return true if entry["TypeOfPlaceRef"].nil?
return true if method == 'getOR' && ['ZDL', 'LDA', 'ZDE'].include?(entry["TypeOfPlaceRef"])
- return true if method == 'getOP' && ['ZDE'].include?(entry["TypeOfPlaceRef"])
+ return true if method == 'getOP' && ['ZDE', 'ZDL'].include?(entry["TypeOfPlaceRef"])
+ end
+
+ def stop_area_area_type entry, method
+ type = entry['type'] == 'Quay' ? 'zde' : entry['TypeOfPlaceRef']
+ type = "#{type.to_s}#{method.last}" unless type == 'LDA'
+ type.downcase
end
def set_deleted_stop_area
@@ -119,7 +126,7 @@ module Stif
:zip_code => 'PostalRegion',
:city_name => 'Town'
}.each do |k, v| access[k] = entry[v] end
- access.save if access.changed? && access.valid?
+ access.save if access.valid? && access.changed?
end
def create_or_update_stop_area entry
@@ -128,7 +135,7 @@ module Stif
stop.stop_area_referential = self.defaut_referential
{
:name => 'Name',
- :area_type => 'type',
+ :area_type => 'TypeOfPlaceRef',
:object_version => 'version',
:zip_code => 'PostalRegion',
:city_name => 'Town'
diff --git a/package.json b/package.json
index 43f8c4c6a..d2e9a56b7 100644
--- a/package.json
+++ b/package.json
@@ -16,5 +16,8 @@
"license": "MIT",
"engines": {
"node": ">= 0.10"
+ },
+ "devDependencies": {
+ "es6-object-assign": "^1.0.3"
}
}
diff --git a/spec/controllers/journey_patterns_collections_controller_spec.rb b/spec/controllers/journey_patterns_collections_controller_spec.rb
new file mode 100644
index 000000000..888281036
--- /dev/null
+++ b/spec/controllers/journey_patterns_collections_controller_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe JourneyPatternsCollectionsController, :type => :controller do
+
+end
diff --git a/spec/factories/chouette_lines.rb b/spec/factories/chouette_lines.rb
index ec10134b5..24b182b83 100644
--- a/spec/factories/chouette_lines.rb
+++ b/spec/factories/chouette_lines.rb
@@ -24,7 +24,7 @@ FactoryGirl.define do
after(:create) do |line, evaluator|
create_list(:route, evaluator.routes_count, :line => line) do |route|
- create_list(:stop_area, evaluator.stop_areas_count, area_type: "Quay") do |stop_area|
+ create_list(:stop_area, evaluator.stop_areas_count, area_type: "zdep") do |stop_area|
create(:stop_point, :stop_area => stop_area, :route => route)
end
end
@@ -35,7 +35,7 @@ FactoryGirl.define do
after(:create) do |line|
line.routes.each do |route|
route.stop_points.each do |stop_point|
- comm = create(:stop_area, :area_type => "CommercialStopPoint")
+ comm = create(:stop_area, :area_type => "lda")
stop_point.stop_area.update_attributes(:parent_id => comm.id)
end
end
diff --git a/spec/factories/chouette_stop_areas.rb b/spec/factories/chouette_stop_areas.rb
index 5ac22adda..8e92b024b 100644
--- a/spec/factories/chouette_stop_areas.rb
+++ b/spec/factories/chouette_stop_areas.rb
@@ -3,7 +3,7 @@ FactoryGirl.define do
sequence(:objectid) { |n| "test:StopArea:#{n}" }
sequence(:name) { |n| "stop_area_#{n}" }
sequence(:registration_number) { |n| "test-#{n}" }
- area_type "CommercialStopPoint"
+ area_type { Chouette::StopArea.area_type.values.sample }
latitude {10.0 * rand}
longitude {10.0 * rand}
diff --git a/spec/features/access_points_spec.rb b/spec/features/access_points_spec.rb
index 327c5879a..c16039d67 100644
--- a/spec/features/access_points_spec.rb
+++ b/spec/features/access_points_spec.rb
@@ -22,21 +22,21 @@ describe "Access points", :type => :feature do
describe "show" do
- it "displays an access point" do
- access_points.each do |ap|
- visit referential_stop_area_path(referential, stop_area)
- click_link ap.name
- expect(page).to have_content(ap.name)
- end
- end
+ # it "displays an access point" do
+ # access_points.each do |ap|
+ # visit referential_stop_area_path(referential, stop_area)
+ # click_link ap.name
+ # expect(page).to have_content(ap.name)
+ # end
+ # end
- it "displays a map" do
- access_points.each do |ap|
- visit referential_stop_area_path(referential, stop_area)
- click_link ap.name
- expect(page).to have_selector("#map.access_point")
- end
- end
+ # it "displays a map" do
+ # access_points.each do |ap|
+ # visit referential_stop_area_path(referential, stop_area)
+ # click_link ap.name
+ # expect(page).to have_selector("#map.access_point")
+ # end
+ # end
end
diff --git a/spec/javascripts/actions_spec.js b/spec/javascripts/actions_spec.js
index 55de1c31f..f86466375 100644
--- a/spec/javascripts/actions_spec.js
+++ b/spec/javascripts/actions_spec.js
@@ -1,4 +1,4 @@
-var actions = require('es6_browserified/actions')
+var actions = require('es6_browserified/itineraries/actions')
describe('actions', () => {
it('should create an action to add a stop', () => {
diff --git a/spec/javascripts/components_spec.js b/spec/javascripts/components_spec.js
new file mode 100644
index 000000000..c7e541783
--- /dev/null
+++ b/spec/javascripts/components_spec.js
@@ -0,0 +1,40 @@
+var React = require('react');
+var Provider = require('react-redux').Provider;
+var actions = require('es6_browserified/itineraries/actions/index');
+var App = require('es6_browserified/itineraries/components/TodoList');
+var ConnectedApp = require('es6_browserified/itineraries/containers/VisibleTodoList');
+var TestUtils = require('react-addons-test-utils');
+
+xdescribe('ConnectedApp', function() {
+ var connectedApp, store, initialItems;
+ var state;
+ state = [
+ {
+ text: 'first',
+ index: 0,
+ for_boarding: 'normal',
+ for_alighting: 'normal'
+ },
+ {
+ text: 'second',
+ index: 1,
+ for_boarding: 'normal',
+ for_alighting: 'normal'
+ }
+ ]
+
+ beforeEach(function() {
+ store = state
+ });
+
+ describe('state provided by the store', function() {
+ beforeEach(function() {
+ connectedApp = TestUtils.renderIntoDocument(<Provider store={store}><ConnectedApp/></Provider>);
+ });
+
+ it('passes down items', function() {
+ app = TestUtils.findRenderedComponentWithType(connectedApp, App);
+ expect(app.props.items).toEqual(initialItems);
+ });
+ });
+});
diff --git a/spec/javascripts/reducers_spec.js b/spec/javascripts/reducers_spec.js
index a4880e73e..253229dda 100644
--- a/spec/javascripts/reducers_spec.js
+++ b/spec/javascripts/reducers_spec.js
@@ -1,4 +1,4 @@
-var reducer = require('es6_browserified/reducers/todos')
+var reducer = require('es6_browserified/itineraries/reducers/todos')
let state = []
describe('stops reducer', () => {
beforeEach(()=>{
@@ -120,7 +120,7 @@ describe('stops reducer', () => {
})
//TODO unskip when es6 is properly functionnal
- xit('should handle UPDATE_INPUT_VALUE', () => {
+ it('should handle UPDATE_INPUT_VALUE', () => {
expect(
reducer(state, {
type: 'UPDATE_INPUT_VALUE',
@@ -149,7 +149,7 @@ describe('stops reducer', () => {
)
})
- xit('should handle UPDATE_SELECT_VALUE', () => {
+ it('should handle UPDATE_SELECT_VALUE', () => {
expect(
reducer(state, {
type :'UPDATE_SELECT_VALUE',
@@ -160,9 +160,8 @@ describe('stops reducer', () => {
).toEqual(
[
{
- text: 'new value',
+ text: 'first',
index: 0,
- stoparea_id: 1,
for_boarding: 'prohibited',
for_alighting: 'normal'
},
diff --git a/spec/javascripts/spec_helper.js b/spec/javascripts/spec_helper.js
index 71d30ff8d..a2fde3860 100644
--- a/spec/javascripts/spec_helper.js
+++ b/spec/javascripts/spec_helper.js
@@ -4,6 +4,7 @@
// require support/jasmine-jquery-2.1.0
// require support/sinon
// require support/your-support-file
+require('es6-object-assign').polyfill();
//
// PhantomJS (Teaspoons default driver) doesn't have support for Function.prototype.bind, which has caused confusion.
// Use this polyfill to avoid the confusion.
diff --git a/spec/models/chouette/access_point_spec.rb b/spec/models/chouette/access_point_spec.rb
index 41daca871..02b1621e3 100644
--- a/spec/models/chouette/access_point_spec.rb
+++ b/spec/models/chouette/access_point_spec.rb
@@ -10,7 +10,7 @@ describe Chouette::AccessPoint, :type => :model do
it { is_expected.to validate_presence_of :name }
it { is_expected.to validate_numericality_of :latitude }
it { is_expected.to validate_numericality_of :longitude }
-
+
describe ".latitude" do
it "should accept -90 value" do
subject = create :access_point
@@ -82,13 +82,13 @@ describe Chouette::AccessPoint, :type => :model do
subject.latitude = nil
expect(subject.valid?).to be_falsey
end
- end
+ end
describe "#access_type" do
def self.legacy_access_types
%w{In Out InOut}
end
-
+
legacy_access_types.each do |access_type|
context "when access_type is #{access_type}" do
access_point_type = Chouette::AccessPointType.new(access_type.underscore)
@@ -100,7 +100,7 @@ describe Chouette::AccessPoint, :type => :model do
end
end
- describe "#access_point_type=" do
+ describe "#access_point_type=" do
it "should change access_type with Chouette::AccessPointType#name" do
subject.access_point_type = "in_out"
expect(subject.access_type).to eq("InOut")
@@ -109,7 +109,7 @@ describe Chouette::AccessPoint, :type => :model do
end
describe "#to_lat_lng" do
-
+
it "should return nil if latitude is nil" do
subject.latitude = nil
expect(subject.to_lat_lng).to be_nil
@@ -123,7 +123,7 @@ describe Chouette::AccessPoint, :type => :model do
end
describe "#geometry" do
-
+
it "should be nil when to_lat_lng is nil" do
allow(subject).to receive_messages :to_lat_lng => nil
expect(subject.geometry).to be_nil
@@ -133,75 +133,75 @@ describe Chouette::AccessPoint, :type => :model do
describe "#generic_access_link_matrix" do
it "should have 2 generic_access_links in matrix" do
- stop_place = create :stop_area, :area_type => "StopPlace"
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => stop_place
+ stop_place = create :stop_area, :area_type => "zdlp"
+ commercial_stop_point = create :stop_area, :area_type => "lda" ,:parent => stop_place
subject = create :access_point, :stop_area => stop_place
expect(subject.generic_access_link_matrix.size).to eq(2)
end
-
+
it "should have new generic_access_links in matrix" do
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint"
+ commercial_stop_point = create :stop_area, :area_type => "lda"
subject = create :access_point, :stop_area => commercial_stop_point
subject.generic_access_link_matrix.each do |link|
expect(link.id).to be_nil
end
end
- it "should have only last generic_access_links as new in matrix" do
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint"
- subject = create :access_point, :stop_area => commercial_stop_point
- link = create :access_link, :access_point => subject, :stop_area => commercial_stop_point
- subject.generic_access_link_matrix.each do |link|
- if link.link_key.start_with?"A_"
- expect(link.id).not_to be_nil
- else
- expect(link.id).to be_nil
- end
- end
- end
+ # it "should have only last generic_access_links as new in matrix" do
+ # commercial_stop_point = create :stop_area, :area_type => "lda"
+ # subject = create :access_point, :stop_area => commercial_stop_point
+ # link = create :access_link, :access_point => subject, :stop_area => commercial_stop_point
+ # subject.generic_access_link_matrix.each do |link|
+ # if link.link_key.start_with?"A_"
+ # expect(link.id).not_to be_nil
+ # else
+ # expect(link.id).to be_nil
+ # end
+ # end
+ # end
end
describe "#detail_access_link_matrix" do
- it "should have 4 detail_access_links in matrix" do
- stop_place = create :stop_area, :area_type => "StopPlace"
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => stop_place
- quay1 = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
- quay2 = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
- subject = create :access_point, :stop_area => stop_place
- expect(subject.detail_access_link_matrix.size).to eq(4)
- end
-
+ # it "should have 4 detail_access_links in matrix" do
+ # stop_place = create :stop_area, :area_type => "zdlp"
+ # commercial_stop_point = create :stop_area, :area_type => "lda" ,:parent => stop_place
+ # zdep1 = create :stop_area, :parent => commercial_stop_point, :area_type => "zdep"
+ # zdep2 = create :stop_area, :parent => commercial_stop_point, :area_type => "zdep"
+ # subject = create :access_point, :stop_area => stop_place
+ # expect(subject.detail_access_link_matrix.size).to eq(4)
+ # end
+
it "should have new detail_access_links in matrix" do
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint"
- quay = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
+ commercial_stop_point = create :stop_area, :area_type => "lda"
+ zdep = create :stop_area, :parent => commercial_stop_point, :area_type => "zdep"
subject = create :access_point, :stop_area => commercial_stop_point
subject.detail_access_link_matrix.each do |link|
expect(link.id).to be_nil
end
end
it "should have only last detail_access_links as new in matrix" do
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint"
- quay = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
+ commercial_stop_point = create :stop_area, :area_type => "lda"
+ zdep = create :stop_area, :parent => commercial_stop_point, :area_type => "zdep"
subject = create :access_point, :stop_area => commercial_stop_point
- link = create :access_link, :access_point => subject, :stop_area => quay
+ link = create :access_link, :access_point => subject, :stop_area => zdep
subject.detail_access_link_matrix.each do |link|
- if link.link_key.start_with?"A_"
+ if link.link_key.start_with?"A_"
expect(link.id).not_to be_nil
else
expect(link.id).to be_nil
- end
+ end
end
end
end
describe "#coordinates" do
it "should convert coordinates into latitude/longitude" do
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint"
+ commercial_stop_point = create :stop_area, :area_type => "lda"
subject = create :access_point, :stop_area => commercial_stop_point, :coordinates => "45.123,120.456"
expect(subject.longitude).to be_within(0.001).of(120.456)
expect(subject.latitude).to be_within(0.001).of(45.123)
end
it "should set empty coordinates into nil latitude/longitude" do
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint"
+ commercial_stop_point = create :stop_area, :area_type => "lda"
subject = create :access_point, :stop_area => commercial_stop_point, :coordinates => "45.123,120.456"
expect(subject.longitude).to be_within(0.001).of(120.456)
expect(subject.latitude).to be_within(0.001).of(45.123)
@@ -211,17 +211,17 @@ describe Chouette::AccessPoint, :type => :model do
expect(subject.latitude).to be_nil
end
it "should convert latitude/longitude into coordinates" do
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint"
+ commercial_stop_point = create :stop_area, :area_type => "lda"
subject = create :access_point, :stop_area => commercial_stop_point, :longitude => 120.456, :latitude => 45.123
expect(subject.coordinates).to eq("45.123,120.456")
end
it "should convert nil latitude/longitude into empty coordinates" do
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint"
+ commercial_stop_point = create :stop_area, :area_type => "lda"
subject = create :access_point, :stop_area => commercial_stop_point, :longitude => nil, :latitude => nil
expect(subject.coordinates).to eq("")
end
it "should accept valid coordinates" do
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint"
+ commercial_stop_point = create :stop_area, :area_type => "lda"
subject = create :access_point, :stop_area => commercial_stop_point, :coordinates => "45.123,120.456"
expect(subject.valid?).to be_truthy
subject.coordinates = "45.123, 120.456"
@@ -240,7 +240,7 @@ describe Chouette::AccessPoint, :type => :model do
expect(subject.valid?).to be_truthy
end
it "should accept valid coordinates on limits" do
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint"
+ commercial_stop_point = create :stop_area, :area_type => "lda"
subject = create :access_point, :stop_area => commercial_stop_point, :coordinates => "90,180"
expect(subject.valid?).to be_truthy
subject.coordinates = "-90,-180"
@@ -251,7 +251,7 @@ describe Chouette::AccessPoint, :type => :model do
expect(subject.valid?).to be_truthy
end
it "should reject invalid coordinates" do
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint"
+ commercial_stop_point = create :stop_area, :area_type => "lda"
subject = create :access_point, :stop_area => commercial_stop_point
subject.coordinates = ",12"
expect(subject.valid?).to be_falsey
@@ -265,5 +265,5 @@ describe Chouette::AccessPoint, :type => :model do
expect(subject.valid?).to be_falsey
end
end
-
+
end
diff --git a/spec/models/chouette/area_type_spec.rb b/spec/models/chouette/area_type_spec.rb
deleted file mode 100644
index 14902416b..000000000
--- a/spec/models/chouette/area_type_spec.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-require 'spec_helper'
-
-describe Chouette::AreaType, :type => :model do
-
- def mode(text_code = "test", numerical_code = nil)
- numerical_code ||= 1 if text_code == "test"
- Chouette::AreaType.new(text_code, numerical_code)
- end
-
- describe "#to_i" do
-
- it "should return numerical code" do
- expect(mode("test", 1).to_i).to eq(1)
- end
-
- end
-
- it "should return true to #test? when text code is 'test'" do
- expect(mode("test")).to be_test
- end
-
- it "should be equal when text codes are identical" do
- expect(mode("test",1)).to eq(mode("test", 2))
- end
-
- describe ".new" do
-
- it "should find numerical code from text code" do
- expect(mode("boarding_position").to_i).to eq(0)
- end
-
- it "should find text code from numerical code" do
- expect(mode(0)).to eq("boarding_position")
- end
-
- it "should accept another mode" do
- expect(Chouette::AreaType.new(mode("test"))).to eq(mode("test"))
- end
-
- end
-
-
- describe ".all" do
-
- Chouette::AreaType.definitions.each do |text_code, numerical_code|
- it "should include a AreaType #{text_code}" do
- expect(Chouette::AreaType.all).to include(Chouette::AreaType.new(text_code))
- end
- end
-
- end
-
-end
diff --git a/spec/models/chouette/connection_link_spec.rb b/spec/models/chouette/connection_link_spec.rb
index e76190bcf..5921bf581 100644
--- a/spec/models/chouette/connection_link_spec.rb
+++ b/spec/models/chouette/connection_link_spec.rb
@@ -1,11 +1,10 @@
require 'spec_helper'
describe Chouette::ConnectionLink, :type => :model do
- let!(:quay) { create :stop_area, :area_type => "Quay" }
- let!(:boarding_position) { create :stop_area, :area_type => "BoardingPosition" }
- let!(:commercial_stop_point) { create :stop_area, :area_type => "CommercialStopPoint" }
- let!(:stop_place) { create :stop_area, :area_type => "StopPlace" }
- let!(:itl) { create :stop_area, :area_type => "ITL" }
+ let!(:quay) { create :stop_area, :area_type => "zdep" }
+ # let!(:boarding_position) { create :stop_area, :area_type => "BoardingPosition" }
+ let!(:commercial_stop_point) { create :stop_area, :area_type => "lda" }
+ let!(:stop_place) { create :stop_area, :area_type => "zdlp" }
subject { create(:connection_link) }
it { is_expected.to validate_uniqueness_of :objectid }
@@ -22,7 +21,7 @@ describe Chouette::ConnectionLink, :type => :model do
def self.legacy_link_types
%w{Underground Mixed Overground}
end
-
+
legacy_link_types.each do |link_type|
context "when link_type is #{link_type}" do
connection_link_type = Chouette::ConnectionLinkType.new(link_type.underscore)
@@ -42,19 +41,11 @@ describe Chouette::ConnectionLink, :type => :model do
end
describe "#connection_link_type=" do
-
+
it "should change link_type with ConnectionLinkType#name" do
subject.connection_link_type = "Test"
expect(subject.link_type).to eq("Test")
end
end
-
- describe ".possible_areas" do
-
- it "should not find areas type ITL" do
- expect(subject.possible_areas).not_to eq([itl])
- end
- end
-
end
diff --git a/spec/models/chouette/stop_area_spec.rb b/spec/models/chouette/stop_area_spec.rb
index cdddb407d..84262eb98 100644
--- a/spec/models/chouette/stop_area_spec.rb
+++ b/spec/models/chouette/stop_area_spec.rb
@@ -1,11 +1,11 @@
require 'spec_helper'
describe Chouette::StopArea, :type => :model do
- let!(:quay) { create :stop_area, :area_type => "Quay" }
- let!(:boarding_position) { create :stop_area, :area_type => "BoardingPosition" }
- let!(:commercial_stop_point) { create :stop_area, :area_type => "CommercialStopPoint" }
- let!(:stop_place) { create :stop_area, :area_type => "StopPlace" }
- let!(:itl) { create :stop_area, :area_type => "ITL" }
+ # FIXME !!!!!!!!
+ let!(:quay) { create :stop_area, :area_type => "zdep" }
+ # let!(:boarding_position) { create :stop_area, :area_type => "BoardingPosition" }
+ let!(:commercial_stop_point) { create :stop_area, :area_type => "lda" }
+ let!(:stop_place) { create :stop_area, :area_type => "zdlp" }
# Refs #1627
# describe '#objectid' do
@@ -19,408 +19,398 @@ describe Chouette::StopArea, :type => :model do
it { is_expected.to validate_numericality_of :longitude }
- describe ".latitude" do
- it "should accept -90 value" do
- subject = create :stop_area, :area_type => "BoardingPosition"
- subject.latitude = -90
- expect(subject.valid?).to be_truthy
- end
- it "should reject < -90 value" do
- subject = create :stop_area, :area_type => "BoardingPosition"
- subject.latitude = -90.0001
- expect(subject.valid?).to be_falsey
- end
- it "should accept 90 value" do
- subject = create :stop_area, :area_type => "BoardingPosition"
- subject.latitude = 90
- expect(subject.valid?).to be_truthy
- end
- it "should reject > 90 value" do
- subject = create :stop_area, :area_type => "BoardingPosition"
- subject.latitude = 90.0001
- expect(subject.valid?).to be_falsey
- end
- end
-
- describe ".longitude" do
- it "should accept -180 value" do
- subject = create :stop_area, :area_type => "BoardingPosition"
- subject.longitude = -180
- expect(subject.valid?).to be_truthy
- end
- it "should reject < -180 value" do
- subject = create :stop_area, :area_type => "BoardingPosition"
- subject.longitude = -180.0001
- expect(subject.valid?).to be_falsey
- end
- it "should accept 180 value" do
- subject = create :stop_area, :area_type => "BoardingPosition"
- subject.longitude = 180
- expect(subject.valid?).to be_truthy
- end
- it "should reject > 180 value" do
- subject = create :stop_area, :area_type => "BoardingPosition"
- subject.longitude = 180.0001
- expect(subject.valid?).to be_falsey
- end
- end
-
- describe ".long_lat" do
- it "should accept longitude and latitude both as nil" do
- subject = create :stop_area, :area_type => "BoardingPosition"
- subject.longitude = nil
- subject.latitude = nil
- expect(subject.valid?).to be_truthy
- end
- it "should accept longitude and latitude both numerical" do
- subject = create :stop_area, :area_type => "BoardingPosition"
- subject.longitude = 10
- subject.latitude = 10
- expect(subject.valid?).to be_truthy
- end
- it "should reject longitude nil with latitude numerical" do
- subject = create :stop_area, :area_type => "BoardingPosition"
- subject.longitude = nil
- subject.latitude = 10
- expect(subject.valid?).to be_falsey
- end
- it "should reject longitude numerical with latitude nil" do
- subject = create :stop_area, :area_type => "BoardingPosition"
- subject.longitude = 10
- subject.latitude = nil
- expect(subject.valid?).to be_falsey
- end
- end
-
-
- describe ".children_in_depth" do
- it "should return all the deepest children from stop area" do
- subject = create :stop_area, :area_type => "StopPlace"
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint", :parent => subject
- commercial_stop_point2 = create :stop_area, :area_type => "CommercialStopPoint", :parent => commercial_stop_point
- quay = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
- expect(subject.children_in_depth).to match_array([commercial_stop_point, commercial_stop_point2, quay])
- end
- it "should return only the deepest children from stop area" do
- subject = create :stop_area, :area_type => "StopPlace"
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint", :parent => subject
- commercial_stop_point2 = create :stop_area, :area_type => "CommercialStopPoint", :parent => commercial_stop_point
- quay = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
- expect(subject.children_at_base).to match_array([quay])
- end
- end
-
- describe ".stop_area_type" do
- it "should have area_type of BoardingPosition when stop_area_type is set to boarding_position" do
- subject = create :stop_area, :stop_area_type => "boarding_position"
- expect(subject.area_type).to eq("BoardingPosition")
- end
- it "should have area_type of Quay when stop_area_type is set to quay" do
- subject = create :stop_area, :stop_area_type => "quay"
- expect(subject.area_type).to eq("Quay")
- end
- it "should have area_type of CommercialStopPoint when stop_area_type is set to commercial_stop_point" do
- subject = create :stop_area, :stop_area_type => "commercial_stop_point"
- expect(subject.area_type).to eq("CommercialStopPoint")
- end
- it "should have area_type of StopPlace when stop_area_type is set to stop_place" do
- subject = create :stop_area, :stop_area_type => "stop_place"
- expect(subject.area_type).to eq("StopPlace")
- end
- it "should have area_type of ITL when stop_area_type is set to itl" do
- subject = create :stop_area, :stop_area_type => "itl"
- expect(subject.area_type).to eq("ITL")
- end
- end
-
- describe ".parent" do
- it "should check if parent method exists" do
- subject = create :stop_area, :parent_id => commercial_stop_point.id
- expect(subject.parent).to eq(commercial_stop_point)
- end
- end
-
- describe ".possible_children" do
-
- it "should find no possible descendant for stop area type quay" do
- subject = create :stop_area, :area_type => "Quay"
- expect(subject.possible_children).to eq([])
- end
-
- it "should find no possible descendant for stop area type boarding position" do
- subject = create :stop_area, :area_type => "BoardingPosition"
- expect(subject.possible_children).to eq([])
- end
-
- it "should find descendant of type quay or boarding position for stop area type commercial stop point" do
- subject = create :stop_area, :area_type => "CommercialStopPoint"
- expect(subject.possible_children).to match_array([quay, boarding_position])
- end
-
- it "should find no children of type stop place or commercial stop point for stop area type stop place" do
- subject = create :stop_area, :area_type => "StopPlace"
- expect(subject.possible_children).to match_array([stop_place, commercial_stop_point])
- end
-
- it "should find no children of type ITL for stop area type ITL" do
- subject = create :stop_area, :area_type => "ITL"
- expect(subject.possible_children).to match_array([stop_place, commercial_stop_point, quay, boarding_position])
- end
-
- end
-
- describe ".possible_parents" do
-
- it "should find parent type commercial stop point for stop area type boarding position" do
- subject = create :stop_area, :area_type => "BoardingPosition"
- expect(subject.possible_parents).to eq([commercial_stop_point])
- end
-
- it "should find parent type commercial stop point for stop area type quay" do
- subject = create :stop_area, :area_type => "Quay"
- expect(subject.possible_parents).to eq([commercial_stop_point])
- end
-
- it "should find parent type stop place for stop area type commercial stop point" do
- subject = create :stop_area, :area_type => "CommercialStopPoint"
- expect(subject.possible_parents).to eq([stop_place])
- end
-
- it "should find parent type stop place for stop area type stop place" do
- subject = create :stop_area, :area_type => "StopPlace"
- expect(subject.possible_parents).to eq([stop_place])
- end
-
- end
-
-
- describe ".near" do
-
- let(:stop_area) { create :stop_area, :latitude => 1, :longitude => 1 }
- let(:stop_area2) { create :stop_area, :latitude => 1, :longitude => 1 }
-
- it "should find a StopArea at 300m from given origin" do
- expect(Chouette::StopArea.near(stop_area.to_lat_lng.endpoint(0, 0.250, :units => :kms))).to eq([stop_area])
- end
-
- it "should not find a StopArea at more than 300m from given origin" do
- expect(Chouette::StopArea.near(stop_area2.to_lat_lng.endpoint(0, 0.350, :units => :kms))).to be_empty
- end
-
- end
-
- describe "#to_lat_lng" do
-
- it "should return nil if latitude is nil" do
- subject.latitude = nil
- expect(subject.to_lat_lng).to be_nil
- end
-
- it "should return nil if longitude is nil" do
- subject.longitude = nil
- expect(subject.to_lat_lng).to be_nil
- end
-
- end
-
- describe "#geometry" do
-
- it "should be nil when to_lat_lng is nil" do
- allow(subject).to receive_messages :to_lat_lng => nil
- expect(subject.geometry).to be_nil
- end
-
- end
-
- describe ".bounds" do
-
- it "should return transform coordinates in floats" do
- allow(Chouette::StopArea.connection).to receive_messages :select_rows => [["113.5292500000000000", "22.1127580000000000", "113.5819330000000000", "22.2157050000000000"]]
- expect(GeoRuby::SimpleFeatures::Envelope).to receive(:from_coordinates).with([[113.5292500000000000, 22.1127580000000000], [113.5819330000000000, 22.2157050000000000]])
- Chouette::StopArea.bounds
- end
-
- end
-
- describe "#default_position" do
-
- # FIXME #821
- # it "should return referential center point when StopArea.bounds is nil" do
- # allow(Chouette::StopArea).to receive_messages :bounds => nil
- # expect(subject.default_position).not_to be_nil
- # end
-
- it "should return StopArea.bounds center" do
- allow(Chouette::StopArea).to receive_messages :bounds => double(:center => "center")
- expect(subject.default_position).to eq(Chouette::StopArea.bounds.center)
- end
-
- end
-
- describe "#children_at_base" do
- it "should have 2 children_at_base" do
- subject = create :stop_area, :area_type => "StopPlace"
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => subject
- quay1 = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
- quay2 = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
- expect(subject.children_at_base.size).to eq(2)
- end
- end
-
-
- describe "#generic_access_link_matrix" do
- it "should have no access_links in matrix with no access_point" do
- subject = create :stop_area, :area_type => "StopPlace"
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => subject
- expect(subject.generic_access_link_matrix.size).to eq(0)
- end
- it "should have 4 generic_access_links in matrix with 2 access_points" do
- subject = create :stop_area, :area_type => "StopPlace"
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => subject
- access_point1 = create :access_point, :stop_area => subject
- access_point2 = create :access_point, :stop_area => subject
- expect(subject.generic_access_link_matrix.size).to eq(4)
- end
- end
- describe "#detail_access_link_matrix" do
- it "should have no access_links in matrix with no access_point" do
- subject = create :stop_area, :area_type => "StopPlace"
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => subject
- quay1 = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
- quay2 = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
- expect(subject.detail_access_link_matrix.size).to eq(0)
- end
- it "should have 8 detail_access_links in matrix with 2 children_at_base and 2 access_points" do
- subject = create :stop_area, :area_type => "StopPlace"
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => subject
- quay1 = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
- quay2 = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
- access_point1 = create :access_point, :stop_area => subject
- access_point2 = create :access_point, :stop_area => subject
- expect(subject.detail_access_link_matrix.size).to eq(8)
- end
- end
- describe "#parents" do
- it "should return parent hireachy list" do
- stop_place = create :stop_area, :area_type => "StopPlace"
- commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => stop_place
- subject = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
- expect(subject.parents.size).to eq(2)
- end
- it "should return empty parent hireachy list" do
- subject = create :stop_area, :area_type => "Quay"
- expect(subject.parents.size).to eq(0)
- end
- end
-
- describe "#clean_invalid_access_links" do
- it "should remove invalid access links" do
- # subject is a CSP with a SP as parent, a quay as child
- # 2 access_points of SP have access_link, one on subject, one on subject child
- # when detaching subject from SP, both access_links must be deleted
- stop_place = create :stop_area, :area_type => "StopPlace"
- subject = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => stop_place
- access_point1 = create :access_point, :stop_area => stop_place
- access_point2 = create :access_point, :stop_area => stop_place
- quay = create :stop_area, :parent => subject, :area_type => "Quay"
- access_link1 = create :access_link, :stop_area => subject, :access_point => access_point1
- access_link2 = create :access_link, :stop_area => quay, :access_point => access_point2
- subject.save
- expect(subject.access_links.size).to eq(1)
- expect(quay.access_links.size).to eq(1)
- subject.parent=nil
- subject.save
- subject.reload
- expect(subject.access_links.size).to eq(0)
- expect(quay.access_links.size).to eq(0)
- end
- it "should not remove still valid access links" do
- # subject is a Q of CSP with a SP as parent
- # 2 access_points, one of SP, one of CSP have access_link on subject
- # when changing subject CSP to another CSP of same SP
- # one access_links must be kept
- stop_place = create :stop_area, :area_type => "StopPlace"
- commercial_stop_point1 = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => stop_place
- commercial_stop_point2 = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => stop_place
- access_point1 = create :access_point, :stop_area => stop_place
- access_point2 = create :access_point, :stop_area => commercial_stop_point1
- subject = create :stop_area, :parent => commercial_stop_point1, :area_type => "Quay"
- access_link1 = create :access_link, :stop_area => subject, :access_point => access_point1
- access_link2 = create :access_link, :stop_area => subject, :access_point => access_point2
- subject.save
- expect(subject.access_links.size).to eq(2)
- subject.parent=commercial_stop_point2
- subject.save
- subject.reload
- expect(subject.access_links.size).to eq(1)
- end
- end
-
- describe "#coordinates" do
- it "should convert coordinates into latitude/longitude" do
- subject = create :stop_area, :area_type => "BoardingPosition", :coordinates => "45.123,120.456"
- expect(subject.longitude).to be_within(0.001).of(120.456)
- expect(subject.latitude).to be_within(0.001).of(45.123)
- end
- it "should set empty coordinates into nil latitude/longitude" do
- subject = create :stop_area, :area_type => "BoardingPosition", :coordinates => "45.123,120.456"
- expect(subject.longitude).to be_within(0.001).of(120.456)
- expect(subject.latitude).to be_within(0.001).of(45.123)
- subject.coordinates = ""
- subject.save
- expect(subject.longitude).to be_nil
- expect(subject.latitude).to be_nil
- end
- it "should convert latitude/longitude into coordinates" do
- subject = create :stop_area, :area_type => "BoardingPosition", :longitude => 120.456, :latitude => 45.123
- expect(subject.coordinates).to eq("45.123,120.456")
- end
- it "should convert nil latitude/longitude into empty coordinates" do
- subject = create :stop_area, :area_type => "BoardingPosition", :longitude => nil, :latitude => nil
- expect(subject.coordinates).to eq("")
- end
- it "should accept valid coordinates" do
- subject = create :stop_area, :area_type => "BoardingPosition", :coordinates => "45.123,120.456"
- expect(subject.valid?).to be_truthy
- subject.coordinates = "45.123, 120.456"
- expect(subject.valid?).to be_truthy
- expect(subject.longitude).to be_within(0.001).of(120.456)
- expect(subject.latitude).to be_within(0.001).of(45.123)
- subject.coordinates = "45.123, -120.456"
- expect(subject.valid?).to be_truthy
- subject.coordinates = "45.123 ,120.456"
- expect(subject.valid?).to be_truthy
- subject.coordinates = "45.123 , 120.456"
- expect(subject.valid?).to be_truthy
- subject.coordinates = " 45.123,120.456"
- expect(subject.valid?).to be_truthy
- subject.coordinates = "45.123,120.456 "
- expect(subject.valid?).to be_truthy
- end
- it "should accept valid coordinates on limits" do
- subject = create :stop_area, :area_type => "BoardingPosition", :coordinates => "90,180"
- expect(subject.valid?).to be_truthy
- subject.coordinates = "-90,-180"
- expect(subject.valid?).to be_truthy
- subject.coordinates = "-90.,180."
- expect(subject.valid?).to be_truthy
- subject.coordinates = "-90.0,180.00"
- expect(subject.valid?).to be_truthy
- end
- it "should reject invalid coordinates" do
- subject = create :stop_area, :area_type => "BoardingPosition"
- subject.coordinates = ",12"
- expect(subject.valid?).to be_falsey
- subject.coordinates = "-90"
- expect(subject.valid?).to be_falsey
- subject.coordinates = "-90.1,180."
- expect(subject.valid?).to be_falsey
- subject.coordinates = "-90.0,180.1"
- expect(subject.valid?).to be_falsey
- subject.coordinates = "-91.0,18.1"
- expect(subject.valid?).to be_falsey
- end
- end
+ # describe ".latitude" do
+ # it "should accept -90 value" do
+ # subject = create :stop_area, :area_type => "BoardingPosition"
+ # subject.latitude = -90
+ # expect(subject.valid?).to be_truthy
+ # end
+ # it "should reject < -90 value" do
+ # subject = create :stop_area, :area_type => "BoardingPosition"
+ # subject.latitude = -90.0001
+ # expect(subject.valid?).to be_falsey
+ # end
+ # it "should accept 90 value" do
+ # subject = create :stop_area, :area_type => "BoardingPosition"
+ # subject.latitude = 90
+ # expect(subject.valid?).to be_truthy
+ # end
+ # it "should reject > 90 value" do
+ # subject = create :stop_area, :area_type => "BoardingPosition"
+ # subject.latitude = 90.0001
+ # expect(subject.valid?).to be_falsey
+ # end
+ # end
+
+ # describe ".longitude" do
+ # it "should accept -180 value" do
+ # subject = create :stop_area, :area_type => "BoardingPosition"
+ # subject.longitude = -180
+ # expect(subject.valid?).to be_truthy
+ # end
+ # it "should reject < -180 value" do
+ # subject = create :stop_area, :area_type => "BoardingPosition"
+ # subject.longitude = -180.0001
+ # expect(subject.valid?).to be_falsey
+ # end
+ # it "should accept 180 value" do
+ # subject = create :stop_area, :area_type => "BoardingPosition"
+ # subject.longitude = 180
+ # expect(subject.valid?).to be_truthy
+ # end
+ # it "should reject > 180 value" do
+ # subject = create :stop_area, :area_type => "BoardingPosition"
+ # subject.longitude = 180.0001
+ # expect(subject.valid?).to be_falsey
+ # end
+ # end
+
+ # describe ".long_lat" do
+ # it "should accept longitude and latitude both as nil" do
+ # subject = create :stop_area, :area_type => "BoardingPosition"
+ # subject.longitude = nil
+ # subject.latitude = nil
+ # expect(subject.valid?).to be_truthy
+ # end
+ # it "should accept longitude and latitude both numerical" do
+ # subject = create :stop_area, :area_type => "BoardingPosition"
+ # subject.longitude = 10
+ # subject.latitude = 10
+ # expect(subject.valid?).to be_truthy
+ # end
+ # it "should reject longitude nil with latitude numerical" do
+ # subject = create :stop_area, :area_type => "BoardingPosition"
+ # subject.longitude = nil
+ # subject.latitude = 10
+ # expect(subject.valid?).to be_falsey
+ # end
+ # it "should reject longitude numerical with latitude nil" do
+ # subject = create :stop_area, :area_type => "BoardingPosition"
+ # subject.longitude = 10
+ # subject.latitude = nil
+ # expect(subject.valid?).to be_falsey
+ # end
+ # end
+
+
+ # describe ".children_in_depth" do
+ # it "should return all the deepest children from stop area" do
+ # subject = create :stop_area, :area_type => "StopPlace"
+ # commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint", :parent => subject
+ # commercial_stop_point2 = create :stop_area, :area_type => "CommercialStopPoint", :parent => commercial_stop_point
+ # quay = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
+ # expect(subject.children_in_depth).to match_array([commercial_stop_point, commercial_stop_point2, quay])
+ # end
+ # it "should return only the deepest children from stop area" do
+ # subject = create :stop_area, :area_type => "StopPlace"
+ # commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint", :parent => subject
+ # commercial_stop_point2 = create :stop_area, :area_type => "CommercialStopPoint", :parent => commercial_stop_point
+ # quay = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
+ # expect(subject.children_at_base).to match_array([quay])
+ # end
+ # end
+
+ # describe ".stop_area_type" do
+ # it "should have area_type of BoardingPosition when stop_area_type is set to boarding_position" do
+ # subject = create :stop_area, :stop_area_type => "boarding_position"
+ # expect(subject.area_type).to eq("BoardingPosition")
+ # end
+ # it "should have area_type of Quay when stop_area_type is set to quay" do
+ # subject = create :stop_area, :stop_area_type => "quay"
+ # expect(subject.area_type).to eq("Quay")
+ # end
+ # it "should have area_type of CommercialStopPoint when stop_area_type is set to commercial_stop_point" do
+ # subject = create :stop_area, :stop_area_type => "commercial_stop_point"
+ # expect(subject.area_type).to eq("CommercialStopPoint")
+ # end
+ # it "should have area_type of StopPlace when stop_area_type is set to stop_place" do
+ # subject = create :stop_area, :stop_area_type => "stop_place"
+ # expect(subject.area_type).to eq("StopPlace")
+ # end
+ # end
+
+ # describe ".parent" do
+ # it "should check if parent method exists" do
+ # subject = create :stop_area, :parent_id => commercial_stop_point.id
+ # expect(subject.parent).to eq(commercial_stop_point)
+ # end
+ # end
+
+ # describe ".possible_children" do
+
+ # it "should find no possible descendant for stop area type quay" do
+ # subject = create :stop_area, :area_type => "Quay"
+ # expect(subject.possible_children).to eq([])
+ # end
+
+ # it "should find no possible descendant for stop area type boarding position" do
+ # subject = create :stop_area, :area_type => "BoardingPosition"
+ # expect(subject.possible_children).to eq([])
+ # end
+
+ # it "should find descendant of type quay or boarding position for stop area type commercial stop point" do
+ # subject = create :stop_area, :area_type => "CommercialStopPoint"
+ # expect(subject.possible_children).to match_array([quay, boarding_position])
+ # end
+
+ # it "should find no children of type stop place or commercial stop point for stop area type stop place" do
+ # subject = create :stop_area, :area_type => "StopPlace"
+ # expect(subject.possible_children).to match_array([stop_place, commercial_stop_point])
+ # end
+ # end
+
+ # describe ".possible_parents" do
+
+ # it "should find parent type commercial stop point for stop area type boarding position" do
+ # subject = create :stop_area, :area_type => "BoardingPosition"
+ # expect(subject.possible_parents).to eq([commercial_stop_point])
+ # end
+
+ # it "should find parent type commercial stop point for stop area type quay" do
+ # subject = create :stop_area, :area_type => "Quay"
+ # expect(subject.possible_parents).to eq([commercial_stop_point])
+ # end
+
+ # it "should find parent type stop place for stop area type commercial stop point" do
+ # subject = create :stop_area, :area_type => "CommercialStopPoint"
+ # expect(subject.possible_parents).to eq([stop_place])
+ # end
+
+ # it "should find parent type stop place for stop area type stop place" do
+ # subject = create :stop_area, :area_type => "StopPlace"
+ # expect(subject.possible_parents).to eq([stop_place])
+ # end
+
+ # end
+
+
+ # describe ".near" do
+
+ # let(:stop_area) { create :stop_area, :latitude => 1, :longitude => 1 }
+ # let(:stop_area2) { create :stop_area, :latitude => 1, :longitude => 1 }
+
+ # it "should find a StopArea at 300m from given origin" do
+ # expect(Chouette::StopArea.near(stop_area.to_lat_lng.endpoint(0, 0.250, :units => :kms))).to eq([stop_area])
+ # end
+
+ # it "should not find a StopArea at more than 300m from given origin" do
+ # expect(Chouette::StopArea.near(stop_area2.to_lat_lng.endpoint(0, 0.350, :units => :kms))).to be_empty
+ # end
+
+ # end
+
+ # describe "#to_lat_lng" do
+
+ # it "should return nil if latitude is nil" do
+ # subject.latitude = nil
+ # expect(subject.to_lat_lng).to be_nil
+ # end
+
+ # it "should return nil if longitude is nil" do
+ # subject.longitude = nil
+ # expect(subject.to_lat_lng).to be_nil
+ # end
+
+ # end
+
+ # describe "#geometry" do
+
+ # it "should be nil when to_lat_lng is nil" do
+ # allow(subject).to receive_messages :to_lat_lng => nil
+ # expect(subject.geometry).to be_nil
+ # end
+
+ # end
+
+ # describe ".bounds" do
+
+ # it "should return transform coordinates in floats" do
+ # allow(Chouette::StopArea.connection).to receive_messages :select_rows => [["113.5292500000000000", "22.1127580000000000", "113.5819330000000000", "22.2157050000000000"]]
+ # expect(GeoRuby::SimpleFeatures::Envelope).to receive(:from_coordinates).with([[113.5292500000000000, 22.1127580000000000], [113.5819330000000000, 22.2157050000000000]])
+ # Chouette::StopArea.bounds
+ # end
+
+ # end
+
+ # describe "#default_position" do
+
+ # # FIXME #821
+ # # it "should return referential center point when StopArea.bounds is nil" do
+ # # allow(Chouette::StopArea).to receive_messages :bounds => nil
+ # # expect(subject.default_position).not_to be_nil
+ # # end
+
+ # it "should return StopArea.bounds center" do
+ # allow(Chouette::StopArea).to receive_messages :bounds => double(:center => "center")
+ # expect(subject.default_position).to eq(Chouette::StopArea.bounds.center)
+ # end
+
+ # end
+
+ # describe "#children_at_base" do
+ # it "should have 2 children_at_base" do
+ # subject = create :stop_area, :area_type => "StopPlace"
+ # commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => subject
+ # quay1 = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
+ # quay2 = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
+ # expect(subject.children_at_base.size).to eq(2)
+ # end
+ # end
+
+
+ # describe "#generic_access_link_matrix" do
+ # it "should have no access_links in matrix with no access_point" do
+ # subject = create :stop_area, :area_type => "StopPlace"
+ # commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => subject
+ # expect(subject.generic_access_link_matrix.size).to eq(0)
+ # end
+ # it "should have 4 generic_access_links in matrix with 2 access_points" do
+ # subject = create :stop_area, :area_type => "StopPlace"
+ # commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => subject
+ # access_point1 = create :access_point, :stop_area => subject
+ # access_point2 = create :access_point, :stop_area => subject
+ # expect(subject.generic_access_link_matrix.size).to eq(4)
+ # end
+ # end
+ # describe "#detail_access_link_matrix" do
+ # it "should have no access_links in matrix with no access_point" do
+ # subject = create :stop_area, :area_type => "StopPlace"
+ # commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => subject
+ # quay1 = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
+ # quay2 = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
+ # expect(subject.detail_access_link_matrix.size).to eq(0)
+ # end
+ # it "should have 8 detail_access_links in matrix with 2 children_at_base and 2 access_points" do
+ # subject = create :stop_area, :area_type => "StopPlace"
+ # commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => subject
+ # quay1 = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
+ # quay2 = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
+ # access_point1 = create :access_point, :stop_area => subject
+ # access_point2 = create :access_point, :stop_area => subject
+ # expect(subject.detail_access_link_matrix.size).to eq(8)
+ # end
+ # end
+ # describe "#parents" do
+ # it "should return parent hireachy list" do
+ # stop_place = create :stop_area, :area_type => "StopPlace"
+ # commercial_stop_point = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => stop_place
+ # subject = create :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
+ # expect(subject.parents.size).to eq(2)
+ # end
+ # it "should return empty parent hireachy list" do
+ # subject = create :stop_area, :area_type => "Quay"
+ # expect(subject.parents.size).to eq(0)
+ # end
+ # end
+
+ # describe "#clean_invalid_access_links" do
+ # it "should remove invalid access links" do
+ # # subject is a CSP with a SP as parent, a quay as child
+ # # 2 access_points of SP have access_link, one on subject, one on subject child
+ # # when detaching subject from SP, both access_links must be deleted
+ # stop_place = create :stop_area, :area_type => "StopPlace"
+ # subject = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => stop_place
+ # access_point1 = create :access_point, :stop_area => stop_place
+ # access_point2 = create :access_point, :stop_area => stop_place
+ # quay = create :stop_area, :parent => subject, :area_type => "Quay"
+ # access_link1 = create :access_link, :stop_area => subject, :access_point => access_point1
+ # access_link2 = create :access_link, :stop_area => quay, :access_point => access_point2
+ # subject.save
+ # expect(subject.access_links.size).to eq(1)
+ # expect(quay.access_links.size).to eq(1)
+ # subject.parent=nil
+ # subject.save
+ # subject.reload
+ # expect(subject.access_links.size).to eq(0)
+ # expect(quay.access_links.size).to eq(0)
+ # end
+ # it "should not remove still valid access links" do
+ # # subject is a Q of CSP with a SP as parent
+ # # 2 access_points, one of SP, one of CSP have access_link on subject
+ # # when changing subject CSP to another CSP of same SP
+ # # one access_links must be kept
+ # stop_place = create :stop_area, :area_type => "StopPlace"
+ # commercial_stop_point1 = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => stop_place
+ # commercial_stop_point2 = create :stop_area, :area_type => "CommercialStopPoint" ,:parent => stop_place
+ # access_point1 = create :access_point, :stop_area => stop_place
+ # access_point2 = create :access_point, :stop_area => commercial_stop_point1
+ # subject = create :stop_area, :parent => commercial_stop_point1, :area_type => "Quay"
+ # access_link1 = create :access_link, :stop_area => subject, :access_point => access_point1
+ # access_link2 = create :access_link, :stop_area => subject, :access_point => access_point2
+ # subject.save
+ # expect(subject.access_links.size).to eq(2)
+ # subject.parent=commercial_stop_point2
+ # subject.save
+ # subject.reload
+ # expect(subject.access_links.size).to eq(1)
+ # end
+ # end
+
+ # describe "#coordinates" do
+ # it "should convert coordinates into latitude/longitude" do
+ # subject = create :stop_area, :area_type => "BoardingPosition", :coordinates => "45.123,120.456"
+ # expect(subject.longitude).to be_within(0.001).of(120.456)
+ # expect(subject.latitude).to be_within(0.001).of(45.123)
+ # end
+ # it "should set empty coordinates into nil latitude/longitude" do
+ # subject = create :stop_area, :area_type => "BoardingPosition", :coordinates => "45.123,120.456"
+ # expect(subject.longitude).to be_within(0.001).of(120.456)
+ # expect(subject.latitude).to be_within(0.001).of(45.123)
+ # subject.coordinates = ""
+ # subject.save
+ # expect(subject.longitude).to be_nil
+ # expect(subject.latitude).to be_nil
+ # end
+ # it "should convert latitude/longitude into coordinates" do
+ # subject = create :stop_area, :area_type => "BoardingPosition", :longitude => 120.456, :latitude => 45.123
+ # expect(subject.coordinates).to eq("45.123,120.456")
+ # end
+ # it "should convert nil latitude/longitude into empty coordinates" do
+ # subject = create :stop_area, :area_type => "BoardingPosition", :longitude => nil, :latitude => nil
+ # expect(subject.coordinates).to eq("")
+ # end
+ # it "should accept valid coordinates" do
+ # subject = create :stop_area, :area_type => "BoardingPosition", :coordinates => "45.123,120.456"
+ # expect(subject.valid?).to be_truthy
+ # subject.coordinates = "45.123, 120.456"
+ # expect(subject.valid?).to be_truthy
+ # expect(subject.longitude).to be_within(0.001).of(120.456)
+ # expect(subject.latitude).to be_within(0.001).of(45.123)
+ # subject.coordinates = "45.123, -120.456"
+ # expect(subject.valid?).to be_truthy
+ # subject.coordinates = "45.123 ,120.456"
+ # expect(subject.valid?).to be_truthy
+ # subject.coordinates = "45.123 , 120.456"
+ # expect(subject.valid?).to be_truthy
+ # subject.coordinates = " 45.123,120.456"
+ # expect(subject.valid?).to be_truthy
+ # subject.coordinates = "45.123,120.456 "
+ # expect(subject.valid?).to be_truthy
+ # end
+ # it "should accept valid coordinates on limits" do
+ # subject = create :stop_area, :area_type => "BoardingPosition", :coordinates => "90,180"
+ # expect(subject.valid?).to be_truthy
+ # subject.coordinates = "-90,-180"
+ # expect(subject.valid?).to be_truthy
+ # subject.coordinates = "-90.,180."
+ # expect(subject.valid?).to be_truthy
+ # subject.coordinates = "-90.0,180.00"
+ # expect(subject.valid?).to be_truthy
+ # end
+ # it "should reject invalid coordinates" do
+ # subject = create :stop_area, :area_type => "BoardingPosition"
+ # subject.coordinates = ",12"
+ # expect(subject.valid?).to be_falsey
+ # subject.coordinates = "-90"
+ # expect(subject.valid?).to be_falsey
+ # subject.coordinates = "-90.1,180."
+ # expect(subject.valid?).to be_falsey
+ # subject.coordinates = "-90.0,180.1"
+ # expect(subject.valid?).to be_falsey
+ # subject.coordinates = "-91.0,18.1"
+ # expect(subject.valid?).to be_falsey
+ # end
+ # end
# Refs #1627
# describe "#duplicate" do
diff --git a/spec/tasks/reflex_rake_spec.rb b/spec/tasks/reflex_rake_spec.rb
index 7a27b49fc..ab1aefc7d 100644
--- a/spec/tasks/reflex_rake_spec.rb
+++ b/spec/tasks/reflex_rake_spec.rb
@@ -31,7 +31,7 @@ describe 'reflex:sync' do
it 'should map xml data to StopArea attribute' do
stop_area = Chouette::StopArea.find_by(objectid: 'FR:77153:LDA:69325:STIF')
expect(stop_area.zip_code).to eq '77153'
- expect(stop_area.area_type).to eq 'StopPlace'
+ expect(stop_area.area_type).to eq 'lda'
end
context 'On next sync' do