reportly 0.0.1 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6a38a9e9dff8b088244834bc6735b82f3aa574a8
4
- data.tar.gz: 4222d9fcd393396de4cc31f45c7a31d00dcd62e3
3
+ metadata.gz: 52638256deac9c21a8f89abf855aa334d0d77b6e
4
+ data.tar.gz: e6fc77eaa0f6f4402186090774059239df2dafc9
5
5
  SHA512:
6
- metadata.gz: 3838c24e4448f7a0ad4805d8bdf8377dc4293e88a004cbe0f15c947c503341d2cd29ae057e20f714425c4b3a16040d70730d75f698d321c5d7e9afd956da181d
7
- data.tar.gz: 1c9ed0dcea838a1f64a629abda931fa5961322b585440c0f8510670a14dd80e0d6a86cade2088c601ea3fef979767110c4432da9bbe5e35ee70297cf71419965
6
+ metadata.gz: 5bed6e03bc4d694192d742f0bcdcbf2aa8b77d9a3761f43b4ba1658ec42ebf31702c4e2ec648c8d2d24186b467d8a3feb38101c23509913863d511b478100775
7
+ data.tar.gz: 3c44aea856d38cba204ce888f1c5dab6cda3c925f53d93dca567e4797e4933135942628fc87caa98b59a59298903dd92a1a2cda8a7c980328a6e04e888f34192
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
- [![Build Status](https://travis-ci.org/msroot/reportly.svg?branch=master)](https://travis-ci.org/msroot/reportly)
2
1
  [![Gem Version](https://badge.fury.io/rb/reportly.png)](http://badge.fury.io/rb/reportly)
2
+ [![Build Status](https://travis-ci.org/msroot/reportly.svg?branch=master)](https://travis-ci.org/msroot/reportly)
3
3
  [![Code Climate](https://codeclimate.com/github/msroot/reportly/badges/gpa.svg)](https://codeclimate.com/github/msroot/reportly)
4
-
4
+ [![Inline docs](http://inch-ci.org/github/msroot/reportly.svg?branch=master)](http://inch-ci.org/github/msroot/reportly)
5
+ [![Coverage Status](https://coveralls.io/repos/msroot/reportly/badge.svg?branch=master)](https://coveralls.io/r/msroot/reportly?branch=master)
5
6
  # Reportly
6
7
 
7
8
  Reports for Active Record results! No configurations needed
@@ -2,27 +2,54 @@ require "reportly/engine"
2
2
 
3
3
  module Reportly
4
4
  module ConsoleMethods
5
+ extend self
5
6
 
6
7
  class ReportlyNotValid < StandardError; end
7
8
 
8
- def self.report(model, *fields)
9
-
10
- raise ReportlyNotValid, "Reportly accepts only ActiveRecord Objects" unless is_valid_klass?(model)
11
-
12
- # call :all for ActiveRecord::Base model
13
- model = model.send(:all) unless model.is_a?(Array)
14
-
15
- # create a new array if its a single record
16
- model = [model] unless model.respond_to? :each
9
+ def report(model, *fields)
10
+
11
+ model = make_array_for(model)
12
+
13
+ validate(model)
14
+ report = Reportly::Engine.report(model, *fields)
15
+ @results = report
16
+ puts report.join("\n")
17
+ end
17
18
 
18
- Reportly::Engine.report(model, *fields)
19
+ def results
20
+ @results
21
+ end
22
+
23
+ def make_array_for(model)
24
+ # report User.first
25
+ # 2.1.3 :003 > User.first.class
26
+ # => User(id: uuid, partner_id: uuid, created_at: datetime, updated_at: datetime)
27
+ model = [model] if model.class.superclass == ActiveRecord::Base
28
+ # report User
29
+ # 2.1.3 :004 > User.class
30
+ # => Class
31
+ model = model.send(:all) if model.class.name == 'Class' and model.respond_to? :all
32
+
33
+ # User.all.first(2) and User.where(name: 'yannis') are kind of arrays and respond to :each
34
+
35
+ # 2.1.3 :006 > User.first(2).class
36
+ # => Array
37
+
38
+ # 2.1.3 :013 > User.all.class
39
+ # => User::ActiveRecord_Relation
40
+ model
41
+
19
42
  end
20
43
 
44
+ def validate(model)
45
+ raise ReportlyNotValid, "Reportly accepts only ActiveRecord Objects" unless is_valid_klass?(model)
46
+ end
21
47
 
22
- def self.is_valid_klass?(klass)
23
- klass.descends_from_active_record? rescue false or klass.is_a?(Array)
48
+ # accepts Array or a ActiveRecord_Relation
49
+ # Should respond_to? :each and be descend from active record
50
+ def is_valid_klass?(model)
51
+ model.first.class.descends_from_active_record? rescue false and model.respond_to? :each
24
52
  end
25
-
53
+
26
54
  end
27
55
  end
28
-
@@ -12,20 +12,23 @@ module Reportly
12
12
  end
13
13
  end
14
14
 
15
+ report = []
16
+
15
17
  border = '+-' + fields.map {|f| '-' * max_len[f] }.join('-+-') + '-+'
16
18
  title_row = '| ' + fields.map {|f| sprintf("%-#{max_len[f]}s", f.to_s) }.join(' | ') + ' |'
17
19
 
18
- puts border
19
- puts title_row
20
- puts border
20
+ report << border
21
+ report << title_row
22
+ report << border
21
23
 
22
24
  items.each do |item|
23
25
  row = '| ' + fields.map {|f| sprintf("%-#{max_len[f]}s", item.read_attribute(f)) }.join(' | ') + ' |'
24
- puts row
26
+ report << row
25
27
  end
26
28
 
27
- puts border
28
- puts "#{items.length} rows in set\n"
29
+ report << border
30
+ report << "#{items.length} rows in set"
31
+ report
29
32
  end
30
33
  end
31
34
  end
@@ -1,3 +1,3 @@
1
1
  module Reportly
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "guard", "~> 2.12.5"
25
25
  spec.add_development_dependency "guard-rspec", "~> 4.5.0"
26
26
  spec.add_development_dependency "sqlite3", "~> 1.3.10"
27
-
27
+ spec.add_development_dependency "coveralls", "~> 0.7.11"
28
28
  spec.add_runtime_dependency "rails", "~> 4.1.8"
29
29
 
30
30
  end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
  require 'active_record'
3
3
  require 'rails/console/helpers'
4
4
 
5
- NAMESPACE = Reportly::ConsoleMethods
5
+ REPORTLY = Reportly::ConsoleMethods
6
6
 
7
7
  def run_migrations!
8
8
  ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
@@ -16,12 +16,12 @@ def run_migrations!
16
16
  end
17
17
 
18
18
 
19
- def create_user_class
19
+ def create_users_class
20
20
  run_migrations!
21
21
  user = Class.new(ActiveRecord::Base)
22
22
  user.table_name = :users
23
23
  2.times {user.create}
24
- user
24
+ user.all
25
25
  end
26
26
 
27
27
 
@@ -29,7 +29,8 @@ end
29
29
  describe Reportly do
30
30
 
31
31
  let(:irb_context) {Object.new.extend(Rails::ConsoleMethods)}
32
- let(:users) {create_user_class}
32
+ let(:users) {create_users_class}
33
+
33
34
  let(:user) {
34
35
  user = Class.new(ActiveRecord::Base)
35
36
  user.table_name = :users
@@ -43,26 +44,22 @@ describe Reportly do
43
44
  end
44
45
 
45
46
  it 'raise error for not active recods' do
46
- [Class, Hash, Object].each do |o|
47
- expect{irb_context.report o.new}.to raise_error(NAMESPACE::ReportlyNotValid)
47
+ [Hash, Object].each do |o|
48
+ expect{irb_context.report o.new}.to raise_error(REPORTLY::ReportlyNotValid)
48
49
  end
49
50
  end
50
51
 
51
- it 'not raise error' do
52
- expect{irb_context.report users.all}.to_not raise_error
53
- end
54
-
55
- it 'not raise error on class' do
52
+ it 'not raise error on users' do
56
53
  expect{irb_context.report users}.to_not raise_error
57
- expect{irb_context.report user}.to_not raise_error
58
54
  end
59
55
 
60
- it 'should call :all' do
61
- expect(irb_context.report users).to equal(irb_context.report users.all)
56
+ it 'not raise error on user class' do
57
+ expect{irb_context.report user}.to_not raise_error
62
58
  end
63
59
 
60
+
64
61
  it 'accepting active record array ' do
65
- expect{irb_context.report users.all.first(2)}.to_not raise_error
62
+ expect{irb_context.report users.first(2)}.to_not raise_error
66
63
  end
67
64
 
68
65
  it 'accepting active record array ' do
@@ -73,21 +70,81 @@ describe Reportly do
73
70
  it 'passing fields ' do
74
71
  expect{irb_context.report users, :id, :name}.to_not raise_error
75
72
  end
73
+
74
+ it 'respond to each' do
75
+ [user, users, users.first(2), users.first].each do |valid|
76
+ expect(REPORTLY.make_array_for(valid).respond_to?(:each)).to be true
77
+ end
78
+ end
76
79
 
77
80
 
78
- describe "Validations" do
81
+ it 'should be valid ' do
82
+ [user, users, users.first(2), users.first].each do |valid|
79
83
 
80
- it 'should be valid ' do
81
- [users, users.all, users.all.first(2)].each do |valid|
82
- expect(NAMESPACE.is_valid_klass?(valid)).to be true
83
- end
84
+ model = REPORTLY.make_array_for(valid)
85
+
86
+ expect(REPORTLY.is_valid_klass?(model)).to be true
84
87
  end
88
+ end
89
+
90
+ it 'should not raise in validation ' do
91
+ expect(REPORTLY.is_valid_klass?(nil)).to be false
92
+ expect{REPORTLY.is_valid_klass?(nil)}.to_not raise_error
93
+ end
94
+
95
+
85
96
 
86
- it 'should not be valid ' do
87
- [Hash.new, Class.new].each do |valid|
88
- expect(NAMESPACE.is_valid_klass?(valid)).to be false
89
- end
97
+ it 'should not be valid ' do
98
+ [String, Set, Hash, Class, Array].each do |klass|
99
+ expect(REPORTLY.is_valid_klass?(klass.new)).to be false
100
+ expect{REPORTLY.is_valid_klass?(klass.new)}.to_not raise_error
90
101
  end
91
-
102
+
103
+ ["", [], {}].each do |klass|
104
+ expect(REPORTLY.is_valid_klass?(klass)).to be false
105
+ expect{REPORTLY.is_valid_klass?(klass)}.to_not raise_error
106
+ end
107
+
92
108
  end
109
+
110
+
111
+ let(:users_table) {
112
+ t = []
113
+ t << "+----+------+"
114
+ t << "| id | name |"
115
+ t << "+----+------+"
116
+ t << "| 1 | |"
117
+ t << "| 2 | |"
118
+ t << "+----+------+"
119
+ t << "2 rows in set"
120
+ t
121
+ }
122
+
123
+ let(:user_table) {
124
+ t = []
125
+ t << "+----+"
126
+ t << "| id |"
127
+ t << "+----+"
128
+ t << "| 1 |"
129
+ t << "+----+"
130
+ t << "1 rows in set"
131
+ t
132
+ }
133
+
134
+ # Not thread safe
135
+ it 'all table' do
136
+ irb_context.report(users)
137
+ expect(REPORTLY.results).to eq(users_table)
138
+ end
139
+
140
+ it 'using first' do
141
+ irb_context.report(users.first, :id)
142
+ expect(REPORTLY.results).to eq(user_table)
143
+ end
144
+
145
+ it 'using find' do
146
+ irb_context.report(users.find(1), :id)
147
+ expect(REPORTLY.results).to eq(user_table)
148
+ end
149
+
93
150
  end
@@ -1,3 +1,6 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
1
4
  lib = File.expand_path('../lib', __FILE__)
2
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
6
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reportly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yannis Kolovos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-24 00:00:00.000000000 Z
11
+ date: 2015-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 1.3.10
97
+ - !ruby/object:Gem::Dependency
98
+ name: coveralls
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.7.11
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.7.11
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rails
99
113
  requirement: !ruby/object:Gem::Requirement