smart_csv 0.0.2

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/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in smart_csv.gemspec
4
+ gemspec
5
+ gem 'rspec'
data/README.rdoc ADDED
@@ -0,0 +1,24 @@
1
+ == SmartCSV
2
+
3
+ Extend CSV class.
4
+ This gem need header.
5
+
6
+ == FOR EXAMPLE
7
+
8
+ data = "id,firstname,lastname\n1,One,One\n2,Two,Two\n4,One,Four\n5,One,Five"
9
+ @data = CSV.parse(data, {:col_sep => ',', :headers => true}
10
+
11
+ == METHODS
12
+
13
+ * Create a new record
14
+ @data.create({"id"=> '13', "lastname" => '1992'})
15
+
16
+ * Select records
17
+ @data.where({'firstname' => 'One'}).where_not({'id' => '4'})
18
+
19
+ * Update record
20
+ @data.where({'firstname' => 'One'}).first.update({"lastname" => "Seven", "wartosc" => 2012}) }
21
+
22
+ * Delete all records
23
+ @data.delete_all
24
+
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/lib/csv/csv.rb ADDED
@@ -0,0 +1,9 @@
1
+ #coding: utf-8
2
+ require 'csv'
3
+
4
+ class CSV
5
+ def self.example_data
6
+ data = "id,firstname,lastname\n1,One,One\n2,Two,Two\n4,Four,Four\n5,Five,Five"
7
+ CSV.parse(data, {:col_sep => ',', :headers => true})
8
+ end
9
+ end
@@ -0,0 +1,17 @@
1
+ #coding: utf-8
2
+ require 'csv'
3
+ class CSV::Row
4
+
5
+ def update(conditions)
6
+ conditions.each do |key, value|
7
+ raise "In headers: '#{self.headers}' don't have key: '#{key}'" unless self.include?(key)
8
+ self[key] = value
9
+ end
10
+ rescue Exception => e
11
+ puts "#{self.class} #{e.message}"
12
+ end
13
+
14
+ def delete
15
+
16
+ end
17
+ end
@@ -0,0 +1,47 @@
1
+ #coding: utf-8
2
+ require 'csv'
3
+ class CSV::Table
4
+
5
+ def where_not(*conditions)
6
+ result = CSV::Table.new([])
7
+ self.each do |record|
8
+ counter = 0
9
+ conditions.first.each {|key, value| counter += 1 unless record[key] == value.to_s}
10
+ result << record if counter == conditions.size
11
+ end
12
+ result
13
+ end
14
+
15
+ def where(*conditions)
16
+ result = CSV::Table.new([])
17
+ self.each do |record|
18
+ counter = 0
19
+ conditions.first.each {|key, value| counter += 1 if record[key] == value.to_s}
20
+ result << record if counter == conditions.size
21
+ end
22
+ result
23
+ end
24
+
25
+ def create(*conditions)
26
+ headers = self.headers
27
+ row = headers.inject({}){|result, value| result[value] = nil; result}
28
+ conditions.first.each do |key, value|
29
+ raise "In headers: '#{headers}' don't have key: '#{key}'" unless headers.include?(key)
30
+ row[key] = value
31
+ end
32
+ values = headers.inject([]) {|result, key| result << row[key]; result}
33
+ record = CSV::Row.new(headers, values)
34
+ self << record
35
+ record
36
+ rescue Exception => e
37
+ puts "#{self.class} #{e.message}"
38
+ end
39
+
40
+ # Delete all record of table
41
+ def delete_all
42
+ while not self.empty?
43
+ self.delete(0)
44
+ end
45
+ end
46
+
47
+ end
data/lib/smart_csv.rb ADDED
@@ -0,0 +1,4 @@
1
+ require "smart_csv/version"
2
+ require "csv/row/row"
3
+ require "csv/table/table"
4
+ require "csv/csv"
@@ -0,0 +1,3 @@
1
+ module SmartCSV
2
+ VERSION = "0.0.2"
3
+ end
data/smart_csv.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "smart_csv/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "smart_csv"
7
+ s.version = SmartCSV::VERSION
8
+ s.date = "2012-02-07"
9
+ s.authors = ["Michał Szyma"]
10
+ s.email = ["raglub.ruby@gmail.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{Extend CSV class}
13
+ s.description = %q{Extend CSV class}
14
+
15
+ s.rubyforge_project = "active_csv"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+
20
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
+ s.require_paths = ["lib"]
22
+
23
+ s.add_dependency "csv"
24
+ end
data/spec/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format documentation
3
+ --configure autotest
@@ -0,0 +1,15 @@
1
+ require 'smart_csv'
2
+
3
+ describe "Check class CSV::Row" do
4
+
5
+ before(:each) do
6
+ data = "id,firstname,lastname\n1,One,One\n2,Two,Two\n4,Four,Four\n5,Five,Five\n6,One,One"
7
+ @data = CSV.parse(data, {:col_sep => ',', :headers => true})
8
+ end
9
+
10
+ it "should correct updete record" do
11
+ @data[2].update("lastname" => "Seven", "id" => "2012")
12
+ @data.where("id" => "2012").size.should eql(1)
13
+ end
14
+
15
+ end
@@ -0,0 +1,26 @@
1
+ require 'smart_csv'
2
+
3
+ describe "Check class CSV::Table" do
4
+ before(:each) do
5
+ data = "id,firstname,lastname\n1,One,One\n2,Two,Two\n4,Four,Four\n5,Five,Five\n6,One,One"
6
+ @data = CSV.parse(data, {:col_sep => ',', :headers => true})
7
+ end
8
+
9
+ it "should correct create one record" do
10
+ @data.size.should eql(5)
11
+ @data.create("id"=> '13', "lastname" => '1992')
12
+ @data.size.should eql(6)
13
+ @data[-1]["id"].should eql('13')
14
+ end
15
+
16
+ it "should correct select records" do
17
+ @data.where('firstname' => 'One').size.should eql(2)
18
+ @data.where('firstname' => 'One').where_not('id' => '6').size.should eql(1)
19
+ end
20
+
21
+ it "should correct delete records" do
22
+ @data.size.should eql(5)
23
+ @data.delete_all
24
+ @data.size.should eql(0)
25
+ end
26
+ end
@@ -0,0 +1,8 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'smart_csv'
5
+
6
+ RSpec.configure do |config|
7
+ # some (optional) config here
8
+ end
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: smart_csv
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Michał Szyma
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: csv
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: Extend CSV class
31
+ email:
32
+ - raglub.ruby@gmail.com
33
+ executables: []
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - .gitignore
38
+ - Gemfile
39
+ - README.rdoc
40
+ - Rakefile
41
+ - lib/csv/csv.rb
42
+ - lib/csv/row/row.rb
43
+ - lib/csv/table/table.rb
44
+ - lib/smart_csv.rb
45
+ - lib/smart_csv/version.rb
46
+ - smart_csv.gemspec
47
+ - spec/.rspec
48
+ - spec/csv/row/row_spec.rb
49
+ - spec/csv/table/table_spec.rb
50
+ - spec/spec_helper.rb
51
+ homepage: ''
52
+ licenses: []
53
+ post_install_message:
54
+ rdoc_options: []
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
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ requirements: []
70
+ rubyforge_project: active_csv
71
+ rubygems_version: 1.8.24
72
+ signing_key:
73
+ specification_version: 3
74
+ summary: Extend CSV class
75
+ test_files: []