hmx_client 0.0.7 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,67 +1,67 @@
1
- require "hmx/command/base"
2
-
3
- module HmxClient::Command
4
-
5
- # Dump data from a type in hmx and load it back again
6
- #
7
- class Dump < Base
8
-
9
- # dump
10
- #
11
- # Dump data from hmx into the local filesystem. Used
12
- # as a preface to a backup, or a change then restore
13
- #
14
- # <typeName> <folderPath>
15
- def index
16
- unless args.size > 0
17
- raise CommandFailed, "Usage: hmx dump <typeName> <folderPath>"
18
- end
19
- # The filenames will come from the name of the type and their displayName, appended onto
20
- # the folder path given. We will also attempt to create the folder path and the type
21
- # sub folder
22
- typeName = args.shift
23
- rootFolder = args.shift
24
-
25
- Dir.mkdir(rootFolder) if !Dir.exist?(rootFolder)
26
- Dir.mkdir(rootFolder + "/" + typeName) if !Dir.exist?(rootFolder + "/" + typeName)
27
- displayNames = hmx.query(typeName, nil)
28
- displayNames.each { | displayName |
29
- fileName = rootFolder + "/" + displayName
30
- display "Writing to #{ fileName }"
31
- File.open(fileName, 'w') { | f | f.write(JSON.pretty_generate(hmx.getData([displayName]))) }
32
- }
33
- end
34
-
35
- # dump:load
36
- #
37
- # Load data that has previously been dumped using the main dump command
38
- #
39
- # <typeName> <folderPath>
40
- #
41
- # The real path for the files is in the folder formed by concatenating the typename to the rootFolder
42
- def load
43
- unless args.size > 0
44
- raise CommandFailed, "Usage: hmx dump:load <typeName> <folderPath>"
45
- end
46
- typeName = args.shift
47
- rootFolder = args.shift
48
-
49
- folderName = rootFolder + "/" + typeName
50
- Dir.foreach(folderName) { | f |
51
- display "Loading #{ f } "
52
- fullFile = folderName + "/" + f
53
- if (File.file?(fullFile))
54
- content = File.open(fullFile) { | h |
55
- c = '';
56
- while(line = h.gets)
57
- c = c + line
58
- end
59
- c
60
- }
61
- puts "Content is #{ content } "
62
- hmx.putData([content])
63
- end
64
- }
65
- end
66
- end
67
- end
1
+ require "hmx/command/base"
2
+
3
+ module HmxClient::Command
4
+
5
+ # Dump data from a type in hmx and load it back again
6
+ #
7
+ class Dump < Base
8
+
9
+ # dump
10
+ #
11
+ # Dump data from hmx into the local filesystem. Used
12
+ # as a preface to a backup, or a change then restore
13
+ #
14
+ # <typeName> <folderPath>
15
+ def index
16
+ unless args.size > 0
17
+ raise CommandFailed, "Usage: hmx dump <typeName> <folderPath>"
18
+ end
19
+ # The filenames will come from the name of the type and their displayName, appended onto
20
+ # the folder path given. We will also attempt to create the folder path and the type
21
+ # sub folder
22
+ typeName = args.shift
23
+ rootFolder = args.shift
24
+
25
+ Dir.mkdir(rootFolder) if !Dir.exist?(rootFolder)
26
+ Dir.mkdir(rootFolder + "/" + typeName) if !Dir.exist?(rootFolder + "/" + typeName)
27
+ displayNames = hmx.doQuery([typeName, nil])
28
+ displayNames.each { | displayName |
29
+ fileName = rootFolder + "/" + displayName
30
+ display "Writing to #{ fileName }"
31
+ File.open(fileName, 'w') { | f | f.write(JSON.pretty_generate(hmx.doGetData([displayName]))) }
32
+ }
33
+ end
34
+
35
+ # dump:load
36
+ #
37
+ # Load data that has previously been dumped using the main dump command
38
+ #
39
+ # <typeName> <folderPath>
40
+ #
41
+ # The real path for the files is in the folder formed by concatenating the typename to the rootFolder
42
+ def load
43
+ unless args.size > 0
44
+ raise CommandFailed, "Usage: hmx dump:load <typeName> <folderPath>"
45
+ end
46
+ typeName = args.shift
47
+ rootFolder = args.shift
48
+
49
+ folderName = rootFolder + "/" + typeName
50
+ Dir.foreach(folderName) { | f |
51
+ display "Loading #{ f } "
52
+ fullFile = folderName + "/" + f
53
+ if (File.file?(fullFile))
54
+ content = File.open(fullFile) { | h |
55
+ c = '';
56
+ while(line = h.gets)
57
+ c = c + line
58
+ end
59
+ c
60
+ }
61
+ puts "Content is #{ content } "
62
+ hmx.doPutData([content])
63
+ end
64
+ }
65
+ end
66
+ end
67
+ end
@@ -1,43 +1,125 @@
1
- require "hmx/command/base"
2
-
3
- module HmxClient::Command
4
-
5
- # Load and Save functions in hmx
6
- #
7
- class Fn < Base
8
-
9
- # fn
10
- #
11
- # Manipulate HMX functions
12
- #
13
- #
14
- def index
15
- unless args.size > 0
16
- raise CommandFailed, "Usage: hmx fn <fnName>"
17
- end
18
- dout hmx.getFn([args.shift])
19
- end
20
-
21
- # fn:list
22
- #
23
- # List all functions in HMX
24
- #
25
- def list
26
- fns = hmx.query("fn", nil)
27
- fns.each { | f |
28
- display f.rpartition('/')[2]
29
- }
30
- end
31
-
32
- # fn:put
33
- #
34
- # Create or update a function
35
- #
36
- def put
37
- unless args.size > 0
38
- raise CommandFailed, "Usage: hmx fn:put <fnName> <f:function>"
39
- end
40
- dout hmx.putFn(args)
41
- end
42
- end
43
- end
1
+ require "hmx/command/base"
2
+
3
+ module HmxClient::Command
4
+
5
+ # Load and Save functions in hmx
6
+ #
7
+ class Fn < Base
8
+
9
+ # fn
10
+ #
11
+ # Manipulate HMX functions
12
+ #
13
+ #
14
+ def index
15
+ unless args.size > 0
16
+ raise CommandFailed, "Usage: hmx fn <fnName>"
17
+ end
18
+ dout hmx.doGetFn([args.shift])
19
+ end
20
+
21
+ # fn:list
22
+ #
23
+ # List all functions in HMX
24
+ #
25
+ def list
26
+ fns = hmx.doQuery(["sys.fn", nil])
27
+ fns.each { | f |
28
+ display f.rpartition('/')[2]
29
+ }
30
+ end
31
+
32
+ # fn:put
33
+ #
34
+ # Create or update a function
35
+ #
36
+ def put
37
+ unless args.size > 0
38
+ raise CommandFailed, "Usage: hmx fn:put <fnName> <f:function>"
39
+ end
40
+ dout hmx.doPutFn([args])
41
+ end
42
+
43
+ # fn:export
44
+ #
45
+ # Exports the functions to a series of files (and perhaps) folders, grounded
46
+ # in the folder specified by the first parameter.
47
+ # The file extension of the function is determined by the language of the function
48
+ def export
49
+ unless args.size > 0
50
+ raise CommandFailed, "Usage: hmx fn:export <folder>"
51
+ end
52
+ rootFolder = args.shift
53
+ Dir.mkdir(rootFolder) if !Dir.exist?(rootFolder)
54
+ displayNames = hmx.doQuery(['sys.fn', nil])
55
+ displayNames.each { | displayName |
56
+ # Just get function
57
+ fnInfo = hmx.doGetData([displayName])
58
+ fnName = fnInfo['document']['MXFunction']['fnName']
59
+ fnLang = fnInfo['document']['MXFunction']['fnLang']
60
+ fnContent = fnInfo['document']['MXFunction']['content']
61
+ outFile = fileName(rootFolder, fnName, fnLang)
62
+ puts "Writing #{outFile}"
63
+ File.open(outFile, 'w') { | f | f.write(fnContent) }
64
+ }
65
+ end
66
+
67
+ # fn:import
68
+ # The opposite of export, takes files (and folders) in the root folder given
69
+ # and constructs and updates the functions back into hmx. The extension of the file
70
+ # determines the language of the function.
71
+
72
+ def import
73
+ unless args.size > 0
74
+ raise CommandFailed, "Usage: hmx fn:import <folder>"
75
+ end
76
+ rootFolder = args.shift
77
+ Dir.foreach(rootFolder) { | f |
78
+ display "Loading #{ f } "
79
+ fullFile = File.expand_path("#{rootFolder}/#{f}")
80
+ if (File.file?(fullFile))
81
+ content = File.open(fullFile) { | h |
82
+ c = ''
83
+ while(line = h.gets)
84
+ c = c + line
85
+ end
86
+ c
87
+ }
88
+ # Function name is the base of the filename
89
+ # Function language is based on the extension
90
+ # content is the content
91
+ ext = File.extname(f)
92
+ language = case File.extname(f)
93
+ when '.rb' then 'RUBY'
94
+ when '.clj' then 'CLOJURE'
95
+ when '.js' then 'JAVASCRIPT'
96
+ else 'UNKNOWN'
97
+ end
98
+
99
+ document = {}
100
+ document['document'] = {}
101
+ document['displayName'] = "sys.fn/#{ File.basename(f, ext) }"
102
+ fn = {}
103
+ fn['fnName'] = File.basename(f, ext)
104
+ fn['fnLang'] = language
105
+ fn['content'] = content
106
+ document['document']['MXFunction'] = fn
107
+ hmx.doPutData([JSON.generate(document)])
108
+ end
109
+ }
110
+ end
111
+
112
+
113
+ protected
114
+
115
+ def fileName(rootFolder, fnName, fnLang)
116
+ extension = case fnLang
117
+ when 'CLOJURE' then ".clj"
118
+ when 'RUBY' then ".rb"
119
+ when 'JAVASCRIPT' then '.js'
120
+ else ''
121
+ end
122
+ "#{ rootFolder }/#{fnName}#{extension}"
123
+ end
124
+ end
125
+ end
@@ -1,46 +1,46 @@
1
- require "hmx/command/base"
2
- require 'date'
3
-
4
- module HmxClient::Command
5
-
6
- # Manipulate hmx fountains (auto id generators)
7
- #
8
- class Fountain < Base
9
-
10
- # fountain
11
- #
12
- # Lists all of the fountains and their values
13
- def index
14
- fountainState = hmx.getFountainState([])
15
- # fountainState is a map of fountainName => value
16
- # Flip this into an array of "name" => name, "value" => value
17
- objs = []
18
- fountainState.each_pair do | key, value |
19
- objs << { "name" => key, "value" => value }
20
- end
21
- cols = [ 'name', 'value' ]
22
- headers = [ 'Fountain', 'Value' ]
23
- display_table(objs, cols, headers)
24
- end
25
-
26
- # fountain:set
27
- #
28
- # Sets the new id for the fountain
29
- #
30
- def set
31
- unless args.size > 1
32
- raise CommandFailed, "Usage: hmx fountain:set <fountainId> <newValue>"
33
- end
34
- hmx.setFountainId(args)
35
- end
36
- # fountain:get
37
- #
38
- # Increments and returns a fountain value
39
- def get
40
- unless args.size > 0
41
- raise CommandFailed, "Usage: hmx fountain:get <fountainId>"
42
- end
43
- display hmx.getFountain(args)
44
- end
45
- end
46
- end
1
+ require "hmx/command/base"
2
+ require 'date'
3
+
4
+ module HmxClient::Command
5
+
6
+ # Manipulate hmx fountains (auto id generators)
7
+ #
8
+ class Fountain < Base
9
+
10
+ # fountain
11
+ #
12
+ # Lists all of the fountains and their values
13
+ def index
14
+ fountainState = hmx.doGetFountainState([])
15
+ # fountainState is a map of fountainName => value
16
+ # Flip this into an array of "name" => name, "value" => value
17
+ objs = []
18
+ fountainState.each_pair do | key, value |
19
+ objs << { "name" => key, "value" => value }
20
+ end
21
+ cols = [ 'name', 'value' ]
22
+ headers = [ 'Fountain', 'Value' ]
23
+ display_table(objs, cols, headers)
24
+ end
25
+
26
+ # fountain:set
27
+ #
28
+ # Sets the new id for the fountain
29
+ #
30
+ def set
31
+ unless args.size > 1
32
+ raise CommandFailed, "Usage: hmx fountain:set <fountainId> <newValue>"
33
+ end
34
+ hmx.doSetFountainId(args)
35
+ end
36
+ # fountain:get
37
+ #
38
+ # Increments and returns a fountain value
39
+ def get
40
+ unless args.size > 0
41
+ raise CommandFailed, "Usage: hmx fountain:get <fountainId>"
42
+ end
43
+ display hmx.doGetFountain(args)
44
+ end
45
+ end
46
+ end
@@ -1,20 +1,20 @@
1
- require "hmx/command/base"
2
-
3
- module HmxClient::Command
4
-
5
- # Get full document from hmx
6
- #
7
- class Get < Base
8
-
9
- # get
10
- #
11
- # get a document from hmx, given its display name
12
- #
13
- def index
14
- unless args.size > 0
15
- raise CommandFailed, "Usage: hmx get displayname"
16
- end
17
- dout JSON.pretty_generate(hmx.getData(args))
18
- end
19
- end
20
- end
1
+ require "hmx/command/base"
2
+
3
+ module HmxClient::Command
4
+
5
+ # Get full document from hmx
6
+ #
7
+ class Get < Base
8
+
9
+ # get
10
+ #
11
+ # get a document from hmx, given its display name
12
+ #
13
+ def index
14
+ unless args.size > 0
15
+ raise CommandFailed, "Usage: hmx get displayname"
16
+ end
17
+ dout JSON.pretty_generate(hmx.doGetData(args))
18
+ end
19
+ end
20
+ end
@@ -1,20 +1,20 @@
1
- require "hmx/command/base"
2
-
3
- module HmxClient::Command
4
-
5
- # Get document content from hmx
6
- #
7
- class GetContent < Base
8
-
9
- # getContent
10
- #
11
- # get the data part of a document from hmx, given its display name
12
- #
13
- def index
14
- unless args.size > 0
15
- raise CommandFailed, "Usage: hmx getContent displayname"
16
- end
17
- dout hmx.getContent(args)
18
- end
19
- end
20
- end
1
+ require "hmx/command/base"
2
+
3
+ module HmxClient::Command
4
+
5
+ # Get document content from hmx
6
+ #
7
+ class GetContent < Base
8
+
9
+ # getContent
10
+ #
11
+ # get the data part of a document from hmx, given its display name
12
+ #
13
+ def index
14
+ unless args.size > 0
15
+ raise CommandFailed, "Usage: hmx getContent displayname"
16
+ end
17
+ dout hmx.doGetContent(args)
18
+ end
19
+ end
20
+ end