foreman-tasks 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +12 -12
  3. data/.rubocop_todo.yml +34 -116
  4. data/app/controllers/foreman_tasks/api/recurring_logics_controller.rb +20 -1
  5. data/app/controllers/foreman_tasks/api/tasks_controller.rb +29 -9
  6. data/app/controllers/foreman_tasks/concerns/hosts_controller_extension.rb +1 -1
  7. data/app/controllers/foreman_tasks/recurring_logics_controller.rb +19 -0
  8. data/app/helpers/foreman_tasks/foreman_tasks_helper.rb +1 -3
  9. data/app/lib/actions/helpers/humanizer.rb +1 -3
  10. data/app/lib/actions/proxy_action.rb +33 -12
  11. data/app/models/foreman_tasks/concerns/action_triggering.rb +1 -1
  12. data/app/models/foreman_tasks/recurring_logic.rb +1 -0
  13. data/app/models/foreman_tasks/remote_task.rb +1 -0
  14. data/app/models/foreman_tasks/task.rb +4 -0
  15. data/app/models/foreman_tasks/task/dynflow_task.rb +1 -1
  16. data/app/models/foreman_tasks/task/search.rb +11 -1
  17. data/app/services/foreman_tasks/troubleshooting_help_generator.rb +0 -4
  18. data/app/views/foreman_tasks/api/recurring_logics/base.json.rabl +2 -1
  19. data/app/views/foreman_tasks/api/tasks/details.json.rabl +1 -0
  20. data/app/views/foreman_tasks/api/tasks/show.json.rabl +1 -1
  21. data/app/views/foreman_tasks/recurring_logics/index.html.erb +30 -0
  22. data/app/views/foreman_tasks/tasks/show.html.erb +3 -0
  23. data/config/routes.rb +7 -0
  24. data/foreman-tasks.gemspec +4 -6
  25. data/lib/foreman_tasks/dynflow/console_authorizer.rb +2 -2
  26. data/lib/foreman_tasks/engine.rb +15 -13
  27. data/lib/foreman_tasks/tasks/cleanup.rake +1 -1
  28. data/lib/foreman_tasks/tasks/export_tasks.rake +2 -2
  29. data/lib/foreman_tasks/test_extensions.rb +1 -1
  30. data/lib/foreman_tasks/version.rb +1 -1
  31. data/locale/action_names.rb +1 -1
  32. data/package.json +1 -2
  33. data/script/rails +2 -2
  34. data/test/factories/task_factory.rb +34 -2
  35. data/test/foreman_tasks_test_helper.rb +4 -0
  36. data/test/unit/actions/action_with_sub_plans_test.rb +1 -1
  37. data/test/unit/task_test.rb +160 -74
  38. data/webpack/ForemanTasks/Components/TaskDetails/Components/Task.js +4 -0
  39. data/webpack/ForemanTasks/Components/TaskDetails/Components/TaskInfo.js +3 -12
  40. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/Task.test.js +1 -0
  41. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/Task.test.js.snap +3 -1
  42. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/TaskInfo.test.js.snap +2 -6
  43. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsSelectors.js +4 -1
  44. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/__snapshots__/TaskDetails.test.js.snap +1 -0
  45. data/webpack/ForemanTasks/Components/TaskDetails/index.js +2 -0
  46. data/webpack/ForemanTasks/Components/TasksTable/SubTasksPage.js +3 -1
  47. data/webpack/ForemanTasks/Components/TasksTable/TasksTableActions.js +87 -21
  48. data/webpack/ForemanTasks/Components/TasksTable/TasksTableConstants.js +7 -7
  49. data/webpack/ForemanTasks/Components/TasksTable/TasksTablePage.js +31 -22
  50. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTable.fixtures.js +2 -1
  51. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTableActions.test.js +44 -46
  52. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/SubTasksPage.test.js.snap +3 -1
  53. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksIndexPage.test.js.snap +2 -1
  54. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTableActions.test.js.snap +61 -5
  55. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTablePage.test.js.snap +6 -2
  56. metadata +10 -10
@@ -1,15 +1,12 @@
1
1
  import { getControllerSearchProps } from 'foremanReact/constants';
2
2
 
3
3
  export const TASKS_TABLE_ID = 'TASKS_TABLE';
4
- export const TASKS_CONTROLLER = 'tasks';
5
- export const TASKS_SUCCESS = 'TASKS_SUCCESS';
6
- export const TASKS_REQUEST = 'TASKS_REQUEST';
7
- export const TASKS_FAILURE = 'TASKS_FAILURE';
8
4
  export const SELECT_ROWS = 'SELECT_ROWS';
9
5
  export const UNSELECT_ROWS = 'UNSELECT_ROWS';
10
6
  export const UNSELECT_ALL_ROWS = 'UNSELECT_ALL_ROWS';
11
- export const CANCEL = 'CANCEL';
12
- export const RESUME = 'RESUME';
7
+ export const TASKS_RESUME_REQUEST = 'TASKS_RESUME_REQUEST';
8
+ export const TASKS_RESUME_SUCCESS = 'TASKS_RESUME_SUCCESS';
9
+ export const TASKS_RESUME_FAILURE = 'TASKS_RESUME_FAILURE';
13
10
 
14
11
  export const CANCEL_CONFIRM_MODAL_ID = 'cancelConfirmModal';
15
12
  export const RESUME_CONFIRM_MODAL_ID = 'resumeConfirmModal';
@@ -17,4 +14,7 @@ export const CANCEL_SELECTED_CONFIRM_MODAL_ID = 'cancelSelectedConfirmModal';
17
14
  export const RESUME_SELECTED_CONFIRM_MODAL_ID = 'resumeSelectedConfirmModal';
18
15
  export const UPDATE_CLICKED = 'UPDATE_CLICKED';
19
16
 
20
- export const TASKS_SEARCH_PROPS = getControllerSearchProps('tasks');
17
+ export const TASKS_SEARCH_PROPS = {
18
+ ...getControllerSearchProps('tasks'),
19
+ controller: 'foreman_tasks/tasks'
20
+ };
@@ -14,8 +14,6 @@ import { resolveSearchQuery, addSearchToURL } from './TasksTableHelpers';
14
14
  import { ConfirmationModals } from './Components/ConfirmationModals';
15
15
  import {
16
16
  TASKS_SEARCH_PROPS,
17
- RESUME,
18
- CANCEL,
19
17
  CANCEL_SELECTED_CONFIRM_MODAL_ID,
20
18
  RESUME_SELECTED_CONFIRM_MODAL_ID,
21
19
  RESUME_CONFIRM_MODAL_ID,
@@ -24,23 +22,22 @@ import {
24
22
  import { ActionSelectButton } from './Components/ActionSelectButton';
25
23
  import './TasksTablePage.scss';
26
24
 
27
- const TasksTablePage = ({ getBreadcrumbs, history, clicked, ...props }) => {
25
+ const TasksTablePage = ({ getBreadcrumbs, history, clicked, createHeader, ...props }) => {
28
26
  const url = history.location.pathname + history.location.search;
29
27
  const uriQuery = getURIQuery(url);
30
28
  const onSearch = searchQuery => {
31
29
  resolveSearchQuery(searchQuery, history);
32
- props.getTableItems(url);
33
30
  };
34
31
 
35
- const getSelected = () => {
36
- const selected = props.results.filter(item =>
32
+ const getSelectedTasks = () => {
33
+ const selectedIDs = props.results.filter(item =>
37
34
  props.selectedRows.includes(item.id)
38
35
  );
39
- return selected.map(item => ({
36
+ return selectedIDs.map(item => ({
40
37
  name: item.action,
41
38
  id: item.id,
42
- isCancelleble: item.availableActions.cancellable,
43
- isResumeble: item.availableActions.resumable,
39
+ isCancellable: item.availableActions.cancellable,
40
+ isResumable: item.availableActions.resumable,
44
41
  }));
45
42
  };
46
43
 
@@ -55,30 +52,38 @@ const TasksTablePage = ({ getBreadcrumbs, history, clicked, ...props }) => {
55
52
  resumeModal: useForemanModal({ id: RESUME_CONFIRM_MODAL_ID }),
56
53
  };
57
54
 
55
+ const {
56
+ bulkCancel,
57
+ bulkResume,
58
+ cancelTask,
59
+ resumeTask,
60
+ parentTaskID,
61
+ } = props;
58
62
  const tasksActions = {
59
63
  cancelSelectedTasks: () => {
60
- props.actionSelected(CANCEL, getSelected(), url, props.parentTaskID);
64
+ bulkCancel({ selected: getSelectedTasks(), url, parentTaskID });
61
65
  },
62
66
  cancelTask: () => {
63
- props.cancelTask(
64
- clicked.taskId,
65
- clicked.taskName,
67
+ cancelTask({
68
+ taskId: clicked.taskId,
69
+ taskName: clicked.taskName,
66
70
  url,
67
- props.parentTaskID
68
- );
71
+ parentTaskID,
72
+ });
69
73
  },
70
74
  resumeSelectedTasks: () => {
71
- props.actionSelected(RESUME, getSelected(), url, props.parentTaskID);
75
+ bulkResume({ selected: getSelectedTasks(), url, parentTaskID });
72
76
  },
73
77
  resumeTask: () => {
74
- props.resumeTask(
75
- clicked.taskId,
76
- clicked.taskName,
78
+ resumeTask({
79
+ taskId: clicked.taskId,
80
+ taskName: clicked.taskName,
77
81
  url,
78
- props.parentTaskID
79
- );
82
+ parentTaskID,
83
+ });
80
84
  },
81
85
  };
86
+
82
87
  return (
83
88
  <div className="tasks-table-wrapper">
84
89
  <ConfirmationModals
@@ -90,6 +95,7 @@ const TasksTablePage = ({ getBreadcrumbs, history, clicked, ...props }) => {
90
95
  searchable
91
96
  searchProps={TASKS_SEARCH_PROPS}
92
97
  onSearch={onSearch}
98
+ header={createHeader(props.actionName)}
93
99
  breadcrumbOptions={getBreadcrumbs(props.actionName)}
94
100
  toastNotifications="foreman-tasks-cancel"
95
101
  toolbarButtons={
@@ -124,11 +130,13 @@ TasksTablePage.propTypes = {
124
130
  actionName: PropTypes.string,
125
131
  status: PropTypes.oneOf(Object.keys(STATUS)),
126
132
  history: PropTypes.object.isRequired,
127
- actionSelected: PropTypes.func.isRequired,
128
133
  cancelTask: PropTypes.func.isRequired,
129
134
  resumeTask: PropTypes.func.isRequired,
135
+ bulkCancel: PropTypes.func.isRequired,
136
+ bulkResume: PropTypes.func.isRequired,
130
137
  selectedRows: PropTypes.arrayOf(PropTypes.string),
131
138
  parentTaskID: PropTypes.string,
139
+ createHeader: PropTypes.func,
132
140
  clicked: PropTypes.shape({
133
141
  taskId: PropTypes.string,
134
142
  taskName: PropTypes.string,
@@ -142,6 +150,7 @@ TasksTablePage.defaultProps = {
142
150
  selectedRows: [],
143
151
  parentTaskID: null,
144
152
  clicked: {},
153
+ createHeader: () => __('Tasks'),
145
154
  };
146
155
 
147
156
  export default TasksTablePage;
@@ -6,7 +6,8 @@ export const minProps = {
6
6
  itemCount: 2,
7
7
  cancelTask: jest.fn(),
8
8
  resumeTask: jest.fn(),
9
- actionSelected: jest.fn(),
9
+ bulkCancel: jest.fn(),
10
+ bulkResume: jest.fn(),
10
11
  selectAllRows: jest.fn(),
11
12
  unselectAllRows: jest.fn(),
12
13
  selectRow: jest.fn(),
@@ -1,13 +1,14 @@
1
1
  import { testActionSnapshotWithFixtures } from '@theforeman/test';
2
2
  import API from 'foremanReact/API';
3
- import { TASKS_TABLE_ID, CANCEL, RESUME } from '../TasksTableConstants';
3
+ import { TASKS_TABLE_ID } from '../TasksTableConstants';
4
4
  import {
5
5
  getTableItems,
6
6
  cancelTask,
7
7
  cancelTaskRequest,
8
8
  resumeTask,
9
9
  resumeTaskRequest,
10
- actionSelected,
10
+ bulkCancel,
11
+ bulkResume,
11
12
  } from '../TasksTableActions';
12
13
 
13
14
  jest.mock('foremanReact/components/common/table', () => ({
@@ -18,10 +19,20 @@ jest.mock('foremanReact/API');
18
19
 
19
20
  API.post.mockImplementation(() => ({ data: 'some-data' }));
20
21
 
22
+ const taskInfo = {
23
+ taskId: 'some-id',
24
+ taskName: 'some-name',
25
+ };
26
+
27
+ const task = {
28
+ id: 'some-id',
29
+ name: 'some-name',
30
+ };
31
+
21
32
  const fixtures = {
22
- 'should cancelTask': () => cancelTask('some-id', 'some-name', 'some-url'),
33
+ 'should cancelTask': () => cancelTask({ ...taskInfo, url: 'some-url' }),
23
34
  'should cancelTaskRequest and succeed': () =>
24
- cancelTaskRequest('some-id', 'some-name', 'some-url'),
35
+ cancelTaskRequest('some-id', 'some-name'),
25
36
  'should cancelTaskRequest and fail': () => {
26
37
  API.post.mockImplementation(() =>
27
38
  Promise.reject(new Error('Network Error'))
@@ -29,60 +40,47 @@ const fixtures = {
29
40
  return cancelTaskRequest('some-id', 'some-name');
30
41
  },
31
42
 
32
- 'should resumeTask': () => resumeTask('some-id', 'some-name', 'some-url'),
43
+ 'should resumeTask': () => resumeTask({ ...taskInfo, url: 'some-url' }),
33
44
  'should resumeTaskRequest and succeed': () => {
34
45
  API.post.mockImplementation(() => ({ data: 'some-data' }));
35
- return resumeTaskRequest('some-id', 'some-name', 'some-url');
46
+ return resumeTaskRequest('some-id', 'some-name');
36
47
  },
37
48
  'should resumeTaskRequest and fail': () => {
38
49
  API.post.mockImplementation(() =>
39
50
  Promise.reject(new Error('Network Error'))
40
51
  );
41
- return resumeTaskRequest('some-id', 'some-name', 'some-url');
52
+ return resumeTaskRequest('some-id', 'some-name');
42
53
  },
43
- 'should actionSelected CANCEL not cancelleble': () => {
44
- const selected = [
45
- {
46
- id: '',
47
- name: '',
48
- isResumeble: false,
49
- isCancelleble: false,
50
- },
51
- ];
52
- return actionSelected(CANCEL, selected, 'some-url');
54
+ 'handles bulkResume requests that fail': () => {
55
+ const selected = [{ ...task, isResumable: true, isCancellable: false }];
56
+
57
+ API.post.mockImplementation(() =>
58
+ Promise.reject(new Error('Network Error'))
59
+ );
60
+ return bulkResume({ selected, url: 'some-url' });
53
61
  },
54
- 'should actionSelected CANCEL cancelleble': () => {
55
- const selected = [
56
- {
57
- id: '',
58
- name: '',
59
- isResumeble: false,
60
- isCancelleble: true,
62
+ 'handles resumable bulkResume requests': () => {
63
+ const selected = [{ ...task, isResumable: true, isCancellable: false }];
64
+
65
+ API.post.mockImplementation(() => ({
66
+ data: {
67
+ resumed: [{ action: 'I am resumed' }],
68
+ failed: [{ action: 'I am failed' }],
61
69
  },
62
- ];
63
- return actionSelected(CANCEL, selected, 'some-url');
70
+ }));
71
+ return bulkResume({ selected, url: 'some-url' });
64
72
  },
65
- 'should actionSelected RESUME not resumable': () => {
66
- const selected = [
67
- {
68
- id: '',
69
- name: '',
70
- isResumeble: false,
71
- isCancelleble: false,
72
- },
73
- ];
74
- return actionSelected(RESUME, selected, 'some-url');
73
+ 'handles bulkCancel requests': () => {
74
+ const selected = [{ ...task, isResumable: false, isCancellable: true }];
75
+ return bulkCancel({ selected, url: 'some-url' });
75
76
  },
76
- 'should actionSelected RESUME resumable': () => {
77
- const selected = [
78
- {
79
- id: '',
80
- name: '',
81
- isResumeble: true,
82
- isCancelleble: false,
83
- },
84
- ];
85
- return actionSelected(RESUME, selected, 'some-url');
77
+ 'handles bulkCancel requests that are not cancellable': () => {
78
+ const selected = [{ ...task, isResumable: false, isCancellable: false }];
79
+ return bulkCancel({ selected, url: 'some-url' });
80
+ },
81
+ 'handles bulkResume requests that are not resumable': () => {
82
+ const selected = [{ ...task, isResumable: false, isCancellable: false }];
83
+ return bulkResume({ selected, url: 'some-url' });
86
84
  },
87
85
  };
88
86
  describe('TasksTable actions', () => {
@@ -2,8 +2,10 @@
2
2
 
3
3
  exports[`SubTasksPage rendering render with minimal props 1`] = `
4
4
  <Connect(TasksTablePage)
5
- actionSelected={[MockFunction]}
5
+ bulkCancel={[MockFunction]}
6
+ bulkResume={[MockFunction]}
6
7
  cancelTask={[MockFunction]}
8
+ createHeader={[Function]}
7
9
  getBreadcrumbs={[MockFunction]}
8
10
  getTableItems={[MockFunction]}
9
11
  history={
@@ -2,7 +2,8 @@
2
2
 
3
3
  exports[`TasksIndexPage rendering render with minimal props 1`] = `
4
4
  <Connect(TasksTablePage)
5
- actionSelected={[MockFunction]}
5
+ bulkCancel={[MockFunction]}
6
+ bulkResume={[MockFunction]}
6
7
  cancelTask={[MockFunction]}
7
8
  getBreadcrumbs={[MockFunction]}
8
9
  getTableItems={[MockFunction]}
@@ -1,6 +1,6 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`TasksTable actions should actionSelected CANCEL cancelleble 1`] = `
3
+ exports[`TasksTable actions handles bulkCancel requests 1`] = `
4
4
  Array [
5
5
  Array [
6
6
  [Function],
@@ -14,7 +14,7 @@ Array [
14
14
  ]
15
15
  `;
16
16
 
17
- exports[`TasksTable actions should actionSelected CANCEL not cancelleble 1`] = `
17
+ exports[`TasksTable actions handles bulkCancel requests that are not cancellable 1`] = `
18
18
  Array [
19
19
  Array [
20
20
  Object {
@@ -30,7 +30,7 @@ Array [
30
30
  ]
31
31
  `;
32
32
 
33
- exports[`TasksTable actions should actionSelected RESUME not resumable 1`] = `
33
+ exports[`TasksTable actions handles bulkResume requests that are not resumable 1`] = `
34
34
  Array [
35
35
  Array [
36
36
  Object {
@@ -46,10 +46,66 @@ Array [
46
46
  ]
47
47
  `;
48
48
 
49
- exports[`TasksTable actions should actionSelected RESUME resumable 1`] = `
49
+ exports[`TasksTable actions handles bulkResume requests that fail 1`] = `
50
50
  Array [
51
51
  Array [
52
- [Function],
52
+ Object {
53
+ "type": "TASKS_RESUME_REQUEST",
54
+ },
55
+ ],
56
+ Array [
57
+ Object {
58
+ "error": [Error: Network Error],
59
+ "type": "TASKS_RESUME_FAILURE",
60
+ },
61
+ ],
62
+ Array [
63
+ Object {
64
+ "payload": Object {
65
+ "message": Object {
66
+ "message": "Cannot resume tasks at the moment Error: Network Error",
67
+ "type": "error",
68
+ },
69
+ },
70
+ "type": "TOASTS_ADD",
71
+ },
72
+ ],
73
+ ]
74
+ `;
75
+
76
+ exports[`TasksTable actions handles resumable bulkResume requests 1`] = `
77
+ Array [
78
+ Array [
79
+ Object {
80
+ "type": "TASKS_RESUME_REQUEST",
81
+ },
82
+ ],
83
+ Array [
84
+ Object {
85
+ "type": "TASKS_RESUME_SUCCESS",
86
+ },
87
+ ],
88
+ Array [
89
+ Object {
90
+ "payload": Object {
91
+ "message": Object {
92
+ "message": "I am resumed Task execution was resumed",
93
+ "type": "success",
94
+ },
95
+ },
96
+ "type": "TOASTS_ADD",
97
+ },
98
+ ],
99
+ Array [
100
+ Object {
101
+ "payload": Object {
102
+ "message": Object {
103
+ "message": "I am failed Task execution could not be resumed",
104
+ "type": "error",
105
+ },
106
+ },
107
+ "type": "TOASTS_ADD",
108
+ },
53
109
  ],
54
110
  Array [
55
111
  "TASKS_TABLE",
@@ -69,6 +69,7 @@ exports[`TasksTablePage rendering render with Breadcrubs 1`] = `
69
69
  ],
70
70
  }
71
71
  }
72
+ header="Tasks"
72
73
  onSearch={[Function]}
73
74
  searchProps={
74
75
  Object {
@@ -105,7 +106,8 @@ exports[`TasksTablePage rendering render with Breadcrubs 1`] = `
105
106
  >
106
107
  <TasksTable
107
108
  actionName=""
108
- actionSelected={[MockFunction]}
109
+ bulkCancel={[MockFunction]}
110
+ bulkResume={[MockFunction]}
109
111
  cancelTask={[MockFunction]}
110
112
  error={null}
111
113
  getTableItems={[MockFunction]}
@@ -225,6 +227,7 @@ exports[`TasksTablePage rendering render with minimal props 1`] = `
225
227
  parentTaskID={null}
226
228
  />
227
229
  }
230
+ header="Tasks"
228
231
  onSearch={[Function]}
229
232
  searchProps={
230
233
  Object {
@@ -261,7 +264,8 @@ exports[`TasksTablePage rendering render with minimal props 1`] = `
261
264
  >
262
265
  <TasksTable
263
266
  actionName=""
264
- actionSelected={[MockFunction]}
267
+ bulkCancel={[MockFunction]}
268
+ bulkResume={[MockFunction]}
265
269
  cancelTask={[MockFunction]}
266
270
  error={null}
267
271
  getTableItems={[MockFunction]}
metadata CHANGED
@@ -1,45 +1,45 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman-tasks
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Nečas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-16 00:00:00.000000000 Z
11
+ date: 2020-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: foreman-tasks-core
14
+ name: dynflow
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 1.2.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 1.2.3
27
27
  - !ruby/object:Gem::Dependency
28
- name: dynflow
28
+ name: foreman-tasks-core
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.2.3
33
+ version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 1.2.3
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: sinatra
42
+ name: get_process_mem
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.1.4
69
69
  - !ruby/object:Gem::Dependency
70
- name: get_process_mem
70
+ name: sinatra
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="