spodunk 0.1.0 → 0.3.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.
data/Gemfile CHANGED
@@ -8,7 +8,7 @@ source "http://rubygems.org"
8
8
  group :development do
9
9
  gem "rspec"
10
10
  gem "bundler"
11
- gem "jeweler"
11
+ gem "jeweler", "~> 1.8.8"
12
12
  gem 'vcr'
13
13
  gem 'webmock'
14
14
  gem 'dotenv'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.3.0
@@ -6,6 +6,7 @@ end
6
6
 
7
7
  require 'spodunk/connection'
8
8
  require 'spodunk/table'
9
+ require 'spodunk/row_collection'
9
10
  require 'spodunk/row'
10
11
 
11
12
 
@@ -24,13 +24,19 @@ module Spodunk
24
24
  def load_spreadsheet(*args);end
25
25
 
26
26
  def real_tables(tid)
27
+ if(tid.is_a?(Spodunk::Table))
28
+ tid = tid.title
29
+ end
30
+
27
31
  if t = @tables[tid]
28
32
  return t[:real]
29
33
  end
30
34
  end
31
35
 
32
36
  def tables(tid)
33
- if t = @tables[tid]
37
+ if(tid.is_a?(Spodunk::Table))
38
+ return tid
39
+ elsif t = @tables[tid]
34
40
  return t[:podunk]
35
41
  end
36
42
  end
@@ -49,6 +49,7 @@ module Spodunk
49
49
 
50
50
  # sets up the table structure
51
51
  def init_podunk_table(gsheet, opts={})
52
+ opts[:connection] = self
52
53
  Table.new(gsheet.rows, opts)
53
54
  end
54
55
 
@@ -2,14 +2,17 @@ require 'hashie'
2
2
 
3
3
  module Spodunk
4
4
  class Row
5
- attr_reader :mash, :original, :timestamp
5
+ attr_reader :mash, :original, :timestamp, :table, :connection
6
6
 
7
7
  delegate :values, :keys, :to => :mash
8
8
  delegate :values, :to => :original, prefix: true
9
9
  # expects vals and headers to be 1 to 1
10
10
 
11
+ delegate :connection, :to => :table, allow_nil: true
12
+
13
+ def initialize(vals, headers, opts={})
14
+ @table = opts[:table]
11
15
 
12
- def initialize(vals, headers)
13
16
  slugged_headers = headers.map{|h| h.slugify}
14
17
  @mash = Hashie::Mash.new(Hash[slugged_headers.zip(vals)])
15
18
  @original = @mash.dup.freeze
@@ -74,6 +77,8 @@ module Spodunk
74
77
  end
75
78
 
76
79
 
80
+
81
+
77
82
  def attributes
78
83
  @mash.stringify_keys
79
84
  end
@@ -135,5 +140,15 @@ module Spodunk
135
140
  end
136
141
  end
137
142
 
143
+
144
+
145
+ public
146
+ # this could be dangerous
147
+ def save
148
+ connection.save_row(table, self)
149
+ end
150
+
151
+
152
+
138
153
  end
139
154
  end
@@ -0,0 +1,31 @@
1
+ module Spodunk
2
+
3
+ class RowCollection
4
+ include Enumerable
5
+
6
+ attr_reader :rows, :table, :headers
7
+ delegate :each, :[], :index, :to => :rows
8
+
9
+ def initialize(_rows, _headers, tbl=nil)
10
+ @table = tbl
11
+ @headers = _headers
12
+ @rows = spodunk_rows(_rows)
13
+ end
14
+
15
+
16
+ def spawn(_rows)
17
+ RowCollection.new(_rows, self.headers, self.table)
18
+ end
19
+
20
+ # not tested at all, obv
21
+ def where(&blk)
22
+ spawn(@rows.select(&blk))
23
+ end
24
+
25
+
26
+ private
27
+ def spodunk_rows(rts)
28
+ rts.map{ |r| r.is_a?(Spodunk::Row) ? r : Spodunk::Row.new(r, @headers, table: @table)}
29
+ end
30
+ end
31
+ end
@@ -6,12 +6,16 @@ module Spodunk
6
6
  attr_reader :headers, :rows, :title, :slug_headers,
7
7
  :row_offset, :col_offset
8
8
 
9
+ attr_reader :connection
10
+
9
11
  def initialize(arr, opts={})
12
+ @connection = opts[:connection]
13
+
10
14
  rs = arr.dup
11
15
  @headers = rs.shift
12
16
  @slug_headers = @headers.map{|h| h.slugify}
13
17
  # rows get attributes as slugs
14
- @rows = rs.map{ |r| Row.new(r, @slug_headers)}
18
+ @rows = RowCollection.new(rs, @slug_headers, self)
15
19
 
16
20
  @title = opts[:title]
17
21
 
@@ -24,6 +28,8 @@ module Spodunk
24
28
  @col_offset = opts[:col_offset] || 1
25
29
  end
26
30
 
31
+
32
+
27
33
  def real_row_index(row)
28
34
  if row.is_a?(Fixnum)
29
35
  idx = row
@@ -45,7 +51,7 @@ module Spodunk
45
51
 
46
52
 
47
53
  def valid?
48
- @slug_headers.uniq.count == num_cols
54
+ @slug_headers.uniq.count == num_cols && @slug_headers.all?{|h| !h.empty? }
49
55
  end
50
56
 
51
57
  def clean_rows
@@ -95,10 +101,21 @@ module Spodunk
95
101
  end
96
102
  end
97
103
 
98
- # define unique ID field or concatenation
104
+ # Spodunk stuff!
105
+
106
+ # this could be dangerous
107
+ def save
108
+ connection.save_table(self)
109
+ end
110
+
111
+
112
+ # def spodunkize!
113
+ # # add meta headers
114
+ # add_header('spodunk_gid')
115
+ # add_header('spodunk_')
116
+ # end
99
117
 
100
118
 
101
-
102
119
 
103
120
  end
104
121
  end
@@ -141,7 +141,21 @@ describe "Spodunk::Row" do
141
141
  end
142
142
  end
143
143
  end
144
+ end
144
145
 
145
146
 
147
+ describe 'dependencies to Spodunk things' do
148
+ let(:connection){ Connection::Base.new }
149
+ let(:table){ Table.new [['a', 'b'], [1, 2]], connection: connection}
150
+ before do
151
+ @row = table.rows.first
152
+ end
146
153
 
147
- end
154
+ it 'should have a @table' do
155
+ expect(@row.table).to be table
156
+ end
157
+
158
+ it 'should have a @connection thru @table' do
159
+ expect(@row.connection).to be table.connection
160
+ end
161
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'spodunkize!' do
4
+
5
+ it 'should add spodunk meta headers'
6
+
7
+ end
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Spodunk::Table do
4
+ let(:connection){ Connection::Base.new}
4
5
 
5
6
  context 'basic ops' do
6
7
  let(:rows){[
@@ -8,7 +9,13 @@ describe Spodunk::Table do
8
9
  ['a', 1, "99"]
9
10
  ]}
10
11
  before do
11
- @table = Table.new(rows)
12
+ @table = Table.new(rows, connection: connection)
13
+ end
14
+
15
+ describe 'binding to Spodunk things' do
16
+ it 'should have a @connection' do
17
+ expect(@table.connection).to be_a Connection::Base
18
+ end
12
19
  end
13
20
 
14
21
  describe 'initialization by rows' do
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "spodunk"
8
- s.version = "0.1.0"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["dannguyen"]
@@ -29,9 +29,11 @@ Gem::Specification.new do |s|
29
29
  "lib/spodunk/connection.rb",
30
30
  "lib/spodunk/connections/gdrive.rb",
31
31
  "lib/spodunk/row.rb",
