ganesha 0.0.1.alpha → 0.0.2.alpha

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2c42b2853bd639bf3e9d8a5b7ec46eb78ed1140f
4
- data.tar.gz: f68e1b285555c94839b4bdeb2fb76e5c80a218e2
3
+ metadata.gz: af2575ba215fa37cc13e8ef1521e696e3404aebc
4
+ data.tar.gz: e25d312d6bef55e547d22b75c7f96e385616bdcc
5
5
  SHA512:
6
- metadata.gz: 242c9ab73bb67ce8e5b97003567b1037228f27100f072c5f8cfe0ade7f9258669d6b6b333a6d4e6a1e0850f7c36d2e353b29eb2b92962a1732edef2388678917
7
- data.tar.gz: 46491599f843c48ff320fd7ad598cf32256d675a45fac5ff0088e219f61f8722f0ef60575b9aeea6b213ffcbcfa709d36ea450615c7274328b216779d4973be2
6
+ metadata.gz: c907e9d835d7a14c1baf0039be5f0d8a71c5c69ff63eccf1db60c0a0ed258aab0b522d4dbaf52e58d05406f512eaa2269e72841b4f988bf91f906d4b1bf98c14
7
+ data.tar.gz: 983ab60285e3ac247c7b5c224c5e8252a9f97a524c8ea3dcbbbe6d83f1bae8c8ec04b908d6c97a2cf0c31fefeb0b67d0184b1b1d295dedb568fa4a43356e149d
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["fabianobeselga@gmail.com"]
11
11
  spec.summary = %q{ Remember and share your links with your team on a weekly basis. }
12
12
  spec.description = spec.summary
13
- spec.homepage = ""
13
+ spec.homepage = "https://github.com/bezelga/ganesha"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
@@ -21,4 +21,6 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.5"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency "timecop"
25
+ spec.add_development_dependency "pry"
24
26
  end
@@ -1,5 +1,26 @@
1
- require "ganesha/version"
1
+ require 'ganesha/version'
2
+ require 'ganesha/entities/link'
3
+ require 'ganesha/repository'
4
+ require 'ganesha/repositories/links_in_memory'
5
+ require 'ganesha/use_cases/save_link'
6
+ require 'ganesha/use_cases/current_links'
7
+ require 'ganesha/use_cases/links_between'
8
+ #Dir[File.dirname(__FILE__) + "/ganesha/use_cases/**/*.rb"].each { |file| require file }
9
+
10
+ Repository.register :links, Ganesha::Repositories::LinksInMemory.new
2
11
 
3
12
  module Ganesha
4
- # Your code goes here...
13
+ class << self
14
+ def save_link(args)
15
+ UseCases::SaveLink.new(args).save
16
+ end
17
+
18
+ def links_between(args)
19
+ UseCases::LinksBetween.new(args).links
20
+ end
21
+
22
+ def current_links
23
+ UseCases::CurrentLinks.new.links
24
+ end
25
+ end
5
26
  end
@@ -0,0 +1,29 @@
1
+ module Ganesha
2
+ module Entities
3
+ class Link
4
+ attr_accessor :id
5
+ attr_reader :url, :title, :created_at
6
+
7
+ def initialize(args)
8
+ @url = args.fetch(:url, '')
9
+ @title = args.fetch(:title, '')
10
+ @created_at = args.fetch(:created_at) { Time.now }
11
+ end
12
+
13
+ # TODO: tell which field is not present if invalid
14
+ def valid?
15
+ url_present? && title_present?
16
+ end
17
+
18
+ private
19
+
20
+ def url_present?
21
+ url && !url.empty?
22
+ end
23
+
24
+ def title_present?
25
+ title && !title.empty?
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,35 @@
1
+ module Ganesha
2
+ module Repositories
3
+ class LinksInMemory
4
+ attr_reader :links, :next_id
5
+
6
+ def initialize
7
+ @links = {}
8
+ @next_id = 1
9
+ end
10
+
11
+ def all
12
+ links.values
13
+ end
14
+
15
+ def between(from, to)
16
+ range = from..to
17
+
18
+ all.select do |link|
19
+ range.cover? link.created_at.to_date
20
+ end
21
+ end
22
+
23
+ def save(link)
24
+ link.id = next_id
25
+ links[next_id] = link
26
+ @next_id += 1
27
+ link
28
+ end
29
+
30
+ def count
31
+ links.length
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,13 @@
1
+ class Repository
2
+ def self.register(type, repo)
3
+ repositories[type] = repo
4
+ end
5
+
6
+ def self.for(type)
7
+ repositories[type]
8
+ end
9
+
10
+ def self.repositories
11
+ @_repos ||= {}
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ module Ganesha
2
+ module UseCases
3
+ class CurrentLinks
4
+ def links
5
+ links_repo.all
6
+ end
7
+
8
+ private
9
+
10
+ def links_repo
11
+ Repository.for(:links)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,22 @@
1
+ module Ganesha
2
+ module UseCases
3
+ class LinksBetween
4
+ attr_reader :from, :to
5
+
6
+ def initialize(args)
7
+ @from = args.fetch(:from)
8
+ @to = args.fetch(:to)
9
+ end
10
+
11
+ def links
12
+ links_repo.between(from, to)
13
+ end
14
+
15
+ private
16
+
17
+ def links_repo
18
+ Repository.for(:links)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,26 @@
1
+ module Ganesha
2
+ module UseCases
3
+ class SaveLink
4
+ attr_reader :args
5
+
6
+ def initialize(args)
7
+ @args = args
8
+ end
9
+
10
+ def save
11
+ return false unless link.valid?
12
+ links_repo.save(link)
13
+ end
14
+
15
+ private
16
+
17
+ def link
18
+ Entities::Link.new(args)
19
+ end
20
+
21
+ def links_repo
22
+ Repository.for(:links)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,3 +1,3 @@
1
1
  module Ganesha
2
- VERSION = "0.0.1.alpha"
2
+ VERSION = "0.0.2.alpha"
3
3
  end
@@ -2,6 +2,8 @@
2
2
  # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
3
  # Require this file using `require "spec_helper"` to ensure that it is only
4
4
  # loaded once.
5
+ require 'ganesha'
6
+ require 'pry'
5
7
  #
6
8
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
9
  RSpec.configure do |config|
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+ require 'timecop'
3
+
4
+ describe Ganesha::UseCases::CurrentLinks do
5
+
6
+ describe '#links' do
7
+ subject(:links) { described_class.new.links }
8
+ let(:links_repo) { Repository.for(:links) }
9
+
10
+ let(:today) { Date.new(2013, 2, 14) }
11
+
12
+ before do
13
+ Timecop.freeze(today)
14
+ end
15
+
16
+ after do
17
+ Timecop.return
18
+ end
19
+
20
+ let!(:link1) { Ganesha.save_link({ url: 'www.something.com', title: 'Something', created_at: Date.new(2013, 2, 1) }) }
21
+ let!(:link2) { Ganesha.save_link({ url: 'www.something.com', title: 'Something', created_at: Date.new(2013, 2, 13) }) }
22
+
23
+ xit 'returns the current week links' do
24
+ should == [link2]
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+ require 'timecop'
3
+
4
+ describe Ganesha::UseCases::LinksBetween do
5
+ describe '#links' do
6
+ subject(:links) { described_class.new({ from: from, to: to }).links }
7
+ let(:links_repo) { Repository.for(:links) }
8
+
9
+ let(:today) { Date.new(2013, 2, 14) }
10
+
11
+ before do
12
+ Timecop.freeze(today)
13
+ end
14
+
15
+ after do
16
+ Timecop.return
17
+ end
18
+
19
+ let!(:link1) { Ganesha.save_link({ url: 'www.something.com', title: 'Something', created_at: Date.new(2013, 2, 1) }) }
20
+ let!(:link2) { Ganesha.save_link({ url: 'www.something.com', title: 'Something', created_at: Date.new(2013, 2, 13) }) }
21
+
22
+
23
+ context 'fetching the current week' do
24
+ let(:from) { Date.new(2013, 2, 10) }
25
+ let(:to) { Date.new(2013, 2, 14) }
26
+
27
+ it { should == [link2] }
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ganesha::UseCases::SaveLink do
4
+
5
+ describe '#save' do
6
+ subject(:save) { described_class.new({ url: url, title: title }).save }
7
+
8
+ let(:url) { 'https://github.com/bezelga/ganesha' }
9
+ let(:title) { 'Ganesha' }
10
+ let(:links_repo) { Repository.for(:links) }
11
+
12
+ context 'when all params are valid' do
13
+ it 'saves the link' do
14
+ expect { save }.to change { links_repo.count }.by(1)
15
+ end
16
+
17
+ # TODO: test using timecop or doleroean
18
+ its(:created_at) { should_not be_nil }
19
+ end
20
+
21
+ context 'when the url is blank' do
22
+ let(:url) { '' }
23
+
24
+ it 'does not save the link' do
25
+ expect { save }.to_not change { links_repo.count }
26
+ end
27
+
28
+ it { should be_false }
29
+ end
30
+
31
+ context 'when the title is blank' do
32
+ let(:title) { '' }
33
+
34
+ it 'does not save the link' do
35
+ expect { save }.to_not change { links_repo.count }
36
+ end
37
+
38
+ it { should be_false }
39
+ end
40
+
41
+ context 'when url is nil' do
42
+ let(:url) { nil }
43
+
44
+ it 'does not save the link' do
45
+ expect { save }.to_not change { links_repo.count }
46
+ end
47
+
48
+ it { should be_false }
49
+ end
50
+ end
51
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ganesha
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.alpha
4
+ version: 0.0.2.alpha
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabiano B.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-10 00:00:00.000000000 Z
11
+ date: 2014-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: timecop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  description: Remember and share your links with your team on a weekly basis.
56
84
  email:
57
85
  - fabianobeselga@gmail.com
@@ -67,9 +95,18 @@ files:
67
95
  - Rakefile
68
96
  - ganesha.gemspec
69
97
  - lib/ganesha.rb
98
+ - lib/ganesha/entities/link.rb
99
+ - lib/ganesha/repositories/links_in_memory.rb
100
+ - lib/ganesha/repository.rb
101
+ - lib/ganesha/use_cases/current_links.rb
102
+ - lib/ganesha/use_cases/links_between.rb
103
+ - lib/ganesha/use_cases/save_link.rb
70
104
  - lib/ganesha/version.rb
71
105
  - spec/spec_helper.rb
72
- homepage: ''
106
+ - spec/use_cases/current_links_spec.rb
107
+ - spec/use_cases/links_between_spec.rb
108
+ - spec/use_cases/save_link_spec.rb
109
+ homepage: https://github.com/bezelga/ganesha
73
110
  licenses:
74
111
  - MIT
75
112
  metadata: {}
@@ -95,3 +132,6 @@ specification_version: 4
95
132
  summary: Remember and share your links with your team on a weekly basis.
96
133
  test_files:
97
134
  - spec/spec_helper.rb
135
+ - spec/use_cases/current_links_spec.rb
136
+ - spec/use_cases/links_between_spec.rb
137
+ - spec/use_cases/save_link_spec.rb