fetching 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 17a2d47d0a5f371c2f183a86e4f0251f8b84d522
4
+ data.tar.gz: 78bd54db29bee8f7a3f86f8e168279e4ee00474e
5
+ SHA512:
6
+ metadata.gz: 04933886fb1e0623087cea84a87da2a2af2c541af9d1a0ada4ad4ae4e4b685c7c0273f156f87483ca5f9cbcf7725a4255b34ef51f6d0d21b31008cd777cca1eb
7
+ data.tar.gz: 347ff59ef74c2076c0514b943d30c3b7a94f5d27b8e4777df5635629bf9e2809db3a9cc2c3d246e994dc628c3269e6e9cff71457a5697ce5d80b42c002ff7075
data/.rubocop.yml ADDED
@@ -0,0 +1,37 @@
1
+ AllCops:
2
+ Include:
3
+ - Gemfile
4
+ - Rakefile
5
+
6
+ Documentation:
7
+ Enabled: false
8
+
9
+ Encoding:
10
+ Enabled: false
11
+
12
+ EmptyLinesAroundBody:
13
+ Enabled: false
14
+
15
+ LineLength:
16
+ Max: 100
17
+
18
+ MethodDefParentheses:
19
+ Enabled: false
20
+
21
+ NumericLiterals:
22
+ Enabled: false
23
+
24
+ RegexpLiteral:
25
+ MaxSlashes: 0
26
+ Exclude:
27
+ - Guardfile
28
+
29
+ SpecialGlobalVars:
30
+ Exclude:
31
+ - fetching.gemspec
32
+
33
+ StringLiterals:
34
+ EnforcedStyle: double_quotes
35
+
36
+ TrailingComma:
37
+ EnforcedStyleForMultiline: comma
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in fetching.gemspec
4
4
  gemspec
data/fetching.gemspec CHANGED
@@ -1,14 +1,14 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
2
+ lib = File.expand_path("../lib", __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'fetching/version'
4
+ require "fetching/version"
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "fetching"
8
8
  spec.version = Fetching::VERSION
9
9
  spec.authors = ["Michael Gee", "Mark Lorenz"]
10
10
  spec.email = ["mgee@covermymeds.com", "mlorenz@covermymeds.com"]
11
- spec.description = %q{More sass in more structs.}
11
+ spec.description = %q(More sass in more structs.)
12
12
 
13
13
  spec.summary = <<-HEREDOC
14
14
  This gem is a work in progress. The implementation code is not what's
@@ -26,7 +26,7 @@ class Fetching
26
26
  def length
27
27
  @table.length
28
28
  end
29
- alias size length
29
+ alias_method :size, :length
30
30
 
31
31
  def reverse
32
32
  Fetching.from @table.reverse
@@ -20,7 +20,7 @@ class Fetching
20
20
  end
21
21
  end
22
22
 
23
- def method_missing key, *args, &block
23
+ def method_missing key, *_args, &_block
24
24
  fail NoMethodError, "#{key} not found\nyou have:\n#{@table.inspect}"
25
25
  end
26
26
 
@@ -1,3 +1,3 @@
1
1
  class Fetching
2
- VERSION = "0.5.0"
2
+ VERSION = "0.6.0"
3
3
  end
data/lib/fetching.rb CHANGED
@@ -4,7 +4,7 @@ require "fetching/fetching_hash"
4
4
 
5
5
  module Kernel
6
6
 
7
- def Fetching(arg)
7
+ def Fetching(arg) # rubocop:disable MethodName
8
8
  Fetching.from(arg)
9
9
  end
10
10
 
@@ -12,26 +12,25 @@ end
12
12
 
13
13
  class Fetching
14
14
 
15
- WHITELIST = %w[ define_singleton_method class object_id
16
- == instance_variables instance_eval
17
- instance_variable_get ]
15
+ WHITELIST = %w(
16
+ class object_id == equal?
17
+ define_singleton_method instance_eval
18
+ respond_to?
19
+ instance_variables instance_variable_get
20
+ )
18
21
 
19
22
  all_methods = instance_methods.map(&:to_s).grep(/\A[^_]/)
20
23
  (all_methods - WHITELIST).each(&method(:undef_method))
21
24
 
22
25
  def self.from(value)
23
- case value
24
- when ->(v) { v.respond_to? :to_ary }
25
- FetchingArray.new(value.to_ary)
26
- when ->(v) { v.respond_to? :to_hash }
27
- FetchingHash.new(value.to_hash)
28
- else
29
- value
30
- end
26
+ return value.to_fetching if value.respond_to? :to_fetching
27
+ return FetchingArray.new(value.to_ary) if value.respond_to? :to_ary
28
+ return FetchingHash.new(value.to_hash) if value.respond_to? :to_hash
29
+ value
31
30
  end
32
31
 
33
- def self.from_json json, closure
34
- from(JSON.parse json).__send__ closure
32
+ def self.from_json json
33
+ from(JSON.parse json)
35
34
  end
36
35
 
37
36
  def initialize table
@@ -46,12 +45,22 @@ class Fetching
46
45
  self.class.hash ^ @table.hash
47
46
  end
48
47
 
48
+ def to_fetching
49
+ self
50
+ end
51
+
49
52
  def to_s
50
53
  @table.to_s
51
54
  end
52
55
 
53
56
  def inspect
54
- "#<#{self.class.name}: @table=#{to_s}>"
57
+ "#<#{self.class.name}: @table=#{@table}>"
58
+ end
59
+
60
+ private
61
+
62
+ def respond_to_missing? _method_name, _include_private = false
63
+ false
55
64
  end
56
65
 
57
66
  end
@@ -2,14 +2,23 @@ require "spec_helper"
2
2
 
3
3
  describe Fetching::FetchingArray do
4
4
 
5
+ specify "a Fetching object as a value" do
6
+ ary = Fetching([1, 2])
7
+ hsh = Fetching(one: 1)
8
+ [ary, hsh].each do |obj|
9
+ fetching_ary = Fetching [obj]
10
+ expect(fetching_ary.first).to equal(obj)
11
+ end
12
+ end
13
+
5
14
  specify "#map" do
6
15
  ary = [1, 2]
7
16
  fetching_ary = Fetching(ary)
8
- expect(fetching_ary.map(&:to_s)).to eq(%w[1 2])
17
+ expect(fetching_ary.map(&:to_s)).to eq(%w(1 2))
9
18
  end
10
19
 
11
20
  specify "Fetching should go deep" do
12
- Fetching([{one: 1}]).each do |element|
21
+ Fetching([{ one: 1 }]).each do |element|
13
22
  expect(element.one).to eq(1)
14
23
  end
15
24
  end
@@ -17,7 +26,7 @@ describe Fetching::FetchingArray do
17
26
  specify "#first" do
18
27
  ary = []
19
28
  sassy_ary = Fetching(ary)
20
- expect{ sassy_ary.first }.to raise_error(IndexError)
29
+ expect { sassy_ary.first }.to raise_error(IndexError)
21
30
  end
22
31
 
23
32
  describe "array methods" do
@@ -25,11 +34,11 @@ describe Fetching::FetchingArray do
25
34
  let(:fetching) { Fetching(array) }
26
35
 
27
36
  describe "#empty?" do
28
- it("should be false"){ expect(fetching.empty?).to be_false }
37
+ it("should be false") { expect(fetching.empty?).to be_false }
29
38
 
30
39
  context "when empty" do
31
40
  let(:array) { [] }
32
- it("should be true"){ expect(fetching.empty?).to be_true }
41
+ it("should be true") { expect(fetching.empty?).to be_true }
33
42
  end
34
43
  end
35
44
 
@@ -50,13 +59,13 @@ describe Fetching::FetchingArray do
50
59
  end
51
60
 
52
61
  specify "#sort" do
53
- sorter = ->(x, y){ y <=> x }
62
+ sorter = ->(x, y) { y <=> x }
54
63
  sorted = Fetching(array.sort(&sorter))
55
64
  expect(fetching.sort(&sorter)).to eq(sorted)
56
65
  end
57
66
 
58
67
  specify "#sort_by" do
59
- sorter = ->(i){ 1/i.to_f }
68
+ sorter = ->(i) { 1.0 / i }
60
69
  sorted = Fetching(array.sort_by(&sorter))
61
70
  expect(fetching.sort_by(&sorter)).to eq(sorted)
62
71
  end
@@ -70,7 +79,7 @@ describe Fetching::FetchingArray do
70
79
  specify "out of bounds" do
71
80
  at = 5
72
81
  expected_message = "index #{at} outside of array bounds: -3...3"
73
- expect{ fetching.values_at(at) }.to raise_error(IndexError, expected_message)
82
+ expect { fetching.values_at(at) }.to raise_error(IndexError, expected_message)
74
83
  end
75
84
  end
76
85
 
@@ -2,8 +2,17 @@ require "spec_helper"
2
2
 
3
3
  describe Fetching::FetchingHash do
4
4
 
5
+ specify "a Fetching object as a value" do
6
+ ary = Fetching([1, 2])
7
+ hsh = Fetching(one: 1)
8
+ [ary, hsh].each do |obj|
9
+ fetching_ary = Fetching key: obj
10
+ expect(fetching_ary.key).to equal(obj)
11
+ end
12
+ end
13
+
5
14
  specify "#to_hash" do
6
- hash = {one: 1, two: 2}
15
+ hash = { one: 1, two: 2 }
7
16
  fetching_hash = Fetching(hash)
8
17
  expect(fetching_hash.to_hash).to eq(hash)
9
18
  end
@@ -16,7 +25,7 @@ describe Fetching::FetchingHash do
16
25
  end
17
26
 
18
27
  specify "#to_hash does a deep copy" do
19
- hash = {one: 1, two: {three: 3}}
28
+ hash = { one: 1, two: { three: 3 } }
20
29
  fetching_hash = Fetching(hash)
21
30
  expect(fetching_hash.to_hash).to eq(hash)
22
31
  end
@@ -3,7 +3,7 @@ require "spec_helper"
3
3
  describe Fetching do
4
4
 
5
5
  let(:input) { { one: 1, two: two, ary: ary, object_ary: object_ary } }
6
- let(:two) { { "two"=>2 } }
6
+ let(:two) { { "two" => 2 } }
7
7
  let(:ary) { [1, 2] }
8
8
  let(:object_ary) { [{}, last_object] }
9
9
  let(:last_object) { { three: 3 } }
@@ -18,22 +18,20 @@ describe Fetching do
18
18
 
19
19
  describe "an unknown hash key" do
20
20
  it "raises NoMethodError" do
21
- expected_message = "not_a_key not found\nyou have:\n{:one=>1, :two=>{\"two\"=>2}, :ary=>[1, 2], :object_ary=>[{}, {:three=>3}]}"
21
+ expected_message = <<-EOM.gsub(/^ +/, "").strip
22
+ not_a_key not found
23
+ you have:
24
+ {:one=>1, :two=>{\"two\"=>2}, :ary=>[1, 2], :object_ary=>[{}, {:three=>3}]}
25
+ EOM
22
26
 
23
- expect{ subject.not_a_key }.to raise_error(NoMethodError, expected_message)
27
+ expect { subject.not_a_key }.to raise_error(NoMethodError, expected_message)
24
28
  end
25
29
  end
26
30
 
27
31
  describe "an unknown array index" do
28
32
  it "raises NoMethodError" do
29
33
  expected_message = "index 3 outside of array bounds: -2...2"
30
- expect{ subject.ary[ary.size + 1] }.to raise_error(IndexError, expected_message)
31
- end
32
- end
33
-
34
- describe "a bad closure" do
35
- it "raises the expected error" do
36
- expect { Fetching.from_json("{}", :not_a_key) }.to raise_error(NoMethodError)
34
+ expect { subject.ary[ary.size + 1] }.to raise_error(IndexError, expected_message)
37
35
  end
38
36
  end
39
37
 
@@ -43,8 +41,15 @@ describe Fetching do
43
41
  end
44
42
 
45
43
  it "has a nice #inspect" do
46
- nice_inspect = "#<Fetching::FetchingHash: @table={:one=>1, :two=>{\"two\"=>2}, :ary=>[1, 2], :object_ary=>[{}, {:three=>3}]}>"
44
+ table = "{:one=>1, :two=>{\"two\"=>2}, :ary=>[1, 2], :object_ary=>[{}, {:three=>3}]}"
45
+ nice_inspect = "#<Fetching::FetchingHash: @table=#{table}>"
47
46
  expect(subject.inspect).to eq(nice_inspect)
48
47
  end
49
48
 
49
+ specify ".from_json" do
50
+ json = '{ "some_key": 1 }'
51
+ expected = Fetching(JSON.parse(json))
52
+ expect(described_class.from_json(json)).to eq(expected)
53
+ end
54
+
50
55
  end
@@ -1,5 +1,5 @@
1
1
  # Adapted from https://github.com/bronson/vim-runtest/blob/master/rspec_formatter.rb.
2
- require 'rspec/core/formatters/base_text_formatter'
2
+ require "rspec/core/formatters/base_text_formatter"
3
3
 
4
4
  class VimFormatter < RSpec::Core::Formatters::BaseTextFormatter
5
5
 
@@ -9,27 +9,27 @@ class VimFormatter < RSpec::Core::Formatters::BaseTextFormatter
9
9
  frame =~ %r{\b(spec/.*_spec\.rb:\d+)(?::|\z)}
10
10
  end
11
11
  message = format_message exception.message
12
- path = format_caller(path || ' ')
13
- output.puts "#{path}: #{example.example_group.description.strip} " +
12
+ path = format_caller(path || " ")
13
+ output.puts "#{path}: #{example.example_group.description.strip} " \
14
14
  "#{example.description.strip}: #{message.strip}" if path
15
15
  end
16
16
 
17
- def example_pending *args; end
17
+ def example_pending *_args; end
18
18
 
19
- def dump_failures *args; end
19
+ def dump_failures *_args; end
20
20
 
21
- def dump_pending *args; end
21
+ def dump_pending *_args; end
22
22
 
23
- def message msg; end
23
+ def message _msg; end
24
24
 
25
- def dump_summary *args; end
25
+ def dump_summary *_args; end
26
26
 
27
- def seed *args; end
27
+ def seed *_args; end
28
28
 
29
29
  private
30
30
 
31
31
  def format_message msg
32
- msg.gsub("\n", ' ')[0, 80]
32
+ msg.gsub("\n", " ")[0, 80]
33
33
  end
34
34
 
35
35
  end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fetching
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
5
- prerelease:
4
+ version: 0.6.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Michael Gee
@@ -10,12 +9,11 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2014-05-09 00:00:00.000000000 Z
12
+ date: 2014-05-18 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: bundler
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
18
  - - ~>
21
19
  - !ruby/object:Gem::Version
@@ -23,7 +21,6 @@ dependencies:
23
21
  type: :development
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
25
  - - ~>
29
26
  - !ruby/object:Gem::Version
@@ -31,49 +28,43 @@ dependencies:
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: rake
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
- - - ! '>='
32
+ - - '>='
37
33
  - !ruby/object:Gem::Version
38
34
  version: '0'
39
35
  type: :development
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
- - - ! '>='
39
+ - - '>='
45
40
  - !ruby/object:Gem::Version
46
41
  version: '0'
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: rspec
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
- - - ! '>='
46
+ - - '>='
53
47
  - !ruby/object:Gem::Version
54
48
  version: '0'
55
49
  type: :development
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
- - - ! '>='
53
+ - - '>='
61
54
  - !ruby/object:Gem::Version
62
55
  version: '0'
63
56
  - !ruby/object:Gem::Dependency
64
57
  name: pry-plus
65
58
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
59
  requirements:
68
- - - ! '>='
60
+ - - '>='
69
61
  - !ruby/object:Gem::Version
70
62
  version: '0'
71
63
  type: :development
72
64
  prerelease: false
73
65
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
66
  requirements:
76
- - - ! '>='
67
+ - - '>='
77
68
  - !ruby/object:Gem::Version
78
69
  version: '0'
79
70
  description: More sass in more structs.
@@ -85,6 +76,7 @@ extensions: []
85
76
  extra_rdoc_files: []
86
77
  files:
87
78
  - .gitignore
79
+ - .rubocop.yml
88
80
  - Gemfile
89
81
  - LICENSE.txt
90
82
  - README.md
@@ -102,28 +94,27 @@ files:
102
94
  homepage: ''
103
95
  licenses:
104
96
  - MIT
97
+ metadata: {}
105
98
  post_install_message:
106
99
  rdoc_options: []
107
100
  require_paths:
108
101
  - lib
109
102
  required_ruby_version: !ruby/object:Gem::Requirement
110
- none: false
111
103
  requirements:
112
- - - ! '>='
104
+ - - '>='
113
105
  - !ruby/object:Gem::Version
114
106
  version: '0'
115
107
  required_rubygems_version: !ruby/object:Gem::Requirement
116
- none: false
117
108
  requirements:
118
- - - ! '>='
109
+ - - '>='
119
110
  - !ruby/object:Gem::Version
120
111
  version: '0'
121
112
  requirements: []
122
113
  rubyforge_project:
123
- rubygems_version: 1.8.25
114
+ rubygems_version: 2.0.6
124
115
  signing_key:
125
- specification_version: 3
126
- summary: ! 'This gem is a work in progress. The implementation code is not what''s
116
+ specification_version: 4
117
+ summary: 'This gem is a work in progress. The implementation code is not what''s
127
118
  important. What is important: Don''t de-serialize API responses in to hashes and
128
119
  arrays. Use a "strict" object that inforces key presence, and array bounds.}'
129
120
  test_files: