extracare2of 0.2 → 0.3

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: d174fbafa72c46930ecc9a9b8bb6de7d1f31a935
4
- data.tar.gz: 07364580e6775bc782038da7cdcbbaacbd184354
3
+ metadata.gz: 2fab3c2c7a497c7b1b7778109a835070383e6d10
4
+ data.tar.gz: 0f6b388cf9ea330d863798b0a52904b6ff99da13
5
5
  SHA512:
6
- metadata.gz: 1f4dfd3c0818b0178869f2a6bb2d434d0750b2a5dff458817882d8092903e115b41c69f5793bc353c82c1645c3605e5a44e401c014b39523a894b1c3ec302665
7
- data.tar.gz: eb25c94b7957907b398d4ed0550b88eace0b4fffd4575940c2ccfeca0170362d67d04d187f29639405e369df887264a9fe5be06dc9931a4c99b3adc6cec13187
6
+ metadata.gz: 32bd39e2db40297bfe8837c1059aa46181e3cf8fef31ce0b3660c19f130db13ea82b83f7ae7a78c333c497089e52ea61a6c098deef5a72c08db22a3896382c6e
7
+ data.tar.gz: cda676df9026377c41d9ae158bdae7403c7a55bbc4b1def0aa0fd22626142566ce725a8bea796068c23e71258d4a6bad6db8dc95033d764bc68d583e97f27a3b
data/.gitignore CHANGED
@@ -1 +1,2 @@
1
1
  Gemfile.lock
2
+ .ruby-version
@@ -1 +1 @@
1
- 2.1.1
1
+ ruby-2.1.1
data/README.md CHANGED
@@ -12,23 +12,35 @@ This script performs the following actions:
12
12
  + Checks coupons against the database for previously imported coupons
13
13
  + Sends every new coupon to the task manager of your choice
14
14
 
15
- ## Code Example
15
+ ## Usage
16
16
 
17
- $ ruby bin/extracare2of username password
17
+ $ extracare2of
18
18
  $ Looking for coupons...
19
19
  $ ----
20
20
  $ Title: 10% off skincare products
21
21
  $ - Due Date: 8/10/2013
22
22
  $ - Start Date: 8/1/2013
23
23
  $ - Note: Reedemable in-store only
24
-
24
+
25
25
 
26
26
 
27
27
  ## Installation
28
28
 
29
- Bundle install
29
+ gem install extracare2of
30
+
31
+ ## Configuration
32
+
33
+ Config file is location at `~/.extracare2of/config/config.yml`.
34
+ Here you can change which todo manager you use.
35
+
36
+ ---
37
+ :services:
38
+ :use_omnifocus: true
39
+ :use_reminders: false
40
+ :use_things: false
41
+ :use_dueapp: false
30
42
 
31
- Edit `config/config.yml` to choose which reminder app you'd like to use.
43
+ The first time you run `extracare2of` you will be prompted for a username and password. The session will then be serialized and stored in `~/.extracare2of/config/session.yml`. Your password is not saved in plaintext. You will then be able to use this without having to log in again.
32
44
 
33
45
  ## Todo
34
46
 
@@ -1,7 +1,10 @@
1
1
  #!/usr/bin/ruby
2
2
 
3
- require_relative '../lib/extracare2of.rb'
4
- username = ARGV[0]
5
- password = ARGV[1]
6
- runner = ExtraCare2OF::Runner.new(username: username, password: password)
7
- runner.run
3
+ require 'extracare2of'
4
+ runner = Extracare2of::Runner.new
5
+
6
+ if ARGV[0] == "init"
7
+ runner.init
8
+ else
9
+ runner.run
10
+ end
Binary file
@@ -5,7 +5,7 @@ require 'extracare2of/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "extracare2of"
8
- spec.version = ExtraCare2OF::VERSION
8
+ spec.version = Extracare2of::VERSION
9
9
  spec.authors = ["Nick Prokesch"]
10
10
  spec.email = ["nick@prokes.ch"]
11
11
  spec.summary = %q{send CVS ExtraCare coupon reminders to OmniFocus}
@@ -1,23 +1,42 @@
1
- module ExtraCare2OF
1
+ require 'highline/import'
2
+
3
+ module Extracare2of
2
4
  class Authentication
3
5
  attr_reader :hash
4
6
 
5
- def initialize(args)
6
- @username = args[:username]
7
- @password = args[:password]
8
- @agent = Mechanize.new
7
+ def initialize(*)
8
+ load_session if session_exists?
9
+ authenticate unless session_exists?
9
10
  @hash = Hash.new
10
11
  end
11
12
 
13
+ def session_exists?
14
+ File.exist?("#{ENV['HOME']}/.extracare2of/session.yml")
15
+ end
16
+
17
+ def load_session
18
+ session_file = open("#{ENV['HOME']}/.extracare2of/session.yml")
19
+ @agent = Mechanize.new do |a|
20
+ a.cookie_jar = YAML.load(session_file)
21
+ end
22
+ end
23
+
24
+ def authenticate
25
+ @agent = Mechanize.new
26
+ login
27
+ open("#{ENV['HOME']}/.extracare2of/session.yml", 'w') { |f|
28
+ f.puts @agent.cookie_jar.to_yaml
29
+ }
30
+ end
31
+
12
32
  def login
13
33
  page = @agent.get("https://m.cvs.com/mt/www.cvs.com/account/login.jsp")
14
34
  form = page.forms.first
15
- form['/atg/userprofiling/ProfileFormHandler.value.login'] = @username
16
- form['/atg/userprofiling/ProfileFormHandler.value.password'] = @password
35
+ form['/atg/userprofiling/ProfileFormHandler.value.login'] = ask("username: ")
36
+ form['/atg/userprofiling/ProfileFormHandler.value.password'] = ask("password: ")
17
37
  page = form.submit
18
38
  @page = page
19
39
  sleep 3
20
- # puts page.parser.xpath("//body").to_html
21
40
  end
22
41
 
23
42
  def request(link, request_id)
@@ -1,42 +1,28 @@
1
1
  require 'sqlite3'
2
2
 
3
- module ExtraCare2OF
3
+ module Extracare2of
4
4
  class Database
5
5
  attr_accessor :add_user
6
6
  attr_reader :add_user
7
7
 
8
- def initialize(args)
9
- @handle = args[ :username]
10
- open
11
- create_tables
12
- tasks
8
+ def initialize
9
+ @handle = `whoami`
10
+ db_path = "#{ENV['HOME']}/.extracare2of/db/coupons.db"
11
+ create_db unless File.exist?(db_path)
12
+ @db = SQLite3::Database.new( db_path )
13
13
  end
14
14
 
15
- def tasks
16
- begin
17
- # @db.execute("alter table matches add column emailed integer")
18
- rescue
19
- end
20
- end
21
-
22
- def create_tables
23
- begin
24
- @db.execute("CREATE TABLE coupons(
15
+ def create_db
16
+ `mkdir -p ~/.extracare2of/db`
17
+ `mkdir -p ~/.extracare2of/config`
18
+ `touch ~/.extracare2of/db/coupons.db`
19
+ @db.execute("CREATE TABLE coupons(
25
20
  id integer,
26
21
  name text,
27
22
  due_date integer,
28
23
  start_date text,
29
24
  handle text,
30
- PRIMARY KEY(id)
31
- )
32
- ")
33
- rescue
34
- end
35
- end
36
-
37
-
38
- def open
39
- @db = SQLite3::Database.new( "./db/coupons.db" )
25
+ PRIMARY KEY(id))")
40
26
  end
41
27
 
42
28
  def close
@@ -44,18 +30,20 @@ module ExtraCare2OF
44
30
  end
45
31
 
46
32
  def add_coupon(args)
47
-
48
33
  name = args[:name].to_s
49
34
  due_date = args[:due_date].to_s
50
35
  start_date = args[:start_date].to_s
51
- unless coupon_exists?(name)
52
- # begin
53
- @db.execute("insert into coupons(name, due_date, start_date, handle) values (?,?,?,?)", name, due_date, start_date, @handle)
54
- end
36
+ return false if coupon_exists?(name)
37
+ @db.execute(
38
+ "insert into coupons(
39
+ name, due_date, start_date, handle
40
+ ) values (?,?,?,?)",
41
+ name, due_date, start_date, @handle
42
+ )
55
43
  end
56
44
 
57
45
  def coupon_exists?(name)
58
- temp = @db.execute( "select 1 where exists(
46
+ @db.execute( "select 1 where exists(
59
47
  select 1
60
48
  from coupons
61
49
  where name = ?
@@ -1,18 +1,19 @@
1
1
 
2
- module ExtraCare2OF
2
+ module Extracare2of
3
3
  class Runner
4
4
 
5
- def initialize(args)
6
- @username = args[:username]
7
- @password = args[:password]
8
- @db = ExtraCare2OF::Database.new(username: @username)
9
- @browser = ExtraCare2OF::Authentication.new(username: @username, password: @password)
5
+ def initialize(*)
6
+ @db = Extracare2of::Database.new
7
+ @browser = Extracare2of::Authentication.new
10
8
  @settings = Settings.new
11
- @browser.login
12
9
  @count = 0
13
10
  # p @rewards_source
14
11
  end
15
12
 
13
+ def init
14
+ @browser.authenticate
15
+ end
16
+
16
17
  def async_response(url)
17
18
  request_id = Time.now.to_i
18
19
  @browser.request(url, request_id)
@@ -37,7 +38,7 @@ module ExtraCare2OF
37
38
  due_date = deal[1]
38
39
  note = deal[2]
39
40
  # defer_date = deal[3]
40
- @deals_array.push({:name => name,:due_date => parse_date(due_date), :defer_date => Time.now, :note => note})
41
+ @deals_array.push({name: name,due_date: parse_date(due_date), defer_date: Time.now, note: note})
41
42
  end
42
43
  @deals_array
43
44
  end
@@ -63,7 +64,7 @@ module ExtraCare2OF
63
64
  days = (60 * 60 * 24 * $1.to_i)
64
65
  newdate = Time.now + days
65
66
  else
66
- newdate = Chronic.parse(datestring, {:context => :future, :ambiguous_time_range => 8})
67
+ newdate = Chronic.parse(datestring, {context: :future, ambiguous_time_range: 8})
67
68
  end
68
69
  # parsed = newdate.strftime('%D %l:%M%p').gsub(/\s+/,' ');
69
70
  # return parsed =~ /1969/ ? false : parsed
@@ -72,19 +73,18 @@ module ExtraCare2OF
72
73
 
73
74
  def process_coupon(coupon)
74
75
  # puts " - Sending #{get_coupons.size} tasks to OF"
75
- unless @db.coupon_exists?(coupon[:name])
76
- @db.add_coupon(name: coupon[:name], due_date: coupon[:due_date], defer_date: coupon[:defer_date])
77
- puts "----"
78
- puts " Title: #{coupon[:name]}"
79
- puts " - Due Date: #{coupon[:due_date]}"
80
- puts " - Start Date: #{coupon[:defer_date]}"
81
- puts " - Note: #{coupon[:note]}"
82
- CreateTask::OmniFocus.new(coupon.to_hash) if @settings.use_omnifocus
83
- CreateTask::Reminders.new(coupon.to_hash) if @settings.use_reminders
84
- CreateTask::Things.new(coupon.to_hash) if @settings.use_things
85
- CreateTask::DueApp.new(coupon.to_hash) if @settings.use_dueapp
86
- # Services::Reminders.new(coupon.to_hash)
87
- end
76
+ return false if @db.coupon_exists?(coupon[:name])
77
+ @db.add_coupon(name: coupon[:name], due_date: coupon[:due_date], defer_date: coupon[:defer_date])
78
+ puts "----"
79
+ puts " Title: #{coupon[:name]}"
80
+ puts " - Due Date: #{coupon[:due_date]}"
81
+ puts " - Start Date: #{coupon[:defer_date]}"
82
+ puts " - Note: #{coupon[:note]}"
83
+ CreateTask::OmniFocus.new(coupon.to_hash) if @settings.use_omnifocus
84
+ CreateTask::Reminders.new(coupon.to_hash) if @settings.use_reminders
85
+ CreateTask::Things.new(coupon.to_hash) if @settings.use_things
86
+ CreateTask::DueApp.new(coupon.to_hash) if @settings.use_dueapp
87
+ # Services::Reminders.new(coupon.to_hash)
88
88
  end
89
89
 
90
90
 
@@ -97,10 +97,6 @@ module ExtraCare2OF
97
97
  else
98
98
  puts "No new coupons found."
99
99
  end
100
- # puts "Sending extra bucks to card"
101
- # send_bucks_to_card
102
- # puts "Done"
103
- # exit
104
100
  end
105
101
 
106
102
  end
@@ -1,9 +1,9 @@
1
- module ExtraCare2OF
1
+ module Extracare2of
2
2
  class Settings
3
3
  attr_reader :debug, :use_omnifocus, :use_reminders, :use_things, :use_dueapp
4
4
 
5
5
  def initialize
6
- @filename = File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "config", "config.yml"))
6
+ @filename = "#{ENV['HOME']}/.extracare2of/config/config.yml"
7
7
  unless File.exists?(@filename)
8
8
  config = {services: {
9
9
  :use_omnifocus => true,
@@ -1,3 +1,3 @@
1
- module ExtraCare2OF
2
- ExtraCare2OF::VERSION = 0.2
1
+ module Extracare2of
2
+ VERSION = "0.3"
3
3
  end
@@ -6,8 +6,8 @@ require 'chronic'
6
6
  require 'mechanize'
7
7
  require 'open-uri'
8
8
 
9
- module ExtraCare2OF
10
- Dir[File.dirname(__FILE__) + '/extracare2of/*.rb'].each do |file|
9
+ module Extracare2of
10
+ Dir[File.dirname(__FILE__) + '/extracare2of/*.rb'].each do |file|
11
11
  require file
12
12
  end
13
- end
13
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: extracare2of
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.2'
4
+ version: '0.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Prokesch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-19 00:00:00.000000000 Z
11
+ date: 2015-09-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mechanize
@@ -108,8 +108,8 @@ files:
108
108
  - Gemfile
109
109
  - README.md
110
110
  - bin/extracare2of
111
- - config/config.yml
112
111
  - db/coupons.db
112
+ - extracare2of-0.2.gem
113
113
  - extracare2of.gemspec
114
114
  - lib/ExtraCare2OF/authentication.rb
115
115
  - lib/ExtraCare2OF/database.rb
@@ -1,6 +0,0 @@
1
- ---
2
- :services:
3
- :use_omnifocus: true
4
- :use_reminders: false
5
- :use_things: false
6
- :use_dueapp: false