google-refine 0.0.1 → 0.1.0

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.
@@ -1,5 +1,7 @@
1
1
  <h1>google-refine</h1> is a Ruby Gem client library for "Google Refine":http://code.google.com/p/google-refine/
2
2
 
3
+ If you want to port this to another language, check out the "Refine API":https://github.com/maxogden/refine-python/wiki/Refine-API documentation.
4
+
3
5
  h2. Install
4
6
 
5
7
  @gem install google-refine@
@@ -76,5 +78,5 @@ Which outputs:
76
78
 
77
79
  h2. Copyright
78
80
 
79
- Copyright (c) 2010 Max Ogden. See LICENSE for details.
81
+ Copyright (c) 2011 David Huynh and Max Ogden. See LICENSE for details.
80
82
 
@@ -5,13 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{google-refine}
8
- s.version = "0.0.1"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Max Ogden"]
8
+ s.version = "0.1.0"
9
+ s.authors = ["Max Ogden", "Michael Bianco"]
12
10
  s.date = %q{2011-01-22}
13
- s.description = %q{Client library for interacting with Google Refine instances}
14
- s.email = %q{max@maxogden.com}
11
+ s.summary = %q{Client library for interacting with Google Refine instances}
12
+ s.description = %q{Client library for interacting with Google Refine instances. Easily work with CSVs from the command line}
13
+ s.email = ['max@maxogden.com', 'info@cliffsidedev.com']
15
14
  s.extra_rdoc_files = [
16
15
  "LICENSE",
17
16
  "README.textile"
@@ -27,28 +26,13 @@ Gem::Specification.new do |s|
27
26
  "test/operations.json",
28
27
  "test/test.rb"
29
28
  ]
30
- s.homepage = %q{http://github.com/maxogden/refine-ruby}
29
+ s.homepage = "http://github.com/maxogden/refine-ruby"
31
30
  s.require_paths = ["lib"]
32
- s.rubygems_version = %q{1.3.7}
33
- s.summary = %q{Client library for interacting with Google Refine instances}
34
31
  s.test_files = [
35
32
  "test/test.rb"
36
33
  ]
37
34
 
38
- if s.respond_to? :specification_version then
39
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
40
- s.specification_version = 3
41
-
42
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
43
- s.add_runtime_dependency(%q<json>, [">= 1.4.6"])
44
- s.add_runtime_dependency(%q<httpclient>, [">= 2.1.6.1"])
45
- else
46
- s.add_dependency(%q<json>, [">= 1.4.6"])
47
- s.add_dependency(%q<httpclient>, [">= 2.1.6.1"])
48
- end
49
- else
50
- s.add_dependency(%q<json>, [">= 1.4.6"])
51
- s.add_dependency(%q<httpclient>, [">= 2.1.6.1"])
52
- end
35
+ s.add_dependency('json', ">= 1.4.6")
36
+ s.add_dependency('httpclient', ">= 2.1.6.1")
53
37
  end
54
38
 
@@ -3,21 +3,38 @@ require 'cgi'
3
3
  require 'json'
4
4
 
5
5
  class Refine
6
- def initialize(project_name, file_name, server="http://127.0.0.1:3333")
7
- project_name = CGI.escape(project_name)
8
- @server = server
9
- @project_id = create_project(project_name, file_name)
10
- @project_name = project_name if @project_id
6
+ attr_reader :project_name
7
+ attr_reader :project_id
8
+
9
+ def self.get_all_project_metadata(server="http://127.0.0.1:3333")
10
+ uri = "#{server}/command/core/get-all-project-metadata"
11
+ response = HTTPClient.new(server).get(uri)
12
+ JSON.parse(response.body)
13
+ end
14
+
15
+ def initialize(opts = {})
16
+ @server = opts["server"] || "http://127.0.0.1:3333"
17
+ @throws_exceptions = opts["throws_exceptions"] || true
18
+
19
+ if opts["file_name"] && !opts["file_name"].empty? && opts["project_name"] && !opts["project_name"].empty?
20
+ project_name = CGI.escape(opts["project_name"])
21
+ @project_id = create_project(project_name, opts["file_name"])
22
+ @project_name = project_name if @project_id
23
+ else
24
+ @project_id = opts["project_id"]
25
+
26
+ metadata = self.get_project_metadata
27
+ @project_name = CGI.escape(metadata["name"])
28
+ end
11
29
  end
12
30
 
13
31
  def create_project(project_name, file_name)
14
32
  uri = @server + "/command/core/create-project-from-upload"
15
33
  project_id = false
16
- client = HTTPClient.new(@server)
17
34
  File.open(file_name) do |file|
18
35
  body = {
19
36
  'project-file' => file,
20
- 'project-name' => "awesome"
37
+ 'project-name' => project_name
21
38
  }
22
39
  response = client.post(uri, body)
23
40
  url = response.header['Location']
@@ -29,38 +46,75 @@ class Refine
29
46
  project_id
30
47
  end
31
48
 
32
- def apply_operations(file_name)
33
- raise "You must create a project" unless @project_id
34
- uri = @server + "/command/core/apply-operations?project=#{@project_id}"
35
- client = HTTPClient.new(@server)
36
- File.open(file_name) do |file|
37
- body = {
38
- 'operations' => file.read
39
- }
40
- @response = client.post(uri, body)
49
+ def apply_operations(file_name_or_string)
50
+ if File.exists?(file_name_or_string)
51
+ operations = File.read(file_name_or_string)
52
+ else
53
+ operations = file_name_or_string
41
54
  end
42
- JSON.parse(@response.content)['code'] rescue false
55
+
56
+ call('apply-operations', 'operations' => file_name_or_string)
43
57
  end
44
58
 
45
- def export_rows(format='tsv')
59
+ def export_rows(opts={})
60
+ format = opts["format"] || 'tsv'
46
61
  uri = @server + "/command/core/export-rows/#{@project_name}.#{format}"
47
- client = HTTPClient.new(@server)
62
+
48
63
  body = {
49
- 'engine' => '{"facets":[],"mode":"row-based"}',
64
+ 'engine' => {
65
+ "facets" => opts["facets"] || [],
66
+ "mode" => "row-based"
67
+ }.to_json,
68
+ 'options' => opts["options"] || '',
50
69
  'project' => @project_id,
51
70
  'format' => format
52
71
  }
72
+
53
73
  @response = client.post(uri, body)
54
74
  @response.content
55
75
  end
56
76
 
57
77
  def delete_project
58
78
  uri = @server + "/command/core/delete-project"
59
- client = HTTPClient.new(@server)
60
79
  body = {
61
80
  'project' => @project_id
62
81
  }
63
82
  @response = client.post(uri, body)
64
83
  JSON.parse(@response.content)['code'] rescue false
65
84
  end
85
+
86
+ # this pattern is pulled from mailchimp/mailchimp-gem
87
+
88
+ def call(method, params = {})
89
+ uri = "#{@server}/command/core/#{method}"
90
+ params = { "project" => @project_id }.merge(params)
91
+
92
+ response = if method.start_with?('get-')
93
+ client.get(uri, params)
94
+ else
95
+ client.post(uri, params)
96
+ end
97
+
98
+ begin
99
+ response = JSON.parse(response.body)
100
+ rescue
101
+ response = JSON.parse('[' + response.body + ']').first
102
+ end
103
+
104
+ if @throws_exceptions && response.is_a?(Hash) && response["code"] && response["code"] == "error"
105
+ raise "API Error: #{response}"
106
+ end
107
+
108
+ response
109
+ end
110
+
111
+ def method_missing(method, *args)
112
+ # translate: get_column_info --> get-column-info
113
+ call(method.to_s.gsub('_', '-'), *args)
114
+ end
115
+
116
+ protected
117
+ def client
118
+ @client ||= HTTPClient.new(@server)
119
+ end
66
120
  end
metadata CHANGED
@@ -1,66 +1,60 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: google-refine
3
- version: !ruby/object:Gem::Version
4
- hash: 29
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 0
9
- - 1
10
- version: 0.0.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Max Ogden
9
+ - Michael Bianco
14
10
  autorequire:
15
11
  bindir: bin
16
12
  cert_chain: []
17
-
18
- date: 2011-01-22 00:00:00 -08:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
13
+ date: 2011-01-22 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
22
16
  name: json
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
25
18
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 11
30
- segments:
31
- - 1
32
- - 4
33
- - 6
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
34
22
  version: 1.4.6
35
23
  type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: httpclient
39
24
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: !ruby/object:Gem::Requirement
41
26
  none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- hash: 125
46
- segments:
47
- - 2
48
- - 1
49
- - 6
50
- - 1
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: 1.4.6
31
+ - !ruby/object:Gem::Dependency
32
+ name: httpclient
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
51
38
  version: 2.1.6.1
52
39
  type: :runtime
53
- version_requirements: *id002
54
- description: Client library for interacting with Google Refine instances
55
- email: max@maxogden.com
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: 2.1.6.1
47
+ description: Client library for interacting with Google Refine instances. Easily work
48
+ with CSVs from the command line
49
+ email:
50
+ - max@maxogden.com
51
+ - info@cliffsidedev.com
56
52
  executables: []
57
-
58
53
  extensions: []
59
-
60
- extra_rdoc_files:
54
+ extra_rdoc_files:
61
55
  - LICENSE
62
56
  - README.textile
63
- files:
57
+ files:
64
58
  - LICENSE
65
59
  - README.textile
66
60
  - Rakefile
@@ -70,39 +64,29 @@ files:
70
64
  - test/dates.txt
71
65
  - test/operations.json
72
66
  - test/test.rb
73
- has_rdoc: true
74
67
  homepage: http://github.com/maxogden/refine-ruby
75
68
  licenses: []
76
-
77
69
  post_install_message:
78
70
  rdoc_options: []
79
-
80
- require_paths:
71
+ require_paths:
81
72
  - lib
82
- required_ruby_version: !ruby/object:Gem::Requirement
73
+ required_ruby_version: !ruby/object:Gem::Requirement
83
74
  none: false
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- hash: 3
88
- segments:
89
- - 0
90
- version: "0"
91
- required_rubygems_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
92
80
  none: false
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- hash: 3
97
- segments:
98
- - 0
99
- version: "0"
81
+ requirements:
82
+ - - ! '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
100
85
  requirements: []
101
-
102
86
  rubyforge_project:
103
- rubygems_version: 1.3.7
87
+ rubygems_version: 1.8.23
104
88
  signing_key:
105
89
  specification_version: 3
106
90
  summary: Client library for interacting with Google Refine instances
107
- test_files:
91
+ test_files:
108
92
  - test/test.rb