boundless-gdata 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/README +0 -0
  2. data/lib/boundless_gdata.rb +89 -0
  3. 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
+