csv2api 0.0.1 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e4d79887071ea990b18f00ffb329d718a1603965
4
- data.tar.gz: 5ac6cac16217b800f1d5777698b312ce690bbd78
3
+ metadata.gz: 245ac997c6252b30230fedf04586ccae04b2eeb1
4
+ data.tar.gz: 3b886a7ad499db858d87ed66d3aa0463a0b3f358
5
5
  SHA512:
6
- metadata.gz: 668916f02c35a22396cd5b33671705c2b0ce5d287d93986e91609f3647f93d6a96cab50375e5b34cdf02b8c604adf9299436de64045490f423cf0607183ee422
7
- data.tar.gz: 9b790f0b073b8937d8bb096f7b1c163f52d6e982803731e27eabb2071b15c441bd1cb122d70e688f459713dd38c2c653c9ba8d038dfa35a9e12c7d75a734eba2
6
+ metadata.gz: 7ce4141c440da7152fb6001c324c906ad4d09f87e4c586ba1ffeadc14401d275adfcff45cdbc4c9088eb3203b007fa72a54439d75af83fc72aa5caab8dc59962
7
+ data.tar.gz: dc99410e6be1d4f1d9c076d40584bf79f508385213d3908555a07c32e0296b4572ca69a659fce2a5df52d6ad4b84d1f475bbc075aff26f047c7295b050df063c
data/Changelog.md CHANGED
@@ -1,7 +1,13 @@
1
1
  # CSV2API Changelog
2
2
 
