croesus 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +121 -0
  3. data/.ruby-version +1 -0
  4. data/API_operation.txt +197 -0
  5. data/CHANGELOG.md +0 -0
  6. data/Gemfile +3 -0
  7. data/LICENSE.txt +0 -0
  8. data/README.md +146 -0
  9. data/Rakefile +26 -0
  10. data/bin/console_cmd.rb +133 -0
  11. data/croesus.gemspec +39 -0
  12. data/lib/croesus/associations.rb +46 -0
  13. data/lib/croesus/attribute.rb +41 -0
  14. data/lib/croesus/attributes.rb +93 -0
  15. data/lib/croesus/coerce.rb +110 -0
  16. data/lib/croesus/coercions/boolean_definitions.rb +32 -0
  17. data/lib/croesus/coercions/date_definitions.rb +30 -0
  18. data/lib/croesus/coercions/date_time_definitions.rb +30 -0
  19. data/lib/croesus/coercions/fixnum_definitions.rb +32 -0
  20. data/lib/croesus/coercions/float_definitions.rb +30 -0
  21. data/lib/croesus/coercions/hash_definitions.rb +27 -0
  22. data/lib/croesus/coercions/integer_definitions.rb +29 -0
  23. data/lib/croesus/coercions/string_definitions.rb +43 -0
  24. data/lib/croesus/coercions/time_definitions.rb +30 -0
  25. data/lib/croesus/core_ext/blank.rb +123 -0
  26. data/lib/croesus/core_ext/hash.rb +185 -0
  27. data/lib/croesus/dsl/dsl.rb +35 -0
  28. data/lib/croesus/dsl/helpers.rb +43 -0
  29. data/lib/croesus/dsl/mod_factory.rb +191 -0
  30. data/lib/croesus/dsl/resource_dsl.rb +59 -0
  31. data/lib/croesus/dsl/route_dsl.rb +42 -0
  32. data/lib/croesus/identity_map.rb +98 -0
  33. data/lib/croesus/platform.rb +47 -0
  34. data/lib/croesus/querying.rb +63 -0
  35. data/lib/croesus/resources/about.rb +15 -0
  36. data/lib/croesus/resources/basic_methods.rb +36 -0
  37. data/lib/croesus/resources/connectivity.rb +42 -0
  38. data/lib/croesus/resources/container.rb +135 -0
  39. data/lib/croesus/resources/fault.rb +38 -0
  40. data/lib/croesus/resources/fault_effect.rb +24 -0
  41. data/lib/croesus/resources/group.rb +37 -0
  42. data/lib/croesus/resources/host.rb +26 -0
  43. data/lib/croesus/resources/job.rb +27 -0
  44. data/lib/croesus/resources/namespace.rb +39 -0
  45. data/lib/croesus/resources/policy.rb +38 -0
  46. data/lib/croesus/resources/source.rb +86 -0
  47. data/lib/croesus/resources/source_config.rb +54 -0
  48. data/lib/croesus/resources/source_environment.rb +58 -0
  49. data/lib/croesus/resources/source_repository.rb +14 -0
  50. data/lib/croesus/resources/system_info.rb +21 -0
  51. data/lib/croesus/resources/timeflow.rb +40 -0
  52. data/lib/croesus/resources/timeflow_snapshot.rb +38 -0
  53. data/lib/croesus/utils.rb +262 -0
  54. data/lib/croesus/validations/many.rb +27 -0
  55. data/lib/croesus/validations/optional.rb +27 -0
  56. data/lib/croesus/validations.rb +91 -0
  57. data/lib/croesus/validators/base.rb +47 -0
  58. data/lib/croesus/validators/boolean_validator.rb +32 -0
  59. data/lib/croesus/validators/email_validator.rb +36 -0
  60. data/lib/croesus/validators/enumerable_validator.rb +40 -0
  61. data/lib/croesus/validators/hash_validator.rb +50 -0
  62. data/lib/croesus/validators/lambda_validator.rb +54 -0
  63. data/lib/croesus/validators/many_validator.rb +57 -0
  64. data/lib/croesus/validators/optional_validator.rb +41 -0
  65. data/lib/croesus/validators/presence_validator.rb +36 -0
  66. data/lib/croesus/validators/simple_type_validators.rb +38 -0
  67. data/lib/croesus/validators/simple_validator.rb +40 -0
  68. data/lib/croesus/version.rb +43 -0
  69. data/lib/croesus/web_client/web_client.rb +153 -0
  70. data/lib/croesus/web_client/web_request.rb +77 -0
  71. data/lib/croesus/web_client/web_response.rb +70 -0
  72. data/lib/croesus.rb +250 -0
  73. metadata +325 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 22d33e6e4cdd37db74378da89f2bd2f175e1ae71
4
+ data.tar.gz: fa8287cacf9e7742238a1544184e4e5e96303bc7
5
+ SHA512:
6
+ metadata.gz: c2c7847b85e88e2ead476f02f467a913b8d1fb9bfe0b06e958091490cc2b2817661c0f5c694d42ac6964792e656665c71d5cca757658ebce27ffbcfdbe22833c
7
+ data.tar.gz: 7c97d5ace4c3263da5c4bc834df5720d910a6f01547e03f1b2aa3483d8eaf67633220a023380f01c34339689feca1111142308801ab8a2c352600dc0a770aa02
data/.gitignore ADDED
@@ -0,0 +1,121 @@
1
+ # Created by https://www.gitignore.io
2
+
3
+ ### Ruby ###
4
+ *.gem
5
+ *.rbc
6
+ /.config
7
+ /coverage/
8
+ /InstalledFiles
9
+ /pkg/
10
+ /spec/reports/
11
+ /test/tmp/
12
+ /test/version_tmp/
13
+ /tmp/
14
+
15
+ ## Specific to RubyMotion:
16
+ .dat*
17
+ .repl_history
18
+ build/
19
+
20
+ ## Documentation cache and generated files:
21
+ /.yardoc/
22
+ /_yardoc/
23
+ /doc/
24
+ /rdoc/
25
+
26
+ ## Environment normalisation:
27
+ /.bundle/
28
+ /lib/bundler/man/
29
+
30
+ # for a library or gem, you might want to ignore these files since the code is
31
+ # intended to run in multiple environments; otherwise, check them in:
32
+ # Gemfile.lock
33
+ # .ruby-version
34
+ # .ruby-gemset
35
+
36
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
37
+ .rvmrc
38
+
39
+
40
+ ### TextMate ###
41
+ *.tmproj
42
+ *.tmproject
43
+ tmtags
44
+
45
+
46
+ ### SublimeText ###
47
+ # cache files for sublime text
48
+ *.tmlanguage.cache
49
+ *.tmPreferences.cache
50
+ *.stTheme.cache
51
+
52
+ # workspace files are user-specific
53
+ *.sublime-workspace
54
+
55
+ # project files should be checked into the repository, unless a significant
56
+ # proportion of contributors will probably not be using SublimeText
57
+ # *.sublime-project
58
+
59
+ # sftp configuration file
60
+ sftp-config.json
61
+
62
+
63
+ ### Tags ###
64
+ # Ignore tags created by etags, ctags, gtags (GNU global) and cscope
65
+ TAGS
66
+ !TAGS/
67
+ tags
68
+ !tags/
69
+ gtags.files
70
+ GTAGS
71
+ GRTAGS
72
+ GPATH
73
+ cscope.files
74
+ cscope.out
75
+ cscope.in.out
76
+ cscope.po.out
77
+
78
+
79
+
80
+ ### vim ###
81
+ [._]*.s[a-w][a-z]
82
+ [._]s[a-w][a-z]
83
+ *.un~
84
+ Session.vim
85
+ .netrwhist
86
+ *~
87
+
88
+
89
+ ### Emacs ###
90
+ # -*- mode: gitignore; -*-
91
+ *~
92
+ \#*\#
93
+ /.emacs.desktop
94
+ /.emacs.desktop.lock
95
+ *.elc
96
+ auto-save-list
97
+ tramp
98
+ .\#*
99
+
100
+ # Org-mode
101
+ .org-id-locations
102
+ *_archive
103
+
104
+ # flymake-mode
105
+ *_flymake.*
106
+
107
+ # eshell files
108
+ /eshell/history
109
+ /eshell/lastdir
110
+
111
+ # elpa packages
112
+ /elpa/
113
+
114
+ # reftex files
115
+ *.rel
116
+
117
+ # AUCTeX auto folder
118
+ /auto/
119
+
120
+ SCRATCH
121
+ Gemfile.lock
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.1.3
data/API_operation.txt ADDED
@@ -0,0 +1,197 @@
1
+
2
+
3
+ # Operation | Description
4
+ # ----------|----------------------------------------------------------------|
5
+ # create | Create a new instance of the object type from the root static |
6
+ # | context. Not all objects can be created in this simplified |
7
+ # | fashion. Databases, for example, are created through the link |
8
+ # | and provision commands. |
9
+ # ----------|----------------------------------------------------------------|
10
+ # delete | Deletes an object that has been selected. Not all objects can |
11
+ # | be deleted. |
12
+ # ----------|----------------------------------------------------------------|
13
+ # get | Display all or some of the properties of an object after |
14
+ # | selecting it. |
15
+ # ----------|----------------------------------------------------------------|
16
+ # list | For a given object type (represented by a static context such |
17
+ # | as database), list the objects on the system, optionally |
18
+ # | constrained by some set of attributes. Some objects are global |
19
+ # | to the system and do not support this operation. |
20
+ # ----------|----------------------------------------------------------------|
21
+ # select | Select a particular object by name to get properties or |
22
+ # | perform an operation on the object. See the “Delphix Objects” |
23
+ # | section for more information on object naming. |
24
+ # ----------|----------------------------------------------------------------|
25
+ # update | Enter a command context to change one or more properties of an |
26
+ # | object after selecting. Not all objects support this operation,|
27
+ # | and only properties that can be edited are shown when in the |
28
+ # | update command context. |
29
+ # ----------|----------------------------------------------------------------|
30
+
31
+ Environment Components
32
+ An environment is the root of the representation of external state that manages
33
+ database instances. An environment could be a single host (UnixHostEnvironment)
34
+ or an Oracle cluster (OracleClusterEnvironment). Environments exist to contain
35
+ repositories, and each environment may have any number of repositories
36
+ associated with it. A repository is the entity that contains database instances.
37
+ Repositories are typically installation directories (OracleInstall) within an
38
+ environment. Within each repository of any number of SourceConfig objects, which
39
+ represent known database instances. The source config exists independent of
40
+ Delphix, and could represent a possible dSource (in which case there is no
41
+ associated database object), or could be managed entirely by Delphix (for VDBs).
42
+ The source config contains intrinsic properties of the database instance, while
43
+ the source (described below) contains information specific to Delphix and only
44
+ exists when the source config is linked to a dSource or VDB.
45
+
46
+ Most environment objects are created through the act of discovery. By specifying
47
+ a host, Delphix will attempt to automatically discover all environments,
48
+ repositories, and source configs. These objects can also be added manually after
49
+ the fact in cases where discovery fails.
50
+
51
+ The environment hierarchy can be represented this way:
52
+
53
+ |-------------------------------|
54
+ | Environment |
55
+ |-------------------------------|
56
+ | UnixHostEnvironment |
57
+ |-------------------------------|
58
+ |
59
+ |
60
+ |-------------------------------|
61
+ | SourceRepository |
62
+ |-------------------------------|
63
+ | OracleInstall |
64
+ |-------------------------------|
65
+ |
66
+ |
67
+ |-------------------------------|
68
+ | SourceConfig |
69
+ |-------------------------------|
70
+ | OracleSIConfig |
71
+ |-------------------------------|
72
+
73
+
74
+ The generic type is listed in the top portion of each box, with an example of
75
+ the Oracle single instance objects in the lower portion of each box. Each of
76
+ these objects can contain multiple child objects with it.
77
+
78
+ Database Components
79
+ The core of all databases within Delphix is the Container that contains all the
80
+ physical data associated with the database, whether it is a dSource or VDB.
81
+ Within each container is a Timeflow, which represents a single timeline of
82
+ change within the database history. Currently, a container can only have one
83
+ timeflow, though this limitation may be relaxed in a future release. Within a
84
+ timeflow are two important object: TimeflowSnapshot objects and TimeflowRange
85
+ objects. Timeflow ranges represent the provisionable ranges within the history
86
+ of the timeflow, while timeflow snapshot represent a point at which at snapshot
87
+ was taken and therefore more likely to provision in a short amount of time. The
88
+ resulting data hierarchy can be represented this way:
89
+
90
+ |-------------------------------|
91
+ | Container |
92
+ |-------------------------------|
93
+ | OracleDatabaseContainer |
94
+ |-------------------------------|
95
+ |
96
+ |
97
+ |-------------------------------|
98
+ | Timeflow |
99
+ |-------------------------------|
100
+ | OracleTimeflow |
101
+ |-------------------------------|
102
+ |
103
+ |
104
+ |-------------------------------|
105
+ | TimeflowSnapshot |
106
+ |-------------------------------|
107
+ | OracleSnapshot |
108
+ |-------------------------------|
109
+
110
+
111
+ Each container may be associated with a Source. A source is the Delphix
112
+ representation of an external database when it is associated with a container,
113
+ and contains information specific to managing that source. Not all source
114
+ configs within an environment have a source associated with them (as is the case
115
+ with linkable databases), but all sources must have a source config. Containers
116
+ may have no sources associated with them if they are unlined; sources can be
117
+ manually attached at a later point. Currently, each container can have at most
118
+ once source associated with it, though this may change in a future release.
119
+
120
+
121
+ Properties
122
+ |
123
+ currentTimeflow | A reference to the currently active timeflow for this
124
+ | container.
125
+ | Type: REFERENCE TO "Timeflow"
126
+ -------------------|------------------------------------------------------------
127
+ description | Optional user-provided description for the container.
128
+ | Type: STRING
129
+ | Constraints:
130
+ | Max Length: 1024
131
+ | Create: optional
132
+ | Update: optional
133
+ -------------------|------------------------------------------------------------
134
+ group | A reference to the group containing this container.
135
+ | Type: REFERENCE TO "Group"
136
+ | Constraints:
137
+ | Create: required
138
+ -------------------|------------------------------------------------------------
139
+ masked | Whether this container has the masked bit set.
140
+ | Type: boolean
141
+ | Constraints:
142
+ | Create: optional
143
+ | Update: optional
144
+ -------------------|------------------------------------------------------------
145
+ performanceMode | Users can enable Performance Mode to improve performance of
146
+ | write operations to their databases. If Performance Mode is
147
+ | enabled, data consistency is guaranteed, but there might
148
+ | be small amount of data loss in the case of Delphix Engine
149
+ | failure.
150
+ |
151
+ | Each time a Delphix Engine is restarted (whether caused by
152
+ | a failure or not), all virtual databases with Performance
153
+ | Mode enabled will be shutdown and restarted automatically.
154
+ | Type: boolean
155
+ | Constraints:
156
+ | Create: optional
157
+ | Update: optional
158
+ -------------------|------------------------------------------------------------
159
+ provisionContainer | A reference to the container this container was provisioned
160
+ | from.
161
+ | Type: REFERENCE TO "Container"
162
+ -------------------|------------------------------------------------------------
163
+
164
+
165
+
166
+
167
+ performanceMode
168
+ Users can enable Performance Mode to improve performance of write operations to their databases. If Performance Mode is enabled, data consistency is guaranteed, but there might be a small amount of data loss in the case of Delphix Engine failure.
169
+
170
+ Each time a Delphix Engine is restarted (whether caused by a failure or not), all virtual databases with Performance Mode enabled will be shutdown and restarted automatically.
171
+
172
+ Type: boolean
173
+ Constraints:
174
+ Create: optional
175
+ Update: optional
176
+ provisionContainer
177
+ A reference to the container this container was provisioned from.
178
+
179
+ Type: Reference to Container
180
+ runtime
181
+ Runtime properties of this container.
182
+
183
+ Type: DBContainerRuntime
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+
196
+
197
+
data/CHANGELOG.md ADDED
File without changes
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE.txt ADDED
File without changes
data/README.md ADDED
@@ -0,0 +1,146 @@
1
+ SOURCE
2
+ # ==============================================================================
3
+ #
4
+ # Sources represent external database instances outside the Delphix system.
5
+ # These can be linked sources (which pull data into Delphix from pre-existing
6
+ # databases) or virtual sources, which export data from Delphix to arbitrary
7
+ # targets.
8
+ #
9
+ # Sources are attached to Container (database) objects, which hold the actual
10
+ # data for the source. Every source has a SourceConfig object associated with
11
+ # it, though not all source configs have associated sources. The source config
12
+ # tracks information that is intrinsic to the external database, independent of
13
+ # whether it is incorporated into the Delphix system is any way. Both linked
14
+ # and virtual sources share the same config for a particular database type
15
+ # (though it may differ, for example, between Oracle single instance and RAC).
16
+ # Source configs without a source exist for externally-controlled
17
+ # (link-capable) databases, while source configs for virtual sources are
18
+ # created as needed and managed by Delphix. The hierarchy of objects is:
19
+ #
20
+ # * Source
21
+ # * SourceConfig
22
+ # * SourceRepository
23
+ # * SourceEnvironment
24
+ #
25
+ # Sources can have SourceRuntime properties that are not stored with the
26
+ # persistent representation of the object, but pulled on demand from the
27
+ # running database instance. These runtime properties therefore may not always
28
+ # be available, and cannot be manipulated via Delphix.
29
+ #
30
+ # TypedObject
31
+ # |__PersistentObject
32
+ # |__UserObject
33
+ # |__Source
34
+ # | -----\
35
+ # |__PgSQLSource \
36
+ # |__OracleSource \ ______ [ Known Subclasses ]
37
+ # |__MSSqlSource /
38
+ # |__AppDataSource /
39
+ # -----/
40
+ #
41
+ #
42
+ module Croesus::API
43
+ # P R O P E R T I E S
44
+ #
45
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
46
+ # config | Reference to the configuration for the source.
47
+ # | Type: Reference to SourceConfig.
48
+ # | Constraints:
49
+ # | Create: optional
50
+ #
51
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
52
+ # container | Reference to the container being fed by this source,
53
+ # | if any.
54
+ # | Type: Reference to Container
55
+ #
56
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
57
+ # description | A user-provided description of the source.
58
+ # | Type: string
59
+ #
60
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
61
+ # enabled | Flag indicating whether the source is enabled.
62
+ # | Type: boolean
63
+ #
64
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
65
+ # runtime | Runtime properties of this source.
66
+ # | Type: SourceRuntime
67
+ #
68
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
69
+ # staging | Flag indicating whether the source is used as a staging
70
+ # | source for pre-provisioning. Staging sources are
71
+ # | managed by the Delphix system.
72
+ # | Type: boolean
73
+ #
74
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
75
+ # status | Status of this source.
76
+ # | Type: boolean
77
+ # | Constraints:
78
+ # | Acceptable values: DEFAULT, PENDING_UPGRADE
79
+ #
80
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
81
+ # virtual | Flag indicating whether the source is managed by the
82
+ # | Delphix system.
83
+ # | Type: boolean
84
+ #
85
+ #
86
+ # I N H E R I T E D P R O P E R T I E S
87
+ #
88
+ # Object Type: UserObject
89
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
90
+ # name | Object name
91
+ # | Type: objectName
92
+ # | Constraints:
93
+ # | Max Length: 256
94
+ # | Create: optional
95
+ # | Update: optional
96
+ #
97
+ # Object Type: PersistentObject
98
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
99
+ # namespace | Alternate namespace for this object, for replicated and
100
+ # | restored objects.
101
+ # | Type: Reference to Namespace
102
+ #
103
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
104
+ # reference | Object reference.
105
+ # | Type: Reference to PersistentObject
106
+ #
107
+ # Object Type: TypedObject
108
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
109
+ # type | Object type.
110
+ # | Type: type
111
+ # | Constraints:
112
+ # | Required: true
113
+ #
114
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
115
+ #
116
+ class Source
117
+ # S T A N D A R D O P E R A T I O N S
118
+ #
119
+ # List
120
+ # @note GET /resources/json/delphix/source
121
+ # Lists sources on the system, optionally list only.
122
+ #
123
+ # @param [String] source
124
+ # @option source database List sources associated with the given
125
+ # container reference.
126
+ # Type: Reference to Container.
127
+ # @option source environment List sources associated with the given source
128
+ # environment reference.
129
+ # Type: Reference to SourceEnvironment.
130
+ # @option source repository List sources associated with the given source
131
+ # repository reference.
132
+ # Type: Reference to SourceEnvironment
133
+ #
134
+ # @return [Array(Source)] Array of Type: Source
135
+ #
136
+ # @api public
137
+ def self.list(source = nil)
138
+ Croesus.get(filter_url(source))
139
+ end
140
+ end
141
+ end
142
+
143
+
144
+
145
+
146
+
data/Rakefile ADDED
@@ -0,0 +1,26 @@
1
+
2
+ require 'bundler/gem_tasks'
3
+ require 'rspec/core/rake_task'
4
+ require 'rubocop/rake_task'
5
+ require 'yard'
6
+
7
+ desc 'Run tests'
8
+ RSpec::Core::RakeTask.new(:spec)
9
+
10
+ desc 'Run Rubocop on the gem'
11
+ RuboCop::RakeTask.new(:rubocop) do |task|
12
+ task.patterns = ['lib/**/*.rb', 'spec/**/*.rb']
13
+ task.fail_on_error = true
14
+ end
15
+
16
+ YARD::Config.load_plugin 'redcarpet-ext'
17
+ YARD::Rake::YardocTask.new do |t|
18
+ t.files = ['**/*.rb', '-', 'README.md', 'CHANGELOG.md', 'LICENSE.txt']
19
+ t.options = ['--markup-provider=redcarpet', '--markup=markdown']
20
+ end
21
+
22
+ desc 'Build documentation'
23
+ task doc: [:yard]
24
+
25
+ task default: [:spec, :rubocop, :build, :install]
26
+
@@ -0,0 +1,133 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # encoding: UTF-8
4
+ #
5
+ # Author: Stefano Harding <riddopic@gmail.com>
6
+ #
7
+ # Copyright (C) 2014 Stefano Harding
8
+ #
9
+ # Licensed under the Apache License, Version 2.0 (the "License");
10
+ # you may not use this file except in compliance with the License.
11
+ # You may obtain a copy of the License at
12
+ #
13
+ # http://www.apache.org/licenses/LICENSE-2.0
14
+ #
15
+ # Unless required by applicable law or agreed to in writing, software
16
+ # distributed under the License is distributed on an "AS IS" BASIS,
17
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
18
+ # implied. See the License for the specific language governing
19
+ # permissions and limitations under the License.
20
+ #
21
+ $: << File.dirname(__FILE__) + '/../lib'
22
+
23
+ require 'pry'
24
+ require 'croesus'
25
+ require 'command_line_reporter'
26
+
27
+ include CommandLineReporter
28
+ include Croesus::Utils
29
+
30
+ # add ability to reload console
31
+ def reload
32
+ reload_msg = '# Reloading the console...'
33
+ files = $LOADED_FEATURES.select { |feat| feat =~ /\/croesus\// }
34
+ files.each { |file| load file }
35
+ puts CodeRay.scan(reload_msg, :ruby).term
36
+ exec($0)
37
+ end
38
+
39
+ # Construct a custom Pry prompt proc.
40
+ #
41
+ # @param char [String] prompt character
42
+ # @return [proc] a prompt proc
43
+ # @api private
44
+ def prompt(char)
45
+ proc { |target_self, nest_level, pry|
46
+ [
47
+ "[#{pry.input_array.size}] ",
48
+ "Cc^(#{Pry.view_clip(target_self.class)})",
49
+ "#{":#{nest_level}" unless nest_level.zero?}#{char} "
50
+ ].join
51
+ }
52
+ end
53
+
54
+ def menu
55
+ resources ||= []
56
+ Croesus::AnonoMod.registry.each do |key, value|
57
+ resources << key
58
+ end
59
+ puts
60
+ dyno_width = terminal_dimensions[0] - 32
61
+ header title: 'Welcome to the Delphix Engine Ruby Rumble in the Jungle!',
62
+ align: 'center', width: terminal_dimensions[0]
63
+ table border: true do
64
+ row header: true, color: 'red' do
65
+ column 'Num', width: 3, align: 'right', color: 'blue', padding: 0
66
+ column 'Resource Name', width: 18, align: 'left', padding: 0
67
+ column "Description (http://#{Croesus.server}/api/json/delphix.json)",
68
+ width: dyno_width, align: 'left', padding: 0
69
+ end
70
+ resources.sort.each.with_index(1) do |resource, i|
71
+ row do
72
+ column '%02d' % i
73
+ column classify(resource)
74
+ column Croesus::AnonoMod.registry[resource].description
75
+ end
76
+ end
77
+ end
78
+ footer title: 'For help on a resource try help resource name'
79
+ end
80
+
81
+ def define_resource_methods
82
+ Croesus::AnonoMod.registry.each do |key, value|
83
+ # define_method(key) { Croesus::AnonoMod.registry[key.to_sym] }
84
+ define_method(key) do |*args|
85
+ Croesus::AnonoMod.registry[key.to_sym].send :"#{args}"
86
+ end
87
+ end
88
+ end
89
+
90
+ def define_resource_methods
91
+ Croesus::AnonoMod.registry.each do |key, value|
92
+ # define_method(key) { Croesus::AnonoMod.registry[key.to_sym] }
93
+ define_method(key) do |*args|
94
+ puts "Croesus::AnonoMod.registry[#{key.to_sym}] send #{args}"
95
+ # Croesus::AnonoMod.registry[key.to_sym].send :"#{args}"
96
+ end
97
+ end
98
+ end
99
+
100
+ def delphix_json_api
101
+ Croesus.get "http://#{Croesus.server}/api/json/delphix.json"
102
+ end
103
+
104
+ # Setup and connect
105
+ # Croesus.server = ''
106
+ # Croesus.api_user = ''
107
+ # Croesus.api_passwd = ''
108
+ # Croesus.verbose = true
109
+ # Croesus.session.body
110
+
111
+ welcome = <<eos
112
+ ______ ______ ____
113
+ .~ ~. |`````````, .~ ~. | ..'''' | | ..''''
114
+ | |'''|''''' | | |______ .'' | | .''
115
+ | | `. | | | ..' | | ..'
116
+ `.______.' | `. `.______.' |___________ ....'' `._______.' ....''
117
+
118
+
119
+ eos
120
+ puts CodeRay.scan(welcome, :ruby).term
121
+ define_resource_methods
122
+ menu
123
+ puts
124
+ puts 'Use `exit` to quit the live session.'
125
+ puts 'Use `q` to jump out of displaying a large output.'
126
+ puts 'Use `reload` to reload a session.'
127
+ puts
128
+ puts 'Type menu at anytime to see the menu.'
129
+ puts
130
+ Pry.start(@config, :prompt => [prompt(' >> '), prompt("*")])
131
+ Pry.start
132
+
133
+
data/croesus.gemspec ADDED
@@ -0,0 +1,39 @@
1
+ # encoding: UTF-8
2
+
3
+ lib = File.expand_path('../lib/', __FILE__)
4
+ $:.unshift lib unless $:.include?(lib)
5
+
6
+ require 'croesus/version'
7
+
8
+ Gem::Specification.new do |s|
9
+ s.name = 'croesus'
10
+ s.version = Croesus::VERSION
11
+ s.platform = Gem::Platform::RUBY
12
+ s.date = Time.now.strftime("%Y-%m-%d")
13
+ s.summary = 'Council with the Delphic oracle, King of Lydia'
14
+ s.description = 'Ruby REST client for Delphix virtual database appliance'
15
+ s.authors = ['Stefano Harding']
16
+ s.email = 'riddopic@gmail.com'
17
+ s.homepage = 'https://github.com/riddopic/croesus'
18
+ s.license = 'Apache 2.0'
19
+
20
+ s.files = `git ls-files`.split
21
+ s.test_files = `git ls-files spec/*`.split
22
+
23
+ s.add_dependency 'awesome_print'
24
+ s.add_dependency 'command_line_reporter'
25
+ s.add_dependency 'addressable', '>= 2.3.6'
26
+ s.add_dependency 'rest-client', '>= 1.6.7'
27
+ s.add_dependency 'json', '>= 1.8.1'
28
+
29
+ s.add_development_dependency 'yard', '>= 0.8.6'
30
+ s.add_development_dependency 'github-markup', '>= 1.3.0'
31
+ s.add_development_dependency 'redcarpet', '>= 3.2.0'
32
+ s.add_development_dependency 'yard-redcarpet-ext', '>= 0.0.3'
33
+ s.add_development_dependency 'rubocop', '>= 0.26.0'
34
+ s.add_development_dependency 'rake', '>= 10.3.2'
35
+ s.add_development_dependency 'coveralls', '>= 0.7.1'
36
+ s.add_development_dependency 'rspec', '>= 3.1.0'
37
+ s.add_development_dependency 'fuubar', '>= 2.0.0'
38
+ s.add_development_dependency 'timecop', '>= 0.7.1'
39
+ end