boundless-gdata 0.0.6
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/README +0 -0
- data/lib/boundless_gdata.rb +89 -0
- metadata +83 -0
data/README
ADDED
File without changes
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'google_spreadsheet'
|
4
|
+
|
5
|
+
class BoundlessGdata
|
6
|
+
|
7
|
+
def self.set_options_file(opts)
|
8
|
+
@options = opts
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.initialize
|
12
|
+
raise "options not specified" unless @options and !@options.empty?
|
13
|
+
@session = create_session
|
14
|
+
@sp = @session.spreadsheet_by_key(@options['URLkey'])
|
15
|
+
worksheets = @sp.worksheets
|
16
|
+
@wk = @sp.worksheets.find { |w| w.title == self.name }
|
17
|
+
if @wk
|
18
|
+
@table = @wk.tables.last
|
19
|
+
else
|
20
|
+
@wk, @table = create_table(self.name)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.add_field(f_name, f_type)
|
25
|
+
@fields ||= []
|
26
|
+
@fields << [f_name.to_sym, f_type]
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.field_index(f_name)
|
30
|
+
@fields.each_with_index { |(k, t), i| return i + 1 if k == f_name.to_sym }
|
31
|
+
nil
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.set_options(opts)
|
35
|
+
@t_options = {:header_row => 1, :num_rows => 1, :start_row => 2}.merge(opts)
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.create(values)
|
39
|
+
fields = Hash[*@fields.flatten]
|
40
|
+
raise "Bad parameters" unless values.map { |k, v| fields[k.to_sym] ? v.is_a?(fields[k.to_sym]) : false }.all?
|
41
|
+
@table.add_record(values)
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.create_session
|
45
|
+
GoogleSpreadsheet.login(@options['user'], @options['password'])
|
46
|
+
end
|
47
|
+
|
48
|
+
def create_sp(name)
|
49
|
+
@sp = @session.create_spreadsheet(name)
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.create_table(name)
|
53
|
+
col = @fields.inject([]) { |t, x| t = t << x.first }
|
54
|
+
wk = @sp.add_worksheet(name, 10, (col.length).to_i)
|
55
|
+
mapping = col.zip(('A'..'Z').to_a + ('AA'..'ZZ').to_a).inject({}) { |h, p| h[p.last] = p.first; h } # Creates the hash {'A'=>title1 , 'B'=>title2}
|
56
|
+
|
57
|
+
table = wk.add_table(name, ' ', mapping, @t_options)
|
58
|
+
[wk, table]
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.where(crit)
|
62
|
+
all_rows = @table.records
|
63
|
+
all_rows.each_with_index do |r, i|
|
64
|
+
if crit.map { |k, v| r[k.to_s] == v.to_s }.all?
|
65
|
+
return TableRecord.new(@wk, r, i + @t_options[:start_row], self)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
nil
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
class TableRecord
|
74
|
+
def initialize(wk, r, ri, c)
|
75
|
+
@record = r; @ri = ri; @wk = wk; @c_class = c
|
76
|
+
end
|
77
|
+
|
78
|
+
def [](k)
|
79
|
+
@record[k]
|
80
|
+
end
|
81
|
+
|
82
|
+
def []=(k, val)
|
83
|
+
@wk[@ri, @c_class.field_index(k)] = val
|
84
|
+
end
|
85
|
+
|
86
|
+
def save
|
87
|
+
@wk.save
|
88
|
+
end
|
89
|
+
end
|
metadata
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: boundless-gdata
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 6
|
10
|
+
version: 0.0.6
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Boundless
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-05-12 00:00:00 +03:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: google-spreadsheet-ruby
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 29
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 1
|
33
|
+
- 3
|
34
|
+
version: 0.1.3
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
description:
|
38
|
+
email: info@boundlessdrop.com
|
39
|
+
executables: []
|
40
|
+
|
41
|
+
extensions: []
|
42
|
+
|
43
|
+
extra_rdoc_files:
|
44
|
+
- README
|
45
|
+
files:
|
46
|
+
- lib/boundless_gdata.rb
|
47
|
+
- README
|
48
|
+
has_rdoc: true
|
49
|
+
homepage:
|
50
|
+
licenses: []
|
51
|
+
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options: []
|
54
|
+
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
hash: 3
|
63
|
+
segments:
|
64
|
+
- 0
|
65
|
+
version: "0"
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
hash: 3
|
72
|
+
segments:
|
73
|
+
- 0
|
74
|
+
version: "0"
|
75
|
+
requirements: []
|
76
|
+
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 1.3.7
|
79
|
+
signing_key:
|
80
|
+
specification_version: 3
|
81
|
+
summary: Just a small wrapper around the google-spreadsheet-ruby gem.
|
82
|
+
test_files: []
|
83
|
+
|