bmg 0.1.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.
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+ module Bmg
3
+ module Operator
4
+ describe Project do
5
+
6
+ it 'works' do
7
+ allbut = Project.new [{ a: 1, b: 2 }], [:b]
8
+ expect(allbut.to_a).to eql([{ b: 2 }])
9
+ end
10
+
11
+ it 'removes duplicates' do
12
+ allbut = Project.new [{ a: 1, b: 2 }, { a: 2, b: 2 }], [:b]
13
+ expect(allbut.to_a).to eql([{ b: 2 }])
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+ module Bmg
3
+ module Operator
4
+ describe Rename do
5
+
6
+ it 'works' do
7
+ rename = Rename.new [{ a: 1, b: 2 }], :a => :x
8
+ expect(rename.to_a).to eql([{ x: 1, b: 2 }])
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ id;name
2
+ 1;Bernard Lambeau
3
+ 2;"Yoann;Guyot"
Binary file
Binary file
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+ module Bmg
3
+ module Reader
4
+ describe Csv do
5
+
6
+ it 'works' do
7
+ file = Path.dir/("example.csv")
8
+ csv = Csv.new(file)
9
+ expect(csv.to_a).to eql([
10
+ {id: "1", name: "Bernard Lambeau"},
11
+ {id: "2", name: "Yoann;Guyot"}
12
+ ])
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+ module Bmg
3
+ module Reader
4
+ describe Csv do
5
+
6
+ it 'works' do
7
+ file = Path.dir/("example.xlsx")
8
+ xlsx = Excel.new(file, skip: 1)
9
+ expect(xlsx.to_a).to eql([
10
+ {id: 1, name: "Bernard Lambeau"},
11
+ {id: 2, name: "Yoann Guyot"}
12
+ ])
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,11 @@
1
+ require 'rspec'
2
+ require 'bmg'
3
+ require 'path'
4
+
5
+ module SpecHelper
6
+
7
+ end
8
+
9
+ RSpec.configure do |c|
10
+ c.include SpecHelper
11
+ end
@@ -0,0 +1,132 @@
1
+ require 'spec_helper'
2
+ module Bmg
3
+ describe Relation do
4
+
5
+ shared_examples_for "an operator method" do
6
+
7
+ it 'returns a relation' do
8
+ expect(subject).to be_a(Relation)
9
+ end
10
+
11
+ end
12
+
13
+ describe 'allbut' do
14
+ let(:relation) {
15
+ Relation.new([
16
+ { a: 1, b: 2 },
17
+ { a: 1, b: 4 },
18
+ { a: 3, b: 4 }
19
+ ])
20
+ }
21
+
22
+ subject {
23
+ relation.allbut([:b])
24
+ }
25
+
26
+ it_behaves_like "an operator method"
27
+
28
+ it 'returns the exected result' do
29
+ expect(subject.to_a).to eql([
30
+ { a: 1 },
31
+ { a: 3 }
32
+ ])
33
+ end
34
+ end
35
+
36
+ describe 'autosummarize' do
37
+ let(:relation) {
38
+ Relation.new([
39
+ { a: 1, x: 2 },
40
+ { a: 1, x: 4 }
41
+ ])
42
+ }
43
+
44
+ subject {
45
+ relation.autosummarize([:a], x: Operator::Autosummarize::DistinctList.new)
46
+ }
47
+
48
+ it_behaves_like "an operator method"
49
+
50
+ it 'returns the exected result' do
51
+ expect(subject.to_a).to eql([
52
+ { a: 1, x: [2, 4] }
53
+ ])
54
+ end
55
+ end
56
+
57
+ describe 'autowrap' do
58
+ let(:relation) {
59
+ Relation.new([
60
+ { a: 1, b_x: 2, b_y: 3 },
61
+ { a: 2, b_x: 4, b_y: 1 }
62
+ ])
63
+ }
64
+
65
+ subject {
66
+ relation.autowrap
67
+ }
68
+
69
+ it_behaves_like "an operator method"
70
+
71
+ it 'returns the exected result' do
72
+ expect(subject.to_a).to eql([
73
+ { a: 1, b: { x: 2, y: 3 } },
74
+ { a: 2, b: { x: 4, y: 1 } }
75
+ ])
76
+ end
77
+
78
+ it 'passes the options' do
79
+ expect(relation.autowrap(split: ".").to_a).to eql([
80
+ { a: 1, b_x: 2, b_y: 3 },
81
+ { a: 2, b_x: 4, b_y: 1 }
82
+ ])
83
+ end
84
+ end
85
+
86
+ describe 'project' do
87
+ let(:relation) {
88
+ Relation.new([
89
+ { a: 1, b: 2 },
90
+ { a: 1, b: 4 },
91
+ { a: 3, b: 4 }
92
+ ])
93
+ }
94
+
95
+ subject {
96
+ relation.project([:b])
97
+ }
98
+
99
+ it_behaves_like "an operator method"
100
+
101
+ it 'returns the exected result' do
102
+ expect(subject.to_a).to eql([
103
+ { b: 2 },
104
+ { b: 4 }
105
+ ])
106
+ end
107
+ end
108
+
109
+ describe 'rename' do
110
+ let(:relation) {
111
+ Relation.new([
112
+ { a: 1, b: 2 },
113
+ { a: 2, b: 4 }
114
+ ])
115
+ }
116
+
117
+ subject {
118
+ relation.rename(b: :c)
119
+ }
120
+
121
+ it_behaves_like "an operator method"
122
+
123
+ it 'returns the exected result' do
124
+ expect(subject.to_a).to eql([
125
+ { a: 1, c: 2 },
126
+ { a: 2, c: 4 }
127
+ ])
128
+ end
129
+ end
130
+
131
+ end # describe Relation
132
+ end # module Bmg
data/tasks/gem.rake ADDED
@@ -0,0 +1,39 @@
1
+ require 'rubygems/package_task'
2
+
3
+ # Dynamically load the gem spec
4
+ gemspec_file = File.expand_path('../../bmg.gemspec', __FILE__)
5
+ gemspec = Kernel.eval(File.read(gemspec_file))
6
+
7
+ Gem::PackageTask.new(gemspec) do |t|
8
+
9
+ # Name of the package
10
+ t.name = gemspec.name
11
+
12
+ # Version of the package
13
+ t.version = gemspec.version
14
+
15
+ # Directory used to store the package files
16
+ t.package_dir = "pkg"
17
+
18
+ # True if a gzipped tar file (tgz) should be produced
19
+ t.need_tar = false
20
+
21
+ # True if a gzipped tar file (tar.gz) should be produced
22
+ t.need_tar_gz = false
23
+
24
+ # True if a bzip2'd tar file (tar.bz2) should be produced
25
+ t.need_tar_bz2 = false
26
+
27
+ # True if a zip file should be produced (default is false)
28
+ t.need_zip = false
29
+
30
+ # List of files to be included in the package.
31
+ t.package_files = gemspec.files
32
+
33
+ # Tar command for gzipped or bzip2ed archives.
34
+ t.tar_command = "tar"
35
+
36
+ # Zip command for zipped archives.
37
+ t.zip_command = "zip"
38
+
39
+ end
data/tasks/test.rake ADDED
@@ -0,0 +1,17 @@
1
+ namespace :test do
2
+ require "rspec/core/rake_task"
3
+
4
+ tests = []
5
+
6
+ desc "Runs unit tests on the library itself"
7
+ RSpec::Core::RakeTask.new(:unit) do |t|
8
+ t.pattern = "spec/unit/**/test_*.rb"
9
+ t.rspec_opts = ["-Ilib", "-Ispec/unit", "--color", "--backtrace", "--format=progress"]
10
+ end
11
+ tests << :unit
12
+
13
+ task :all => tests
14
+ end
15
+
16
+ desc "Runs all tests, unit then integration on examples"
17
+ task :test => :'test:all'
metadata ADDED
@@ -0,0 +1,130 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bmg
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Bernard Lambeau
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-11-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.6'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.6'
41
+ - !ruby/object:Gem::Dependency
42
+ name: path
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: roo
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '2.7'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '2.7'
69
+ description: Bmg is Alf's relational algebra for ruby, but much simpler and lighter
70
+ than Alf itself
71
+ email: blambeau@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - Gemfile
77
+ - LICENSE.md
78
+ - README.md
79
+ - Rakefile
80
+ - lib/bmg.rb
81
+ - lib/bmg/operator.rb
82
+ - lib/bmg/operator/allbut.rb
83
+ - lib/bmg/operator/autosummarize.rb
84
+ - lib/bmg/operator/autowrap.rb
85
+ - lib/bmg/operator/project.rb
86
+ - lib/bmg/operator/rename.rb
87
+ - lib/bmg/reader.rb
88
+ - lib/bmg/reader/csv.rb
89
+ - lib/bmg/reader/excel.rb
90
+ - lib/bmg/relation.rb
91
+ - lib/bmg/version.rb
92
+ - spec/unit/operator/test_allbut.rb
93
+ - spec/unit/operator/test_autosummarize.rb
94
+ - spec/unit/operator/test_autowrap.rb
95
+ - spec/unit/operator/test_project.rb
96
+ - spec/unit/operator/test_rename.rb
97
+ - spec/unit/reader/example.csv
98
+ - spec/unit/reader/example.numbers
99
+ - spec/unit/reader/example.xlsx
100
+ - spec/unit/reader/test_csv.rb
101
+ - spec/unit/reader/test_excel.rb
102
+ - spec/unit/spec_helper.rb
103
+ - spec/unit/test_relation.rb
104
+ - tasks/gem.rake
105
+ - tasks/test.rake
106
+ homepage: http://github.com/enspirit/bmg
107
+ licenses:
108
+ - MIT
109
+ metadata: {}
110
+ post_install_message:
111
+ rdoc_options: []
112
+ require_paths:
113
+ - lib
114
+ required_ruby_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ required_rubygems_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ requirements: []
125
+ rubyforge_project:
126
+ rubygems_version: 2.5.1
127
+ signing_key:
128
+ specification_version: 4
129
+ summary: Bmg is Alf's successor.
130
+ test_files: []