spodunk 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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: