rubyang 0.1.0 → 0.1.1
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.
- checksums.yaml +4 -4
- data/.codeclimate.yml +3 -0
- data/.gitignore +1 -0
- data/README.md +106 -2
- data/lib/rubyang/cli.rb +112 -101
- data/lib/rubyang/cli/parser.rb +1 -1
- data/lib/rubyang/component/base.rb +35 -0
- data/lib/rubyang/component/example.rb +15 -0
- data/lib/rubyang/database/component_manager.rb +77 -0
- data/lib/rubyang/database/data_tree.rb +22 -2
- data/lib/rubyang/database/schema_tree.rb +34 -3
- data/lib/rubyang/model/parser/parser.tab.rb +248 -248
- data/lib/rubyang/model/parser/parser.y +1 -1
- data/lib/rubyang/restapi.rb +8 -1
- data/lib/rubyang/restapi/app.rb +72 -0
- data/lib/rubyang/server.rb +8 -0
- data/lib/rubyang/server/base.rb +30 -0
- data/lib/rubyang/server/example.rb +9 -0
- data/lib/rubyang/version.rb +1 -1
- data/lib/rubyang/webui/public/js/webui.js +95 -3
- data/lib/rubyang/yang/rubyang.yang +33 -0
- data/rubyang.gemspec +5 -5
- metadata +11 -4
- data/lib/rubyang/restapi/httpd.rb +0 -62
data/lib/rubyang/restapi.rb
CHANGED
@@ -0,0 +1,72 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
|
5
|
+
require 'sinatra/base'
|
6
|
+
require 'sinatra/reloader'
|
7
|
+
require 'sinatra/respond_with'
|
8
|
+
|
9
|
+
require_relative '../../rubyang'
|
10
|
+
|
11
|
+
module Rubyang
|
12
|
+
module RestAPI
|
13
|
+
class App < Sinatra::Base
|
14
|
+
set :environment, :development
|
15
|
+
set :bind, '0.0.0.0'
|
16
|
+
|
17
|
+
configure :development do
|
18
|
+
register Sinatra::Reloader
|
19
|
+
end
|
20
|
+
|
21
|
+
register Sinatra::RespondWith
|
22
|
+
|
23
|
+
|
24
|
+
target_yang = File.expand_path( File.dirname( __FILE__ ) ) + '/target.yang'
|
25
|
+
model = Rubyang::Model::Parser.parse( File.open( target_yang, 'r' ).read )
|
26
|
+
db = Rubyang::Database.new
|
27
|
+
db.load_model model
|
28
|
+
db.configure.edit('container1').edit('container2').edit('leaf1').set('value')
|
29
|
+
|
30
|
+
|
31
|
+
get '/' do
|
32
|
+
respond_to do |f|
|
33
|
+
f.on( 'application/xml' ){
|
34
|
+
config = db.configure
|
35
|
+
config.to_xml( pretty: true )
|
36
|
+
}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
get %r{/api(?:/(.+)[/]?)} do
|
41
|
+
respond_to do |f|
|
42
|
+
f.on( 'application/xml' ){
|
43
|
+
#{ params: ' '+params[:captures][0] }.to_json
|
44
|
+
config = db.configure
|
45
|
+
paths = params[:captures][0].split( '/' )
|
46
|
+
element = paths.inject( config ){ |parent, child| parent.edit( child ) }
|
47
|
+
element.to_xml( pretty: true )
|
48
|
+
}
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
post %r{/api(?:/(.+)[/]?)} do
|
53
|
+
body = request.body.read
|
54
|
+
respond_to do |f|
|
55
|
+
f.on( 'application/xml' ){
|
56
|
+
config = db.configure
|
57
|
+
paths = params[:captures][0].split( '/' )
|
58
|
+
element = paths.inject( config ){ |parent, child| parent.edit( child ) }
|
59
|
+
}
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
get %r{/api[/]?} do
|
64
|
+
respond_to do |f|
|
65
|
+
f.on( 'application/xml' ){ db.configure.to_xml( pretty: true ) }
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
run! if app_file == $0
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require_relative '../../rubyang'
|
4
|
+
|
5
|
+
require 'fileutils'
|
6
|
+
require 'drb/drb'
|
7
|
+
|
8
|
+
module Rubyang
|
9
|
+
module Server
|
10
|
+
class Base
|
11
|
+
def initialize
|
12
|
+
@pid = Process.pid
|
13
|
+
@sock_dir = "/tmp/rubyang/server"
|
14
|
+
#@sock_file = "#{@sock_dir}/#{self.class.to_s}.#{@pid}.sock"
|
15
|
+
@sock_file = "#{@sock_dir}/#{self.class.to_s}.sock"
|
16
|
+
|
17
|
+
FileUtils.mkdir_p @sock_dir
|
18
|
+
|
19
|
+
@db = Rubyang::Database.new
|
20
|
+
@db.load_model Rubyang::Model::Parser.parse File.open( "#{File.dirname(__FILE__)}/../yang/rubyang.yang", 'r' ).read
|
21
|
+
end
|
22
|
+
|
23
|
+
def run
|
24
|
+
#DRb.start_service( "drbunix:#{@sock_file}", @db, safe_level: 1 )
|
25
|
+
DRb.start_service( "drbunix:#{@sock_file}", @db )
|
26
|
+
DRb.thread.join
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/rubyang/version.rb
CHANGED
@@ -30,7 +30,7 @@ function make_form(trees, parent_id){
|
|
30
30
|
}else if(stmt == "leaf"){
|
31
31
|
var child_schema_path = parent_id + '/' + tree["name"];
|
32
32
|
var child_id = next_id();
|
33
|
-
addleaf(parent_id, child_id, child_schema_path, tree["name"], tree["description"],
|
33
|
+
addleaf(parent_id, child_id, child_schema_path, tree["name"], tree["description"], tree["type"], '');
|
34
34
|
}
|
35
35
|
}
|
36
36
|
}
|
@@ -204,7 +204,27 @@ function addleaf(parent_id, id, schemapath, schemaname, description, datatype, o
|
|
204
204
|
label.attr('for', id_form);
|
205
205
|
label.html(description);
|
206
206
|
|
207
|
-
if(datatype == "
|
207
|
+
if(datatype == "binary"){
|
208
|
+
input = $('<input>');
|
209
|
+
input.attr('id',id_form);
|
210
|
+
input.addClass('form-control');
|
211
|
+
input.attr('type', 'text');
|
212
|
+
}else if(datatype == "bits"){
|
213
|
+
input = $('<input>');
|
214
|
+
input.attr('id',id_form);
|
215
|
+
input.addClass('form-control');
|
216
|
+
input.attr('type', 'text');
|
217
|
+
}else if(datatype == "boolean"){
|
218
|
+
input = $('<input>');
|
219
|
+
input.attr('id',id_form);
|
220
|
+
input.addClass('form-control');
|
221
|
+
input.attr('type', 'text');
|
222
|
+
}else if(datatype == "decimal64"){
|
223
|
+
input = $('<input>');
|
224
|
+
input.attr('id',id_form);
|
225
|
+
input.addClass('form-control');
|
226
|
+
input.attr('type', 'text');
|
227
|
+
}else if(datatype == "empty"){
|
208
228
|
input = $('<input>');
|
209
229
|
input.attr('id',id_form);
|
210
230
|
input.addClass('form-control');
|
@@ -221,7 +241,79 @@ function addleaf(parent_id, id, schemapath, schemaname, description, datatype, o
|
|
221
241
|
input.append(option0);
|
222
242
|
input.append(option1);
|
223
243
|
input.append(option2);
|
224
|
-
}else{
|
244
|
+
}else if(datatype == "identityref"){
|
245
|
+
input = $('<input>');
|
246
|
+
input.attr('id',id_form);
|
247
|
+
input.addClass('form-control');
|
248
|
+
input.attr('type', 'text');
|
249
|
+
}else if(datatype == "instance-identifier"){
|
250
|
+
input = $('<input>');
|
251
|
+
input.attr('id',id_form);
|
252
|
+
input.addClass('form-control');
|
253
|
+
input.attr('type', 'text');
|
254
|
+
}else if(datatype == "int8"){
|
255
|
+
input = $('<input>');
|
256
|
+
input.attr('id',id_form);
|
257
|
+
input.addClass('form-control');
|
258
|
+
input.attr('type', 'text');
|
259
|
+
}else if(datatype == "int16"){
|
260
|
+
input = $('<input>');
|
261
|
+
input.attr('id',id_form);
|
262
|
+
input.addClass('form-control');
|
263
|
+
input.attr('type', 'text');
|
264
|
+
}else if(datatype == "int32"){
|
265
|
+
input = $('<input>');
|
266
|
+
input.attr('id',id_form);
|
267
|
+
input.addClass('form-control');
|
268
|
+
input.attr('type', 'text');
|
269
|
+
}else if(datatype == "int64"){
|
270
|
+
input = $('<input>');
|
271
|
+
input.attr('id',id_form);
|
272
|
+
input.addClass('form-control');
|
273
|
+
input.attr('type', 'text');
|
274
|
+
}else if(datatype == "leafref"){
|
275
|
+
input = $('<select>');
|
276
|
+
input.attr('id',id_form);
|
277
|
+
input.addClass('form-control');
|
278
|
+
var option0 = $('<option>');
|
279
|
+
var option1 = $('<option>');
|
280
|
+
var option2 = $('<option>');
|
281
|
+
option0.html('0');
|
282
|
+
option1.html('1');
|
283
|
+
option2.html('2');
|
284
|
+
input.append(option0);
|
285
|
+
input.append(option1);
|
286
|
+
input.append(option2);
|
287
|
+
}else if(datatype == "string"){
|
288
|
+
input = $('<input>');
|
289
|
+
input.attr('id',id_form);
|
290
|
+
input.addClass('form-control');
|
291
|
+
input.attr('type', 'text');
|
292
|
+
}else if(datatype == "uint8"){
|
293
|
+
input = $('<input>');
|
294
|
+
input.attr('id',id_form);
|
295
|
+
input.addClass('form-control');
|
296
|
+
input.attr('type', 'text');
|
297
|
+
}else if(datatype == "uint16"){
|
298
|
+
input = $('<input>');
|
299
|
+
input.attr('id',id_form);
|
300
|
+
input.addClass('form-control');
|
301
|
+
input.attr('type', 'text');
|
302
|
+
}else if(datatype == "uint32"){
|
303
|
+
input = $('<input>');
|
304
|
+
input.attr('id',id_form);
|
305
|
+
input.addClass('form-control');
|
306
|
+
input.attr('type', 'text');
|
307
|
+
}else if(datatype == "uint64"){
|
308
|
+
input = $('<input>');
|
309
|
+
input.attr('id',id_form);
|
310
|
+
input.addClass('form-control');
|
311
|
+
input.attr('type', 'text');
|
312
|
+
}else if(datatype == "union"){
|
313
|
+
input = $('<input>');
|
314
|
+
input.attr('id',id_form);
|
315
|
+
input.addClass('form-control');
|
316
|
+
input.attr('type', 'text');
|
225
317
|
}
|
226
318
|
|
227
319
|
$('#'+parent_id).append(panel);
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module rubyang {
|
2
|
+
namespace "http://github.com/hirura/rubyang";
|
3
|
+
prefix rubyang;
|
4
|
+
|
5
|
+
organization "rubyang";
|
6
|
+
contact "http://github.com/hirura/";
|
7
|
+
description "The module to support some basic features";
|
8
|
+
|
9
|
+
revision 2016-07-02 {
|
10
|
+
description "Initial revision. Just for testing.";
|
11
|
+
}
|
12
|
+
|
13
|
+
container rubyang {
|
14
|
+
list component {
|
15
|
+
key name;
|
16
|
+
leaf name {
|
17
|
+
type string;
|
18
|
+
}
|
19
|
+
leaf hook {
|
20
|
+
type enumeration {
|
21
|
+
//enum start;
|
22
|
+
enum commit;
|
23
|
+
//enum finish;
|
24
|
+
}
|
25
|
+
}
|
26
|
+
leaf file-path {
|
27
|
+
type string {
|
28
|
+
pattern '/.+\.rb';
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
32
|
+
}
|
33
|
+
}
|
data/rubyang.gemspec
CHANGED
@@ -30,9 +30,9 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.add_dependency "sinatra", '~> 1.0'
|
31
31
|
spec.add_dependency "sinatra-contrib", '~> 1.0'
|
32
32
|
|
33
|
-
spec.add_development_dependency "bundler",
|
34
|
-
spec.add_development_dependency "rake",
|
35
|
-
spec.add_development_dependency "rspec",
|
36
|
-
spec.add_development_dependency "racc",
|
37
|
-
spec.add_development_dependency "
|
33
|
+
spec.add_development_dependency "bundler", '~> 1.0'
|
34
|
+
spec.add_development_dependency "rake", '~> 11.0'
|
35
|
+
spec.add_development_dependency "rspec", '~> 3.0'
|
36
|
+
spec.add_development_dependency "racc", '~> 1.0'
|
37
|
+
spec.add_development_dependency "codeclimate-test-reporter", '~> 0.0'
|
38
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubyang
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- hirura
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -95,7 +95,7 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '1.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: codeclimate-test-reporter
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
@@ -131,7 +131,10 @@ files:
|
|
131
131
|
- lib/rubyang.rb
|
132
132
|
- lib/rubyang/cli.rb
|
133
133
|
- lib/rubyang/cli/parser.rb
|
134
|
+
- lib/rubyang/component/base.rb
|
135
|
+
- lib/rubyang/component/example.rb
|
134
136
|
- lib/rubyang/database.rb
|
137
|
+
- lib/rubyang/database/component_manager.rb
|
135
138
|
- lib/rubyang/database/data_tree.rb
|
136
139
|
- lib/rubyang/database/helper.rb
|
137
140
|
- lib/rubyang/database/schema_tree.rb
|
@@ -140,7 +143,10 @@ files:
|
|
140
143
|
- lib/rubyang/model/parser/parser.tab.rb
|
141
144
|
- lib/rubyang/model/parser/parser.y
|
142
145
|
- lib/rubyang/restapi.rb
|
143
|
-
- lib/rubyang/restapi/
|
146
|
+
- lib/rubyang/restapi/app.rb
|
147
|
+
- lib/rubyang/server.rb
|
148
|
+
- lib/rubyang/server/base.rb
|
149
|
+
- lib/rubyang/server/example.rb
|
144
150
|
- lib/rubyang/version.rb
|
145
151
|
- lib/rubyang/webui.rb
|
146
152
|
- lib/rubyang/webui/app.rb
|
@@ -152,6 +158,7 @@ files:
|
|
152
158
|
- lib/rubyang/xpath/parser.rb
|
153
159
|
- lib/rubyang/xpath/parser/parser.tab.rb
|
154
160
|
- lib/rubyang/xpath/parser/parser.y
|
161
|
+
- lib/rubyang/yang/rubyang.yang
|
155
162
|
- rubyang.gemspec
|
156
163
|
homepage: https://github.com/hirura/rubyang
|
157
164
|
licenses:
|
@@ -1,62 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
require 'sinatra'
|
4
|
-
require 'sinatra/contrib'
|
5
|
-
require 'sinatra/reloader'
|
6
|
-
require 'json'
|
7
|
-
|
8
|
-
require_relative '../../rubyang'
|
9
|
-
db = Rubyang::Database.new
|
10
|
-
yang_str = <<-EOB
|
11
|
-
module module1 {
|
12
|
-
namespace "http://module1/";
|
13
|
-
prefix module1;
|
14
|
-
container container1 {
|
15
|
-
container container2 {
|
16
|
-
leaf leaf1 { type string; }
|
17
|
-
}
|
18
|
-
}
|
19
|
-
}
|
20
|
-
EOB
|
21
|
-
db.load_model Rubyang::Model::Parser.parse( yang_str )
|
22
|
-
config = db.configure
|
23
|
-
config.edit( 'container1' ).edit( 'container2' ).edit( 'leaf1' ).set( 'aaa' )
|
24
|
-
|
25
|
-
|
26
|
-
get '/' do
|
27
|
-
respond_to do |f|
|
28
|
-
f.on( 'application/xml' ){
|
29
|
-
config = db.configure
|
30
|
-
config.to_xml( pretty: true )
|
31
|
-
}
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
get %r{/api(?:/(.+)[/]?)} do
|
36
|
-
respond_to do |f|
|
37
|
-
f.on( 'application/xml' ){
|
38
|
-
#{ params: ' '+params[:captures][0] }.to_json
|
39
|
-
config = db.configure
|
40
|
-
paths = params[:captures][0].split( '/' )
|
41
|
-
element = paths.inject( config ){ |parent, child| parent.edit( child ) }
|
42
|
-
element.to_xml( pretty: true )
|
43
|
-
}
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
post %r{/api(?:/(.+)[/]?)} do
|
48
|
-
body = request.body.read
|
49
|
-
respond_to do |f|
|
50
|
-
f.on( 'application/xml' ){
|
51
|
-
config = db.configure
|
52
|
-
paths = params[:captures][0].split( '/' )
|
53
|
-
element = paths.inject( config ){ |parent, child| parent.edit( child ) }
|
54
|
-
}
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
get %r{/api[/]?} do
|
59
|
-
respond_to do |f|
|
60
|
-
f.on( 'application/xml' ){ db.configure.to_xml( pretty: true ) }
|
61
|
-
end
|
62
|
-
end
|