gpis 0.0.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.
- data/.gitignore +17 -0
- data/.idea/.name +1 -0
- data/.idea/.rakeTasks +7 -0
- data/.idea/encodings.xml +5 -0
- data/.idea/gpis.iml +44 -0
- data/.idea/misc.xml +351 -0
- data/.idea/modules.xml +9 -0
- data/.idea/scopes/scope_settings.xml +5 -0
- data/.idea/vcs.xml +7 -0
- data/.idea/workspace.xml +401 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +29 -0
- data/Rakefile +2 -0
- data/gpis.gemspec +22 -0
- data/lib/gpis.rb +9 -0
- data/lib/gpis/gpis_app_info.rb +105 -0
- data/lib/gpis/gpis_exceptions.rb +6 -0
- data/lib/gpis/gpis_scraper.rb +37 -0
- data/lib/gpis/version.rb +3 -0
- metadata +116 -0
data/.gitignore
ADDED
data/.idea/.name
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
gpis
|
data/.idea/.rakeTasks
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<Settings><!--This file was automatically generated by Ruby plugin.
|
3
|
+
You are allowed to:
|
4
|
+
1. Remove rake task
|
5
|
+
2. Add existing rake tasks
|
6
|
+
To add existing rake tasks automatically delete this file and reload the project.
|
7
|
+
--><RakeGroup description="" fullCmd="" taksId="rake"><RakeTask description="Build gpis-0.0.1.gem into the pkg directory" fullCmd="build" taksId="build" /><RakeTask description="Build and install gpis-0.0.1.gem into system gems" fullCmd="install" taksId="install" /><RakeTask description="Create tag v0.0.1 and build and push gpis-0.0.1.gem to Rubygems" fullCmd="release" taksId="release" /></RakeGroup></Settings>
|
data/.idea/encodings.xml
ADDED
data/.idea/gpis.iml
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<module type="RUBY_MODULE" version="4">
|
3
|
+
<component name="DBNavigator.Module.ConnectionManager">
|
4
|
+
<connections />
|
5
|
+
</component>
|
6
|
+
<component name="NewModuleRootManager">
|
7
|
+
<content url="file://$MODULE_DIR$" />
|
8
|
+
<orderEntry type="inheritedJdk" />
|
9
|
+
<orderEntry type="sourceFolder" forTests="false" />
|
10
|
+
<orderEntry type="library" scope="PROVIDED" name="actionmailer (v3.2.3, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
11
|
+
<orderEntry type="library" scope="PROVIDED" name="actionpack (v3.2.3, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
12
|
+
<orderEntry type="library" scope="PROVIDED" name="activemodel (v3.2.3, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
13
|
+
<orderEntry type="library" scope="PROVIDED" name="activerecord (v3.2.3, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
14
|
+
<orderEntry type="library" scope="PROVIDED" name="activeresource (v3.2.3, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
15
|
+
<orderEntry type="library" scope="PROVIDED" name="activesupport (v3.2.3, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
16
|
+
<orderEntry type="library" scope="PROVIDED" name="arel (v3.0.2, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
17
|
+
<orderEntry type="library" scope="PROVIDED" name="builder (v3.0.0, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
18
|
+
<orderEntry type="library" scope="PROVIDED" name="bundler (v1.0.21, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
19
|
+
<orderEntry type="library" scope="PROVIDED" name="erubis (v2.7.0, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
20
|
+
<orderEntry type="library" scope="PROVIDED" name="hike (v1.2.1, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
21
|
+
<orderEntry type="library" scope="PROVIDED" name="i18n (v0.6.0, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
22
|
+
<orderEntry type="library" scope="PROVIDED" name="journey (v1.0.3, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
23
|
+
<orderEntry type="library" scope="PROVIDED" name="json (v1.7.3, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
24
|
+
<orderEntry type="library" scope="PROVIDED" name="mail (v2.4.4, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
25
|
+
<orderEntry type="library" scope="PROVIDED" name="mime-types (v1.18, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
26
|
+
<orderEntry type="library" scope="PROVIDED" name="multi_json (v1.3.6, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
27
|
+
<orderEntry type="library" scope="PROVIDED" name="nokogiri (v1.5.2, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
28
|
+
<orderEntry type="library" scope="PROVIDED" name="polyglot (v0.3.3, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
29
|
+
<orderEntry type="library" scope="PROVIDED" name="rack (v1.4.1, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
30
|
+
<orderEntry type="library" scope="PROVIDED" name="rack-cache (v1.2, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
31
|
+
<orderEntry type="library" scope="PROVIDED" name="rack-ssl (v1.3.2, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
32
|
+
<orderEntry type="library" scope="PROVIDED" name="rack-test (v0.6.1, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
33
|
+
<orderEntry type="library" scope="PROVIDED" name="rails (v3.2.3, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
34
|
+
<orderEntry type="library" scope="PROVIDED" name="railties (v3.2.3, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
35
|
+
<orderEntry type="library" scope="PROVIDED" name="rake (v0.9.2.2, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
36
|
+
<orderEntry type="library" scope="PROVIDED" name="rdoc (v3.12, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
37
|
+
<orderEntry type="library" scope="PROVIDED" name="sprockets (v2.1.3, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
38
|
+
<orderEntry type="library" scope="PROVIDED" name="thor (v0.14.6, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
39
|
+
<orderEntry type="library" scope="PROVIDED" name="tilt (v1.3.3, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
40
|
+
<orderEntry type="library" scope="PROVIDED" name="treetop (v1.4.10, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
41
|
+
<orderEntry type="library" scope="PROVIDED" name="tzinfo (v0.3.33, RVM: ruby-1.9.2-p290) [gem]" level="application" />
|
42
|
+
</component>
|
43
|
+
</module>
|
44
|
+
|
data/.idea/misc.xml
ADDED
@@ -0,0 +1,351 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<project version="4">
|
3
|
+
<component name="DBNavigator.Project.ConnectionManager">
|
4
|
+
<connections />
|
5
|
+
</component>
|
6
|
+
<component name="DBNavigator.Project.DataEditorManager">
|
7
|
+
<record-view-column-sorting-type value="BY_INDEX" />
|
8
|
+
<value-preview-text-wrapping value="true" />
|
9
|
+
<value-preview-pinned value="false" />
|
10
|
+
</component>
|
11
|
+
<component name="DBNavigator.Project.DataExportManager">
|
12
|
+
<export-instructions>
|
13
|
+
<create-header value="true" />
|
14
|
+
<quote-values-containing-separator value="true" />
|
15
|
+
<quote-all-values value="false" />
|
16
|
+
<value-separator value="" />
|
17
|
+
<file-name value="" />
|
18
|
+
<file-location value="" />
|
19
|
+
<scope value="GLOBAL" />
|
20
|
+
<destination value="FILE" />
|
21
|
+
<format value="EXCEL" />
|
22
|
+
</export-instructions>
|
23
|
+
</component>
|
24
|
+
<component name="DBNavigator.Project.DatabaseBrowserManager">
|
25
|
+
<autoscroll-to-editor value="false" />
|
26
|
+
<autoscroll-from-editor value="true" />
|
27
|
+
<show-object-properties value="true" />
|
28
|
+
</component>
|
29
|
+
<component name="DBNavigator.Project.MethodExecutionManager">
|
30
|
+
<group-history-entries value="false" />
|
31
|
+
<method-browser />
|
32
|
+
<execution-inputs />
|
33
|
+
</component>
|
34
|
+
<component name="DBNavigator.Project.Settings">
|
35
|
+
<general-settings>
|
36
|
+
<regional-settings>
|
37
|
+
<date-format value="MEDIUM" />
|
38
|
+
<number-format value="UNGROUPED" />
|
39
|
+
<locale value="SYSTEM_DEFAULT" />
|
40
|
+
<use-custom-formats value="false" />
|
41
|
+
</regional-settings>
|
42
|
+
<environment>
|
43
|
+
<environment-types>
|
44
|
+
<environment-type name="Development" description="Development environment" color="-2430209" />
|
45
|
+
<environment-type name="Test" description="Testing environment" color="-2621494" />
|
46
|
+
<environment-type name="Production" description="Productive environment" color="-11574" />
|
47
|
+
<environment-type name="Other" description="" color="-1576" />
|
48
|
+
</environment-types>
|
49
|
+
<visibility-settings>
|
50
|
+
<connection-tabs value="true" />
|
51
|
+
<dialog-headers value="true" />
|
52
|
+
<object-editor-tabs value="true" />
|
53
|
+
<script-editor-tabs value="false" />
|
54
|
+
<execution-result-tabs value="true" />
|
55
|
+
</visibility-settings>
|
56
|
+
</environment>
|
57
|
+
</general-settings>
|
58
|
+
<browser-settings>
|
59
|
+
<general>
|
60
|
+
<display-mode value="TABBED" />
|
61
|
+
<navigation-history-size value="100" />
|
62
|
+
<show-object-details value="false" />
|
63
|
+
</general>
|
64
|
+
<filters>
|
65
|
+
<object-type-filter>
|
66
|
+
<object-type name="SCHEMA" enabled="true" />
|
67
|
+
<object-type name="USER" enabled="true" />
|
68
|
+
<object-type name="ROLE" enabled="true" />
|
69
|
+
<object-type name="PRIVILEGE" enabled="true" />
|
70
|
+
<object-type name="CHARSET" enabled="true" />
|
71
|
+
<object-type name="TABLE" enabled="true" />
|
72
|
+
<object-type name="VIEW" enabled="true" />
|
73
|
+
<object-type name="MATERIALIZED VIEW" enabled="true" />
|
74
|
+
<object-type name="NESTED TABLE" enabled="true" />
|
75
|
+
<object-type name="COLUMN" enabled="true" />
|
76
|
+
<object-type name="INDEX" enabled="true" />
|
77
|
+
<object-type name="CONSTRAINT" enabled="true" />
|
78
|
+
<object-type name="TRIGGER" enabled="true" />
|
79
|
+
<object-type name="SYNONYM" enabled="true" />
|
80
|
+
<object-type name="SEQUENCE" enabled="true" />
|
81
|
+
<object-type name="PROCEDURE" enabled="true" />
|
82
|
+
<object-type name="FUNCTION" enabled="true" />
|
83
|
+
<object-type name="PACKAGE" enabled="true" />
|
84
|
+
<object-type name="TYPE" enabled="true" />
|
85
|
+
<object-type name="TYPE ATTRIBUTE" enabled="true" />
|
86
|
+
<object-type name="ARGUMENT" enabled="true" />
|
87
|
+
<object-type name="DIMENSION" enabled="true" />
|
88
|
+
<object-type name="CLUSTER" enabled="true" />
|
89
|
+
<object-type name="DBLINK" enabled="true" />
|
90
|
+
</object-type-filter>
|
91
|
+
</filters>
|
92
|
+
</browser-settings>
|
93
|
+
<navigation-settings>
|
94
|
+
<lookup-filters>
|
95
|
+
<lookup-objects>
|
96
|
+
<object-type name="SCHEMA" enabled="true" />
|
97
|
+
<object-type name="USER" enabled="false" />
|
98
|
+
<object-type name="ROLE" enabled="false" />
|
99
|
+
<object-type name="PRIVILEGE" enabled="false" />
|
100
|
+
<object-type name="CHARSET" enabled="false" />
|
101
|
+
<object-type name="TABLE" enabled="true" />
|
102
|
+
<object-type name="VIEW" enabled="true" />
|
103
|
+
<object-type name="MATERIALIZED VIEW" enabled="true" />
|
104
|
+
<object-type name="NESTED TABLE" enabled="false" />
|
105
|
+
<object-type name="COLUMN" enabled="false" />
|
106
|
+
<object-type name="INDEX" enabled="true" />
|
107
|
+
<object-type name="CONSTRAINT" enabled="true" />
|
108
|
+
<object-type name="TRIGGER" enabled="true" />
|
109
|
+
<object-type name="SYNONYM" enabled="false" />
|
110
|
+
<object-type name="SEQUENCE" enabled="true" />
|
111
|
+
<object-type name="PROCEDURE" enabled="true" />
|
112
|
+
<object-type name="FUNCTION" enabled="true" />
|
113
|
+
<object-type name="PACKAGE" enabled="true" />
|
114
|
+
<object-type name="TYPE" enabled="true" />
|
115
|
+
<object-type name="TYPE ATTRIBUTE" enabled="false" />
|
116
|
+
<object-type name="ARGUMENT" enabled="false" />
|
117
|
+
<object-type name="DIMENSION" enabled="false" />
|
118
|
+
<object-type name="CLUSTER" enabled="false" />
|
119
|
+
<object-type name="DBLINK" enabled="true" />
|
120
|
+
</lookup-objects>
|
121
|
+
<force-database-load value="false" />
|
122
|
+
<prompt-connection-selection value="true" />
|
123
|
+
</lookup-filters>
|
124
|
+
</navigation-settings>
|
125
|
+
<dataset-editor-settings>
|
126
|
+
<text-editor-popup>
|
127
|
+
<active value="false" />
|
128
|
+
<active-if-empty value="false" />
|
129
|
+
<data-length-threshold value="100" />
|
130
|
+
<popup-delay value="1000" />
|
131
|
+
</text-editor-popup>
|
132
|
+
<values-list-popup>
|
133
|
+
<active-for-primary-keys value="false" />
|
134
|
+
<element-count-threshold value="1000" />
|
135
|
+
<data-length-threshold value="250" />
|
136
|
+
</values-list-popup>
|
137
|
+
<general>
|
138
|
+
<fetch-block-size value="100" />
|
139
|
+
<fetch-timeout value="30" />
|
140
|
+
<trim-whitespaces value="true" />
|
141
|
+
<convert-empty-strings-to-null value="true" />
|
142
|
+
<select-content-on-cell-edit value="true" />
|
143
|
+
<large-value-preview-active value="true" />
|
144
|
+
</general>
|
145
|
+
<filters>
|
146
|
+
<prompt-filter-dialog value="true" />
|
147
|
+
<default-filter-type value="BASIC" />
|
148
|
+
</filters>
|
149
|
+
<qualified-text-editor text-length-threshold="300">
|
150
|
+
<content-types>
|
151
|
+
<content-type name="Text" enabled="true" />
|
152
|
+
<content-type name="XML" enabled="true" />
|
153
|
+
<content-type name="DTD" enabled="true" />
|
154
|
+
<content-type name="HTML" enabled="true" />
|
155
|
+
<content-type name="XHTML" enabled="true" />
|
156
|
+
<content-type name="CSS" enabled="true" />
|
157
|
+
<content-type name="SQL" enabled="true" />
|
158
|
+
<content-type name="PL/SQL" enabled="true" />
|
159
|
+
<content-type name="JavaScript" enabled="true" />
|
160
|
+
<content-type name="YAML" enabled="true" />
|
161
|
+
</content-types>
|
162
|
+
</qualified-text-editor>
|
163
|
+
<record-navigation>
|
164
|
+
<navigation-target value="VIEWER" />
|
165
|
+
</record-navigation>
|
166
|
+
</dataset-editor-settings>
|
167
|
+
<code-completion-settings>
|
168
|
+
<filters>
|
169
|
+
<basic-filter>
|
170
|
+
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
|
171
|
+
<filter-element type="RESERVED_WORD" id="function" selected="false" />
|
172
|
+
<filter-element type="RESERVED_WORD" id="parameter" selected="false" />
|
173
|
+
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
|
174
|
+
<filter-element type="OBJECT" id="schema" selected="true" />
|
175
|
+
<filter-element type="OBJECT" id="user" selected="true" />
|
176
|
+
<user-schema>
|
177
|
+
<filter-element type="OBJECT" id="table" selected="true" />
|
178
|
+
<filter-element type="OBJECT" id="view" selected="true" />
|
179
|
+
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
180
|
+
<filter-element type="OBJECT" id="index" selected="true" />
|
181
|
+
<filter-element type="OBJECT" id="constraint" selected="true" />
|
182
|
+
<filter-element type="OBJECT" id="trigger" selected="true" />
|
183
|
+
<filter-element type="OBJECT" id="synonym" selected="false" />
|
184
|
+
<filter-element type="OBJECT" id="sequence" selected="true" />
|
185
|
+
<filter-element type="OBJECT" id="procedure" selected="true" />
|
186
|
+
<filter-element type="OBJECT" id="function" selected="true" />
|
187
|
+
<filter-element type="OBJECT" id="package" selected="true" />
|
188
|
+
<filter-element type="OBJECT" id="type" selected="true" />
|
189
|
+
<filter-element type="OBJECT" id="dimension" selected="true" />
|
190
|
+
<filter-element type="OBJECT" id="cluster" selected="true" />
|
191
|
+
<filter-element type="OBJECT" id="dblink" selected="true" />
|
192
|
+
</user-schema>
|
193
|
+
<public-schema>
|
194
|
+
<filter-element type="OBJECT" id="table" selected="false" />
|
195
|
+
<filter-element type="OBJECT" id="view" selected="false" />
|
196
|
+
<filter-element type="OBJECT" id="materialized view" selected="false" />
|
197
|
+
<filter-element type="OBJECT" id="index" selected="false" />
|
198
|
+
<filter-element type="OBJECT" id="constraint" selected="false" />
|
199
|
+
<filter-element type="OBJECT" id="trigger" selected="false" />
|
200
|
+
<filter-element type="OBJECT" id="synonym" selected="false" />
|
201
|
+
<filter-element type="OBJECT" id="sequence" selected="false" />
|
202
|
+
<filter-element type="OBJECT" id="procedure" selected="false" />
|
203
|
+
<filter-element type="OBJECT" id="function" selected="false" />
|
204
|
+
<filter-element type="OBJECT" id="package" selected="false" />
|
205
|
+
<filter-element type="OBJECT" id="type" selected="false" />
|
206
|
+
<filter-element type="OBJECT" id="dimension" selected="false" />
|
207
|
+
<filter-element type="OBJECT" id="cluster" selected="false" />
|
208
|
+
<filter-element type="OBJECT" id="dblink" selected="false" />
|
209
|
+
</public-schema>
|
210
|
+
<any-schema>
|
211
|
+
<filter-element type="OBJECT" id="table" selected="true" />
|
212
|
+
<filter-element type="OBJECT" id="view" selected="true" />
|
213
|
+
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
214
|
+
<filter-element type="OBJECT" id="index" selected="true" />
|
215
|
+
<filter-element type="OBJECT" id="constraint" selected="true" />
|
216
|
+
<filter-element type="OBJECT" id="trigger" selected="true" />
|
217
|
+
<filter-element type="OBJECT" id="synonym" selected="true" />
|
218
|
+
<filter-element type="OBJECT" id="sequence" selected="true" />
|
219
|
+
<filter-element type="OBJECT" id="procedure" selected="true" />
|
220
|
+
<filter-element type="OBJECT" id="function" selected="true" />
|
221
|
+
<filter-element type="OBJECT" id="package" selected="true" />
|
222
|
+
<filter-element type="OBJECT" id="type" selected="true" />
|
223
|
+
<filter-element type="OBJECT" id="dimension" selected="true" />
|
224
|
+
<filter-element type="OBJECT" id="cluster" selected="true" />
|
225
|
+
<filter-element type="OBJECT" id="dblink" selected="true" />
|
226
|
+
</any-schema>
|
227
|
+
</basic-filter>
|
228
|
+
<extended-filter>
|
229
|
+
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
|
230
|
+
<filter-element type="RESERVED_WORD" id="function" selected="true" />
|
231
|
+
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
|
232
|
+
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
|
233
|
+
<filter-element type="OBJECT" id="schema" selected="true" />
|
234
|
+
<filter-element type="OBJECT" id="user" selected="true" />
|
235
|
+
<user-schema>
|
236
|
+
<filter-element type="OBJECT" id="table" selected="true" />
|
237
|
+
<filter-element type="OBJECT" id="view" selected="true" />
|
238
|
+
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
239
|
+
<filter-element type="OBJECT" id="index" selected="true" />
|
240
|
+
<filter-element type="OBJECT" id="constraint" selected="true" />
|
241
|
+
<filter-element type="OBJECT" id="trigger" selected="true" />
|
242
|
+
<filter-element type="OBJECT" id="synonym" selected="true" />
|
243
|
+
<filter-element type="OBJECT" id="sequence" selected="true" />
|
244
|
+
<filter-element type="OBJECT" id="procedure" selected="true" />
|
245
|
+
<filter-element type="OBJECT" id="function" selected="true" />
|
246
|
+
<filter-element type="OBJECT" id="package" selected="true" />
|
247
|
+
<filter-element type="OBJECT" id="type" selected="true" />
|
248
|
+
<filter-element type="OBJECT" id="dimension" selected="true" />
|
249
|
+
<filter-element type="OBJECT" id="cluster" selected="true" />
|
250
|
+
<filter-element type="OBJECT" id="dblink" selected="true" />
|
251
|
+
</user-schema>
|
252
|
+
<public-schema>
|
253
|
+
<filter-element type="OBJECT" id="table" selected="true" />
|
254
|
+
<filter-element type="OBJECT" id="view" selected="true" />
|
255
|
+
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
256
|
+
<filter-element type="OBJECT" id="index" selected="true" />
|
257
|
+
<filter-element type="OBJECT" id="constraint" selected="true" />
|
258
|
+
<filter-element type="OBJECT" id="trigger" selected="true" />
|
259
|
+
<filter-element type="OBJECT" id="synonym" selected="true" />
|
260
|
+
<filter-element type="OBJECT" id="sequence" selected="true" />
|
261
|
+
<filter-element type="OBJECT" id="procedure" selected="true" />
|
262
|
+
<filter-element type="OBJECT" id="function" selected="true" />
|
263
|
+
<filter-element type="OBJECT" id="package" selected="true" />
|
264
|
+
<filter-element type="OBJECT" id="type" selected="true" />
|
265
|
+
<filter-element type="OBJECT" id="dimension" selected="true" />
|
266
|
+
<filter-element type="OBJECT" id="cluster" selected="true" />
|
267
|
+
<filter-element type="OBJECT" id="dblink" selected="true" />
|
268
|
+
</public-schema>
|
269
|
+
<any-schema>
|
270
|
+
<filter-element type="OBJECT" id="table" selected="true" />
|
271
|
+
<filter-element type="OBJECT" id="view" selected="true" />
|
272
|
+
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
273
|
+
<filter-element type="OBJECT" id="index" selected="true" />
|
274
|
+
<filter-element type="OBJECT" id="constraint" selected="true" />
|
275
|
+
<filter-element type="OBJECT" id="trigger" selected="true" />
|
276
|
+
<filter-element type="OBJECT" id="synonym" selected="true" />
|
277
|
+
<filter-element type="OBJECT" id="sequence" selected="true" />
|
278
|
+
<filter-element type="OBJECT" id="procedure" selected="true" />
|
279
|
+
<filter-element type="OBJECT" id="function" selected="true" />
|
280
|
+
<filter-element type="OBJECT" id="package" selected="true" />
|
281
|
+
<filter-element type="OBJECT" id="type" selected="true" />
|
282
|
+
<filter-element type="OBJECT" id="dimension" selected="true" />
|
283
|
+
<filter-element type="OBJECT" id="cluster" selected="true" />
|
284
|
+
<filter-element type="OBJECT" id="dblink" selected="true" />
|
285
|
+
</any-schema>
|
286
|
+
</extended-filter>
|
287
|
+
</filters>
|
288
|
+
<sorting enabled="true">
|
289
|
+
<sorting-element type="RESERVED_WORD" id="keyword" />
|
290
|
+
<sorting-element type="RESERVED_WORD" id="datatype" />
|
291
|
+
<sorting-element type="OBJECT" id="column" />
|
292
|
+
<sorting-element type="OBJECT" id="table" />
|
293
|
+
<sorting-element type="OBJECT" id="view" />
|
294
|
+
<sorting-element type="OBJECT" id="materialized view" />
|
295
|
+
<sorting-element type="OBJECT" id="index" />
|
296
|
+
<sorting-element type="OBJECT" id="constraint" />
|
297
|
+
<sorting-element type="OBJECT" id="trigger" />
|
298
|
+
<sorting-element type="OBJECT" id="synonym" />
|
299
|
+
<sorting-element type="OBJECT" id="sequence" />
|
300
|
+
<sorting-element type="OBJECT" id="procedure" />
|
301
|
+
<sorting-element type="OBJECT" id="function" />
|
302
|
+
<sorting-element type="OBJECT" id="package" />
|
303
|
+
<sorting-element type="OBJECT" id="type" />
|
304
|
+
<sorting-element type="OBJECT" id="dimension" />
|
305
|
+
<sorting-element type="OBJECT" id="cluster" />
|
306
|
+
<sorting-element type="OBJECT" id="dblink" />
|
307
|
+
<sorting-element type="OBJECT" id="schema" />
|
308
|
+
<sorting-element type="RESERVED_WORD" id="function" />
|
309
|
+
<sorting-element type="RESERVED_WORD" id="parameter" />
|
310
|
+
</sorting>
|
311
|
+
</code-completion-settings>
|
312
|
+
<execution-engine-settings>
|
313
|
+
<statement-execution>
|
314
|
+
<fetch-block-size value="100" />
|
315
|
+
<execution-timeout value="20" />
|
316
|
+
</statement-execution>
|
317
|
+
<compiler>
|
318
|
+
<compile-type value="KEEP" />
|
319
|
+
<always-show-controls value="false" />
|
320
|
+
</compiler>
|
321
|
+
</execution-engine-settings>
|
322
|
+
<ddl-file-settings>
|
323
|
+
<extensions>
|
324
|
+
<mapping file-type-id="VIEW" extensions="vw" />
|
325
|
+
<mapping file-type-id="TRIGGER" extensions="trg" />
|
326
|
+
<mapping file-type-id="PROCEDURE" extensions="prc" />
|
327
|
+
<mapping file-type-id="FUNCTION" extensions="fnc" />
|
328
|
+
<mapping file-type-id="PACKAGE" extensions="pkg" />
|
329
|
+
<mapping file-type-id="PACKAGE_SPEC" extensions="pks" />
|
330
|
+
<mapping file-type-id="PACKAGE_BODY" extensions="pkb" />
|
331
|
+
<mapping file-type-id="TYPE" extensions="tpe" />
|
332
|
+
<mapping file-type-id="TYPE_SPEC" extensions="tps" />
|
333
|
+
<mapping file-type-id="TYPE_BODY" extensions="tpb" />
|
334
|
+
</extensions>
|
335
|
+
<general>
|
336
|
+
<statement-postfix value="/" />
|
337
|
+
<lookup-ddl-files value="true" />
|
338
|
+
<create-ddl-files value="false" />
|
339
|
+
</general>
|
340
|
+
</ddl-file-settings>
|
341
|
+
</component>
|
342
|
+
<component name="ProjectResources">
|
343
|
+
<default-html-doctype>$APPLICATION_HOME_DIR$/lib/rubymine.jar!/resources/html5-schema/html5.rnc</default-html-doctype>
|
344
|
+
</component>
|
345
|
+
<component name="ProjectRootManager" version="2" project-jdk-name="RVM: ruby-1.9.2-p290" project-jdk-type="RUBY_SDK" />
|
346
|
+
<component name="RegexUtilComponent" text="1900-01-01 2007/08/13 1900.01.01 1900 01 01 1900-01.01 1900 13 01 1900 02 31" flags="0" regex="(19|20)\d\d([- /.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])" mode="0" />
|
347
|
+
<component name="UnicodeBrowser">
|
348
|
+
<option name="fontName" value="Monaco" />
|
349
|
+
</component>
|
350
|
+
</project>
|
351
|
+
|
data/.idea/modules.xml
ADDED
data/.idea/vcs.xml
ADDED
data/.idea/workspace.xml
ADDED
@@ -0,0 +1,401 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<project version="4">
|
3
|
+
<component name="ChangeListManager">
|
4
|
+
<list default="true" id="5a7cce55-79e3-449d-ab1c-02d21d595272" name="Default" comment="">
|
5
|
+
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/gpis.iml" afterPath="$PROJECT_DIR$/.idea/gpis.iml" />
|
6
|
+
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
|
7
|
+
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/gpis.gemspec" afterPath="$PROJECT_DIR$/gpis.gemspec" />
|
8
|
+
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/gpis.rb" afterPath="$PROJECT_DIR$/lib/gpis.rb" />
|
9
|
+
</list>
|
10
|
+
<ignored path="gpis.iws" />
|
11
|
+
<ignored path=".idea/workspace.xml" />
|
12
|
+
<option name="TRACKING_ENABLED" value="true" />
|
13
|
+
<option name="SHOW_DIALOG" value="false" />
|
14
|
+
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
15
|
+
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
16
|
+
<option name="LAST_RESOLUTION" value="IGNORE" />
|
17
|
+
</component>
|
18
|
+
<component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
|
19
|
+
<component name="CreatePatchCommitExecutor">
|
20
|
+
<option name="PATCH_PATH" value="" />
|
21
|
+
</component>
|
22
|
+
<component name="DaemonCodeAnalyzer">
|
23
|
+
<disable_hints />
|
24
|
+
</component>
|
25
|
+
<component name="FileEditorManager">
|
26
|
+
<leaf>
|
27
|
+
<file leaf-file-name="gpis.rb" pinned="false" current="false" current-in-tab="false">
|
28
|
+
<entry file="file://$PROJECT_DIR$/lib/gpis.rb">
|
29
|
+
<provider selected="true" editor-type-id="text-editor">
|
30
|
+
<state line="0" column="22" selection-start="22" selection-end="22" vertical-scroll-proportion="0.0">
|
31
|
+
<folding />
|
32
|
+
</state>
|
33
|
+
</provider>
|
34
|
+
</entry>
|
35
|
+
</file>
|
36
|
+
<file leaf-file-name="README.md" pinned="false" current="false" current-in-tab="false">
|
37
|
+
<entry file="file://$PROJECT_DIR$/README.md">
|
38
|
+
<provider selected="true" editor-type-id="text-editor">
|
39
|
+
<state line="20" column="7" selection-start="220" selection-end="220" vertical-scroll-proportion="0.0">
|
40
|
+
<folding />
|
41
|
+
</state>
|
42
|
+
</provider>
|
43
|
+
</entry>
|
44
|
+
</file>
|
45
|
+
<file leaf-file-name="Rakefile" pinned="false" current="false" current-in-tab="false">
|
46
|
+
<entry file="file://$PROJECT_DIR$/Rakefile">
|
47
|
+
<provider selected="true" editor-type-id="text-editor">
|
48
|
+
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
|
49
|
+
<folding />
|
50
|
+
</state>
|
51
|
+
</provider>
|
52
|
+
</entry>
|
53
|
+
</file>
|
54
|
+
<file leaf-file-name="gpis.gemspec" pinned="false" current="true" current-in-tab="true">
|
55
|
+
<entry file="file://$PROJECT_DIR$/gpis.gemspec">
|
56
|
+
<provider selected="true" editor-type-id="text-editor">
|
57
|
+
<state line="9" column="50" selection-start="615" selection-end="615" vertical-scroll-proportion="0.18141097">
|
58
|
+
<folding />
|
59
|
+
</state>
|
60
|
+
</provider>
|
61
|
+
</entry>
|
62
|
+
</file>
|
63
|
+
<file leaf-file-name="Gemfile" pinned="false" current="false" current-in-tab="false">
|
64
|
+
<entry file="file://$PROJECT_DIR$/Gemfile">
|
65
|
+
<provider selected="true" editor-type-id="text-editor">
|
66
|
+
<state line="3" column="4" selection-start="85" selection-end="85" vertical-scroll-proportion="0.0">
|
67
|
+
<folding />
|
68
|
+
</state>
|
69
|
+
</provider>
|
70
|
+
</entry>
|
71
|
+
</file>
|
72
|
+
<file leaf-file-name="gpis_app_info.rb" pinned="false" current="false" current-in-tab="false">
|
73
|
+
<entry file="file://$PROJECT_DIR$/lib/gpis/gpis_app_info.rb">
|
74
|
+
<provider selected="true" editor-type-id="text-editor">
|
75
|
+
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
|
76
|
+
<folding />
|
77
|
+
</state>
|
78
|
+
</provider>
|
79
|
+
</entry>
|
80
|
+
</file>
|
81
|
+
<file leaf-file-name="gpis_scraper.rb" pinned="false" current="false" current-in-tab="false">
|
82
|
+
<entry file="file://$PROJECT_DIR$/lib/gpis/gpis_scraper.rb">
|
83
|
+
<provider selected="true" editor-type-id="text-editor">
|
84
|
+
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
|
85
|
+
<folding />
|
86
|
+
</state>
|
87
|
+
</provider>
|
88
|
+
</entry>
|
89
|
+
</file>
|
90
|
+
</leaf>
|
91
|
+
</component>
|
92
|
+
<component name="FindManager">
|
93
|
+
<FindUsagesManager>
|
94
|
+
<setting name="OPEN_NEW_TAB" value="false" />
|
95
|
+
</FindUsagesManager>
|
96
|
+
</component>
|
97
|
+
<component name="Git.Settings">
|
98
|
+
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
99
|
+
</component>
|
100
|
+
<component name="IdeDocumentHistory">
|
101
|
+
<option name="changedFiles">
|
102
|
+
<list>
|
103
|
+
<option value="$PROJECT_DIR$/lib/gpis/gpis_scraper.rb" />
|
104
|
+
<option value="$PROJECT_DIR$/lib/gpis/gpis_app_info.rb" />
|
105
|
+
<option value="$PROJECT_DIR$/lib/gpis.rb" />
|
106
|
+
<option value="$PROJECT_DIR$/gpis.gemspec" />
|
107
|
+
</list>
|
108
|
+
</option>
|
109
|
+
</component>
|
110
|
+
<component name="ProjectFrameBounds">
|
111
|
+
<option name="y" value="22" />
|
112
|
+
<option name="width" value="1920" />
|
113
|
+
<option name="height" value="1054" />
|
114
|
+
</component>
|
115
|
+
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
|
116
|
+
<OptionsSetting value="true" id="Add" />
|
117
|
+
<OptionsSetting value="true" id="Remove" />
|
118
|
+
<OptionsSetting value="true" id="Checkout" />
|
119
|
+
<OptionsSetting value="true" id="Update" />
|
120
|
+
<OptionsSetting value="true" id="Status" />
|
121
|
+
<OptionsSetting value="true" id="Edit" />
|
122
|
+
<ConfirmationsSetting value="0" id="Add" />
|
123
|
+
<ConfirmationsSetting value="0" id="Remove" />
|
124
|
+
</component>
|
125
|
+
<component name="ProjectReloadState">
|
126
|
+
<option name="STATE" value="0" />
|
127
|
+
</component>
|
128
|
+
<component name="ProjectView">
|
129
|
+
<navigator currentView="ProjectPane" proportions="" version="1" splitterProportion="0.5">
|
130
|
+
<flattenPackages />
|
131
|
+
<showMembers />
|
132
|
+
<showModules />
|
133
|
+
<showLibraryContents />
|
134
|
+
<hideEmptyPackages />
|
135
|
+
<abbreviatePackageNames />
|
136
|
+
<autoscrollToSource />
|
137
|
+
<autoscrollFromSource />
|
138
|
+
<sortByType />
|
139
|
+
</navigator>
|
140
|
+
<panes>
|
141
|
+
<pane id="Scope" />
|
142
|
+
<pane id="ProjectPane">
|
143
|
+
<subPane>
|
144
|
+
<PATH>
|
145
|
+
<PATH_ELEMENT>
|
146
|
+
<option name="myItemId" value="gpis" />
|
147
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
148
|
+
</PATH_ELEMENT>
|
149
|
+
</PATH>
|
150
|
+
<PATH>
|
151
|
+
<PATH_ELEMENT>
|
152
|
+
<option name="myItemId" value="gpis" />
|
153
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
154
|
+
</PATH_ELEMENT>
|
155
|
+
<PATH_ELEMENT>
|
156
|
+
<option name="myItemId" value="gpis" />
|
157
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
158
|
+
</PATH_ELEMENT>
|
159
|
+
</PATH>
|
160
|
+
<PATH>
|
161
|
+
<PATH_ELEMENT>
|
162
|
+
<option name="myItemId" value="gpis" />
|
163
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
164
|
+
</PATH_ELEMENT>
|
165
|
+
<PATH_ELEMENT>
|
166
|
+
<option name="myItemId" value="gpis" />
|
167
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
168
|
+
</PATH_ELEMENT>
|
169
|
+
<PATH_ELEMENT>
|
170
|
+
<option name="myItemId" value="lib" />
|
171
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
172
|
+
</PATH_ELEMENT>
|
173
|
+
</PATH>
|
174
|
+
<PATH>
|
175
|
+
<PATH_ELEMENT>
|
176
|
+
<option name="myItemId" value="gpis" />
|
177
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
178
|
+
</PATH_ELEMENT>
|
179
|
+
<PATH_ELEMENT>
|
180
|
+
<option name="myItemId" value="gpis" />
|
181
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
182
|
+
</PATH_ELEMENT>
|
183
|
+
<PATH_ELEMENT>
|
184
|
+
<option name="myItemId" value="lib" />
|
185
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
186
|
+
</PATH_ELEMENT>
|
187
|
+
<PATH_ELEMENT>
|
188
|
+
<option name="myItemId" value="gpis" />
|
189
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
190
|
+
</PATH_ELEMENT>
|
191
|
+
</PATH>
|
192
|
+
</subPane>
|
193
|
+
</pane>
|
194
|
+
</panes>
|
195
|
+
</component>
|
196
|
+
<component name="PropertiesComponent">
|
197
|
+
<property name="WebServerToolWindowFactoryState" value="false" />
|
198
|
+
</component>
|
199
|
+
<component name="RecentsManager">
|
200
|
+
<key name="CopyFile.RECENT_KEYS">
|
201
|
+
<recent name="$PROJECT_DIR$/lib/gpis" />
|
202
|
+
</key>
|
203
|
+
</component>
|
204
|
+
<component name="RunManager">
|
205
|
+
<configuration default="true" type="RSpecRunConfigurationType" factoryName="RSpec">
|
206
|
+
<predefined_log_file id="RUBY_RSPEC" enabled="true" />
|
207
|
+
<module name="" />
|
208
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
|
209
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="" />
|
210
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
|
211
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
|
212
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
|
213
|
+
<envs />
|
214
|
+
<EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
|
215
|
+
<EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
|
216
|
+
<COVERAGE_PATTERN ENABLED="true">
|
217
|
+
<PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
|
218
|
+
</COVERAGE_PATTERN>
|
219
|
+
</EXTENSION>
|
220
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TESTS_FOLDER_PATH" VALUE="" />
|
221
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="" />
|
222
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_RUNNER_PATH" VALUE="" />
|
223
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_FILE_MASK" VALUE="**/*_spec.rb" />
|
224
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_EXAMPLE_NAME" VALUE="" />
|
225
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_TEST_TYPE" VALUE="TEST_SCRIPT" />
|
226
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_ARGS" VALUE="" />
|
227
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUNNER_VERSION" VALUE="" />
|
228
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="USE_CUSTOM_SPEC_RUNNER" VALUE="false" />
|
229
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="DRB" VALUE="false" />
|
230
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="FULL_BACKTRACE" VALUE="false" />
|
231
|
+
<method />
|
232
|
+
</configuration>
|
233
|
+
<configuration default="true" type="TestUnitRunConfigurationType" factoryName="Test::Unit/Shoulda/Minitest">
|
234
|
+
<predefined_log_file id="RUBY_TESTUNIT" enabled="true" />
|
235
|
+
<module name="" />
|
236
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
|
237
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="" />
|
238
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
|
239
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
|
240
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
|
241
|
+
<envs />
|
242
|
+
<EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
|
243
|
+
<EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
|
244
|
+
<COVERAGE_PATTERN ENABLED="true">
|
245
|
+
<PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
|
246
|
+
</COVERAGE_PATTERN>
|
247
|
+
</EXTENSION>
|
248
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="TESTS_FOLDER_PATH" VALUE="" />
|
249
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="" />
|
250
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_FILE_MASK" VALUE="" />
|
251
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_METHOD_NAME" VALUE="" />
|
252
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_TEST_TYPE" VALUE="TEST_SCRIPT" />
|
253
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="DRB" VALUE="false" />
|
254
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="RUNNER_OPTIONS" VALUE="" />
|
255
|
+
<method />
|
256
|
+
</configuration>
|
257
|
+
<list size="0" />
|
258
|
+
</component>
|
259
|
+
<component name="ShelveChangesManager" show_recycled="false" />
|
260
|
+
<component name="TaskManager">
|
261
|
+
<task active="true" id="Default" summary="Default task">
|
262
|
+
<created>1357818566380</created>
|
263
|
+
<updated>1357818566380</updated>
|
264
|
+
</task>
|
265
|
+
<servers />
|
266
|
+
</component>
|
267
|
+
<component name="ToolWindowManager">
|
268
|
+
<frame x="0" y="22" width="1920" height="1054" extended-state="0" />
|
269
|
+
<editor active="true" />
|
270
|
+
<layout>
|
271
|
+
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
272
|
+
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
273
|
+
<window_info id="Unicode Browser" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
274
|
+
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
275
|
+
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
|
276
|
+
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
|
277
|
+
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
278
|
+
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.43837085" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
279
|
+
<window_info id="Regex Tester" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
280
|
+
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
|
281
|
+
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
|
282
|
+
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.2497332" sideWeight="0.5616292" order="0" side_tool="false" content_ui="combo" />
|
283
|
+
<window_info id="DB Browser" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
284
|
+
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
285
|
+
<window_info id="DB Execution Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
286
|
+
<window_info id="Pomodoro" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
287
|
+
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
|
288
|
+
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
289
|
+
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
290
|
+
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
291
|
+
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
292
|
+
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
|
293
|
+
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
|
294
|
+
</layout>
|
295
|
+
</component>
|
296
|
+
<component name="VcsContentAnnotationSettings">
|
297
|
+
<option name="myLimit" value="2678400000" />
|
298
|
+
</component>
|
299
|
+
<component name="VcsManagerConfiguration">
|
300
|
+
<option name="OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT" value="true" />
|
301
|
+
<option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="true" />
|
302
|
+
<option name="CHECK_NEW_TODO" value="true" />
|
303
|
+
<option name="myTodoPanelSettings">
|
304
|
+
<value>
|
305
|
+
<are-packages-shown value="false" />
|
306
|
+
<are-modules-shown value="false" />
|
307
|
+
<flatten-packages value="false" />
|
308
|
+
<is-autoscroll-to-source value="false" />
|
309
|
+
</value>
|
310
|
+
</option>
|
311
|
+
<option name="PERFORM_UPDATE_IN_BACKGROUND" value="true" />
|
312
|
+
<option name="PERFORM_COMMIT_IN_BACKGROUND" value="true" />
|
313
|
+
<option name="PERFORM_EDIT_IN_BACKGROUND" value="true" />
|
314
|
+
<option name="PERFORM_CHECKOUT_IN_BACKGROUND" value="true" />
|
315
|
+
<option name="PERFORM_ADD_REMOVE_IN_BACKGROUND" value="true" />
|
316
|
+
<option name="PERFORM_ROLLBACK_IN_BACKGROUND" value="false" />
|
317
|
+
<option name="CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND" value="false" />
|
318
|
+
<option name="CHANGED_ON_SERVER_INTERVAL" value="60" />
|
319
|
+
<option name="SHOW_ONLY_CHANGED_IN_SELECTION_DIFF" value="true" />
|
320
|
+
<option name="CHECK_COMMIT_MESSAGE_SPELLING" value="true" />
|
321
|
+
<option name="DEFAULT_PATCH_EXTENSION" value="patch" />
|
322
|
+
<option name="SHORT_DIFF_HORISONTALLY" value="true" />
|
323
|
+
<option name="SHORT_DIFF_EXTRA_LINES" value="2" />
|
324
|
+
<option name="SOFT_WRAPS_IN_SHORT_DIFF" value="true" />
|
325
|
+
<option name="INCLUDE_TEXT_INTO_PATCH" value="false" />
|
326
|
+
<option name="INCLUDE_TEXT_INTO_SHELF" value="false" />
|
327
|
+
<option name="SHOW_FILE_HISTORY_DETAILS" value="true" />
|
328
|
+
<option name="SHOW_VCS_ERROR_NOTIFICATIONS" value="true" />
|
329
|
+
<option name="FORCE_NON_EMPTY_COMMENT" value="false" />
|
330
|
+
<option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="false" />
|
331
|
+
<option name="LAST_COMMIT_MESSAGE" value="added code" />
|
332
|
+
<option name="MAKE_NEW_CHANGELIST_ACTIVE" value="false" />
|
333
|
+
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
|
334
|
+
<option name="CHECK_FILES_UP_TO_DATE_BEFORE_COMMIT" value="false" />
|
335
|
+
<option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false" />
|
336
|
+
<option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" />
|
337
|
+
<option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8" />
|
338
|
+
<option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" />
|
339
|
+
<option name="ACTIVE_VCS_NAME" />
|
340
|
+
<option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
|
341
|
+
<option name="UPDATE_GROUP_BY_CHANGELIST" value="false" />
|
342
|
+
<option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
|
343
|
+
<option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
|
344
|
+
<MESSAGE value="added code" />
|
345
|
+
</component>
|
346
|
+
<component name="XDebuggerManager">
|
347
|
+
<breakpoint-manager />
|
348
|
+
</component>
|
349
|
+
<component name="editorHistoryManager">
|
350
|
+
<entry file="file://$PROJECT_DIR$/lib/gpis/gpis_scraper.rb">
|
351
|
+
<provider selected="true" editor-type-id="text-editor">
|
352
|
+
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
|
353
|
+
<folding />
|
354
|
+
</state>
|
355
|
+
</provider>
|
356
|
+
</entry>
|
357
|
+
<entry file="file://$PROJECT_DIR$/lib/gpis/gpis_app_info.rb">
|
358
|
+
<provider selected="true" editor-type-id="text-editor">
|
359
|
+
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
|
360
|
+
<folding />
|
361
|
+
</state>
|
362
|
+
</provider>
|
363
|
+
</entry>
|
364
|
+
<entry file="file://$PROJECT_DIR$/Rakefile">
|
365
|
+
<provider selected="true" editor-type-id="text-editor">
|
366
|
+
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
|
367
|
+
<folding />
|
368
|
+
</state>
|
369
|
+
</provider>
|
370
|
+
</entry>
|
371
|
+
<entry file="file://$PROJECT_DIR$/Gemfile">
|
372
|
+
<provider selected="true" editor-type-id="text-editor">
|
373
|
+
<state line="3" column="4" selection-start="85" selection-end="85" vertical-scroll-proportion="0.0">
|
374
|
+
<folding />
|
375
|
+
</state>
|
376
|
+
</provider>
|
377
|
+
</entry>
|
378
|
+
<entry file="file://$PROJECT_DIR$/lib/gpis.rb">
|
379
|
+
<provider selected="true" editor-type-id="text-editor">
|
380
|
+
<state line="0" column="22" selection-start="22" selection-end="22" vertical-scroll-proportion="0.0">
|
381
|
+
<folding />
|
382
|
+
</state>
|
383
|
+
</provider>
|
384
|
+
</entry>
|
385
|
+
<entry file="file://$PROJECT_DIR$/README.md">
|
386
|
+
<provider selected="true" editor-type-id="text-editor">
|
387
|
+
<state line="20" column="7" selection-start="220" selection-end="220" vertical-scroll-proportion="0.0">
|
388
|
+
<folding />
|
389
|
+
</state>
|
390
|
+
</provider>
|
391
|
+
</entry>
|
392
|
+
<entry file="file://$PROJECT_DIR$/gpis.gemspec">
|
393
|
+
<provider selected="true" editor-type-id="text-editor">
|
394
|
+
<state line="9" column="50" selection-start="615" selection-end="615" vertical-scroll-proportion="0.18141097">
|
395
|
+
<folding />
|
396
|
+
</state>
|
397
|
+
</provider>
|
398
|
+
</entry>
|
399
|
+
</component>
|
400
|
+
</project>
|
401
|
+
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Petr Smejkal
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# Gpis
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'gpis'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install gpis
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
data/gpis.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/gpis/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Petr Smejkal"]
|
6
|
+
gem.email = ["xmejkal@gmail.com"]
|
7
|
+
gem.date = '2013-01-10'
|
8
|
+
gem.summary = "Google Play Application Info Scraper"
|
9
|
+
gem.description = "A Simple gem to scrape information about android applications from the Google Play website. It has support for scraping info in multiple languages. For now only name, category and description are supported, as only these were needed by the programmer so far."
|
10
|
+
gem.homepage = "https://github.com/xmejkal/gpis"
|
11
|
+
|
12
|
+
gem.files = `git ls-files`.split($\)
|
13
|
+
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
14
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
15
|
+
gem.name = "gpis"
|
16
|
+
gem.require_paths = ["lib"]
|
17
|
+
gem.version = Gpis::VERSION
|
18
|
+
|
19
|
+
gem.add_dependency "open-uri"
|
20
|
+
gem.add_dependency "nokogiri"
|
21
|
+
gem.add_dependency "iconv"
|
22
|
+
end
|
data/lib/gpis.rb
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
class GpisAppInfo
|
2
|
+
|
3
|
+
#single value
|
4
|
+
attr_accessor :icon_url
|
5
|
+
|
6
|
+
#hashes by language
|
7
|
+
attr_accessor :name
|
8
|
+
attr_accessor :documents
|
9
|
+
attr_accessor :category
|
10
|
+
attr_accessor :permissions
|
11
|
+
|
12
|
+
|
13
|
+
def initialize(package_name, docs_by_lang_hash)
|
14
|
+
@package_name = package_name
|
15
|
+
@documents = docs_by_lang_hash
|
16
|
+
@name = Hash.new
|
17
|
+
@category = Hash.new
|
18
|
+
@permissions = Hash.new
|
19
|
+
|
20
|
+
# language independent values
|
21
|
+
first_document = @documents[@documents.keys.first]
|
22
|
+
@icon_url = fill_icon_url(first_document)
|
23
|
+
|
24
|
+
# language specific values
|
25
|
+
@documents.each do |language, document|
|
26
|
+
fill_name_for_lang(language, document)
|
27
|
+
fill_category_for_lang(language, document)
|
28
|
+
fill_permissions_for_lang(language, document)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def fill_icon_url(document)
|
33
|
+
begin
|
34
|
+
@icon_url = document.at_css("div.doc-banner-icon > img")['src']
|
35
|
+
rescue Exception => e
|
36
|
+
raise GpisParseError.new("Gpis: Parsing Error : #{e.message} :#{e.backtrace.join("\n")}")
|
37
|
+
end
|
38
|
+
raise GpisParseError.new("Gpis: Parsing Error : icon not found") if @icon_url.nil?
|
39
|
+
end
|
40
|
+
|
41
|
+
def fill_name_for_lang(language, document)
|
42
|
+
begin
|
43
|
+
@name[language] = document.at_css("dl.doc-metadata-list span[itemprop=name]")['content']
|
44
|
+
rescue Exception => e
|
45
|
+
raise GpisParseError.new("Gpis: Parsing Error : #{e.message} :#{e.backtrace.join("\n")}")
|
46
|
+
end
|
47
|
+
|
48
|
+
raise GpisParseError.new("Gpis: Parsing Error : name not found for language '#{language}'") if @name[language].nil?
|
49
|
+
end
|
50
|
+
|
51
|
+
def fill_category_for_lang(language, document)
|
52
|
+
begin
|
53
|
+
@category[language] = document.css(".doc-metadata a[href^='/store/apps/category/']").inner_html
|
54
|
+
rescue Exception => e
|
55
|
+
raise GpisParseError.new("Gpis: Parsing Error : #{e.message} :#{e.backtrace.join("\n")}")
|
56
|
+
end
|
57
|
+
raise GpisParseError.new("Gpis: Parsing Error : category not found for language '#{language}'") if @category[language].nil?
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
def fill_permissions_for_lang_based_on_danger_and_section_id(document, language, section_id, is_dangerous)
|
62
|
+
begin
|
63
|
+
language_hash = @permissions[language] = Hash.new
|
64
|
+
full_css_selector = "##{section_id} li.doc-permission-group"
|
65
|
+
document.css(full_css_selector).each do |group_element| # cycle through permission groups
|
66
|
+
group_name = group_element.css(".doc-permission-group-title").inner_html
|
67
|
+
current_group = language_hash[group_name]
|
68
|
+
#if the current_group hash hasn't yet been created, create it. All the other permissions for this group will then only be added to it, but the first one has to create it
|
69
|
+
if current_group.nil?
|
70
|
+
current_group = Hash.new
|
71
|
+
current_group[:name] = group_name
|
72
|
+
current_group[:permissions] = Array.new
|
73
|
+
language_hash[group_name] = current_group
|
74
|
+
end
|
75
|
+
|
76
|
+
permission_name = group_element.css(".doc-permission-description").collect { |el| el.inner_html }
|
77
|
+
permission_descriptions = group_element.css(".doc-permission-description-full").collect { |el| el.inner_html }
|
78
|
+
permission_name.each_index do |i|
|
79
|
+
permission = Hash.new
|
80
|
+
permission[:name] = permission_name[i]
|
81
|
+
permission[:description] = permission_descriptions[i]
|
82
|
+
permission[:dangerous] = is_dangerous
|
83
|
+
current_group[:permissions].push(permission)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
rescue Exception => e
|
87
|
+
raise GpisParseError.new("Gpis: Parsing Error : #{e.message} :#{e.backtrace.join("\n")}")
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
def fill_permissions_for_lang(language, document)
|
94
|
+
#permissions are divided into two sections: dangerous and safe. They are stored in two different divs.
|
95
|
+
css_selector_for_dangerous = "doc-permissions-dangerous"
|
96
|
+
css_selector_for_safe = "doc-permissions-safe"
|
97
|
+
fill_permissions_for_lang_based_on_danger_and_section_id(document, language, css_selector_for_dangerous, true)
|
98
|
+
fill_permissions_for_lang_based_on_danger_and_section_id(document, language, css_selector_for_safe, false)
|
99
|
+
end
|
100
|
+
|
101
|
+
def to_s
|
102
|
+
"{Gpis App Info: name = '#{self.name}', category='#{self.category}', icon_url='#{self.icon_url}', permissions = '#{self.permissions}'}"
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class GpisScraper
|
2
|
+
|
3
|
+
@@debug = 1
|
4
|
+
|
5
|
+
GOOGLE_PLAY_URL = "https://play.google.com/store/apps/details"
|
6
|
+
|
7
|
+
def self.scrape_info(package_name, languages)
|
8
|
+
|
9
|
+
documents = Hash.new
|
10
|
+
languages.each do |language|
|
11
|
+
initial_url = "#{GOOGLE_PLAY_URL}?id=#{package_name}&hl=#{language}"
|
12
|
+
stream = get_data_and_follow_redirections(initial_url)
|
13
|
+
documents[language] = Nokogiri::HTML(stream)
|
14
|
+
end
|
15
|
+
GpisAppInfo.new(package_name, documents)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.get_data_and_follow_redirections(initial_url)
|
19
|
+
url = initial_url
|
20
|
+
begin
|
21
|
+
stream = open(url, 'User-Agent' => 'ruby', :redirect => false)
|
22
|
+
rescue OpenURI::HTTPRedirect
|
23
|
+
url = $!.uri
|
24
|
+
puts "GpisScraper: Redirecting to "+ url.to_s if @@debug == 1
|
25
|
+
retry
|
26
|
+
rescue OpenURI::HTTPError => e
|
27
|
+
status_code = e.io.status[0] rescue 404
|
28
|
+
if status_code == 503
|
29
|
+
raise GpisServiceNotAvailable.new("Gpis: Service Not Available : #{e.message} :#{e.backtrace.join("\n")}")
|
30
|
+
else
|
31
|
+
raise GpisPageNotFoundError.new("Gpis: Page Not Found Error : #{e.message} :#{e.backtrace.join("\n")}")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
# ensure encoding
|
35
|
+
Iconv.conv('UTF-8', stream.charset, stream.read)
|
36
|
+
end
|
37
|
+
end
|
data/lib/gpis/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gpis
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Petr Smejkal
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-01-10 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: open-uri
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: nokogiri
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: iconv
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
description: A Simple gem to scrape information about android applications from the
|
63
|
+
Google Play website. It has support for scraping info in multiple languages. For
|
64
|
+
now only name, category and description are supported, as only these were needed
|
65
|
+
by the programmer so far.
|
66
|
+
email:
|
67
|
+
- xmejkal@gmail.com
|
68
|
+
executables: []
|
69
|
+
extensions: []
|
70
|
+
extra_rdoc_files: []
|
71
|
+
files:
|
72
|
+
- .gitignore
|
73
|
+
- .idea/.name
|
74
|
+
- .idea/.rakeTasks
|
75
|
+
- .idea/encodings.xml
|
76
|
+
- .idea/gpis.iml
|
77
|
+
- .idea/misc.xml
|
78
|
+
- .idea/modules.xml
|
79
|
+
- .idea/scopes/scope_settings.xml
|
80
|
+
- .idea/vcs.xml
|
81
|
+
- .idea/workspace.xml
|
82
|
+
- Gemfile
|
83
|
+
- LICENSE
|
84
|
+
- README.md
|
85
|
+
- Rakefile
|
86
|
+
- gpis.gemspec
|
87
|
+
- lib/gpis.rb
|
88
|
+
- lib/gpis/gpis_app_info.rb
|
89
|
+
- lib/gpis/gpis_exceptions.rb
|
90
|
+
- lib/gpis/gpis_scraper.rb
|
91
|
+
- lib/gpis/version.rb
|
92
|
+
homepage: https://github.com/xmejkal/gpis
|
93
|
+
licenses: []
|
94
|
+
post_install_message:
|
95
|
+
rdoc_options: []
|
96
|
+
require_paths:
|
97
|
+
- lib
|
98
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
requirements: []
|
111
|
+
rubyforge_project:
|
112
|
+
rubygems_version: 1.8.24
|
113
|
+
signing_key:
|
114
|
+
specification_version: 3
|
115
|
+
summary: Google Play Application Info Scraper
|
116
|
+
test_files: []
|