decisive 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8a160d81797dc99c36ca0d8eb02e977325bc3394
4
- data.tar.gz: f99f21ffbea49f1ca3526867a9d7ee29d17e5207
3
+ metadata.gz: d28c31cc0299732df3599ea1902bfa2d6586ae70
4
+ data.tar.gz: 5002e3b395a7fb0f56ff77ec1bab7e9280fa9016
5
5
  SHA512:
6
- metadata.gz: e16f242edf38c7942d040cef45497b4b3a50ce55a0ef6786fbddf713483e5254c4f78f2071c84861ee2c7eac56baa83cf03ed10309476ee79d917f6e23fa1146
7
- data.tar.gz: a8b6ba7952d1155978b1ddf2d707535f0761aa42851a0c126b5faebd39b5f36855ac21c340bf36d73868769c1a993c50653120dc43b329fa7aae581b2efa1fd9
6
+ metadata.gz: f413f05a6292d19c47d716f8792ff58ee5f3715d13105b1823b450e32b99f696c86cd65f529a6d10a90f2aeef74dec45aaaf64193e65db195095a226de79fb86
7
+ data.tar.gz: 4ed224da57a64802dbaeb0126a98ffbc472c33a28b833eb3d69728ada9f5c690a5723ae62a574b45879a49cedada464b7025abd7a4e65e69195210e59b51345d
data/.travis.yml CHANGED
@@ -2,6 +2,3 @@
2
2
  sudo: false
3
3
  language: ruby
4
4
  cache: bundler
5
- rvm:
6
- - 2.2.0
7
- before_install: gem install bundler -v 1.16.5
data/Gemfile.lock CHANGED
@@ -1,51 +1,51 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- decisive (0.2.0)
4
+ decisive (0.3.0)
5
5
  actionview
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- actionview (5.2.1)
11
- activesupport (= 5.2.1)
10
+ actionview (5.2.3)
11
+ activesupport (= 5.2.3)
12
12
  builder (~> 3.1)
13
13
  erubi (~> 1.4)
14
14
  rails-dom-testing (~> 2.0)
15
15
  rails-html-sanitizer (~> 1.0, >= 1.0.3)
16
- activesupport (5.2.1)
16
+ activesupport (5.2.3)
17
17
  concurrent-ruby (~> 1.0, >= 1.0.2)
18
18
  i18n (>= 0.7, < 2)
19
19
  minitest (~> 5.1)
20
20
  tzinfo (~> 1.1)
21
21
  builder (3.2.3)
22
- byebug (10.0.2)
23
- concurrent-ruby (1.0.5)
22
+ byebug (11.0.1)
23
+ concurrent-ruby (1.1.5)
24
24
  crass (1.0.4)
25
25
  diff-lcs (1.3)
26
- erubi (1.7.1)
27
- i18n (1.1.0)
26
+ erubi (1.8.0)
27
+ i18n (1.6.0)
28
28
  concurrent-ruby (~> 1.0)
29
- loofah (2.2.2)
29
+ loofah (2.2.3)
30
30
  crass (~> 1.0.2)
31
31
  nokogiri (>= 1.5.9)
32
- mini_portile2 (2.3.0)
32
+ mini_portile2 (2.4.0)
33
33
  minitest (5.11.3)
34
- nokogiri (1.8.4)
35
- mini_portile2 (~> 2.3.0)
34
+ nokogiri (1.10.3)
35
+ mini_portile2 (~> 2.4.0)
36
36
  rails-dom-testing (2.0.3)
37
37
  activesupport (>= 4.2.0)
38
38
  nokogiri (>= 1.6)
39
39
  rails-html-sanitizer (1.0.4)
40
40
  loofah (~> 2.2, >= 2.2.2)
41
- rake (10.5.0)
41
+ rake (12.3.2)
42
42
  rspec (3.8.0)
43
43
  rspec-core (~> 3.8.0)
44
44
  rspec-expectations (~> 3.8.0)
45
45
  rspec-mocks (~> 3.8.0)
46
46
  rspec-core (3.8.0)
47
47
  rspec-support (~> 3.8.0)
48
- rspec-expectations (3.8.1)
48
+ rspec-expectations (3.8.3)
49
49
  diff-lcs (>= 1.2.0, < 2.0)
50
50
  rspec-support (~> 3.8.0)
51
51
  rspec-mocks (3.8.0)
@@ -60,11 +60,11 @@ PLATFORMS
60
60
  ruby
61
61
 
62
62
  DEPENDENCIES
63
- bundler (~> 1.16)
63
+ bundler
64
64
  byebug
65
65
  decisive!
66
- rake (~> 10.0)
66
+ rake
67
67
  rspec (~> 3.0)
68
68
 
69
69
  BUNDLED WITH
70
- 1.16.5
70
+ 2.0.1
data/README.md CHANGED
@@ -1,22 +1,9 @@
1
1
  # Decisive
2
2
 
3
- DSL for rendering CSVs
3
+ DSL for rendering CSVs in Rails apps
4
4
 