32
+ "lib/spodunk/row_collection.rb",
32
33
  "lib/spodunk/table.rb",
33
34
  "spec/lib/convenience_spec.rb",
34
35
  "spec/lib/row_spec.rb",
36
+ "spec/lib/spodunkize_spec.rb",
35
37
  "spec/lib/table_spec.rb",
36
38
  "spec/spec_helper.rb",
37
39
  "spodunk.gemspec"
@@ -52,7 +54,7 @@ Gem::Specification.new do |s|
52
54
  s.add_runtime_dependency(%q<activesupport>, ["~> 3.2.15"])
53
55
  s.add_development_dependency(%q<rspec>, [">= 0"])
54
56
  s.add_development_dependency(%q<bundler>, [">= 0"])
55
- s.add_development_dependency(%q<jeweler>, [">= 0"])
57
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.8"])
56
58
  s.add_development_dependency(%q<vcr>, [">= 0"])
57
59
  s.add_development_dependency(%q<webmock>, [">= 0"])
58
60
  s.add_development_dependency(%q<dotenv>, [">= 0"])
@@ -63,7 +65,7 @@ Gem::Specification.new do |s|
63
65
  s.add_dependency(%q<activesupport>, ["~> 3.2.15"])
64
66
  s.add_dependency(%q<rspec>, [">= 0"])
65
67
  s.add_dependency(%q<bundler>, [">= 0"])
66
- s.add_dependency(%q<jeweler>, [">= 0"])
68
+ s.add_dependency(%q<jeweler>, ["~> 1.8.8"])
67
69
  s.add_dependency(%q<vcr>, [">= 0"])
68
70
  s.add_dependency(%q<webmock>, [">= 0"])
69
71
  s.add_dependency(%q<dotenv>, [">= 0"])
@@ -75,7 +77,7 @@ Gem::Specification.new do |s|
75
77
  s.add_dependency(%q<activesupport>, ["~> 3.2.15"])
76
78
  s.add_dependency(%q<rspec>, [">= 0"])
77
79
  s.add_dependency(%q<bundler>, [">= 0"])
78
- s.add_dependency(%q<jeweler>, [">= 0"])
80
+ s.add_dependency(%q<jeweler>, ["~> 1.8.8"])
79
81
  s.add_dependency(%q<vcr>, [">= 0"])
80
82
  s.add_dependency(%q<webmock>, [">= 0"])
81
83
  s.add_dependency(%q<dotenv>, [">= 0"])
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spodunk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -112,17 +112,17 @@ dependencies:
112
112
  requirement: !ruby/object:Gem::Requirement
113
113
  none: false
114
114
  requirements:
115
- - - ! '>='
115
+ - - ~>
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: 1.8.8
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  none: false
122
122
  requirements:
123
- - - ! '>='
123
+ - - ~>
124
124
  - !ruby/object:Gem::Version
125
- version: '0'
125
+ version: 1.8.8
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: vcr
128
128
  requirement: !ruby/object:Gem::Requirement
@@ -191,9 +191,11 @@ files:
191
191
  - lib/spodunk/connection.rb
192
192
  - lib/spodunk/connections/gdrive.rb
193
193
  - lib/spodunk/row.rb
194
+ - lib/spodunk/row_collection.rb
194
195
  - lib/spodunk/table.rb
195
196
  - spec/lib/convenience_spec.rb
196
197
  - spec/lib/row_spec.rb
198
+ - spec/lib/spodunkize_spec.rb
197
199
  - spec/lib/table_spec.rb
198
200
  - spec/spec_helper.rb
199
201
  - spodunk.gemspec
@@ -212,7 +214,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
212
214
  version: '0'
213
215
  segments:
214
216
  - 0
215
- hash: 1249785139266135960
217
+ hash: -3820607160942208091
216
218
  required_rubygems_version: !ruby/object:Gem::Requirement
217
219
  none: false
218
220
  requirements: