active_model_archive 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "active_model_archive"
5
- s.version = '1.1.0'
5
+ s.version = '1.1.1'
6
6
  s.platform = Gem::Platform::RUBY
7
7
  s.authors = ["Grant Rodgers"]
8
8
  s.email = ["grantr@gmail.com"]
@@ -18,6 +18,7 @@ module ActiveModelArchive
18
18
 
19
19
  autoload :Csv
20
20
  autoload :Json
21
+ autoload :Tabs
21
22
  end
22
23
  end
23
24
 
@@ -3,25 +3,30 @@ require 'csv'
3
3
  module ActiveModelArchive
4
4
  module Archiver
5
5
  class Csv
6
+ class_attribute :separator
7
+ self.separator = ','
8
+
6
9
  def header(object)
7
- object.archive_attributes.to_csv
10
+ object.archive_attributes.to_csv(col_sep: separator)
8
11
  end
9
12
 
10
13
  def encode(object)
11
14
  object.as_archive.values_at(*object.archive_attributes).map do |value|
12
15
  value.respond_to?(:any?) && value.any? ? ActiveSupport::JSON.encode(value) : value
13
- end.to_csv
16
+ end.to_csv(col_sep: separator)
14
17
  end
15
18
 
16
19
  def parse(io)
17
20
  first_line = true
18
21
  header = []
19
22
  io.each do |line|
23
+ values = line.parse_csv(col_sep: separator)
24
+
20
25
  if first_line
21
26
  first_line = false
22
- header = line.parse_csv
27
+ header = values
23
28
  else
24
- values = line.parse_csv.map do |value|
29
+ values.map! do |value|
25
30
  begin ActiveSupport::JSON.decode(value) rescue value end
26
31
  end
27
32
  yield Hash[header.zip(values)]
@@ -0,0 +1,7 @@
1
+ module ActiveModelArchive
2
+ module Archiver
3
+ class Tabs < Csv
4
+ self.separator = "\t"
5
+ end
6
+ end
7
+ end
@@ -13,7 +13,7 @@ module ActiveModelArchive
13
13
  end
14
14
 
15
15
  def as_archive
16
- attributes.dup.update('id' => id)
16
+ attributes
17
17
  end
18
18
 
19
19
  def to_archive
@@ -3,12 +3,12 @@ require 'test_helper'
3
3
  class ActiveModelArchive::Archiver::CsvTest < MiniTest::Spec
4
4
  def test_header
5
5
  model = TestModel.new
6
- assert_equal "color,id\n", archiver.header(model)
6
+ assert_equal "id,color\n", archiver.header(model)
7
7
  end
8
8
 
9
9
  def test_encode
10
10
  model = TestModel.new(id: 5, color: 'blue')
11
- assert_equal "blue,5\n", archiver.encode(model)
11
+ assert_equal "5,blue\n", archiver.encode(model)
12
12
  end
13
13
 
14
14
  def test_parse
@@ -0,0 +1,38 @@
1
+ require 'test_helper'
2
+
3
+ class ActiveModelArchive::Archiver::TabsTest < MiniTest::Spec
4
+ def test_header
5
+ model = TestModel.new
6
+ assert_equal "id\tcolor\n", archiver.header(model)
7
+ end
8
+
9
+ def test_encode
10
+ model = TestModel.new(id: 5, color: 'blue')
11
+ assert_equal "5\tblue\n", archiver.encode(model)
12
+ end
13
+
14
+ def test_parse
15
+ io = StringIO.new(
16
+ "id\tcolor\n" +
17
+ "3\tred\n" +
18
+ "4\tgreen\n"
19
+ )
20
+
21
+ results = []
22
+
23
+ archiver.parse(io) do |attributes|
24
+ results << attributes
25
+ end
26
+
27
+ expected = [
28
+ {'id' => '3', 'color' => 'red'},
29
+ {'id' => '4', 'color' => 'green'}
30
+ ]
31
+ assert_equal expected, results
32
+ end
33
+
34
+ private
35
+ def archiver
36
+ @archiver ||= ActiveModelArchive::Archiver::Tabs.new
37
+ end
38
+ end
data/test/test_helper.rb CHANGED
@@ -42,6 +42,7 @@ class TestModel
42
42
 
43
43
  def attributes
44
44
  {
45
+ 'id' => id,
45
46
  'color' => color
46
47
  }
47
48
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_model_archive
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-25 00:00:00.000000000 Z
12
+ date: 2012-05-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70140718024440 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '3'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70140718024440
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '3'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: yajl-ruby
27
- requirement: &70140718023620 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,7 +37,12 @@ dependencies:
32
37
  version: '0'
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70140718023620
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  description: Adds dump and restore functionality to activemodel classes
37
47
  email:
38
48
  - grantr@gmail.com
@@ -48,11 +58,13 @@ files:
48
58
  - lib/active_model_archive.rb
49
59
  - lib/active_model_archive/archiver/csv.rb
50
60
  - lib/active_model_archive/archiver/json.rb
61
+ - lib/active_model_archive/archiver/tabs.rb
51
62
  - lib/active_model_archive/attributes.rb
52
63
  - lib/active_model_archive/dump.rb
53
64
  - lib/active_model_archive/file_manager.rb
54
65
  - lib/active_model_archive/restore.rb
55
66
  - test/archiver/csv_test.rb
67
+ - test/archiver/tabs_test.rb
56
68
  - test/attributes_test.rb
57
69
  - test/dump_test.rb
58
70
  - test/file_manager_test.rb
@@ -78,12 +90,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
90
  version: '0'
79
91
  requirements: []
80
92
  rubyforge_project: active_model_archive
81
- rubygems_version: 1.8.17
93
+ rubygems_version: 1.8.21
82
94
  signing_key:
83
95
  specification_version: 3
84
96
  summary: Dump and restore activemodel objects
85
97
  test_files:
86
98
  - test/archiver/csv_test.rb
99
+ - test/archiver/tabs_test.rb
87
100
  - test/attributes_test.rb
88
101
  - test/dump_test.rb
89
102
  - test/file_manager_test.rb