1# Licensed to the Apache Software Foundation (ASF) under one
2# or more contributor license agreements.  See the NOTICE file
3# distributed with this work for additional information
4# regarding copyright ownership.  The ASF licenses this file
5# to you under the Apache License, Version 2.0 (the
6# "License"); you may not use this file except in compliance
7# with the License.  You may obtain a copy of the License at
8#
9#   http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing,
12# software distributed under the License is distributed on an
13# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14# KIND, either express or implied.  See the License for the
15# specific language governing permissions and limitations
16# under the License.
17
18require "arrow/block-closable"
19
20module Arrow
21  class Loader < GObjectIntrospection::Loader
22    class << self
23      def load
24        super("Arrow", Arrow)
25      end
26    end
27
28    private
29    def post_load(repository, namespace)
30      require_libraries
31      require_extension_library
32    end
33
34    def require_libraries
35      require "arrow/column-containable"
36      require "arrow/field-containable"
37      require "arrow/generic-filterable"
38      require "arrow/generic-takeable"
39      require "arrow/record-containable"
40
41      require "arrow/array"
42      require "arrow/array-builder"
43      require "arrow/bigdecimal-extension"
44      require "arrow/buffer"
45      require "arrow/chunked-array"
46      require "arrow/column"
47      require "arrow/compression-type"
48      require "arrow/csv-loader"
49      require "arrow/csv-read-options"
50      require "arrow/data-type"
51      require "arrow/date32-array"
52      require "arrow/date32-array-builder"
53      require "arrow/date64-array"
54      require "arrow/date64-array-builder"
55      require "arrow/decimal128"
56      require "arrow/decimal128-array"
57      require "arrow/decimal128-array-builder"
58      require "arrow/decimal128-data-type"
59      require "arrow/dense-union-data-type"
60      require "arrow/dictionary-data-type"
61      require "arrow/field"
62      require "arrow/file-output-stream"
63      require "arrow/group"
64      require "arrow/list-array-builder"
65      require "arrow/list-data-type"
66      require "arrow/null-array"
67      require "arrow/null-array-builder"
68      require "arrow/path-extension"
69      require "arrow/record"
70      require "arrow/record-batch"
71      require "arrow/record-batch-builder"
72      require "arrow/record-batch-file-reader"
73      require "arrow/record-batch-stream-reader"
74      require "arrow/rolling-window"
75      require "arrow/schema"
76      require "arrow/slicer"
77      require "arrow/sparse-union-data-type"
78      require "arrow/struct-array"
79      require "arrow/struct-array-builder"
80      require "arrow/struct-data-type"
81      require "arrow/table"
82      require "arrow/table-formatter"
83      require "arrow/table-list-formatter"
84      require "arrow/table-table-formatter"
85      require "arrow/table-loader"
86      require "arrow/table-saver"
87      require "arrow/tensor"
88      require "arrow/time"
89      require "arrow/time32-array"
90      require "arrow/time32-array-builder"
91      require "arrow/time32-data-type"
92      require "arrow/time64-array"
93      require "arrow/time64-array-builder"
94      require "arrow/time64-data-type"
95      require "arrow/timestamp-array"
96      require "arrow/timestamp-array-builder"
97      require "arrow/timestamp-data-type"
98      require "arrow/writable"
99    end
100
101    def require_extension_library
102      require "arrow.so"
103    end
104
105    def load_object_info(info)
106      super
107
108      klass = @base_module.const_get(rubyish_class_name(info))
109      if klass.method_defined?(:close)
110        klass.extend(BlockClosable)
111      end
112    end
113
114    def load_method_info(info, klass, method_name)
115      case klass.name
116      when /Array\z/
117        case method_name
118        when "values"
119          method_name = "values_raw"
120        end
121      end
122
123      case klass.name
124      when /Builder\z/
125        case method_name
126        when "append"
127          return
128        else
129          super
130        end
131      when "Arrow::StringArray"
132        case method_name
133        when "get_value"
134          method_name = "get_raw_value"
135        when "get_string"
136          method_name = "get_value"
137        end
138        super(info, klass, method_name)
139      when "Arrow::Date32Array",
140           "Arrow::Date64Array",
141           "Arrow::Decimal128Array",
142           "Arrow::Time32Array",
143           "Arrow::Time64Array",
144           "Arrow::TimestampArray"
145        case method_name
146        when "get_value"
147          method_name = "get_raw_value"
148        end
149        super(info, klass, method_name)
150      else
151        super
152      end
153    end
154  end
155end
156