5
- ## Installation
6
-
7
- Add this line to your application's Gemfile:
8
-
9
- ```ruby
10
- gem 'decisive'
11
- ```
12
-
13
- And then execute:
14
-
15
- $ bundle
16
-
17
- Or install it yourself as:
18
-
19
- $ gem install decisive
5
+ [![Build Status](https://travis-ci.org/botandrose/decisive.svg?branch=master)](https://travis-ci.org/botandrose/decisive)
6
+ [![Code Climate](https://codeclimate.com/github/botandrose/decisive/badges/gpa.svg)](https://codeclimate.com/github/botandrose/decisive)
20
7
 
21
8
  ## Usage
22
9
 
@@ -35,28 +22,24 @@ end
35
22
  ```ruby
36
23
  # app/views/users/index.csv.decisive
37
24
 
38
- csv @users, filename: "users-#{Time.zone.now.strftime("%Y_%m_%d")}.csv" do
39
- column :email
40
- column :name, label: "Full name"
41
- column :signed_up do |user|
42
- user.created_at.to_date
43
- end
25
+ csv @users, filename: "users-#{Time.zone.now.strftime("%Y_%m_%d")}.csv" do |user|
26
+ column "Email" # omitted accessor field gets inferred: user.email
27
+ column "Full name", :name # explicit accessor field: user.name
28
+ column "Signed up", user.created_at.to_date # other values get passed straight through
44
29
  end
45
30
  ```
46
31
 
47
32
  Then visit /users.csv to get file named "users-2010_01_01.csv" with the following contents:
48
- ```csv
49
- Email,Full name,Signed up
50
- frodo@example.com,Frodo Baggins,2010-01-01
51
- sam@example.com,Samwise Gamgee,2010-01-01
52
- ```
33
+
34
+ | Email | Full name | Signed up |
35
+ | ----------------- | -------------- | ---------- |
36
+ | frodo@example.com | Frodo Baggins | 2002-06-19 |
37
+ | sam@example.com | Samwise Gamgee | 2008-10-13 |
53
38
 
54
39
  ## Development
55
40
 
56
41
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
57
42
 
58
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
59
-
60
43
  ## Contributing
61
44
 
62
45
  Bug reports and pull requests are welcome on GitHub at https://github.com/botandrose/decisive.
data/decisive.gemspec CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  spec.add_dependency "actionview"
27
27
 
28
- spec.add_development_dependency "bundler", "~> 1.16"
29
- spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "bundler"
29
+ spec.add_development_dependency "rake"
30
30
  spec.add_development_dependency "rspec", "~> 3.0"
31
31
  end
@@ -20,44 +20,58 @@ module Decisive
20
20
 
21
21
  module DSL
22
22
  def csv records, filename:, &block
23
- Context.new([], records, filename).tap do |context|
24
- context.instance_eval &block
25
- end
23
+ Context.new(records, filename, block)
26
24
  end
27
25
  end
28
26
 
29
- class Context < Struct.new(:columns, :records, :filename)
30
- class Column < Struct.new(:field, :label, :block); end
31
-
32
- def column field, label: field.to_s.humanize, &block
33
- block ||= ->(record) { record.send(field) }
34
- columns << Column.new(field, label, block)
35
- end
36
-
27
+ class Context < Struct.new(:records, :filename, :block)
37
28
  def to_csv
38
- rows
39
- .map { |rows| rows.map(&:to_s) }
40
- .map(&:to_csv)
41
- .join
29
+ (header + body).map(&:to_csv).join
42
30
  end
43
31
 
44
32
  private
45
33
 
46
- def rows
47
- [header] + body
48
- end
49
-
50
34
  def header
51
- columns.map(&:label)
35
+ [keys]
52
36
  end
53
37
 
54
38
  def body
55
- records.map do |record|
56
- columns.map do |column|
57
- column.block.call(record)
58
- end
39
+ hashes.map do |hash|
40
+ hash.values_at(*keys)
41
+ end
42
+ end
43
+
44
+ def keys
45
+ @keys ||= hashes.flat_map(&:keys).uniq
46
+ end
47
+
48
+ def hashes
49
+ @hashes ||= records.map do |record|
50
+ Row.new(record, block).to_hash
59
51
  end
60
52
  end
61
53
  end
54
+
55
+ class Row < Struct.new(:record, :block)
56
+ def to_hash
57
+ @hash = {}
58
+ instance_exec record, &block
59
+ @hash
60
+ end
61
+
62
+ private
63
+
64
+ def column key, value=nil, &block
65
+ @hash[key] = if block_given?
66
+ block.call(record)
67
+ elsif value.is_a?(Symbol)
68
+ record.send(value)
69
+ elsif value.nil?
70
+ record.send(key.parameterize.underscore.to_sym)
71
+ else
72
+ value
73
+ end.to_s
74
+ end
75
+ end
62
76
  end
63
77
 
@@ -1,3 +1,3 @@
1
1
  module Decisive
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decisive
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Micah Geisel
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-19 00:00:00.000000000 Z
11
+ date: 2019-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview
@@ -28,30 +28,30 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.16'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.16'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement