dca 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -16,7 +16,7 @@ require 'jeweler'
16
16
  Jeweler::Tasks.new do |gem|
17
17
  # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
18
18
  gem.name = "dca"
19
- gem.homepage = "http://github.com/maxkazargm@gmail.com/dca"
19
+ gem.homepage = "http://github.com/maxkazar/dca"
20
20
  gem.license = "MIT"
21
21
  gem.summary = %Q{DCA}
22
22
  gem.description = %Q{DCA}
@@ -45,4 +45,4 @@ YARD::Rake::YardocTask.new
45
45
 
46
46
  SYS_ENV = 'development'
47
47
  require './lib/dca'
48
- require 'resque/tasks'
48
+ require 'resque/tasks'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "dca"
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Maxim Kazarin"]
12
- s.date = "2012-07-28"
12
+ s.date = "2012-08-10"
13
13
  s.description = "DCA"
14
14
  s.email = "maxkazargm@gmail.com"
15
15
  s.executables = ["dca"]
@@ -88,7 +88,7 @@ Gem::Specification.new do |s|
88
88
  "spec/spec_helper.rb",
89
89
  "spec/support/storage_examples.rb"
90
90
  ]
91
- s.homepage = "http://github.com/maxkazargm@gmail.com/dca"
91
+ s.homepage = "http://github.com/maxkazar/dca"
92
92
  s.licenses = ["MIT"]
93
93
  s.require_paths = ["lib"]
94
94
  s.rubygems_version = "1.8.24"
@@ -101,7 +101,7 @@ module DCA
101
101
  ops[:err] = debug_file
102
102
  ops[:out] = debug_file
103
103
  end
104
- env_vars = {'QUEUE' => queue}
104
+ env_vars = {'QUEUE' => queue, 'SYS_ENV' => SYS_ENV}
105
105
 
106
106
  count.times {
107
107
  ## Using Kernel.spawn and Process.detach because regular system() call would
@@ -1,3 +1,5 @@
1
+ SYS_ENV = ENV['SYS_ENV'] if ENV['SYS_ENV']
2
+
1
3
  SYS_ENV = 'development' unless defined? SYS_ENV
2
4
 
3
5
  unless defined? APP_CONFIG
@@ -33,7 +33,12 @@ module DCA
33
33
  type = params[:type]
34
34
  type = find_type object, params[:field], options[:polymorphic] if type.nil? || options[:polymorphic]
35
35
 
36
- result = content.css(selector).map { |node| type.new.bind node } unless selector.nil?
36
+ unless selector.nil?
37
+ result = content.css(selector)
38
+ result = object.send(options[:parser], result) unless options[:parser].nil?
39
+
40
+ result = result.map { |node| type.new.bind node } unless result.nil?
41
+ end
37
42
  result
38
43
  end
39
44
 
@@ -5,7 +5,7 @@ module DCA
5
5
  def initialize(connection, context, options = {})
6
6
  @connection = connection
7
7
  @index = options[:index] || DCA.project_name.underscore
8
- @type = options[:type] || context.to_s.demodulize.downcase.pluralize
8
+ @type = options[:type] || get_alias(context)
9
9
  end
10
10
 
11
11
  def self.establish_connection(config)
@@ -13,7 +13,6 @@ module DCA
13
13
  Tire.configure { url "http://#{config[:host]}:#{config[:port]}" }
14
14
  end
15
15
 
16
-
17
16
  def state position
18
17
  item = find position
19
18
  return :create if item.nil?
@@ -26,7 +25,7 @@ module DCA
26
25
 
27
26
  def find position
28
27
  return nil if position.base_id.nil?
29
- query = Tire.search(@index, :type => type) { query { term :base_id, position.base_id } }
28
+ query = Tire.search(@index, type: type) { query { term :base_id, position.base_id } }
30
29
  query.results.first
31
30
  end
32
31
 
@@ -36,8 +35,7 @@ module DCA
36
35
 
37
36
  def create(item)
38
37
  item.updated_at = item.created_at = Time.now.utc
39
- data = item.to_hash
40
- data[:type] = type
38
+ data = hash_from item
41
39
 
42
40
  result = Tire.index(@index).store data
43
41
  Tire.index(@index).refresh
@@ -46,9 +44,7 @@ module DCA
46
44
  end
47
45
 
48
46
  def update(item)
49
- data = item.to_hash
50
- data[:type] = type
51
-
47
+ data = hash_from item
52
48
  Tire.index(@index) do
53
49
  store data
54
50
  refresh
@@ -56,8 +52,7 @@ module DCA
56
52
  end
57
53
 
58
54
  def remove(item)
59
- data = item.to_hash
60
- data[:type] = type
55
+ data = hash_from item
61
56
 
62
57
  Tire.index(@index) do
63
58
  remove data
@@ -73,8 +68,22 @@ module DCA
73
68
 
74
69
  def context object
75
70
  result = self.clone
76
- result.instance_variable_set :@type, object.to_s.demodulize.downcase.pluralize
71
+ result.instance_variable_set :@type, get_alias(object)
77
72
  result
78
73
  end
74
+
75
+ private
76
+
77
+ def hash_from(item)
78
+ data = item.to_hash
79
+ data[:_id] = data[:id] if data[:id]
80
+ data.delete(:id)
81
+ data[:type] = type
82
+ data
83
+ end
84
+
85
+ def get_alias object
86
+ object.respond_to?(:alias) ? object.alias : object.to_s.demodulize.downcase.pluralize
87
+ end
79
88
  end
80
89
  end
@@ -5,7 +5,7 @@ module DCA
5
5
  def initialize(connection, context, options = {})
6
6
  @database = connection.db(options[:database] || DCA.project_name.underscore)
7
7
  @connection = connection
8
- @collection = database.collection(options[:collection] || context.to_s.demodulize.downcase.pluralize)
8
+ @collection = database.collection(options[:collection] || get_alias(context))
9
9
  end
10
10
 
11
11
  def self.establish_connection(config)
@@ -31,11 +31,11 @@ module DCA
31
31
  end
32
32
 
33
33
  def create(item)
34
- item.id = collection.insert item.to_hash
34
+ item.id = collection.insert hash_from item
35
35
  end
36
36
 
37
37
  def update(item)
38
- collection.update({_id: item.id}, item.to_hash)
38
+ collection.update({_id: item.id}, hash_from(item))
39
39
  end
40
40
 
41
41
  def remove(item)
@@ -44,8 +44,20 @@ module DCA
44
44
 
45
45
  def context object
46
46
  result = self.clone
47
- result.instance_variable_set :@collection, result.database.collection(object.to_s.demodulize.downcase.pluralize)
47
+ result.instance_variable_set :@collection, result.database.collection(get_alias object)
48
48
  result
49
49
  end
50
+
51
+ private
52
+
53
+ def hash_from(item)
54
+ data = item.to_hash
55
+ data.delete(:id)
56
+ data
57
+ end
58
+
59
+ def get_alias object
60
+ object.respond_to?(:alias) ? object.alias : object.to_s.demodulize.downcase.pluralize
61
+ end
50
62
  end
51
63
  end
@@ -64,6 +64,22 @@ describe 'Binder' do
64
64
  page.bind Nokogiri::HTML open('./spec/fixtures/page.html')
65
65
 
66
66
  page.positions.should have(6).items
67
+ end
68
+
69
+ describe 'parser option' do
70
+ it 'should be used for has_many association' do
71
+ page = Mock::PageExt.new :category => :full
72
+ page.should_receive(:positions_parser)
73
+ page.bind Nokogiri::HTML open('./spec/fixtures/page.html')
74
+ end
67
75
 
76
+ it 'should change items collections for has_many association' do
77
+ page = Mock::PageExt.new :category => :full
78
+ page.should_receive(:positions_parser) do |items|
79
+ items[0,2]
80
+ end
81
+ page.bind Nokogiri::HTML open('./spec/fixtures/page.html')
82
+ page.positions.should have(2).items
83
+ end
68
84
  end
69
85
  end
@@ -7,7 +7,11 @@ module DCA
7
7
 
8
8
  class PageExt < DCA::Models::BaseModel
9
9
  attr_accessor :category
10
- has_many :positions, :selector => 'li', :polymorphic => :category, :append => true
10
+ has_many :positions, :selector => 'li', polymorphic: :category, append: true, parser: :positions_parser
11
+
12
+ def positions_parser items
13
+ items
14
+ end
11
15
  end
12
16
  end
13
17
  end
@@ -11,17 +11,17 @@ module DCA
11
11
  class Position < DCA::Models::Position
12
12
  attr_accessor :raise, :failed, :title
13
13
 
14
- has_one :base_id, :integer, :selector => 'a', :attribute => :href, :regex => /(\d+)$/
15
- has_one :title, :string, :selector => 'a'
14
+ has_one :base_id, :integer, selector: 'a', attribute: :href, regex: /(\d+)$/
15
+ has_one :title, :string, selector: 'a'
16
16
  end
17
17
 
18
18
  class ExtPosition < Position
19
- has_one :description, :string, :selector => 'span.description'
20
- has_one :date, :datetime, :selector => 'span.date'
19
+ has_one :description, :string, selector: 'span.description'
20
+ has_one :date, :datetime, selector: 'span.date'
21
21
  end
22
22
 
23
23
  class FullPosition < Position
24
- has_one :base_id, :string, :selector => 'a'
24
+ has_one :base_id, :string, selector: 'a'
25
25
  end
26
26
 
27
27
  class ChildPosition < DCA::Models::Position
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dca
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-28 00:00:00.000000000 Z
12
+ date: 2012-08-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ohm
@@ -377,7 +377,7 @@ files:
377
377
  - spec/redis_notifier_spec.rb
378
378
  - spec/spec_helper.rb
379
379
  - spec/support/storage_examples.rb
380
- homepage: http://github.com/maxkazargm@gmail.com/dca
380
+ homepage: http://github.com/maxkazar/dca
381
381
  licenses:
382
382
  - MIT
383
383
  post_install_message:
@@ -392,7 +392,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
392
392
  version: '0'
393
393
  segments:
394
394
  - 0
395
- hash: 3864931138559623634
395
+ hash: -922341340546014449
396
396
  required_rubygems_version: !ruby/object:Gem::Requirement
397
397
  none: false
398
398
  requirements: