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.
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
+