3
+ ## 0.1.0
4
+
5
+ Released June 3, 2014 ([0.1.0](https://github.com/jonahoffline/csv2api/tree/v0.1.0)).
6
+
7
+ * Add XML `Content-Type` response support
8
+
3
9
  ## 0.0.1
4
10
 
5
11
  Released May 27, 2014 ([0.0.1](https://github.com/jonahoffline/csv2api/tree/v0.0.1)).
6
12
 
7
- * Initial Release.
13
+ * Initial Release.
data/README.md CHANGED
@@ -1,12 +1,17 @@
1
1
  # CSV2API
2
+ [![Build Status](https://travis-ci.org/jonahoffline/csv2api.svg)](https://travis-ci.org/jonahoffline/csv2api)
3
+ [![Gem Version](https://badge.fury.io/rb/csv2api.svg)](http://badge.fury.io/rb/csv2api)
4
+ [![Dependency Status](https://gemnasium.com/jonahoffline/csv2api.svg)](https://gemnasium.com/jonahoffline/csv2api)
5
+ [![Code Climate](https://codeclimate.com/github/jonahoffline/csv2api.png)](https://codeclimate.com/github/jonahoffline/csv2api)
6
+ [![Inline docs](http://inch-pages.github.io/github/jonahoffline/csv2api.png)](http://inch-pages.github.io/github/jonahoffline/csv2api)
2
7
 
3
- Auto-create json APIs from csv files. Instant endpoints without any hassle
8
+ Auto-create json and xml APIs from csv files. Instant endpoints without any hassle.
4
9
 
5
10
  ## Why should I use this?
6
11
 
7
12
  * Your boss/client hates you so they insist on sending you .csv files for their data.
8
13
  * You need to do a quick prototype and don't want to waste time importing / converting
9
- * You're bored and want to write an app with pre-historical data you found on a floppy!
14
+ * You're bored and want to write an app with pre-historical data that you found on a floppy!
10
15
  * Your life depends on it (**Disclaimer:** *Use at your own risk, jk you should be fine!*)
11
16
 
12
17
  ## Installation
@@ -31,7 +36,7 @@ tasks.csv - http://localhost:3000/tasks
31
36
  weather.csv - http://localhost:3000/weather
32
37
  ```
33
38
 
34
- **Note**: Endpoints can be accessed with simple name or their .json extension.
39
+ **Note**: Endpoints can be accessed with the filename or their `.json`, `.xml` extensions.
35
40
 
36
41
  ### Load a specific folder
37
42
  $csv2api -d office_stuff/sad_csvs/
data/csv2api.gemspec CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.version = CSV2API::VERSION
9
9
  spec.authors = ['Jonah Ruiz']
10
10
  spec.email = ['jonah@pixelhipsters.com']
11
- spec.summary = %q(Auto-create json API endpoints from csv files.)
12
- spec.description = %q(Auto-create json APIs from csv files. Instantaneously)
11
+ spec.description = %q(Auto-create json & xml APIs endpoints from csv files.)
12
+ spec.summary = %q(Auto-create API endpoints from csv files.)
13
13
  spec.homepage = 'https://github.com/jonahoffline/csv2api'
14
14
  spec.license = 'MIT'
15
15
 
@@ -26,4 +26,6 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency 'rack-test', '~> 0.6.2'
27
27
 
28
28
  spec.add_dependency 'sinatra', '~> 1.4.5'
29
+ spec.add_dependency 'activesupport', '~> 4.1.1'
30
+ spec.add_dependency 'builder', '~> 3.2.2'
29
31
  end
@@ -14,25 +14,34 @@ module CSV2API
14
14
  end
15
15
 
16
16
  # Auto-creates endpoints from filenames
17
- # @example
18
- # If :files contains 'tasks.csv', it will generate an endpoint like:
17
+ # Endpoints will be reachable at depending on format
19
18
  #
20
- # get '/tasks' do
21
- # content_type :json
22
- # # (obvious code omitted...)
23
- # # (will only return the json version of csv)
24
- # end
25
- #
26
- # Endpoint will be reachable at any of the following urls:
27
- # http://localhost:4567/tasks or http://localhost:4567/tasks.json
19
+ # JSON (the default):
20
+ # http://localhost:4567/tasks
21
+ # http://localhost:4567/tasks.json
28
22
  #
23
+ # XML:
24
+ # http://localhost:4567/tasks.xml
29
25
  settings.files.each do |endpoint|
30
26
  get "/#{endpoint}.?:format?" do
31
- content_type :json
27
+ csv_data = load_data(endpoint)
32
28
 
33
- csv_file = load_csv(settings.csv_path, endpoint)
34
- generate_json(CSV2API::Parser.new(csv_file).all)
29
+ if params[:format].eql?('xml')
30
+ content_type :xml
31
+ csv_data.to_xml(root: endpoint)
32
+ else
33
+ content_type :json
34
+ generate_json(csv_data)
35
+ end
35
36
  end
36
37
  end
38
+
39
+ # Loads data for response
40
+ # @param endpoint [String] endpoint name
41
+ # @return [Array<Hash>] csv data
42
+ def load_data(endpoint)
43
+ csv_file = load_csv(settings.csv_path, endpoint)
44
+ CSV2API::Parser.new(csv_file).all
45
+ end
37
46
  end
38
47
  end
@@ -1,5 +1,5 @@
1
1
  module CSV2API
2
2
  # @author Jonah Ruiz <jonah@pixelhipsters.com>
3
3
  # Contains the version namespaced
4
- VERSION = '0.0.1'
4
+ VERSION = '0.1.0'
5
5
  end
data/lib/csv2api.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'csv2api/version'
2
2
  require 'csv2api/utils'
3
3
  require 'csv2api/parser'
4
+ require 'active_support/core_ext'
4
5
 
5
6
  # @author Jonah Ruiz <jonah@pixelhipsters.com>
6
7
  # Auto-creates API endpoints from csv files
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'ostruct'
3
2
  describe CSV2API::Server do
4
3
  include Rack::Test::Methods
5
4
 
@@ -8,18 +7,50 @@ describe CSV2API::Server do
8
7
  end
9
8
 
10
9
  describe '/tasks' do
11
- it 'returns tasks.csv in json' do
12
- get '/tasks'
13
- expect(last_response.body).not_to be_empty
14
- expect(last_response).to be_ok
10
+ context 'when called with .json extension' do
11
+ it 'returns tasks.csv in json' do
12
+ get '/tasks'
13
+ expect(last_response.body).not_to be_empty
14
+ expect(last_response).to be_ok
15
+
16
+ parsed_response = json(last_response.body).first
17
+ expect(parsed_response).to be_a(Hash)
18
+ end
19
+ end
20
+
21
+ context 'when called with .xml extension' do
22
+ it 'returns tasks.csv in XML' do
23
+ get '/tasks.xml'
24
+ expect(last_response.body).not_to be_empty
25
+ expect(last_response).to be_ok
26
+
27
+ parsed_response = xml(last_response.body)
28
+ expect(parsed_response).to be_a(Hash)
29
+ end
15
30
  end
16
31
  end
17
32
 
18
33
  describe '/transaction' do
19
- it 'returns transaction.csv in json' do
20
- get '/transaction'
21
- expect(last_response.body).not_to be_empty
22
- expect(last_response).to be_ok
34
+ context 'when called without .json extension' do
35
+ it 'returns transaction.csv in json' do
36
+ get '/transaction'
37
+ expect(last_response.body).not_to be_empty
38
+ expect(last_response).to be_ok
39
+
40
+ parsed_response = json(last_response.body).first
41
+ expect(parsed_response).to be_a(Hash)
42
+ end
43
+ end
44
+
45
+ context 'when called with .xml extension' do
46
+ it 'returns transaction.csv in XML' do
47
+ get '/transaction.xml'
48
+ expect(last_response.body).not_to be_empty
49
+ expect(last_response).to be_ok
50
+
51
+ parsed_response = xml(last_response.body)
52
+ expect(parsed_response).to be_a(Hash)
53
+ end
23
54
  end
24
55
  end
25
56
  end
data/spec/spec_helper.rb CHANGED
@@ -16,3 +16,11 @@ def load_fixture(csv_file)
16
16
  path = File.join(File.dirname(__FILE__), 'fixtures', "#{csv_file}.csv")
17
17
  File.read(path)
18
18
  end
19
+
20
+ def json(body)
21
+ JSON.parse(body)
22
+ end
23
+
24
+ def xml(xml)
25
+ Hash.from_xml(xml)
26
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csv2api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonah Ruiz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-28 00:00:00.000000000 Z
11
+ date: 2014-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,7 +94,35 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 1.4.5
97
- description: Auto-create json APIs from csv files. Instantaneously
97
+ - !ruby/object:Gem::Dependency
98
+ name: activesupport
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 4.1.1
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 4.1.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: builder
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 3.2.2
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 3.2.2
125
+ description: Auto-create json & xml APIs endpoints from csv files.
98
126
  email:
99
127
  - jonah@pixelhipsters.com
100
128
  executables:
@@ -152,7 +180,7 @@ rubyforge_project:
152
180
  rubygems_version: 2.2.2
153
181
  signing_key:
154
182
  specification_version: 4
155
- summary: Auto-create json API endpoints from csv files.
183
+ summary: Auto-create API endpoints from csv files.
156
184
  test_files:
157
185
  - spec/csv2api/csv2api_spec.rb
158
186
  - spec/csv2api/parser_spec.rb