marklogic 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.editorconfig +10 -0
- data/.gitignore +15 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +17 -0
- data/Guardfile +45 -0
- data/LICENSE.txt +21 -0
- data/README.md +31 -0
- data/Rakefile +6 -0
- data/lib/marklogic.rb +21 -0
- data/lib/marklogic/app_server.rb +60 -0
- data/lib/marklogic/application.rb +244 -0
- data/lib/marklogic/collection.rb +265 -0
- data/lib/marklogic/connection.rb +308 -0
- data/lib/marklogic/consts.rb +35 -0
- data/lib/marklogic/cursor.rb +238 -0
- data/lib/marklogic/database.rb +205 -0
- data/lib/marklogic/database_settings.rb +13 -0
- data/lib/marklogic/database_settings/element_word_lexicon.rb +28 -0
- data/lib/marklogic/database_settings/geospatial_element_child_index.rb +41 -0
- data/lib/marklogic/database_settings/geospatial_element_index.rb +38 -0
- data/lib/marklogic/database_settings/geospatial_element_pair_index.rb +42 -0
- data/lib/marklogic/database_settings/geospatial_path_index.rb +37 -0
- data/lib/marklogic/database_settings/index.rb +27 -0
- data/lib/marklogic/database_settings/range_element_index.rb +77 -0
- data/lib/marklogic/database_settings/range_field_index.rb +37 -0
- data/lib/marklogic/database_settings/range_path_index.rb +37 -0
- data/lib/marklogic/exceptions.rb +5 -0
- data/lib/marklogic/forest.rb +47 -0
- data/lib/marklogic/loggable.rb +46 -0
- data/lib/marklogic/object_id.rb +46 -0
- data/lib/marklogic/persistence.rb +29 -0
- data/lib/marklogic/queries.rb +18 -0
- data/lib/marklogic/queries/and_not_query.rb +14 -0
- data/lib/marklogic/queries/and_query.rb +14 -0
- data/lib/marklogic/queries/base_query.rb +40 -0
- data/lib/marklogic/queries/boost_query.rb +14 -0
- data/lib/marklogic/queries/collection_query.rb +14 -0
- data/lib/marklogic/queries/container_query.rb +15 -0
- data/lib/marklogic/queries/directory_query.rb +20 -0
- data/lib/marklogic/queries/document_fragment_query.rb +13 -0
- data/lib/marklogic/queries/document_query.rb +14 -0
- data/lib/marklogic/queries/geospatial_query.rb +44 -0
- data/lib/marklogic/queries/locks_fragment_query.rb +13 -0
- data/lib/marklogic/queries/near_query.rb +31 -0
- data/lib/marklogic/queries/not_in_query.rb +14 -0
- data/lib/marklogic/queries/not_query.rb +13 -0
- data/lib/marklogic/queries/or_query.rb +24 -0
- data/lib/marklogic/queries/properties_fragment_query.rb +13 -0
- data/lib/marklogic/queries/range_query.rb +67 -0
- data/lib/marklogic/queries/value_query.rb +44 -0
- data/lib/marklogic/queries/word_query.rb +38 -0
- data/lib/marklogic/version.rb +3 -0
- data/marklogic.gemspec +23 -0
- data/spec/marklogic/app_server_spec.rb +21 -0
- data/spec/marklogic/application_spec.rb +105 -0
- data/spec/marklogic/collection_spec.rb +154 -0
- data/spec/marklogic/connection_spec.rb +128 -0
- data/spec/marklogic/cursor_spec.rb +219 -0
- data/spec/marklogic/database_settings/element_word_lexicon_spec.rb +21 -0
- data/spec/marklogic/database_settings/geospatial_element_child_index_spec.rb +26 -0
- data/spec/marklogic/database_settings/geospatial_element_index_spec.rb +24 -0
- data/spec/marklogic/database_settings/geospatial_element_pair_index_spec.rb +27 -0
- data/spec/marklogic/database_settings/geospatial_path_index_spec.rb +23 -0
- data/spec/marklogic/database_settings/range_element_index_spec.rb +34 -0
- data/spec/marklogic/database_settings/range_field_index_spec.rb +23 -0
- data/spec/marklogic/database_settings/range_path_index_spec.rb +23 -0
- data/spec/marklogic/database_spec.rb +108 -0
- data/spec/marklogic/forest_spec.rb +30 -0
- data/spec/marklogic/queries/and_not_query_spec.rb +13 -0
- data/spec/marklogic/queries/and_query_spec.rb +31 -0
- data/spec/marklogic/queries/boost_query_spec.rb +13 -0
- data/spec/marklogic/queries/collection_query_spec.rb +16 -0
- data/spec/marklogic/queries/container_query_spec.rb +11 -0
- data/spec/marklogic/queries/directory_query_spec.rb +21 -0
- data/spec/marklogic/queries/document_fragment_query_spec.rb +11 -0
- data/spec/marklogic/queries/document_query_spec.rb +16 -0
- data/spec/marklogic/queries/locks_fragement_query_spec.rb +11 -0
- data/spec/marklogic/queries/near_query_spec.rb +62 -0
- data/spec/marklogic/queries/not_in_query_spec.rb +13 -0
- data/spec/marklogic/queries/not_query_spec.rb +11 -0
- data/spec/marklogic/queries/or_query_spec.rb +32 -0
- data/spec/marklogic/queries/properties_fragment_query_spec.rb +11 -0
- data/spec/marklogic/queries/range_query_spec.rb +71 -0
- data/spec/marklogic/queries/value_query_spec.rb +68 -0
- data/spec/marklogic/queries/word_query_spec.rb +53 -0
- data/spec/spec_helper.rb +68 -0
- metadata +186 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
module MarkLogic
|
2
|
+
module DatabaseSettings
|
3
|
+
autoload :Index, 'marklogic/database_settings/index'
|
4
|
+
autoload :ElementWordLexicon, 'marklogic/database_settings/element_word_lexicon'
|
5
|
+
autoload :GeospatialElementChildIndex, 'marklogic/database_settings/geospatial_element_child_index'
|
6
|
+
autoload :GeospatialElementIndex, 'marklogic/database_settings/geospatial_element_index'
|
7
|
+
autoload :GeospatialElementPairIndex, 'marklogic/database_settings/geospatial_element_pair_index'
|
8
|
+
autoload :GeospatialPathIndex, 'marklogic/database_settings/geospatial_path_index'
|
9
|
+
autoload :RangeElementIndex, 'marklogic/database_settings/range_element_index'
|
10
|
+
autoload :RangeFieldIndex, 'marklogic/database_settings/range_field_index'
|
11
|
+
autoload :RangePathIndex, 'marklogic/database_settings/range_path_index'
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module MarkLogic
|
2
|
+
module DatabaseSettings
|
3
|
+
class ElementWordLexicon
|
4
|
+
def initialize(localname, collation = DEFAULT_COLLATION)
|
5
|
+
@localname = localname
|
6
|
+
@collation = collation
|
7
|
+
end
|
8
|
+
|
9
|
+
def append_to_db(database)
|
10
|
+
database.add_index("element-word-lexicon", self)
|
11
|
+
end
|
12
|
+
|
13
|
+
def key
|
14
|
+
%Q{#{self.class.to_s}-#{@localname}}
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_json(options = nil)
|
18
|
+
{
|
19
|
+
"element-word-lexicon" => {
|
20
|
+
"namespace-uri" => "",
|
21
|
+
"localname" => @localname,
|
22
|
+
"collation" => @collation
|
23
|
+
}
|
24
|
+
}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module MarkLogic
|
2
|
+
module DatabaseSettings
|
3
|
+
class GeospatialElementChildIndex
|
4
|
+
|
5
|
+
attr_accessor :parent_localname, :localname, :facet
|
6
|
+
|
7
|
+
def initialize(parent_localname, child_localname, options = {})
|
8
|
+
@parent_localname = parent_localname
|
9
|
+
@localname = child_localname
|
10
|
+
@coordinate_system = options[:coordinate_system] || MarkLogic::GEO_WGS84
|
11
|
+
@point_format = options[:point_format] || MarkLogic::POINT
|
12
|
+
@range_value_positions = options[:range_value_positions] || false
|
13
|
+
@invalid_values = options[:invalid_values] || MarkLogic::REJECT
|
14
|
+
@facet = options[:facet] || false
|
15
|
+
end
|
16
|
+
|
17
|
+
def key
|
18
|
+
%Q{#{self.class.to_s}-#{@localname}}
|
19
|
+
end
|
20
|
+
|
21
|
+
def append_to_db(database)
|
22
|
+
database.add_index("geospatial-element-child-index", self)
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_json(options = nil)
|
26
|
+
{
|
27
|
+
"geospatial-element-child-index" => {
|
28
|
+
"parent-namespace-uri" => "",
|
29
|
+
"parent-localname" => @parent_localname,
|
30
|
+
"namespace-uri" => "",
|
31
|
+
"localname" => @localname,
|
32
|
+
"coordinate-system" => @coordinate_system,
|
33
|
+
"point-format" => @point_format,
|
34
|
+
"range-value-positions" => @range_value_positions,
|
35
|
+
"invalid-values" => @invalid_values
|
36
|
+
}
|
37
|
+
}
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module MarkLogic
|
2
|
+
module DatabaseSettings
|
3
|
+
class GeospatialElementIndex
|
4
|
+
|
5
|
+
attr_accessor :localname, :facet
|
6
|
+
|
7
|
+
def initialize(element_name, options = {})
|
8
|
+
@localname = element_name
|
9
|
+
@coordinate_system = options[:coordinate_system] || MarkLogic::GEO_WGS84
|
10
|
+
@point_format = options[:point_format] || MarkLogic::POINT
|
11
|
+
@range_value_positions = options[:range_value_positions] || false
|
12
|
+
@invalid_values = options[:invalid_values] || MarkLogic::REJECT
|
13
|
+
@facet = options[:facet] || false
|
14
|
+
end
|
15
|
+
|
16
|
+
def key
|
17
|
+
%Q{#{self.class.to_s}-#{@localname}}
|
18
|
+
end
|
19
|
+
|
20
|
+
def append_to_db(database)
|
21
|
+
database.add_index("geospatial-element-index", self)
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_json(options = nil)
|
25
|
+
{
|
26
|
+
"geospatial-element-index" => {
|
27
|
+
"namespace-uri" => "",
|
28
|
+
"localname" => @localname,
|
29
|
+
"coordinate-system" => @coordinate_system,
|
30
|
+
"point-format" => @point_format,
|
31
|
+
"range-value-positions" => @range_value_positions,
|
32
|
+
"invalid-values" => @invalid_values
|
33
|
+
}
|
34
|
+
}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module MarkLogic
|
2
|
+
module DatabaseSettings
|
3
|
+
class GeospatialElementPairIndex
|
4
|
+
|
5
|
+
attr_accessor :parent_localname, :latitude_localname, :longitude_localname, :facet
|
6
|
+
|
7
|
+
def initialize(element_name, latitude_localname, longitude_localname, options = {})
|
8
|
+
@parent_localname = element_name
|
9
|
+
@latitude_localname = latitude_localname
|
10
|
+
@longitude_localname = longitude_localname
|
11
|
+
@coordinate_system = options[:coordinate_system] || MarkLogic::GEO_WGS84
|
12
|
+
@range_value_positions = options[:range_value_positions] || false
|
13
|
+
@invalid_values = options[:invalid_values] || MarkLogic::REJECT
|
14
|
+
@facet = options[:facet] || false
|
15
|
+
end
|
16
|
+
|
17
|
+
def key
|
18
|
+
%Q{#{self.class.to_s}-#{@localname}}
|
19
|
+
end
|
20
|
+
|
21
|
+
def append_to_db(database)
|
22
|
+
database.add_index("geospatial-element-pair-index", self)
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_json(options = nil)
|
26
|
+
{
|
27
|
+
"geospatial-element-pair-index" => {
|
28
|
+
"parent-namespace-uri" => "",
|
29
|
+
"parent-localname" => @parent_localname,
|
30
|
+
"latitude-namespace-uri" => "",
|
31
|
+
"latitude-localname" => @latitude_localname,
|
32
|
+
"longitude-namespace-uri" => "",
|
33
|
+
"longitude-localname" => @longitude_localname,
|
34
|
+
"coordinate-system" => @coordinate_system,
|
35
|
+
"range-value-positions" => @range_value_positions,
|
36
|
+
"invalid-values" => @invalid_values
|
37
|
+
}
|
38
|
+
}
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module MarkLogic
|
2
|
+
module DatabaseSettings
|
3
|
+
class GeospatialPathIndex
|
4
|
+
|
5
|
+
attr_accessor :path_expression, :facet
|
6
|
+
|
7
|
+
def initialize(path_expression, options = {})
|
8
|
+
@path_expression = path_expression
|
9
|
+
@coordinate_system = options[:coordinate_system] || MarkLogic::GEO_WGS84
|
10
|
+
@point_format = options[:point_format] || MarkLogic::POINT
|
11
|
+
@range_value_positions = options[:range_value_positions] || false
|
12
|
+
@invalid_values = options[:invalid_values] || MarkLogic::REJECT
|
13
|
+
@facet = options[:facet] || false
|
14
|
+
end
|
15
|
+
|
16
|
+
def key
|
17
|
+
%Q{#{self.class.to_s}-#{@localname}}
|
18
|
+
end
|
19
|
+
|
20
|
+
def append_to_db(database)
|
21
|
+
database.add_index("geospatial-path-index", self)
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_json(options = nil)
|
25
|
+
{
|
26
|
+
"geospatial-path-index" => {
|
27
|
+
"path-expression" => @path_expression,
|
28
|
+
"coordinate-system" => @coordinate_system,
|
29
|
+
"point-format" => @point_format,
|
30
|
+
"range-value-positions" => @range_value_positions,
|
31
|
+
"invalid-values" => @invalid_values
|
32
|
+
}
|
33
|
+
}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module MarkLogic
|
2
|
+
module DatabaseSettings
|
3
|
+
class Index
|
4
|
+
|
5
|
+
def self.from_json(type, json)
|
6
|
+
case type
|
7
|
+
when 'range-element-index'
|
8
|
+
RangeElementIndex.from_json(json)
|
9
|
+
when 'element-word-lexicon'
|
10
|
+
ElementWordLexicon.from_json(json)
|
11
|
+
when 'range-path-index'
|
12
|
+
RangepathIndex.from_json(json)
|
13
|
+
when 'range-field-index'
|
14
|
+
RangeFieldIndex.from_json(json)
|
15
|
+
when 'geospatial-element-index'
|
16
|
+
GeospatialElementIndex.from_json(json)
|
17
|
+
when 'geospatial-element-child-index'
|
18
|
+
GeospatialElementChildIndex.from_json(json)
|
19
|
+
when 'geospatial-element-pair-index'
|
20
|
+
GeospatialElementPairIndex.from_json(json)
|
21
|
+
when 'geospatial-path-index'
|
22
|
+
GeospatialPathIndex.from_json(json)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module MarkLogic
|
2
|
+
module DatabaseSettings
|
3
|
+
class RangeElementIndex
|
4
|
+
|
5
|
+
attr_accessor :scalar_type, :localname, :namespace_uri, :collation, :range_value_positions, :invalid_values, :facet
|
6
|
+
|
7
|
+
def initialize(name, options = {})
|
8
|
+
@scalar_type = options[:type] || 'string'
|
9
|
+
@localname = name.to_s
|
10
|
+
@namespace_uri = options[:namespace] || ""
|
11
|
+
@collation = options[:collation] || (@scalar_type == 'string' ? MarkLogic::DEFAULT_COLLATION : "")
|
12
|
+
@range_value_positions = options[:range_value_positions] || false
|
13
|
+
@invalid_values = options[:invalid_values] || MarkLogic::REJECT
|
14
|
+
@facet = options[:facet] || false
|
15
|
+
end
|
16
|
+
|
17
|
+
def key
|
18
|
+
%Q{#{self.class.to_s}-#{@localname}}
|
19
|
+
end
|
20
|
+
|
21
|
+
def <=>(other)
|
22
|
+
localname <=> other.localname
|
23
|
+
end
|
24
|
+
|
25
|
+
def ==(other)
|
26
|
+
self.class == other.class and
|
27
|
+
scalar_type == other.scalar_type and
|
28
|
+
localname = other.localname and
|
29
|
+
namespace_uri = other.namespace_uri and
|
30
|
+
collation == other.collation and
|
31
|
+
range_value_positions == other.range_value_positions and
|
32
|
+
invalid_values == other.invalid_values
|
33
|
+
end
|
34
|
+
|
35
|
+
def type
|
36
|
+
"range-element-index"
|
37
|
+
end
|
38
|
+
|
39
|
+
def append_to_db(database)
|
40
|
+
database.add_index("range-element-index", self)
|
41
|
+
end
|
42
|
+
|
43
|
+
def to_json(options = nil)
|
44
|
+
{
|
45
|
+
"scalar-type" => @scalar_type,
|
46
|
+
"namespace-uri" => @namespace_uri,
|
47
|
+
"localname" => @localname,
|
48
|
+
"collation" => @collation,
|
49
|
+
"range-value-positions" => @range_value_positions,
|
50
|
+
"invalid-values" => @invalid_values
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_ref
|
55
|
+
options = [%Q{"type=#{@scalar_type}"}]
|
56
|
+
options << %Q{"collation=#{@collation}"} if @scalar_type == "string"
|
57
|
+
%Q{cts:json-property-reference("#{@localname}", (#{options.join(',')}))}
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.from_json(json)
|
61
|
+
index = allocate
|
62
|
+
index.from_json(json)
|
63
|
+
index
|
64
|
+
end
|
65
|
+
|
66
|
+
def from_json(json)
|
67
|
+
@scalar_type = json['scalar-type']
|
68
|
+
@namespace_uri = json['namespace-uri']
|
69
|
+
@localname = json['localname']
|
70
|
+
@collation = json['collation']
|
71
|
+
@range_value_positions = json['range-value-positions']
|
72
|
+
@invalid_values = json['invalid-values']
|
73
|
+
@facet = false
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module MarkLogic
|
2
|
+
module DatabaseSettings
|
3
|
+
class RangeFieldIndex
|
4
|
+
|
5
|
+
attr_accessor :scalar_type, :field_name, :collation, :facet
|
6
|
+
|
7
|
+
def initialize(field_name, options = {})
|
8
|
+
@scalar_type = options[:type] || MarkLogic::STRING
|
9
|
+
@field_name = field_name
|
10
|
+
@collation = options[:collation] || DEFAULT_COLLATION
|
11
|
+
@range_value_positions = options[:range_value_positions] || false
|
12
|
+
@invalid_values = options[:invalid_values] || MarkLogic::REJECT
|
13
|
+
@facet = options[:facet] || false
|
14
|
+
end
|
15
|
+
|
16
|
+
def key
|
17
|
+
%Q{#{self.class.to_s}-#{@localname}}
|
18
|
+
end
|
19
|
+
|
20
|
+
def append_to_db(database)
|
21
|
+
database.add_index("range-field-index", self)
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_json(options = nil)
|
25
|
+
{
|
26
|
+
"range-field-index" => {
|
27
|
+
"scalar-type" => @scalar_type,
|
28
|
+
"field-name" => @field_name,
|
29
|
+
"collation" => @collation,
|
30
|
+
"range-value-positions" => @range_value_positions,
|
31
|
+
"invalid-values" => @invalid_values
|
32
|
+
}
|
33
|
+
}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module MarkLogic
|
2
|
+
module DatabaseSettings
|
3
|
+
class RangePathIndex
|
4
|
+
|
5
|
+
attr_accessor :scalar_type, :collation, :path_expression, :facet
|
6
|
+
|
7
|
+
def initialize(path_expression, options = {})
|
8
|
+
@scalar_type = options[:type] || MarkLogic::STRING
|
9
|
+
@collation = options[:collation] || DEFAULT_COLLATION
|
10
|
+
@path_expression = path_expression
|
11
|
+
@range_value_positions = options[:range_value_positions] || false
|
12
|
+
@invalid_values = options[:invalid_values] || MarkLogic::REJECT
|
13
|
+
@facet = options[:facet] || false
|
14
|
+
end
|
15
|
+
|
16
|
+
def key
|
17
|
+
%Q{#{self.class.to_s}-#{@localname}}
|
18
|
+
end
|
19
|
+
|
20
|
+
def append_to_db(database)
|
21
|
+
database.add_index("range-path-index", self)
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_json(options = nil)
|
25
|
+
{
|
26
|
+
"range-path-index" => {
|
27
|
+
"scalar-type" => @scalar_type,
|
28
|
+
"collation" => @collation,
|
29
|
+
"path-expression" => @path_expression,
|
30
|
+
"range-value-positions" => @range_value_positions,
|
31
|
+
"invalid-values" => @invalid_values
|
32
|
+
}
|
33
|
+
}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module MarkLogic
|
2
|
+
class Forest
|
3
|
+
include MarkLogic::Persistence
|
4
|
+
|
5
|
+
attr_accessor :forest_name
|
6
|
+
def initialize(forest_name, host_name = nil, conn = nil)
|
7
|
+
self.connection = conn
|
8
|
+
@forest_name = forest_name
|
9
|
+
@host_name = host_name || self.manage_connection.host
|
10
|
+
@options = {
|
11
|
+
"forest-name" => @forest_name,
|
12
|
+
"host" => @host_name
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
def []=(key, value)
|
17
|
+
@options[key] = value
|
18
|
+
end
|
19
|
+
|
20
|
+
def [](key)
|
21
|
+
@options[key]
|
22
|
+
end
|
23
|
+
|
24
|
+
def has_key?(key)
|
25
|
+
@options.has_key?(key)
|
26
|
+
end
|
27
|
+
|
28
|
+
def database=(db)
|
29
|
+
@database = db
|
30
|
+
@options['database'] = db.database_name
|
31
|
+
end
|
32
|
+
|
33
|
+
def create
|
34
|
+
r = manage_connection.post_json(
|
35
|
+
%Q{/manage/v2/forests?format=json},
|
36
|
+
@options)
|
37
|
+
end
|
38
|
+
|
39
|
+
def exists?
|
40
|
+
manage_connection.head(%Q{/manage/v2/forests/#{forest_name}}).code.to_i == 200
|
41
|
+
end
|
42
|
+
|
43
|
+
def drop
|
44
|
+
r = manage_connection.delete(%Q{/manage/v2/forests/#{forest_name}?level=full&format=json})
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|