annal 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -18,6 +18,7 @@ Gem::Specification.new do |gem|
18
18
  gem.require_paths = ["lib"]
19
19
 
20
20
  gem.add_runtime_dependency "activesupport"
21
+ gem.add_runtime_dependency "rest-client"
21
22
 
22
23
  gem.add_development_dependency "minitest"
23
24
  gem.add_development_dependency "rake"
@@ -1,20 +1,17 @@
1
+ require 'annal/fetch/local_file'
2
+ require 'annal/fetch/net_file'
3
+
1
4
  module Annal
2
- class Fetch
3
- attr_accessor :path, :file
4
- def initialize(file_identifier)
5
- self.file = if file_identifier.respond_to?(:read)
6
- file_identifier
5
+ module Fetch
6
+ def self.new(file_identifier)
7
+ case file_identifier
8
+ when File
9
+ LocalFile.new(file_identifier)
10
+ when %r(https?://)
11
+ NetFile.new(file_identifier)
7
12
  else
8
- File.open(file_identifier)
13
+ LocalFile.new(file_identifier)
9
14
  end
10
15
  end
11
-
12
- def local?
13
- true
14
- end
15
-
16
- def read
17
- @read ||= file.read
18
- end
19
16
  end
20
17
  end
@@ -0,0 +1,22 @@
1
+ module Annal
2
+ module Fetch
3
+ class LocalFile
4
+ attr_accessor :path, :file
5
+ def initialize(file_identifier)
6
+ self.file = if file_identifier.respond_to?(:read)
7
+ file_identifier
8
+ else
9
+ File.open(file_identifier)
10
+ end
11
+ end
12
+
13
+ def local?
14
+ true
15
+ end
16
+
17
+ def read
18
+ @read ||= file.read
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ require 'rest_client'
2
+
3
+ module Annal
4
+ module Fetch
5
+ class NetFile
6
+ attr_accessor :path, :file
7
+ def initialize(file_identifier)
8
+ self.file = if file_identifier.respond_to?(:read)
9
+ file_identifier
10
+ else
11
+ self.file = RestClient.get(file_identifier)
12
+ end
13
+ end
14
+
15
+ def local?
16
+ false
17
+ end
18
+
19
+ def read
20
+ @read ||= file.to_str
21
+ end
22
+ end
23
+ end
24
+ end
@@ -8,7 +8,11 @@ module Annal
8
8
  end
9
9
 
10
10
  def data
11
- parse_yaml
11
+ @data ||= parse_yaml
12
+ end
13
+
14
+ def parseable?
15
+ not data.kind_of?(String)
12
16
  end
13
17
 
14
18
  # Also parses JSON
@@ -1,3 +1,3 @@
1
1
  module Annal
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -12,10 +12,16 @@ class TestAnnalIntegration < MiniTest::Unit::TestCase
12
12
  assert_kind_of Hash, doc.data
13
13
  end
14
14
 
15
- def test_find
15
+ def test_find_local
16
16
  doc = Annal::Document.find("#{Annal.project_root}/test/test.json")
17
17
  assert_kind_of Hash, doc.data
18
18
  assert_kind_of Hash, doc.data
19
19
  end
20
20
 
21
+ def test_find_net
22
+ doc = Annal::Document.find(json_url)
23
+ assert_kind_of Hash, doc.data
24
+ assert_kind_of Hash, doc.data
25
+ end
26
+
21
27
  end
@@ -8,5 +8,4 @@ class TestAnnal < MiniTest::Unit::TestCase
8
8
  def test_that_kitty_can_eat
9
9
  assert_kind_of Module, Annal
10
10
  end
11
-
12
11
  end
@@ -0,0 +1,19 @@
1
+ require_relative 'minitest_helper'
2
+
3
+ class TestFetchLocalFileIntegration < MiniTest::Unit::TestCase
4
+ def subject
5
+ Annal::Fetch::LocalFile
6
+ end
7
+
8
+ def test_fetch
9
+ read = subject.new("#{Annal.project_root}/test/test.json").read
10
+ assert_match 'development_environment', read
11
+ end
12
+
13
+ def test_double_read
14
+ fetch = subject.new("#{Annal.project_root}/test/test.json")
15
+ assert_match 'development_environment', fetch.read
16
+ assert_match 'development_environment', fetch.read
17
+ end
18
+
19
+ end
@@ -13,3 +13,29 @@ end
13
13
  def yaml_text
14
14
  IO.read("#{Annal.project_root}/test/test.yml")
15
15
  end
16
+
17
+ def json_url
18
+ "https://gist.github.com/raw/07fc05e2d2ba3097e7d7/
19
+ 2ef8ae00465c93b81f179d90e3b92a41eed73a81/
20
+ example.json".gsub(/\s+/,'')
21
+ end
22
+
23
+ def yaml_url
24
+ "https://gist.github.com/raw/d320232a2b2e97dd1bd6/
25
+ 51a4dd459dc12673ad440debb28f499c89550022/
26
+ test.yml".gsub(/\s/,'')
27
+ end
28
+
29
+ def stub_rest_client!
30
+ require 'rest-client'
31
+ def RestClient.get(url)
32
+ case url
33
+ when json_url then json_text
34
+ when yaml_url then yaml_url
35
+ else
36
+ puts 'Unstubbed call to "RestClient.get"!'
37
+ super(url)
38
+ end
39
+ end
40
+ end
41
+ stub_rest_client! # Go ahead and call it! Homecooked before(:all)
@@ -1,16 +1,23 @@
1
1
  require_relative 'minitest_helper'
2
2
 
3
- class TestFetchIntegration < MiniTest::Unit::TestCase
3
+ class TestFetchNetFileIntegration < MiniTest::Unit::TestCase
4
+ def subject
5
+ Annal::Fetch::NetFile
6
+ end
4
7
 
5
8
  def test_fetch
6
- read = Annal::Fetch.new("#{Annal.project_root}/test/test.json").read
9
+ read = subject.new(json_url).read
7
10
  assert_match 'development_environment', read
8
11
  end
9
12
 
10
13
  def test_double_read
11
- fetch = Annal::Fetch.new("#{Annal.project_root}/test/test.json")
14
+ fetch = subject.new(json_url)
12
15
  assert_match 'development_environment', fetch.read
13
16
  assert_match 'development_environment', fetch.read
14
17
  end
15
18
 
19
+ # def test_crazy_pants
20
+ # stub_rest_client!
21
+ # end
22
+
16
23
  end
@@ -2,6 +2,10 @@ require_relative 'minitest_helper'
2
2
 
3
3
  class TestParseIntegration < MiniTest::Unit::TestCase
4
4
 
5
+ def plain_text
6
+ 'Hi there. No format here.'
7
+ end
8
+
5
9
  def test_parsing_json
6
10
  data = Annal::Parse.new(json_text).data
7
11
  assert_kind_of Hash, data
@@ -13,7 +17,7 @@ class TestParseIntegration < MiniTest::Unit::TestCase
13
17
  end
14
18
 
15
19
  def test_parsing_text
16
- data = Annal::Parse.new('Hi there. No format here.').data
20
+ data = Annal::Parse.new(plain_text).data
17
21
  assert_kind_of String, data
18
22
  end
19
23
 
@@ -23,4 +27,12 @@ class TestParseIntegration < MiniTest::Unit::TestCase
23
27
  assert_kind_of Hash, parse.data
24
28
  end
25
29
 
30
+ def test_detect_parsing_success
31
+ assert Annal::Parse.new(json_text).parseable?
32
+ end
33
+
34
+ def test_detect_parsing_failure
35
+ refute Annal::Parse.new(plain_text).parseable?
36
+ end
37
+
26
38
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: annal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
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: 2013-01-22 00:00:00.000000000 Z
12
+ date: 2013-01-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70321319294640 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,31 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70321319294640
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rest-client
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
25
46
  - !ruby/object:Gem::Dependency
26
47
  name: minitest
27
- requirement: &70321319293840 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
28
49
  none: false
29
50
  requirements:
30
51
  - - ! '>='
@@ -32,10 +53,15 @@ dependencies:
32
53
  version: '0'
33
54
  type: :development
34
55
  prerelease: false
35
- version_requirements: *70321319293840
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
36
62
  - !ruby/object:Gem::Dependency
37
63
  name: rake
38
- requirement: &70321319292820 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
39
65
  none: false
40
66
  requirements:
41
67
  - - ! '>='
@@ -43,7 +69,12 @@ dependencies:
43
69
  version: '0'
44
70
  type: :development
45
71
  prerelease: false
46
- version_requirements: *70321319292820
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
47
78
  description: Loads up files. Parses YAML/JSON and other stuff maybe.
48
79
  email:
49
80
  - samsm@samsm.com
@@ -62,13 +93,16 @@ files:
62
93
  - lib/annal/collection.rb
63
94
  - lib/annal/document.rb
64
95
  - lib/annal/fetch.rb
96
+ - lib/annal/fetch/local_file.rb
97
+ - lib/annal/fetch/net_file.rb
65
98
  - lib/annal/parse.rb
66
99
  - lib/annal/version.rb
67
100
  - test/annal_integration_test.rb
68
101
  - test/annal_test.rb
69
102
  - test/collection_integration_test.rb
70
- - test/fetch_integration_spec.rb
103
+ - test/fetch_file_integration_spec.rb
71
104
  - test/minitest_helper.rb
105
+ - test/net_file_integration_test.rb
72
106
  - test/parse_integration_test.rb
73
107
  - test/test-dir/.gitkeep
74
108
  - test/test.json
@@ -87,7 +121,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
87
121
  version: '0'
88
122
  segments:
89
123
  - 0
90
- hash: -263292446635961119
124
+ hash: 3090640064352595291
91
125
  required_rubygems_version: !ruby/object:Gem::Requirement
92
126
  none: false
93
127
  requirements:
@@ -96,10 +130,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
130
  version: '0'
97
131
  segments:
98
132
  - 0
99
- hash: -263292446635961119
133
+ hash: 3090640064352595291
100
134
  requirements: []
101
135
  rubyforge_project:
102
- rubygems_version: 1.8.10
136
+ rubygems_version: 1.8.23
103
137
  signing_key:
104
138
  specification_version: 3
105
139
  summary: A wrapper for text files.
@@ -107,8 +141,9 @@ test_files:
107
141
  - test/annal_integration_test.rb
108
142
  - test/annal_test.rb
109
143
  - test/collection_integration_test.rb
110
- - test/fetch_integration_spec.rb
144
+ - test/fetch_file_integration_spec.rb
111
145
  - test/minitest_helper.rb
146
+ - test/net_file_integration_test.rb
112
147
  - test/parse_integration_test.rb
113
148
  - test/test-dir/.gitkeep
114
149
  - test/test.json